How to Use the Plaid API (2026 Developer Guide)

Learn how to use the Plaid API in 2026: Link token flow, Auth, Transactions, Identity, webhooks, rate limits, pricing, and Node.js code examples.

Ashley Innocent

Ashley Innocent

16 June 2026

How to Use the Plaid API (2026 Developer Guide)

Apidog for Enterprise

On-Premises Deploy

SSO & RBAC

SOC 2 Compliant

Explore Apidog Enterprise

Fintech apps rarely start from scratch anymore. When a user links a checking account to your app, odds are Plaid sits in the middle, translating bank logins into clean JSON your backend can use. The Plaid API powers account linking, balance checks, transaction history, and identity verification for thousands of apps including Venmo, Robinhood, and Chime.

This guide walks you through the Plaid API from a developer perspective: how to get keys, how the Link token flow works end to end, which products you should know, and what the common errors mean when things break in production. You will also see how to test every step with Apidog so you stop guessing at request payloads. If you want the raw source of truth, keep the official Plaid documentation open in a second tab as you read.

Open banking is a crowded space, and Plaid is one option among several. If you are still comparing vendors, our rundown of the best open banking APIs is a useful companion. For this post, assume you have picked Plaid and are ready to ship.

button

TL;DR

What is Plaid?

Plaid is a US-based fintech infrastructure company that sits between your app and a user’s bank. When a user types their bank credentials into Plaid Link, Plaid connects to the bank (through official open banking APIs where available, or reverse-engineered bank websites where not), pulls the requested data, normalizes it, and hands you a consistent JSON response regardless of which bank it came from.

You never see or store the user’s bank credentials. Plaid holds the connection, which it calls an Item, and gives you an access_token that represents permission to query that Item. One Item equals one set of credentials at one financial institution, and may include multiple accounts (checking, savings, credit card).

Plaid covers consumer checking and savings accounts, credit cards, loans, investment accounts, and payroll data. It does not move money on its own; for ACH transfers you typically pair Plaid Auth with a separate payments processor. Our writeup on the best ACH payments APIs explains how that pairing usually looks.

Authentication and setup

Step 1: Create a Plaid developer account

Sign up at plaid.com and verify your email. You land in the Plaid Dashboard with three environments already provisioned:

Step 2: Grab your keys

From the Dashboard, go to Team Settings > Keys. You need two values:

Store these in environment variables. Never commit them to git.

Step 3: Install the SDK

The official Node.js SDK lives at github.com/plaid/plaid-node.

npm install plaid

Step 4: Initialize the client

import { Configuration, PlaidApi, PlaidEnvironments } from 'plaid';

const config = new Configuration({
  basePath: PlaidEnvironments.sandbox,
  baseOptions: {
    headers: {
      'PLAID-CLIENT-ID': process.env.PLAID_CLIENT_ID,
      'PLAID-SECRET': process.env.PLAID_SECRET,
    },
  },
});

const client = new PlaidApi(config);

Swap PlaidEnvironments.sandbox for .development or .production when you promote.

Core endpoints

Every Plaid integration follows the same four-step dance. You do steps 1 and 3 server-side; Plaid Link handles step 2 in the user’s browser or mobile app.

Step 1: Create a link_token

const response = await client.linkTokenCreate({
  user: { client_user_id: 'user_123' },
  client_name: 'Your App',
  products: ['auth', 'transactions'],
  country_codes: ['US'],
  language: 'en',
});

const linkToken = response.data.link_token;

The curl version:

curl -X POST https://sandbox.plaid.com/link/token/create \
  -H 'Content-Type: application/json' \
  -d '{
    "client_id": "YOUR_CLIENT_ID",
    "secret": "YOUR_SANDBOX_SECRET",
    "user": { "client_user_id": "user_123" },
    "client_name": "Your App",
    "products": ["auth", "transactions"],
    "country_codes": ["US"],
    "language": "en"
  }'

Step 2: Open Plaid Link in the client

Send the link_token to your frontend and pass it into the Plaid Link SDK. The user picks their bank, logs in, and Plaid returns a public_token to your onSuccess callback.

Step 3: Exchange the public_token

const exchange = await client.itemPublicTokenExchange({
  public_token: publicToken,
});

const accessToken = exchange.data.access_token;
const itemId = exchange.data.item_id;

Store accessToken server-side, tied to your user. This token is long-lived and is what you use for every future call.

Step 4: Call product endpoints

