# Plaid

> Connect your bank through Plaid to read accounts, live balances and transactions, account and routing numbers, account owners, investments, and loans and credit cards.

App · Accounting & Finance · 12 actions. Web page: https://docs.lodol.com/docs/integrations/plaid

## Actions

### Check the bank connection

Check whether the connection to the bank is working, or needs you to sign in to the bank again, and when it last updated. Use it to be told before a scheduled workflow starts failing.

**Inputs**: None.

**Outputs**

- `access_expires_at` (text): When the bank's permission runs out, for banks that set one. Empty otherwise.
- `bank_id` (text): Plaid's id for the bank.
- `bank_name` (text): The bank's name.
- `is_working` (true/false): Whether the connection is working.
- `last_transactions_update` (text): When Plaid last got transactions from the bank.
- `problem` (text): What is wrong, when something is.
- `shares` (list): What the bank agreed to share.
- `status` (text): 'working', 'needs_sign_in' (reconnect Plaid to fix it), or 'error'.

**Example output**

```json
{
  "access_expires_at": "",
  "bank_id": "ins_109508",
  "bank_name": "First Platypus Bank",
  "is_working": true,
  "last_transactions_update": "2026-09-24T08:12:05Z",
  "problem": "",
  "shares": [
    "Transactions",
    "Account and routing numbers"
  ],
  "status": "working"
}
```

### Find investment transactions

Get the buys, sells, dividends, fees and transfers in the connected investment accounts between two dates. Amounts read like a statement: money into the account is positive.

**Inputs**

- From (`start_date`, date): The first day to include. Leave empty for the last 30 days. Plaid keeps up to two years.
- To (`end_date`, date): The last day to include. Leave empty for today.
- Accounts (`accounts`, list): Which accounts to include. Leave empty for all of them.
- Most results (`max_results`, number): The most transactions to return, newest first. Leave empty for 500. From 1 to 5000.

**Outputs**

- `count` (number): How many transactions.
- `from_date` (text): The first day searched.
- `to_date` (text): The last day searched.
- `transactions` (list): The transactions, newest first.

**Example output**

```json
{
  "count": 1,
  "from_date": "2026-08-25",
  "to_date": "2026-09-24",
  "transactions": [
    {
      "account_id": "JqMLm4rJwpF6gMPJwBqdh9ZjjPvvpDcb7kDK1",
      "account_name": "Plaid IRA",
      "amount": -13.49,
      "currency": "USD",
      "date": "2026-09-01",
      "description": "BUY Matthews Pacific Tiger Fund Insti Class",
      "fees": 0.0,
      "investment_transaction_id": "pK99jB3e6wHB1gRMlxvmHPz3e6zRDvfwp3pNr",
      "price": 27.53,
      "quantity": 0.49,
      "security_name": "Matthews Pacific Tiger Fund Insti Class",
      "subtype": "buy",
      "ticker": "MIPTX",
      "type": "buy"
    }
  ]
}
```

### Find transactions

Get the transactions between two dates, newest first, optionally only some accounts, categories, or money in or out. Amounts read like a bank statement: money in is positive, money out negative.

**Inputs**

- From (`start_date`, date): The first day to include. Leave empty for the last 30 days. Plaid keeps up to two years.
- To (`end_date`, date): The last day to include. Leave empty for today.
- Accounts (`accounts`, list): Which accounts to include. Leave empty for all of them.
- Categories (`categories`, list): Only these categories. Leave empty for all. One or more of: `INCOME`, `TRANSFER_IN` (Transfers in), `TRANSFER_OUT` (Transfers out), `LOAN_DISBURSEMENTS` (Loans received), `LOAN_PAYMENTS` (Loan payments), `BANK_FEES` (Bank fees), `ENTERTAINMENT`, `FOOD_AND_DRINK` (Food and drink), `GENERAL_MERCHANDISE` (Shopping), `HOME_IMPROVEMENT` (Home improvement), and 8 more.
- Money in or out (`direction`, text): Whether to include money received, money spent, or both. One of: `both` (Money in and out), `in` (Money in only), `out` (Money out only). Default: `both`.
- Include pending (`include_pending`, true/false): Whether to include transactions the bank has not posted yet. On by default. Default: `true`.
- Most results (`max_results`, number): The most transactions to return, newest first. Leave empty for 500. From 1 to 5000.

