Plaid logo
Docs
ALL DOCS

Statements (beta)

  • 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 statement (beta)

    API Reference

    View Identity requests, responses, and example code

    View Statements API

    Quickstart

    Learn about Plaid's key concepts and run starter code

    Get started

    Overview

    Statements allows you to retrieve a bank branded, PDF copy of an end user's bank statement. The Statements product simplifies the process of collecting documents for loan verification purposes or rental application review purposes, among others.

    Statements is currently in beta. To request access, contact Support or your Plaid Account Manager.

    Integration process

    1. Call /link/token/create to create a link token.

      • Include a statements object containing fields start_date and end_date. Plaid only 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.
      1{
      2 "client_id": "${PLAID_CLIENT_ID}",
      3 "secret": "${PLAID_SECRET}",
      4 "client_name": "Your Company",
      5 "country_codes": ["US"],
      6 "language": "en",
      7 "user": {
      8 "client_user_id": "{{client_id}}"
      9 },
      10 "products": ["assets"],
      11 "required_if_supported_products": ["statements"],
      12 "statements": {
      13 "start_date": "2023-01-15",
      14 "end_date": "2023-05-01"
      15 },
      16 "webhook": "https://webhook.site/6fc6d0c4-263c-45e0-99a6-891bb591efd2"
      17}
    2. 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.

    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.

    4. 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": 4,
      10 "statement_id": "efgh12e3-gh1c-56d6-e7e9-923bc64d80a5",
      11 "year": 2023
      12 },
      13 {
      14 "month": 5,
      15 "statement_id": "jklh12e3-ab3e-87y3-f8a0-908bc64d80a5",
      16 "year": 2023
      17 }
      18 ]
      19 }
      20 ],
      21 "institution_id": "ins_118923",
      22 "institution_name": "First Platypus Bank",
      23 "item_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb",
      24 "request_id": "NBZaq"
      25 }
    5. 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.

      Sample bank statement retrieved with /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. When the STATEMENTS_REFRESH_COMPLETE webhook has been received, call /statements/list again for an updated list of statements.

    Testing Statements

    Statements can be tested in Sandbox without contacting Plaid. In order to test Statements against live Items in Production, you will need to first request access by submitting a product access request Support ticket explaining your use case. Statements cannot be tested in Development.

    A mock statement is returned in Sandbox. In Production, the statement is retrieved from the financial institution.

    Statements user experience

    The end user experience for sharing bank statements.
    The end user experience for sharing bank statements.

    Statements pricing

    Statements is billed on a flexible fee model; the cost will depend on the number of statements returned from calling /statements/list. 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 checklist

    Recommended steps to take before launching in Production

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