const accounts = await client.accountsGet({ access_token: accessToken });
const balance = await client.accountsBalanceGet({ access_token: accessToken });

Product endpoints you should know

Testing the Plaid API with Apidog

Testing Plaid end to end is awkward because the Link step happens in a browser. You still need a reliable way to hit the server-side endpoints with valid payloads, see how errors surface, and share working requests with teammates. Apidog handles that better than most tools.

Import Plaid’s OpenAPI spec into Apidog and you get every endpoint pre-configured with types, example bodies, and the right auth headers. You can create a sandbox environment variable set (client_id, secret, access_token) and switch to production with one click. Chained requests let you run linkTokenCreate → sandboxPublicTokenCreate → itemPublicTokenExchange → accountsGet in a single flow, so you can verify the full handshake without a browser.

Apidog’s mock server is useful when your frontend team needs /accounts/get responses before your backend integration is done. If you are moving off another tool, our guide on API testing without Postman in 2026 covers the migration in detail. Download Apidog and point it at Plaid’s spec to get started.

Common errors and rate limits

Plaid errors come back with an error_type, error_code, and human-readable error_message. Handle these four in production:

Webhooks

Pass a webhook URL when you create the link_token and Plaid will POST updates to it. The three you cannot ignore are SYNC_UPDATES_AVAILABLE (new transactions), ITEM: LOGIN_REQUIRED (re-auth needed), and ITEM: ERROR (permanent failure). Verify the JWT signature on every webhook before acting on it.

Rate limits

Plaid enforces rate limits per-Item per-endpoint. For example, /accounts/balance/get is capped around 5 calls per minute per Item in production. Aggregate client-level limits also apply on heavy endpoints. The practical rule: poll webhooks, cache balances for a few minutes, and never hit Plaid from a user-facing request path.

Plaid pricing

Plaid uses tiered pay-per-API-call pricing in production. The ballpark:

Plaid negotiates custom pricing above certain volumes, so the public rate card is a starting point. Check the Plaid products page for the current numbers.

The OAuth 2.0 patterns and webhook conventions you worked through with Plaid carry over directly to other third-party integrations —the Calendly scheduling API uses the same authorization flow and event-driven model, making it a natural next step if your product needs embedded booking alongside payment flows.

FAQ

How long does an access_token last?Indefinitely, until the user revokes access or the bank invalidates the session. Store it encrypted and do not expire it on your side.

Can I use Plaid for identity verification alone?You can use Plaid Identity, but if your primary need is KYC you may be better served by a dedicated verification product. We cover the tradeoffs in our guide on how to use the Stripe Identity API.

Does Plaid support countries outside the US?Yes. Plaid covers the US, Canada, UK, and most of the EU. Country support varies per product; check the country codes parameter in the /link/token/create call.

What happens if a user changes their bank password?The Item moves into ITEM_LOGIN_REQUIRED state and you get a webhook. Trigger Plaid Link in update mode and the user re-authenticates without losing their access_token.

Can I test the Link flow without a real browser?Yes. The /sandbox/public_token/create endpoint skips Link entirely and returns a public_token you can exchange. Use it for automated integration tests.

How do I handle Plaid in local development?Keep a sandbox secret in your .env file and wire your dev environment to PlaidEnvironments.sandbox. Use tunneling (ngrok, Cloudflare Tunnel) to receive webhooks locally.

Explore more

How to Test Non-Deterministic AI Agents (When temperature=0 Isn't Enough)

How to Test Non-Deterministic AI Agents (When temperature=0 Isn't Enough)

Set temperature to zero and an AI agent still won't return identical text. Test non-deterministic agents by asserting on structure, schema, and ranges, not exact strings.

20 July 2026

Why AI Agents Break in Production (and How to Test for Each Failure Mode)

Why AI Agents Break in Production (and How to Test for Each Failure Mode)

AI agents fail at the API boundary, not the prompt. The five ways agents break in production (tool calls, rate limits, non-determinism, cost, guardrails) and how to test each with mocks.

20 July 2026

How to Use Kimi K3 for Coding with Kimi Code

How to Use Kimi K3 for Coding with Kimi Code

Run Kimi K3 in Kimi Code for agentic coding: repo navigation, tool use, and iterating against tests and logs, plus how it compares to Claude Code and Cursor.

17 July 2026

Practice API Design-first in Apidog

Discover an easier way to build and use APIs

How to Use the Plaid API (2026 Developer Guide)