**Outputs**

- `count` (number): How many transactions.
- `from_date` (text): The first day searched.
- `money_in` (number): The total of the money received.
- `money_out` (number): The total of the money spent, as a negative.
- `to_date` (text): The last day searched.
- `transactions` (list): The transactions, newest first.

**Example output**

```json
{
  "count": 1,
  "from_date": "2026-08-25",
  "money_in": 0.0,
  "money_out": -4.33,
  "to_date": "2026-09-24",
  "transactions": [
    {
      "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp",
      "account_name": "Plaid Checking",
      "amount": -4.33,
      "authorized_date": "2026-09-17",
      "category": "Food and drink",
      "category_detail": "Coffee",
      "city": "Seattle",
      "currency": "USD",
      "date": "2026-09-18",
      "description": "Starbucks",
      "direction": "out",
      "logo_url": "https://plaid-merchant-logos.plaid.com/starbucks_956.png",
      "merchant": "Starbucks",
      "payment_channel": "in store",
      "pending": false,
      "transaction_id": "lPNjeW1nR6CDn5okmGQ6hEpMo4lLNoSrzqDje",
      "website": "starbucks.com"
    }
  ]
}
```

### Get account and routing numbers

Get the full account numbers and routing numbers (or IBAN, sort code, transit number) for the connected accounts, such as to set up a payment.

**Inputs**

- Accounts (`accounts`, list): Which accounts to include. Leave empty for all of them.

**Outputs**

- `accounts` (list): The accounts.
- `count` (number): How many accounts.

**Example output**

```json
{
  "accounts": [
    {
      "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp",
      "account_number": "1111222233330000",
      "bic": "",
      "branch_number": "",
      "iban": "",
      "institution_number": "",
      "mask": "0000",
      "name": "Plaid Checking",
      "routing_number": "011401533",
      "sort_code": "",
      "subtype": "checking",
      "type": "depository",
      "wire_routing_number": "021000021"
    }
  ],
  "count": 1
}
```

### Get account owner details

Get the names, email addresses, phone numbers and addresses the bank has on file for each account's owners, such as to confirm who owns an account.

**Inputs**

- Accounts (`accounts`, list): Which accounts to include. Leave empty for all of them.

**Outputs**

- `accounts` (list): The accounts.
- `count` (number): How many accounts.

**Example output**

```json
{
  "accounts": [
    {
      "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp",
      "mask": "0000",
      "name": "Plaid Checking",
      "owner_name": "Alberta Bobbeth Charleson",
      "owners": [
        {
          "address": "2992 Cameron Road, Malakoff, NY 14236 US",
          "all_emails": [
            "accountholder0@example.com"
          ],
          "all_phones": [
            "1112223333"
          ],
          "email": "accountholder0@example.com",
          "names": [
            "Alberta Bobbeth Charleson"
          ],
          "phone": "1112223333"
        }
      ]
    }
  ],
  "count": 1
}
```

### Get an account's live balance

Ask the bank for one account's balance right now, such as to check there is enough money before paying a bill. On paid Plaid plans each check is billed.

**Inputs**

- Account (`account`, text, required): The account to check.

**Outputs**

- `account_id` (text): Plaid's id for the account, used by other steps.
- `available_balance` (number): Money that can be spent or withdrawn now. Empty when the bank does not say.
- `balance_updated_at` (text): When the bank last reported the balance, if it says. Empty means just now.
- `credit_limit` (number): The credit limit, for a credit card or line of credit.
- `currency` (text): The balances' currency, such as USD.
- `current_balance` (number): The balance on the account. For a credit card or loan, what is owed.
- `mask` (text): The last digits of the account number.
- `name` (text): The account's name, such as 'Plaid Checking'.
- `official_name` (text): The bank's full name for the account.
- `subtype` (text): checking, savings, credit card, mortgage, 401k and so on.
- `type` (text): depository, credit, loan, investment or other.

