Plaid logo
Docs
ALL DOCS

Investments

  • Introduction to Investments
  • Add Investments to your app
Plaid logo
Docs
Close search modal
Ask Bill!
Ask Bill!
Hi! I'm Bill! You can ask me all about the Plaid API. Try asking questions like:
    Note: Bill isn't perfect. He's just a robot platypus that reads our docs for fun. You should treat his answers with the same healthy skepticism you might treat any other answer on the internet. This chat may be logged for quality and training purposes. Please don't send Bill any PII -- he's scared of intimacy. All chats with Bill are subject to Plaid's Privacy Policy.
    Plaid.com
    Log in
    Get API Keys
    Open nav

    Introduction to Investments

    View holdings and transactions from investment accounts

    Get started with Investments
    API ReferenceQuickstart

    Overview

    The Investments product allows you to obtain holding, security, and transactions data for investment-type accounts in financial institutions within the United States and Canada. This data can be used for personal financial management tools and wealth management analysis.

    Looking for Plaid's solution to automate ACATS transfers and avoid friction, failures, and delays due to manual data entry? See Investments Move instead.

    Prefer to learn by watching? Get an overview of how Investments works in just 3 minutes!

    Securities and holdings

    The /investments/holdings/get endpoint provides both security data and holding data. Security data represents information about a specific security, such as its name, ticker symbol, and price. Security data is not specific to a user's account; any user who held the same security at the same financial institution at the same time would have identical security data.

    1{
    2 "close_price": 10.42,
    3 "close_price_as_of": null,
    4 "cusip": "258620103",
    5 "institution_id": null,
    6 "institution_security_id": null,
    7 "is_cash_equivalent": false,
    8 "isin": "US2586201038",
    9 "iso_currency_code": "USD",
    10 "name": "DoubleLine Total Return Bond Fund",
    11 "proxy_security_id": null,
    12 "security_id": "NDVQrXQoqzt5v3bAe8qRt4A7mK7wvZCLEBBJk",
    13 "sedol": null,
    14 "ticker_symbol": "DBLTX",
    15 "type": "mutual fund",
    16 "unofficial_currency_code": null,
    17 "market_identifier_code": "XNAS",
    18 "option_contract": null
    19}

    Holding data, by contrast, represents information about a user's specific ownership of that security, such as the number of shares owned and the cost basis. Each holding includes a security_id field that can be cross-referenced to a security for more detailed information about the security itself.

    1{
    2 "account_id": "k67E4xKvMlhmleEa4pg9hlwGGNnnEeixPolGm",
    3 "cost_basis": 10,
    4 "institution_price": 10.42,
    5 "institution_price_as_of": null,
    6 "institution_value": 20.84,
    7 "iso_currency_code": "USD",
    8 "quantity": 2,
    9 "security_id": "NDVQrXQoqzt5v3bAe8qRt4A7mK7wvZCLEBBJk",
    10 "unofficial_currency_code": null
    11}

    Transactions

    The /investments/transactions/get endpoint provides up to 24 months of investment transactions data. The schema for investment transactions is not the same as for transactions data returned by the Transactions product, instead providing securities-specific information. Inflow, such as stock sales, is shown as a negative amount, and outflow, such as stock purchases, is positive. The /investments/transactions/get endpoint can only be used for investment-type accounts; for obtaining transaction history for other account types, use Transactions.

    1{
    2 "account_id": "rz99ex9ZQotvnjXdgQLEsR81e3ArPgulVWjGj",
    3 "amount": -8.72,
    4 "cancel_transaction_id": null,
    5 "date": "2020-05-29",
    6 "fees": 0,
    7 "investment_transaction_id": "oq99Pz97joHQem4BNjXECev1E4B6L6sRzwANW",
    8 "iso_currency_code": "USD",
    9 "name": "INCOME DIV DIVIDEND RECEIVED",
    10 "price": 0,
    11 "quantity": 0,
    12 "security_id": "eW4jmnjd6AtjxXVrjmj6SX1dNEdZp3Cy8RnRQ",
    13 "subtype": "dividend",
    14 "type": "cash",
    15 "unofficial_currency_code": null
    16}

    Investments transactions initialization behavior

    Unlike the Transactions product, Investments Transactions operates synchronously by default and will not fire a webhook to indicate when initial data is ready for an Item. If investments transactions data is not ready when /investments/transactions/get is first called, Plaid will wait for the data. For this reason, calling /investments/transactions/get immediately after Link may take up to one to two minutes to return.

    If you are adding Investments to an Item by calling /investments/transactions/get after the Item was originally linked, instead of specifying the Investments product while calling /link/token/create, you can optionally request asynchronous behavior by specifying async_update=true. In this case, Investments will fire a HISTORICAL_UPDATE webhook when data is ready to be fetched. In all other scenarios, Investments endpoints will operate synchronously and will not fire a webhook to indicate when the Item's initial data is available to be fetched.

    Investments updates and webhooks

    Investments data is not static, since users' holdings will change as they trade and as market prices fluctuate. Plaid typically checks for updates to investment data overnight, after market hours. You can also request an update on-demand via the /investments/refresh endpoint, which is available as an add-on for Investments customers. To request access to this endpoint, submit a product access request or contact your Plaid account manager.

    There are two webhooks that are used for informing you of changes to investment data. The DEFAULT_UPDATE webhook of type HOLDINGS fires when new holdings have been detected or the quantity or price of an existing holding has changed. The DEFAULT_UPDATE webhook of type INVESTMENTS_TRANSACTIONS fires when a new or canceled investment transaction has been detected.

    When updating an Item with new Investments transactions data, it is recommended to call /investments/transactions/get with only the date range that needs to be updated, rather than the maximum available date range, in order to reduce the amount of data that you must receive and process.

    Investments institution coverage

    By default, Investments provides access to data at over 2,400 institutions in the US and Canada.

    Access to Fidelity Investments is available upon request. To request access, contact your Plaid Account Manager.

    Testing Investments

    Investments can be tested in Sandbox without any additional permissions.

    To test with realistic data, use the custom user. If provided real-world ticker symbols, Plaid will automatically populate securities with realistic data for both options and contracts. For examples, see the sample Investments custom user.

    When using the custom Sandbox user, Investments must be placed in the products array of /link/token/create and cannot be used in the optional_products, additional_consented_products, or required_if_supported_products array. Omitting investments from the products array may cause custom Sandbox investments data not to be loaded.

    Investments pricing

    Investments is billed on a subscription model; Investments Refresh is billed on a per-request flat fee model. To view the exact pricing you may be eligible for, apply for Production access or contact Sales. For more details about pricing and billing models, see Plaid billing.

    Next steps

    To get started building with Investments, see Add Investments to your App.

    If you're ready to launch to Production, see the Launch Center.

    Launch Center

    See next steps to launch in Production

    Launch

    Launch Center

    See next steps to launch in Production

    Launch
    Was this helpful?
    Developer community
    GitHub
    GitHub
    Stack Overflow
    Stack Overflow
    YouTube
    YouTube
    Discord
    Discord