Plaid logo
Docs
ALL DOCS

Statements

  • Introduction to Statements
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

    Statements

    Retrieve a PDF copy of a user's financial statement

    Get started with Statements
    API ReferenceQuickstart

    Overview

    Statements (US only) allows you to retrieve an exact, bank-branded, PDF copy of an end user's bank statement, directly from their bank. The Statements product simplifies the process of collecting documents for loan verification purposes or rental application review purposes, among others.

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

    Integration process

    1. Call /link/token/create to create a link token.
      • Include a statements object containing fields start_date and end_date. Plaid allows extracting up to 2 years of statements.
      • If your integration uses multiple Plaid products, such as Assets and Statements, we recommend that you put your other products in the products array and put statements in the required_if_supported_products array. This configuration will require statements to be extracted if the financial institution supports the product, but will not block the user from progressing if statements are not supported. Instead, if Statements is not supported by the user's institution, you will receive a PRODUCTS_NOT_SUPPORTED error when calling Statements endpoints. For more details, see Choosing how to initialize products.
      • If you are using only the Statements product, put statements in the products array when calling /link/token/create.
    Select Language
    1const request: LinkTokenCreateRequest = {
    2 loading_sample: true
    3};
    4try {
    5 const response = await plaidClient.linkTokenCreate(request);
    6 const linkToken = response.data.link_token;
    7} catch (error) {
    8 // handle error
    9}
    1. On the client side, create an instance of Link using the link_token returned by /link/token/create; for more details, see the Link documentation.

    2. Once the user has successfully finished the Link session, the client-side onSuccess callback will fire. Extract the public_token from the callback and exchange it for an access_token by calling /item/public_token/exchange.

    3. Call /statements/list, passing the access_token obtained above. This will return a list of statements, including a statement_id for each.

      1{
      2 "accounts": [
      3 {
      4 "account_id": "1qKRXQjk8xUWDJojNwPXTj8gEmR48piqRNye8",
      5 "account_name": "Plaid Checking",
      6 "account_type": "depository",
      7 "statements": [
      8 {
      9 "month": 1,
      10 "statement_id": "efgh12e3-gh1c-56d6-e7e9-923bc64d80a5",
      11 "year": 2024
      12 },
      13 {
      14 "month": 2,
      15 "statement_id": "jklh12e3-ab3e-87y3-f8a0-908bc64d80a5",
      16 "year": 2024
      17 }
      18 {
      19 "month": 3,
      20 "statement_id": "4710abc-af28-481a-991a-48387a7345ddf",
      21 "year": 2024
      22 }
      23 ]
      24 }
      25 ],
      26 "institution_id": "ins_118923",
      27 "institution_name": "First Platypus Bank",
      28 "item_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb",
      29 "request_id": "NBZaq"
      30 }
    4. Call /statements/download, passing in the access_token and desired statement_id, to download a specific statement. The statement will be provided in PDF format, exactly as provided by the financial institution.

      Mock bank statement from First Platypus Bank with account summary and February 2022 transactions. Retrieved via /statements/download.
      Sample Sandbox (mock) bank statement retrieved with /statements/download.
    5. (Optional) If you would like to re-check for new statements generated after the end user linked their account, you can call /statements/refresh. When the STATEMENTS_REFRESH_COMPLETE webhook has been received, call /statements/list again for an updated list of statements.

    Adding Statements to an existing Item

    If your user has already connected their account to your application for a different product, you can add Statements to the existing Item via update mode.

    To do so, in the /link/token/create request described in the Integration process, populate the access_token field with the access token for the Item, and set the products array to ["statements"]. If the user connected their account less than two years ago, they can bypass the Link credentials pane and complete just the Statements consent step. Otherwise, they will be prompted to complete the full Link flow.

    Supported accounts and institutions

    Statements currently supports only bank depository accounts (e.g. checking and savings accounts).

    Statements support includes the following major institutions:

    • Bank of America
    • Chase (Early Availability; contact your Plaid Account Manager to request access)
    • Citibank
    • Citizens Bank
    • Fifth Third Bank
    • Huntington Bank
    • Navy FCU
    • Regions Bank
    • TD Bank
    • Truist
    • US Bank
    • Wells Fargo

    In addition to the institutions named above, Statements also supports over 1,500 smaller banks and credit unions. Statements does not currently support all major or long tail-institutions, and should be used with a fallback option in case data is not available.

    Testing Statements

    Statements can be tested in Sandbox, where a mock statement is returned. In Production, the statement is retrieved from the financial institution. Existing customers whose Plaid teams were created in 2023 or earlier may need to file a product access request to access Statements in the Sandbox.

    Statements user experience

    Plaid screens showing bank connection, bank selection, credential entry, account selection, and access request for sharing statements.
    The end user experience for sharing bank statements.

    Statements pricing

    Statements is billed when /link/token/create is successfully called for Statements, with the cost based on the number of statements between the provided start and end dates, according to a flexible per-Item fee model. Statements Refresh is billed based on the number of statements extracted between the provided start and end dates when calling /statements/refresh, based on a flexible per-request fee model. To view the exact pricing you may be eligible for, contact Sales. For more details about pricing and billing models, see Plaid billing.

    Next steps

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

    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