**Example output**

```json
{
  "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp",
  "available_balance": 100.0,
  "balance_updated_at": "",
  "credit_limit": null,
  "currency": "USD",
  "current_balance": 110.0,
  "mask": "0000",
  "name": "Plaid Checking",
  "official_name": "Plaid Gold Standard 0% Interest Checking",
  "subtype": "checking",
  "type": "depository"
}
```

### Get bank details

Get a bank's name, website, logo, what it shares through Plaid, and whether its connection to Plaid is healthy right now.

**Inputs**

- Bank (`bank_id`, text): Plaid's id for the bank (such as ins_3, from 'Search for banks'). Leave empty for the connected bank.

**Outputs**

- `balance_health` (text): How reliably live balances work: healthy, degraded or down.
- `bank_id` (text): Plaid's id for the bank, such as ins_3.
- `brand_color` (text): The bank's brand color, such as #1f5dd9.
- `countries` (list): The countries it is in, as two-letter codes.
- `logo` (text): The bank's logo as an image address, when Plaid has one.
- `name` (text): The bank's name.
- `shares` (list): What it shares through Plaid, such as Transactions.
- `sign_in_health` (text): How reliably people can connect: healthy, degraded or down. Empty when Plaid does not say.
- `transactions_health` (text): How reliably new transactions arrive: healthy, degraded or down.
- `uses_bank_sign_in_page` (true/false): Whether connecting sends you to the bank's own website to sign in.
- `website` (text): The bank's website.

**Example output**

```json
{
  "balance_health": "healthy",
  "bank_id": "ins_109508",
  "brand_color": "#1f5dd9",
  "countries": [
    "US"
  ],
  "logo": "",
  "name": "First Platypus Bank",
  "shares": [
    "Transactions",
    "Account and routing numbers",
    "Investments"
  ],
  "sign_in_health": "healthy",
  "transactions_health": "healthy",
  "uses_bank_sign_in_page": false,
  "website": "https://www.plaid.com"
}
```

### Get loans and credit cards

Get what is owed on the connected credit cards, student loans and mortgages: balances, minimum payments, due dates, interest rates and whether a payment is overdue.

**Inputs**

- Accounts (`accounts`, list): Which accounts to include. Leave empty for all of them.

**Outputs**

- `count` (number): How many loans and cards in total.
- `credit_cards` (list): Credit cards.
- `mortgages` (list): Mortgages.
- `student_loans` (list): Student loans.

**Example output**

```json
{
  "count": 1,
  "credit_cards": [
    {
      "account_id": "4Xm1rWQDPwFWqNmK3qnxhWLZkbvxpdSQWzZ4g",
      "account_name": "Plaid Credit Card",
      "balance": 410.0,
      "currency": "USD",
      "is_overdue": false,
      "last_payment_amount": 168.25,
      "last_payment_date": "2026-09-16",
      "last_statement_balance": 1708.77,
      "minimum_payment": 20.0,
      "next_payment_due_date": "2026-10-15",
      "purchase_apr": 15.24
    }
  ],
  "mortgages": [],
  "student_loans": []
}
```

### Get new transactions

Get the transactions added, changed or removed since the last time this step ran. Save 'next_checkpoint' and pass it in next time; leave Checkpoint empty the first time to get everything.

**Inputs**

- Checkpoint (`checkpoint`, text): The 'next_checkpoint' from the previous run. Leave empty to start from the beginning.

**Outputs**

- `added` (list): New transactions.
- `added_count` (number): How many new transactions.
- `has_more` (true/false): Whether more changes are waiting; run again with next_checkpoint to get them.
- `modified` (list): Transactions that changed, such as a pending one posting.
- `next_checkpoint` (text): Pass this to the next run.
- `removed_transaction_ids` (list): Transactions the bank removed.

**Example output**

