Fintechアプリがゼロから開発されることは、今やほとんどありません。ユーザーが当社のアプリに当座預金口座をリンクする際、Plaidがその間に介在し、銀行のログイン情報をバックエンドで使用できるクリーンなJSONに変換する可能性が高いです。Plaid APIは、Venmo、Robinhood、Chimeを含む何千ものアプリで、口座連携、残高確認、取引履歴、本人確認を可能にしています。
このガイドでは、開発者の視点からPlaid APIを詳しく説明します。具体的には、APIキーの取得方法、Linkトークンフローの全体的な仕組み、知っておくべきプロダクト、そして本番環境で問題が発生した場合の一般的なエラーの意味について解説します。Apidogを使って各ステップをテストする方法も紹介するため、リクエストペイロードについて推測する必要がなくなります。信頼できる最新情報が必要な場合は、読み進めながらPlaid公式ドキュメントを別のタブで開いておくと良いでしょう。
オープンバンキングは競争の激しい分野であり、Plaidはその選択肢の一つに過ぎません。ベンダーを比較検討中であれば、最適なオープンバンキングAPIに関する当社の概要が役立つでしょう。この記事では、Plaidを選び、すぐに導入する準備ができていると仮定します。
要約
- Plaidは、米国、カナダ、ヨーロッパの12,000以上の銀行とアプリを接続する金融データアグリゲーターです。
- サンドボックス(無料、ダミーデータ)、開発(100個の無料ライブアイテム)、本番(APIコールごとに課金)の3つの環境がすぐに利用できます。
- 連携フローは4段階のハンドシェイクです。サーバー側で
link_tokenを作成し、クライアント側でPlaid Linkを開き、public_tokenをaccess_tokenと交換し、その後プロダクトエンドポイントを呼び出します。 - コアプロダクトは、Auth、Balance、Transactions、Identity、Investments、Liabilities、Incomeです。これらはアイテムごとに有効にします。
- 最も一般的な本番環境エラーは
ITEM_LOGIN_REQUIREDとINVALID_CREDENTIALSです。ウェブフックは、アイテムに注意が必要な場合に通知します。 - レート制限はアイテムごと、クライアントごとに設定されています。ポーリングの代わりにバッチで読み込み、ウェブフックを利用してください。
Plaidとは?
Plaidは、米国を拠点とするフィンテックインフラ企業で、アプリとユーザーの銀行の間に位置します。ユーザーが銀行の認証情報をPlaid Linkに入力すると、Plaidは銀行に接続し(利用可能な場合は公式のオープンバンキングAPIを介して、利用できない場合はリバースエンジニアリングされた銀行のウェブサイトを介して)、要求されたデータを取得し、正規化して、どの銀行から来たかにかかわらず一貫したJSONレスポンスを返します。
ユーザーの銀行認証情報を見ることも保存することもありません。Plaidがその接続(これを「アイテム」と呼びます)を保持し、そのアイテムを照会する許可を表すaccess_tokenをあなたに付与します。1つのアイテムは1つの金融機関での1組の認証情報に相当し、複数の口座(当座預金、普通預金、クレジットカード)を含むことができます。
Plaidは、個人の当座預金口座と普通預金口座、クレジットカード、ローン、投資口座、給与データに対応しています。それ自体でお金を移動させることはありません。ACH送金の場合、通常はPlaid Authと別の支払い処理業者を組み合わせて使用します。最適なACH決済APIに関する当社の記事では、この組み合わせがどのように機能するかを説明しています。
認証とセットアップ
ステップ1:Plaid開発者アカウントの作成
plaid.comでサインアップし、メールアドレスを確認します。Plaidダッシュボードにアクセスすると、すでに3つの環境がプロビジョニングされています。
- サンドボックス: 架空の金融機関、架空のユーザー、無料。
user_good/pass_goodでログインします。 - 開発: 実際の銀行接続、最大100個のライブアイテムに制限、無料。
- 本番: 実際の接続、無制限、従量課金制。
ステップ2:キーの取得
ダッシュボードから、**チーム設定 > キー**に移動します。次の2つの値が必要です。
client_id: 全環境で同じです。secret: 環境(サンドボックス、開発、本番)ごとに異なります。
これらを環境変数に保存してください。Gitには絶対にコミットしないでください。
ステップ3:SDKのインストール
公式のNode.js SDKはgithub.com/plaid/plaid-nodeにあります。
npm install plaid
ステップ4:クライアントの初期化
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);
環境を移行する際は、PlaidEnvironments.sandboxを.developmentまたは.productionに置き換えてください。
コアエンドポイント
Linkトークンのフロー
すべてのPlaid統合は、同じ4段階のプロセスに従います。ステップ1と3はサーバー側で行い、ステップ2はユーザーのブラウザまたはモバイルアプリでPlaid Linkが処理します。
ステップ1: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;
curl版:
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"
}'
ステップ2:クライアント側でPlaid Linkを開く
link_tokenをフロントエンドに送信し、Plaid Link SDKに渡します。ユーザーが銀行を選択してログインすると、Plaidはpublic_tokenをあなたのonSuccessコールバックに返します。
ステップ3:public_tokenの交換
const exchange = await client.itemPublicTokenExchange({
public_token: publicToken,
});
const accessToken = exchange.data.access_token;
const itemId = exchange.data.item_id;
accessTokenをユーザーに関連付けてサーバー側に保存します。このトークンは有効期限が長く、今後のすべての呼び出しで使用します。
ステップ4:プロダクトエンドポイントの呼び出し
const accounts = await client.accountsGet({ access_token: accessToken });
const balance = await client.accountsBalanceGet({ access_token: accessToken });
知っておくべきプロダクトエンドポイント
- AuthはACHの口座番号とルーティング番号を返します(
/auth/get)。 - Balanceはリアルタイムの残高をキャッシュを迂回して返します(
/accounts/balance/get)。 - Transactionsは最大24ヶ月分のクリーンな取引データを返します(
/transactions/sync)。 - Identityは口座名義人の氏名、メールアドレス、電話番号、住所を返します(
/identity/get)。ユースケースが純粋なKYCである場合、最適なKYC APIに関する当社のまとめにある専用プロバイダと比較検討してください。 - Investmentsは保有資産と投資取引を返します(
/investments/holdings/get)。 - Liabilitiesは学生ローン、クレジットカード、住宅ローンの詳細を返します(
/liabilities/get)。 - IncomeはPlaid Incomeを通じて給与データを返します(
/credit/payroll_income/get)。
ApidogでPlaid APIをテストする
Plaidのエンドツーエンドテストは、Linkステップがブラウザで行われるため、やや扱いにくいです。しかし、有効なペイロードでサーバーサイドのエンドポイントを確実にヒットさせ、エラーがどのように発生するかを確認し、動作するリクエストをチームメイトと共有するための信頼性の高い方法は依然として必要です。Apidogは、ほとんどのツールよりもこれをうまく処理します。
PlaidのOpenAPI仕様をApidogにインポートすると、型、例のボディ、正しい認証ヘッダーがあらかじめ設定されたすべてのエンドポイントが手に入ります。サンドボックス環境変数セット(client_id、secret、access_token)を作成し、ワンクリックで本番環境に切り替えることができます。チェーンドリクエストを使用すると、linkTokenCreate → sandboxPublicTokenCreate → itemPublicTokenExchange → accountsGetを単一のフローで実行できるため、ブラウザなしで完全なハンドシェイクを検証できます。
Apidogのモックサーバーは、バックエンド統合が完了する前にフロントエンドチームが/accounts/getのレスポンスを必要とする場合に役立ちます。別のツールから移行する場合、2026年のPostmanなしのAPIテストに関する当社のガイドで、移行について詳しく説明しています。Apidogをダウンロードし、Plaidの仕様にポイントして開始してください。
一般的なエラーとレート制限
Plaidのエラーは、error_type、error_code、人間が読めるerror_messageを返します。本番環境では、次の4つのエラーを処理してください。
INVALID_CREDENTIALS: ユーザーが銀行で間違ったパスワードを入力しました。Linkの更新モードを通じて再試行を促してください。ITEM_LOGIN_REQUIRED: 銀行がセッションを無効にしました(パスワード変更、MFAローテーション)。Linkを更新モードでトリガーし、再認証させます。これは失敗した呼び出しではなく、ウェブフックを通じて通知されます。RATE_LIMIT_EXCEEDED: アイテムごとまたはエンドポイントごとの制限に達しました。一時停止し、ジッターを加えて再試行してください。PRODUCT_NOT_READY: 取引データがまだプルされています。INITIAL_UPDATEウェブフックが発火した後に再試行してください。
ウェブフック
link_tokenを作成する際にwebhook URLを渡すと、Plaidはそこに更新をPOSTします。無視できない3つのウェブフックは、SYNC_UPDATES_AVAILABLE(新しい取引)、ITEM: LOGIN_REQUIRED(再認証が必要)、ITEM: ERROR(永続的な失敗)です。各ウェブフックに対してアクションを実行する前に、JWT署名を検証してください。
レート制限
Plaidは、アイテムごと、エンドポイントごとにレート制限を適用します。例えば、/accounts/balance/getは、本番環境ではアイテムあたり毎分約5回に制限されています。集計されたクライアントレベルの制限も、負荷の高いエンドポイントに適用されます。実用的なルールとして、ウェブフックをポーリングし、残高を数分間キャッシュし、ユーザー向けのリクエストパスからPlaidを呼び出さないようにしてください。
Plaidの料金
Plaidは、本番環境で階層型従量課金制を採用しています。大まかな内訳は以下の通りです。
- サンドボックス: 無料、無制限。
- 開発: アイテム100個まで無料。
- 本番:
- Auth: リンクされた口座1つあたり約1.50ドル、一回限り。
- Balance: 呼び出しごとの料金。
- Transactions: アイテムごとの月額料金(約0.30ドル)。
- Identity: 呼び出しごとの料金。
- Investments / Liabilities / Income: アイテムごとの個別の料金。
Plaidは一定の量を超えるとカスタム料金を交渉するため、公開されている料金表はあくまで出発点です。Plaidの製品ページで現在の料金を確認してください。
よくある質問
access_tokenはどのくらい有効ですか?ユーザーがアクセスを取り消すか、銀行がセッションを無効にするまで、無期限です。暗号化して保存し、あなたの側で期限切れにしないでください。
Plaidを本人確認のみに使用できますか?Plaid Identityを使用できますが、主なニーズがKYCである場合は、専用の本人確認製品の方が適しているかもしれません。Stripe Identity APIの利用方法に関するガイドで、トレードオフについて説明しています。
Plaidは米国以外の国に対応していますか?はい。Plaidは米国、カナダ、英国、およびEUのほとんどの国に対応しています。国ごとのサポートは製品によって異なります。/link/token/create呼び出しの国コードパラメータを確認してください。
ユーザーが銀行のパスワードを変更した場合どうなりますか?アイテムはITEM_LOGIN_REQUIRED状態になり、ウェブフックが送信されます。Plaid Linkを更新モードでトリガーすると、ユーザーはaccess_tokenを失うことなく再認証できます。
実際のブラウザなしでLinkフローをテストできますか?はい。/sandbox/public_token/createエンドポイントはLinkを完全にスキップし、交換可能なpublic_tokenを返します。自動統合テストに使用してください。
ローカル開発でPlaidをどのように処理しますか?.envファイルにサンドボックスsecretを保持し、開発環境をPlaidEnvironments.sandboxに接続します。トンネリング(ngrok、Cloudflare Tunnel)を使用して、ウェブフックをローカルで受信します。
