Plaid logo
Docs
ALL DOCS

API

  • Overview
  • Libraries
  • API versioning
  • Postman Collection
  • Webhooks
Payments and Funding
  • Auth
  • Balance
  • Identity
  • Signal
  • Transfer
  • Investments Move
  • Payment Initiation
  • Virtual Accounts
Financial Insights
  • Transactions
  • Investments
  • Liabilities
  • Enrich
KYC/AML and anti-fraud
  • Look up Dashboard users
  • Identity Verification
  • Protect
  • Monitor
  • Beacon (beta)
Instant Onboarding
  • Layer
Credit and Underwriting
  • Consumer Report (by Plaid Check)
  • Assets
  • Statements
  • Income
Fundamentals
  • Items
  • Accounts
  • Institutions
  • Sandbox
  • Link
  • Users
  • Consent
  • Network
  • OAuth
Partnerships
  • Processor tokens
  • Processor partners
  • Reseller partners
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

    API reference for Statements endpoints and webhooks

    For how-to guidance, see the Statements documentation.

    EndpointDescription
    /statements/listGet a list of statements available to download
    /statements/downloadDownload a single bank statement
    /statements/refreshTrigger on-demand statement extractions
    Webhook NameDescription
    STATEMENTS_REFRESH_COMPLETEStatements refresh completed

    Endpoints

    =*=*=*=

    /statements/list

    Retrieve a list of all statements associated with an item.

    The /statements/list endpoint retrieves a list of all statements associated with an item.

    statements/list

    Request fields

    access_token
    requiredstringrequired, string
    The access token associated with the Item data is being requested for.
    client_id
    stringstring
    Your Plaid API client_id. The client_id is required and may be provided either in the PLAID-CLIENT-ID header or as part of a request body.
    secret
    stringstring
    Your Plaid API secret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.
    Select Language
    1const listRequest: StatementsListRequest = {
    2 access_token: access_token,
    3};
    4const listResponse = await plaidClient.statementsList(listRequest);
    5accounts = listResponse.accounts;
    6statements = listResponse.accounts[0].statements;
    statements/list

    Response fields and example

    accounts
    [object][object]
    account_id
    stringstring
    Plaid's unique identifier for the account.
    account_mask
    stringstring
    The last 2-4 alphanumeric characters of an account's official account number. Note that the mask may be non-unique between an Item's accounts, and it may also not match the mask that the bank displays to the user.
    account_name
    stringstring
    The name of the account, either assigned by the user or by the financial institution itself.
    account_official_name
    stringstring
    The official name of the account as given by the financial institution.
    account_subtype
    stringstring
    The subtype of the account. For a full list of valid types and subtypes, see the Account schema.
    account_type
    stringstring
    The type of account. For a full list of valid types and subtypes, see the Account schema.
    statements
    [object][object]
    The list of statements' metadata associated with this account.
    statement_id
    stringstring
    Plaid's unique identifier for the statement.
    date_posted
    nullablestringnullable, string
    Date when the statement was posted by the FI, if known

    Format: date
    month
    integerinteger
    Month of the year. Possible values: 1 through 12 (January through December).
    year
    integerinteger
    The year of statement.

    Minimum: 2010
    institution_id
    stringstring
    The Plaid Institution ID associated with the Item.
    institution_name
    stringstring
    The name of the institution associated with the Item.
    item_id
    stringstring
    The Plaid Item ID. The item_id is always unique; linking the same account at the same institution twice will result in two Items with different item_id values. Like all Plaid identifiers, the item_id is case-sensitive.
    request_id
    stringstring
    A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.
    1{
    2 "item_id": "eVBnVMp7zdTJLkRNr33Rs6zr7KNJqBFL9DrE6",
    3 "institution_id": "ins_3",
    4 "institution_name": "Chase",
    5 "accounts": [
    6 {
    7 "account_id": "3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr",
    8 "account_mask": "0000",
    9 "account_name": "Plaid Saving",
    10 "account_official_name": "Plaid Silver Standard 0.1% Interest Saving",
    11 "account_subtype": "savings",
    12 "account_type": "depository",
    13 "statements": [
    14 {
    15 "statement_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D",
    16 "month": 5,
    17 "year": 2023,
    18 "date_posted": "2023-05-01"
    19 }
    20 ]
    21 }
    22 ],
    23 "request_id": "eYupqX1mZkEuQRx"
    24}
    Was this helpful?
    =*=*=*=

    /statements/download

    Retrieve a single statement.

    The /statements/download endpoint retrieves a single statement PDF in binary format. The response will contain a Plaid-Content-Hash header containing a SHA 256 checksum of the statement. This can be used to verify that the file being sent by Plaid is the same file that was downloaded to your system.

    statements/download

    Request fields

    access_token
    requiredstringrequired, string
    The access token associated with the Item data is being requested for.
    client_id
    stringstring
    Your Plaid API client_id. The client_id is required and may be provided either in the PLAID-CLIENT-ID header or as part of a request body.
    secret
    stringstring
    Your Plaid API secret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.
    statement_id
    requiredstringrequired, string
    Plaid's unique identifier for the statements.
    Select Language
    1let downloadRequest: StatementsDownloadRequest = {
    2 access_token: accessToken,
    3 statement_id: statement.statement_id,
    4};
    5let downloadResponse = await plaidClient.statementsDownload(
    6 downloadRequest,
    7 {responseType: 'arraybuffer'},
    8);
    9let pdf = downloadResponse.data.toString('base64');
    Response

    This endpoint returns a single statement, exactly as provided by the financial institution, in the form of binary PDF data.

    =*=*=*=

    /statements/refresh

    Refresh statements data.

    /statements/refresh initiates an on-demand extraction to fetch the statements for the provided dates.

    statements/refresh

    Request fields

    access_token
    requiredstringrequired, string
    The access token associated with the Item data is being requested for.
    client_id
    stringstring
    Your Plaid API client_id. The client_id is required and may be provided either in the PLAID-CLIENT-ID header or as part of a request body.
    secret
    stringstring
    Your Plaid API secret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.
    start_date
    requiredstringrequired, string
    The start date for statements, in "YYYY-MM-DD" format, e.g. "2023-08-30". To determine whether a statement falls within the specified date range, Plaid will use the statement posted date. The statement posted date is typically either the last day of the statement period, or the following day.

    Format: date
    end_date
    requiredstringrequired, string
    The end date for statements, in "YYYY-MM-DD" format, e.g. "2023-10-30". You can request up to two years of data. To determine whether a statement falls within the specified date range, Plaid will use the statement posted date. The statement posted date is typically either the last day of the statement period, or the following day.

    Format: date
    Select Language
    1const refreshRequest: StatementsRefreshRequest = {
    2 access_token: accessToken,
    3 start_date: '2023-11-01',
    4 end_date: '2024-02-01',
    5};
    6const refreshResponse = await plaidClient.statementsRefresh(refreshRequest);
    statements/refresh

    Response fields and example

    request_id
    stringstring
    A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.
    1{
    2 "request_id": "eYupqX1mZkEuQRx"
    3}
    Was this helpful?

    Webhooks

    Statement webhooks are sent to indicate that statements refresh has finished processing. All webhooks related to statements have a webhook_type of STATEMENTS.

    =*=*=*=

    STATEMENTS_REFRESH_COMPLETE

    Fired when refreshed statements extraction is completed or failed to be completed. Triggered by calling /statements/refresh.

    Properties

    webhook_type
    stringstring
    STATEMENTS
    webhook_code
    stringstring
    STATEMENTS_REFRESH_COMPLETE
    item_id
    stringstring
    The Plaid Item ID. The item_id is always unique; linking the same account at the same institution twice will result in two Items with different item_id values. Like all Plaid identifiers, the item_id is case-sensitive.
    result
    stringstring
    The result of the statement refresh extraction
    SUCCESS: The statements were successfully extracted and can be listed via /statements/list/ and downloaded via /statements/download/.
    FAILURE: The statements failed to be extracted.


    Possible values: SUCCESS, FAILURE
    environment
    stringstring
    The Plaid environment the webhook was sent from

    Possible values: sandbox, production
    1{
    2 "webhook_type": "STATEMENTS",
    3 "webhook_code": "STATEMENTS_REFRESH_COMPLETE",
    4 "item_id": "eVBnVMp7zdTJLkRNr33Rs6zr7KNJqBFL9DrE6",
    5 "result": "SUCCESS",
    6 "environment": "production"
    7}
    Was this helpful?
    Developer community
    GitHub
    GitHub
    Stack Overflow
    Stack Overflow
    YouTube
    YouTube
    Discord
    Discord