How to Connect AI Agents to Plaid: The End-to-End Developer Guide
Connect AI agents to Plaid financial data via MCP. Includes Proxy API quickstart, MCP tool schemas, Link SDK examples, and rate limit handling.
If you are engineering an AI agent to read bank transactions from Plaid, reconcile ledgers, check account balances, or analyze cash flow, you inevitably have to wire up a direct integration to the Plaid API. Giving a Large Language Model (LLM) read and write access to actual financial data is a massive architectural headache. You are dealing with complex multi-step OAuth flows, strict per-item API rate limits, and massive JSON payloads that can easily overflow an LLM's context window.
To connect AI agents to Plaid securely and at scale, you need an architecture that translates the agent's natural language intent into standardized JSON-RPC tool calls, manages the underlying Plaid Link authentication state, normalizes cursor-based pagination, and passes strict API rate limits back to the agent so it can manage its own execution backoff.
The demand for this kind of integration is accelerating rapidly. According to IMARC Group, the global AI in fintech market is projected to reach $97.70 Billion by 2033, growing at a CAGR of 19.90%. That growth is driven by teams building exactly what you are likely architecting: autonomous agents that automate back-office financial workflows by reading and writing real data from production APIs. Brute-forcing custom Python scripts or LangChain tool-calling wrappers for every financial endpoint simply does not scale in production.
This guide breaks down the full engineering path required to expose Plaid's financial data to AI agents via MCP servers without building custom integrations from scratch—taking you from "I have a Plaid client ID" to "my LLM agent is listing transactions in Claude."
The Difference Between Plaid's Official MCP Server and Financial Data Access
Before designing your system, we need to clarify a massive point of confusion in the market regarding Plaid's native tooling. Plaid recently released an official MCP server, which led many developers to assume their integration problems were solved. They are not. There are two completely different things people call a "Plaid MCP server," and they do fundamentally different jobs.
Plaid's Dashboard MCP Server is a Plaid-hosted remote server available at their production endpoint. Its tools include plaid_debug_item, plaid_get_link_analytics, plaid_get_tools_introduction, plaid_get_usages, and plaid_list_teams. Notice what is missing: there is no plaid_get_transactions, no plaid_get_balances, and no plaid_list_accounts. The Dashboard MCP server provides access to aggregated analytics and diagnostic metadata, with no PII. It is built for developers who want to ask Claude, "Why did my Link conversion rate drop yesterday?" or investigate API error logs—not for agents that need to reconcile a user's bank transactions.
Plaid explicitly states that Claude does not have access to consumer financial data through their official MCP server.
Community and custom MCP servers, on the other hand, are self-hosted implementations that wrap Plaid's actual financial data endpoints (like /transactions/sync, /accounts/balance/get, or /auth/get) as MCP tools. These give an LLM the ability to read real bank data, but they require you to handle the entire Plaid authentication lifecycle, pagination, rate limiting, and schema optimization yourself.
The practical takeaway: if you need AI agents to work with actual financial data, you cannot use Plaid's official MCP server. You need to build or deploy a custom tool-calling layer.
The Architectural Challenges of Connecting AI Agents to Plaid
Building a custom integration layer between an LLM and Plaid introduces three distinct engineering challenges that go far beyond standard API development. Plaid's API was designed for traditional backend services, not for LLM tool-calling workflows.
1. Plaid Link Is Not Standard OAuth
You cannot simply hardcode an API key into your LLM's system prompt, nor can you hand an LLM a standard OAuth 2.0 redirect URL and let it figure things out. Plaid requires a multi-step, client-side-initiated authentication flow.
The Plaid flow begins when a user wants to connect their bank account. Your application must call /link/token/create to create a link_token, use that token to open the Plaid Link UI for the user in a browser context, and in the onSuccess callback, Link provides a temporary public_token. You then call /item/public_token/exchange to exchange the public_token for a permanent access_token and item_id.
Your agent architecture needs a clear separation of concerns: a human completes the Link flow once, and your MCP server securely stores this access_token and associates it with the specific user session interacting with the AI agent. An access_token does not expire, although it may require updating (such as when a user changes their bank password). If the token is revoked, the system must gracefully prompt the user to re-authenticate without crashing the agent's execution loop.
2. Massive JSON Payloads and Context Windows
Plaid's transaction payloads are heavily nested and highly verbose. A single response from the /transactions/sync endpoint can return up to 500 transactions, each containing 30+ fields including nested location data, payment_meta, payment channel metadata, pending transaction IDs, and personal_finance_category objects.
If you dump raw Plaid JSON directly into an LLM, you will rapidly exhaust the model's 128K context window and drastically inflate your token costs. Furthermore, filling the context window with raw JSON noise leaves the model little room for actual reasoning.
The integration layer must normalize and filter these payloads, presenting the LLM with optimized JSON schemas that contain only the necessary financial signals. A generic integration platform has a significant advantage over hand-rolled code here, as it can apply declarative response mappings to trim the payload before it ever reaches the model.
3. Mapping REST Endpoints to JSON-RPC Tools
LLMs do not natively understand HTTP methods, URL paths, or bearer tokens. They understand function calling. Plaid's API is JSON-over-HTTP with POST requests for nearly every endpoint, and responses are JSON with errors indicated in response bodies.
MCP tools expect a flat input namespace where parameters map cleanly to JSON Schema properties, and results come back as content blocks. Translating between these two paradigms—especially for endpoints that require complex nested request bodies—requires a well-thought-out schema layer. Manually writing and maintaining these tool definitions for every Plaid endpoint is an engineering anti-pattern that guarantees technical debt.
Handling Plaid API Rate Limits and Pagination
AI agents are notoriously aggressive when scraping data. A LangGraph executor iterating through a user's transaction history will fire requests as fast as the network allows. Plaid enforces strict API rate limits and will return a RATE_LIMIT_EXCEEDED error code (HTTP 429) when thresholds are crossed.
Rate Limits You Will Actually Hit
The per-Item limits are the ones that catch most agent builders off guard. An agent that naively retries a failed transaction fetch every few seconds will burn through its budget in under a minute. Plaid's production limits include:
- Requests to
/accounts/getare rate limited at a maximum of 15 requests per Item per minute and 15,000 per client per minute. - Requests to
/accounts/balance/getare client rate limited to 1,200 requests per client per minute. - Requests to
/auth/getare rate limited at a maximum of 15 requests per Item per minute and 12,000 per client per minute.
Explicit Rate Limit Management
Many integration platforms attempt to silently retry failed requests when hitting a 429 error. This is a fatal flaw when working with AI agents. Silent retries block the execution thread, causing the LLM to timeout or hallucinate a response because it assumes the tool call failed.
Truto takes a radically different approach. Truto does not silently absorb or retry rate limit errors. When Plaid returns an HTTP 429, Truto normalizes the upstream rate limit information into standardized headers per the IETF specification:
ratelimit-limit: The total request quota.ratelimit-remaining: The number of requests left.ratelimit-reset: The time when the quota replenishes.
Truto passes the HTTP 429 error and these headers directly back to the caller. This allows your AI agent's execution loop to implement its own exponential backoff, pausing execution or informing the user that data is currently throttling, rather than failing silently.
Cursor-Based Pagination for Transactions
Plaid uses cursor-based pagination for endpoints like /transactions/sync. This endpoint retrieves transactions associated with an Item and fetches updates using a cursor to track which updates have already been seen.
An LLM cannot inherently guess how to paginate. Truto normalizes this behavior by explicitly injecting instructions into the generated tool schema. The pagination flow works like this:
- First call: The agent sends an empty cursor (or
null). Plaid returns a batch of transactions plus anext_cursor. - Subsequent calls: If
has_moreistrue, additional updates can be fetched by making another request with the cursor set tonext_cursor. - LLM Instruction: Truto automatically appends a
next_cursorproperty to the query schema with the system instruction: "The cursor to fetch the next set of records. Always send back exactly the cursor value you received without decoding, modifying, or parsing it." - Error Handling: If a call to
/transactions/syncfails during pagination (e.g., due to aTRANSACTIONS_SYNC_MUTATION_DURING_PAGINATIONerror), the entire pagination loop must be restarted from the original cursor. Your MCP tool layer needs to surface this error clearly so the agent knows to restart.
This declarative approach ensures the LLM handles pagination flawlessly without custom code.
Common Plaid Use Cases and Recommended Scopes
Before writing code, identify which Plaid products your agent actually needs. Each product maps to a specific set of financial data, and requesting unnecessary products reduces Link conversion rates and increases compliance exposure.
Transactions: Spending Analysis and Reconciliation
Product: transactions | Key endpoint: /transactions/sync
Returns transaction history with merchant names, amounts, dates, categories, and location data. Plaid's personal finance category taxonomy provides two-tier categorization (e.g., FOOD_AND_DRINK > GROCERIES). This is the most common product for AI agents - use it for expense categorization, cash flow analysis, fraud detection, and automated bookkeeping. Request at least 90 days of history (the default) for useful trend analysis; request 180+ days if your agent does recurring transaction detection.
Balances: Real-Time Account Balances
Product: balance (billed per call, not per Item) | Key endpoint: /accounts/balance/get
Returns current and available balances, refreshed in real time from the institution. The /accounts/get endpoint also returns balances, but those are cached and typically updated once per day. For time-sensitive decisions like overdraft alerts or pre-transaction checks, always use /accounts/balance/get. Note that this endpoint can take up to 30 seconds to respond as it queries the institution directly.
Auth: Account and Routing Numbers
Product: auth | Key endpoint: /auth/get
Returns account numbers, routing numbers, and wire routing numbers for ACH payment initiation. Only request this if your agent needs to initiate payments or verify account ownership. Most read-only financial analysis agents do not need auth.
Investments: Holdings and Securities
Product: investments | Key endpoint: /investments/holdings/get
Returns current holdings, cost basis, quantities, and security details across brokerage accounts. Useful for portfolio analysis agents, tax-loss harvesting workflows, or wealth management dashboards.
Read-Only vs Write Access for Financial Agents
Most AI agents working with Plaid data should operate in read-only mode. Financial data is sensitive, and giving an LLM write access to endpoints that can modify Items or initiate transfers is rarely justified for analysis workloads.
When creating your MCP server, set "methods": ["read"] to restrict the agent to list and get operations only. This blocks any create, update, or delete endpoints from appearing in the agent's tool inventory.
The one common exception: if your agent needs to call /transactions/refresh to trigger an on-demand data update, Truto exposes this as a custom method. In that case, use "methods": ["read", "custom"] to allow both read operations and specific custom actions without exposing full write access.
When creating your Plaid Link token, include only the products your agent requires. For a typical financial analysis agent, start with ["transactions"] in the products array and add "investments" or "liabilities" via required_if_supported_products for institutions that support them. This maximizes Link conversion by not failing for institutions that don't support every product.
How Truto's MCP Servers Expose Plaid Data to LLMs
Building a custom MCP server for Plaid is doable, but it means you are maintaining Plaid-specific authentication handling, pagination logic, rate limit normalization, and schema optimization. Multiply that by every financial API your product needs to support—whether you are connecting AI agents to Xero and QuickBooks or automating expense management with Brex—and you are looking at a full-time integration engineering job.
Truto solves the integration bottleneck by auto-generating MCP tools directly from the underlying API schema. There is zero integration-specific code required to wrap Plaid's endpoints.
When you connect a Plaid account via Truto, the platform's execution engine reads the declarative configuration for Plaid and dynamically generates an MCP server endpoint. Every resource and method is converted into a highly descriptive, snake_case tool name.
The tool generation process works like this:
- Resource mapping: Each Plaid endpoint is defined as a resource with standard CRUD methods.
/transactions/syncbecomes alistmethod on thetransactionsresource./accounts/getbecomes alistonaccounts. - Schema building: Query and body schemas are extracted from documentation records and enhanced.
listmethods automatically getlimitandnext_cursorparameters injected. - Tool naming: Tools get descriptive names like
list_all_plaid_transactionsorget_single_plaid_account_by_idthat help the model understand intent without ambiguity. - Response trimming: Declarative response mappings strip fields that add noise without value, ensuring the model gets clean, focused data.
Here is how the architecture flows in production:
sequenceDiagram
participant LLM as AI Agent
participant MCP as Truto MCP Server
participant Core as Truto Proxy Engine
participant Plaid as Plaid API
LLM->>MCP: JSON-RPC call tool<br>(list_all_plaid_transactions)
MCP->>Core: Validate token & load schemas
Core->>Core: Map arguments to query/body
Core->>Plaid: POST /transactions/sync<br>{access_token, cursor, count}
Plaid-->>Core: Raw JSON payload<br>{added: [...], next_cursor, has_more}
Core->>Core: Filter empty objects & normalize cursors
Core-->>MCP: Formatted & trimmed response
MCP-->>LLM: JSON-RPC Result<br>{content: [{type: "text", text: "..."}]}This pipeline handles the heavy lifting. The LLM simply sees a clean list of available tools, complete with required parameters and descriptions, while Truto handles the HTTP proxying, token injection, and response formatting.
Quickstart: Calling Plaid via Truto's Proxy API
Before setting up a full MCP server, you can test Plaid data access directly through Truto's Proxy API. This is the fastest way to verify your integration works and inspect the data your agent will receive.
Listing Transactions
curl -X GET "https://api.truto.one/proxy/transactions?integrated_account_id=YOUR_PLAID_ACCOUNT_ID&limit=5" \
-H "Authorization: Bearer YOUR_TRUTO_API_TOKEN"Sample response:
{
"result": [
{
"transaction_id": "txn_abc123def456",
"amount": 89.40,
"date": "2026-04-15",
"name": "WHOLEFDS MKT 10027",
"merchant_name": "Whole Foods",
"personal_finance_category": {
"primary": "FOOD_AND_DRINK",
"detailed": "FOOD_AND_DRINK_GROCERIES"
},
"pending": false,
"account_id": "acct_plaid_checking_789"
},
{
"transaction_id": "txn_xyz789ghi012",
"amount": 5.50,
"date": "2026-04-14",
"name": "LYFT RIDE",
"merchant_name": "Lyft",
"personal_finance_category": {
"primary": "TRANSPORTATION",
"detailed": "TRANSPORTATION_TAXIS_AND_RIDE_SHARES"
},
"pending": false,
"account_id": "acct_plaid_checking_789"
}
],
"next_cursor": "eyJsYXN0X3VwZGF0ZSI6IjIwMjYtMDQtMTVUMTA6MDA6MDBaIn0=",
"prev_cursor": null,
"result_count": 2
}To paginate, pass the next_cursor value back as a query parameter:
curl -X GET "https://api.truto.one/proxy/transactions?integrated_account_id=YOUR_PLAID_ACCOUNT_ID&limit=5&next_cursor=eyJsYXN0X3VwZGF0ZSI6IjIwMjYtMDQtMTVUMTA6MDA6MDBaIn0=" \
-H "Authorization: Bearer YOUR_TRUTO_API_TOKEN"Fetching Account Balances
curl -X GET "https://api.truto.one/proxy/accounts?integrated_account_id=YOUR_PLAID_ACCOUNT_ID" \
-H "Authorization: Bearer YOUR_TRUTO_API_TOKEN"Sample response:
{
"result": [
{
"account_id": "acct_plaid_checking_789",
"name": "Plaid Checking",
"type": "depository",
"subtype": "checking",
"balances": {
"available": 4250.00,
"current": 4500.00,
"iso_currency_code": "USD"
}
},
{
"account_id": "acct_plaid_savings_012",
"name": "Plaid Saving",
"type": "depository",
"subtype": "savings",
"balances": {
"available": 12800.00,
"current": 12800.00,
"iso_currency_code": "USD"
}
}
],
"next_cursor": null,
"result_count": 2
}Truto maps Plaid's POST-based API into standard REST conventions. Your code sends a GET request; Truto handles the POST body construction, access token injection, and response normalization behind the scenes. The same proxy interface works identically for every financial API Truto supports - swap the integrated_account_id and you get the same response format for a different provider.
Sample MCP Tool Schema for Plaid
When you generate an MCP server for a Plaid integration, Claude, ChatGPT, or your custom agent receives tool definitions like the following via the tools/list JSON-RPC method:
{
"tools": [
{
"name": "list_all_plaid_transactions",
"description": "Sync and list bank transactions for the connected Plaid account. Returns transaction history including amount, date, merchant name, and personal finance category. Use the next_cursor parameter to paginate through results when has_more is true.",
"inputSchema": {
"type": "object",
"properties": {
"limit": {
"type": "string",
"description": "The number of records to fetch. Maximum 500."
},
"next_cursor": {
"type": "string",
"description": "The cursor to fetch the next set of records. Always send back exactly the cursor value you received (nextCursor) without decoding, modifying, or parsing it. This can be found in the response of the previous tool invocation as nextCursor."
}
}
}
},
{
"name": "list_all_plaid_accounts",
"description": "List all bank accounts linked to the connected Plaid Item. Returns account name, type, subtype, and cached balance information for each account.",
"inputSchema": {
"type": "object",
"properties": {
"limit": {
"type": "string",
"description": "The number of records to fetch"
},
"next_cursor": {
"type": "string",
"description": "The cursor to fetch the next set of records. Always send back exactly the cursor value you received (nextCursor) without decoding, modifying, or parsing it."
}
}
}
},
{
"name": "plaid_accounts_balance_get",
"description": "Get real-time account balances for the connected Plaid Item. Unlike list_all_plaid_accounts, this forces a fresh balance refresh directly from the financial institution. May take up to 30 seconds to respond.",
"inputSchema": {
"type": "object",
"properties": {
"account_ids": {
"type": "string",
"description": "Comma-separated list of account IDs to retrieve balances for. If omitted, returns balances for all linked accounts."
}
}
}
}
]
}The descriptions give the LLM enough context to select the right tool without external documentation. The next_cursor instruction explicitly tells the model not to decode or modify cursor values - a common failure mode when LLMs try to "interpret" opaque pagination tokens.
These tool definitions are auto-generated from Truto's integration configuration. You can customize any description, add or remove parameters, or restrict which tools are exposed - all through the Truto dashboard or API without writing code.
Step-by-Step: Connecting Plaid to Your AI Agent via Truto
Implementing this architecture takes minutes, not weeks. Here is the exact developer flow to provision a Plaid-connected MCP server for your AI agent.
Step 1: Authenticate the User
Instead of building your own Plaid Link implementation, use Truto's unified authentication component. In the Truto dashboard, navigate to the Plaid integration and provide your Plaid client_id and secret.
When your user connects their bank, Truto handles the OAuth exchange and securely stores the resulting access_token in an encrypted context. Sensitive fields are encrypted at rest and masked in list views. This creates an integrated_account record in Truto.
What Plaid Link Looks Like Without Truto
To appreciate what Truto handles for you, here is the standard Plaid Link integration. Without Truto, your application needs both a server endpoint and a frontend component:
Server side - create a Link token:
// POST /api/create-link-token
const response = await plaidClient.linkTokenCreate({
user: { client_user_id: userId },
client_name: 'Your App',
products: ['transactions'],
country_codes: ['US'],
language: 'en',
});
return response.data.link_token;Client side - open the Link UI and capture the public token:
import { usePlaidLink } from 'react-plaid-link';
function PlaidLinkButton({ linkToken }) {
const { open, ready } = usePlaidLink({
token: linkToken,
onSuccess: async (publicToken, metadata) => {
// Send publicToken to your server for exchange
await fetch('/api/exchange-token', {
method: 'POST',
body: JSON.stringify({ public_token: publicToken }),
});
},
});
return (
<button onClick={() => open()} disabled={!ready}>
Connect Bank Account
</button>
);
}Server side - exchange for a permanent access token:
// POST /api/exchange-token
const response = await plaidClient.itemPublicTokenExchange({
public_token: publicToken,
});
const accessToken = response.data.access_token;
const itemId = response.data.item_id;
// Store both securely - accessToken does not expireTruto eliminates this entire flow. You configure your Plaid credentials once in the dashboard, and Truto's connect component handles the Link UI, token exchange, and encrypted storage. Your application code never touches a public_token or access_token directly.
Step 2: Generate the MCP Server URL
With the account connected, you make a single API call to Truto (or click through the dashboard) to provision an MCP server specifically scoped to that user's financial data.
POST /integrated-account/:id/mcp
{
"name": "User Financial Data MCP",
"config": {
"methods": ["read"],
"tags": ["transactions", "balances"],
"require_api_token_auth": true
},
"expires_at": "2026-12-31T23:59:59Z"
}Notice the config object. You can restrict the LLM's access strictly to read methods, preventing the agent from accidentally initiating money movement. You can also set a TTL (expires_at) for temporary access, which is highly useful for contractor access or time-boxed audit workflows. The API returns a secure, unique MCP server URL.
Step 3: Configure the AI Agent
Pass the generated URL to your LLM framework. As we've covered in our guide to managed MCP for Claude, this approach gives you full API access without the limitations of native connectors.
For Claude Desktop: Go to Settings → Connectors → Add custom connector. Paste the MCP URL. Claude discovers tools automatically via the tools/list JSON-RPC method.
For ChatGPT: Go to Settings → Apps → Advanced settings → Enable Developer Mode → Add MCP server with the Truto URL.
For LangChain or custom agent frameworks: Use the Truto LangChain SDK, which calls the /tools endpoint to register tools directly in your agent's tool inventory.
from truto_langchain import TrutoToolset
toolset = TrutoToolset(
api_token="your-truto-api-token",
integrated_account_id="your-plaid-account-id"
)
# Returns Tool objects ready for LangChain agent use
tools = toolset.get_tools(methods=["read"])Because we set require_api_token_auth: true in the previous step, the MCP server URL alone is not enough to access the data. Your client must also pass a valid Truto API token in the Authorization header. This dual-layer security ensures that even if the MCP URL leaks in your application logs, the financial data remains completely locked down.
Once connected, your agent can ask questions like "Show me all transactions over $500 from last month" and the LLM will automatically invoke list_all_plaid_transactions with the right parameters, handle pagination via next_cursor, and present structured results.
Zero Data Retention for Secure Financial AI
When dealing with banking data, caching is a massive liability. Storing transaction histories, account balances, or routing numbers in a third-party database introduces severe compliance risks and expands your attack surface. When you are piping bank transaction data through any intermediary, the first question from your security team will be: "Does this platform store our users' financial data?"
Truto operates on a strict zero data retention architecture. When your AI agent requests Plaid data, Truto acts purely as a real-time pass-through proxy. The request is authenticated, forwarded to Plaid, and the response is mapped and streamed directly back to the LLM. No transaction data, account balances, or PII is written to disk or cached in Truto's database. The only persistent data is the encrypted access_token needed to authenticate with Plaid on your behalf.
This architectural decision allows you to build powerful, data-driven AI agents without inheriting the catastrophic liability of hosting a shadow copy of your users' financial lives.
Honest trade-off: A pass-through architecture means every agent tool call hits Plaid's API in real time. For use cases that require repeated analysis of the exact same dataset (e.g., running multiple categorization passes over the same month of transactions), you will want to cache the results in your own application layer. Truto will not do this for you—and that is by design.
Related Guides and Resources
- Truto Plaid Integration - Supported Plaid endpoints, configuration details, and setup instructions.
- Zero Data Retention for AI Agents - Why pass-through architecture matters for financial data compliance.
- Best Practices for API Rate Limits and Retries - Handling rate limits across multiple third-party APIs.
- What Is MCP (Model Context Protocol)? - The foundational guide to MCP and how it enables AI agent integrations.
- Managed MCP for Claude - Using managed MCP servers with Claude for full API access.
- Connecting AI Agents to Xero and QuickBooks - Extend the same MCP architecture to accounting APIs.
- Truto LangChain SDK - Open-source SDK for registering Truto tools directly in LangChain agents.
Next Steps for Engineering Teams
Connecting AI agents to Plaid requires moving past basic API wrappers and implementing a resilient, secure protocol layer. The pattern described here—wrapping a non-standard financial API as MCP tools, handling auth lifecycle separately from agent execution, and using a pass-through proxy to avoid data retention—applies well beyond Plaid.
By leveraging MCP servers to handle tool discovery, schema mapping, and token management, your engineering team can focus on the agent's core reasoning logic rather than debugging OAuth refresh tokens and pagination cursors. Build agents that actually understand your users' financial context, and let the infrastructure handle the rest.
If you are evaluating this for your team, the fastest way to validate the architecture is to spin up a Plaid integration in Truto's sandbox, generate an MCP server, and point Claude at it. You will have a working agent-to-bank-data pipeline in under 30 minutes—without writing any Plaid-specific integration code.
FAQ
- Does Plaid's official MCP server provide access to transaction data?
- No. Plaid's Dashboard MCP server only exposes developer diagnostics like Link analytics, Item debugging, and API usage metrics. It does not provide access to consumer financial data such as transactions or balances.
- How do AI agents handle Plaid API rate limits?
- Agents should rely on standardized HTTP 429 responses and IETF rate limit headers to execute their own exponential backoff strategies. Plaid enforces strict per-endpoint limits, such as 15 requests per Item per minute for /accounts/get.
- How does Plaid pagination work for AI agents?
- Plaid's /transactions/sync uses cursor-based pagination. Each response includes a next_cursor and has_more flag. Your agent must be instructed to pass the cursor back verbatim in subsequent tool calls until has_more is false.
- Can I use standard OAuth to authenticate with Plaid?
- No. Plaid uses its own Link-based authentication flow where a user completes auth in the Plaid Link UI, generating a public_token that gets exchanged for a permanent access_token. This requires separating human auth from agent execution.
- Does Truto store Plaid transaction data?
- No. Truto operates as a pass-through proxy, forwarding requests to Plaid in real time and returning responses directly to the caller. Only the encrypted access_token is persisted, ensuring zero data retention for sensitive financial payloads.