Statements 
===========

#### Retrieve a PDF copy of a user's financial statement 

Get started with Statements

[API Reference](https://plaid.com/docs/api/products/statements/index.html.md) [Quickstart](https://plaid.com/docs/quickstart/index.html.md)

#### 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!](https://www.youtube.com/watch?v=DppLEPqU3cs)

#### Integration process 

1.  Call [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) 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](https://plaid.com/docs/errors/item/index.html.md#products_not_supported) error when calling Statements endpoints. For more details, see [Choosing how to initialize products](https://plaid.com/docs/link/initializing-products/index.html.md) .
        
    *   If you are using only the Statements product, put statements in the products array when calling [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) .
        
        ```node
        const request: LinkTokenCreateRequest = {
          loading_sample: true
        };
        try {
          const response = await plaidClient.linkTokenCreate(request);
          const linkToken = response.data.link_token;
        } catch (error) {
          // handle error
        }
        ```
        
        ```python
        request = LinkTokenCreateRequest(
          loading_sample=True
        )
        # create link token
        response = client.link_token_create(request)
        link_token = response['link_token']
        ```
        
        ```bash
        curl -X POST https://sandbox.plaid.com/link/token/create -H 'Content-Type: application/json' -d '{
          "client_id": "${PLAID_CLIENT_ID}",
          "secret": "${PLAID_SECRET}",
          "loading_sample": true
        }'
        ```
        
        ```ruby
        link_token_create_request = Plaid::LinkTokenCreateRequest.new(
          {
            loading_sample: true
          }
        )
        
        response = client.link_token_create(
          link_token_create_request
        )
        link_token = response.link_token
        ```
        
        ```java
        LinkTokenCreateRequest request = new LinkTokenCreateRequest()
          .loadingSample(true);
        
        Response response = client
          .linkTokenCreate(request)
          .execute();
        
        String linkToken = response.body().getLinkToken();
        ```
        
        ```go
        request := plaid.NewLinkTokenCreateRequest(
          "Sample App App",
          "en",
          []plaid.CountryCode{plaid.COUNTRYCODE_US},
          user,
        )
        request.SetLoadingSample(true)
        
        linkTokenCreateResp, _, err := client.PlaidApi.LinkTokenCreate(ctx).LinkTokenCreateRequest(*request).Execute()
        if err != nil {
          panic(err)
        }
        linkToken := linkTokenCreateResp.GetLinkToken();
        ```
        
2.  On the client side, create an instance of Link using the `link_token` returned by [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) ; for more details, see the [Link documentation](https://plaid.com/docs/link/index.html.md) .
    
3.  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](https://plaid.com/docs/api/items/index.html.md#itempublic_tokenexchange) .
    
4.  Call [/statements/list](https://plaid.com/docs/api/products/statements/index.html.md#statementslist) , passing the `access_token` obtained above. This will return a list of statements, including a `statement_id` for each.
    
    Sample successful /statements/list response
    
    ```json
    {
          "accounts": [
            {
               "account_id": "1qKRXQjk8xUWDJojNwPXTj8gEmR48piqRNye8",
               "account_mask": "0000",
               "account_name": "Plaid Checking",
               "account_official_name": "Plaid Gold Standard 0% Interest Checking",
               "account_subtype": "checking",
               "account_type": "depository",
               "statements": [
                  {
                    "month": 1,
                    "statement_id": "efgh12e3-gh1c-56d6-e7e9-923bc64d80a5",
                    "year": 2024
                  },
                  {
                    "month": 2,
                    "statement_id": "jklh12e3-ab3e-87y3-f8a0-908bc64d80a5",
                    "year": 2024
                  },
                  {
                    "month": 3,
                    "statement_id": "4710abcd-af28-481a-991a-48387a7345df",
                    "year": 2024
                  }
               ]
            }
          ],
          "institution_id": "ins_118923",
          "institution_name":  "First Platypus Bank",
          "item_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb",
          "request_id": "NBZaq"
       }
    ```
    
5.  Call [/statements/download](https://plaid.com/docs/api/products/statements/index.html.md#statementsdownload) , 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.
    
    (An image of "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.
    
6.  (Optional) If you would like to re-check for new statements generated after the end user linked their account, you can call [/statements/refresh](https://plaid.com/docs/api/products/statements/index.html.md#statementsrefresh) . When the [STATEMENTS\_REFRESH\_COMPLETE](https://plaid.com/docs/api/products/statements/index.html.md#statements_refresh_complete) webhook has been received, call [/statements/list](https://plaid.com/docs/api/products/statements/index.html.md#statementslist) 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](https://plaid.com/docs/link/update-mode/index.html.md) .

To do so, in the [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) request described in the [Integration process](https://plaid.com/docs/statements/index.html.md#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, constituting ~40% of US depository accounts:

*   Bank of America
*   Chase (early availability; contact your Plaid account manager to request access)
*   Citibank
*   Fifth Third Bank
*   Huntington Bank
*   Navy FCU
*   Regions Bank
*   Truist
*   US Bank
*   Wells Fargo

In addition to the institutions named above, Statements also supports several 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.

For a full list of institutions that support Statements, see the [Institution Coverage Explorer](https://plaid.com/docs/institutions/index.html.md) .

#### Testing Statements 

Statements can be tested in [Sandbox](https://plaid.com/docs/sandbox/index.html.md) , 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](https://dashboard.plaid.com/support/new/admin/account-administration/request-product-access) to access Statements in the Sandbox.

#### Statements pricing 

Statements is billed when [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) 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](https://plaid.com/docs/account/billing/index.html.md#per-item-flexible-fee) . Statements Refresh is billed based on the number of statements extracted between the provided start and end dates when calling [/statements/refresh](https://plaid.com/docs/api/products/statements/index.html.md#statementsrefresh) , based on a [flexible per-request fee model](https://plaid.com/docs/account/billing/index.html.md#per-request-flexible-fee) . To view the exact pricing you may be eligible for, [contact sales](https://plaid.com/contact/) . For more details about pricing and billing models, see [Plaid billing](https://plaid.com/docs/account/billing/index.html.md) .

#### Next steps 

If you're ready to launch to Production, see the [Launch checklist](https://plaid.com/docs/launch-checklist/index.html.md) .

#### Launch Center 

See next steps to launch in Production

[Launch](https://dashboard.plaid.com/developers/launch-center)