```json
{
  "added": [
    {
      "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp",
      "account_name": "Plaid Checking",
      "amount": -4.33,
      "authorized_date": "2026-09-17",
      "category": "Food and drink",
      "category_detail": "Coffee",
      "city": "Seattle",
      "currency": "USD",
      "date": "2026-09-18",
      "description": "Starbucks",
      "direction": "out",
      "logo_url": "https://plaid-merchant-logos.plaid.com/starbucks_956.png",
      "merchant": "Starbucks",
      "payment_channel": "in store",
      "pending": false,
      "transaction_id": "lPNjeW1nR6CDn5okmGQ6hEpMo4lLNoSrzqDje",
      "website": "starbucks.com"
    }
  ],
  "added_count": 1,
  "has_more": false,
  "modified": [],
  "next_checkpoint": "CAESJVp2YTR3RkhHRkp1Tm5ZZmpBbkpBdjB2ZEFkTWNIWGRNWjVYeRgD",
  "removed_transaction_ids": []
}
```

### List accounts

List the connected bank's accounts with their balances, as the bank last reported them (usually within the last day).

**Inputs**: None.

**Outputs**

- `accounts` (list): The accounts.
- `bank_name` (text): The bank's name.
- `count` (number): How many accounts.

**Example output**

```json
{
  "accounts": [
    {
      "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp",
      "available_balance": 100.0,
      "balance_updated_at": "",
      "credit_limit": null,
      "currency": "USD",
      "current_balance": 110.0,
      "mask": "0000",
      "name": "Plaid Checking",
      "official_name": "Plaid Gold Standard 0% Interest Checking",
      "subtype": "checking",
      "type": "depository"
    }
  ],
  "bank_name": "First Platypus Bank",
  "count": 1
}
```

### List investment holdings

List what is held in the connected investment and retirement accounts: each stock, fund or bond, how much, and what it is worth.

**Inputs**

- Accounts (`accounts`, list): Which accounts to include. Leave empty for all of them.

**Outputs**

- `count` (number): How many holdings.
- `holdings` (list): The holdings.
- `total_value` (number): What they are worth together.

**Example output**

```json
{
  "count": 1,
  "holdings": [
    {
      "account_id": "JqMLm4rJwpF6gMPJwBqdh9ZjjPvvpDcb7kDK1",
      "account_name": "Plaid IRA",
      "cost_basis": 1.0,
      "currency": "USD",
      "price": 2.11,
      "price_as_of": "",
      "quantity": 10.0,
      "security_id": "d6ePmbPxgWCWmMVv66q9iPV94n91vMtov5Are",
      "security_name": "Achillion Pharmaceuticals Inc.",
      "security_type": "equity",
      "ticker": "ACHN",
      "value": 21.1
    }
  ],
  "total_value": 21.1
}
```

### Search for banks

Search the banks, card issuers and brokerages Plaid can connect to by name, such as to check whether a bank is supported.

**Inputs**

- Bank name (`query`, text, required): All or part of the bank's name, such as 'Chase'.
- Countries (`countries`, list): Where to look. Leave empty for the United States. One or more of: `US` (United States), `CA` (Canada), `GB` (United Kingdom), `IE` (Ireland), `FR` (France), `ES` (Spain), `NL` (Netherlands), `DE` (Germany), `IT` (Italy), `PL` (Poland), and 10 more.
- Must share (`features`, list): Only banks that share all of these through Plaid. Leave empty for any. One or more of: `transactions`, `auth` (Account and routing numbers), `identity` (Account owner details), `investments`, `liabilities` (Loans and credit cards).
- Most results (`max_results`, number): The most banks to return. Leave empty for 10. From 1 to 50.

**Outputs**

- `banks` (list): The banks, best match first.
- `count` (number): How many banks.

**Example output**

```json
{
  "banks": [
    {
      "bank_id": "ins_109508",
      "brand_color": "#1f5dd9",
      "countries": [
        "US"
      ],
      "logo": "",
      "name": "First Platypus Bank",
      "shares": [
        "Transactions",
        "Account and routing numbers",
        "Investments"
      ],
      "uses_bank_sign_in_page": false,
      "website": "https://www.plaid.com"
    }
  ],
  "count": 1
}
```
