Statements
Retrieve a PDF copy of a user's financial statement
API Reference
View Identity requests, responses, and example code
View Statements APIQuickstart
Learn about Plaid's key concepts and run starter code
Get startedOverview
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.
Integration process
- Call
/link/token/create
to create a link token.- Include a statements object containing fields
start_date
andend_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 putstatements
in therequired_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 aPRODUCTS_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
.
- Include a statements object containing fields
1const request: LinkTokenCreateRequest = {2 loading_sample: true3};4try {5 const response = await plaidClient.linkTokenCreate(request);6 const linkToken = response.data.link_token;7} catch (error) {8 // handle error9}
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.Once the user has successfully finished the Link session, the client-side
onSuccess
callback will fire. Extract thepublic_token
from the callback and exchange it for anaccess_token
by calling/item/public_token/exchange
.Call
/statements/list
, passing theaccess_token
obtained above. This will return a list of statements, including astatement_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": 202412 },13 {14 "month": 2,15 "statement_id": "jklh12e3-ab3e-87y3-f8a0-908bc64d80a5",16 "year": 202417 }18 {19 "month": 3,20 "statement_id": "4710abc-af28-481a-991a-48387a7345ddf",21 "year": 202422 }23 ]24 }25 ],26 "institution_id": "ins_118923",27 "institution_name": "First Platypus Bank",28 "item_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb",29 "request_id": "NBZaq"30 }Call
/statements/download
, passing in theaccess_token
and desiredstatement_id
, to download a specific statement. The statement will be provided in PDF format, exactly as provided by the financial institution.Sample Sandbox (mock) bank statement retrieved with /statements/download. (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 theSTATEMENTS_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
Statements currently supports only bank depository accounts (e.g. checking and savings accounts).
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
Statements pricing
Statements is billed when an access token is created, 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 additional statements found 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.