Fetch recurring transaction streams
POST /transactions/recurring/get
The /transactions/recurring/get endpoint allows developers to receive a summary of the recurring outflow and inflow streams (expenses and deposits) from a user’s checking, savings or credit card accounts. Additionally, Plaid provides key insights about each recurring stream including the category, merchant, last amount, and more. Developers can use these insights to build tools and experiences that help their users better manage cash flow, monitor subscriptions, reduce spend, and stay on track with bill payments.
This endpoint is offered as an add-on to Transactions. To request access to this endpoint, submit a product access request or contact your Plaid account manager.
This endpoint can only be called on an Item that has already been initialized with Transactions (either during Link, by specifying it in /link/token/create; or after Link, by calling /transactions/get or /transactions/sync).
When using Recurring Transactions, for best results, make sure to use the days_requested parameter to request at least 180 days of history when initializing Items with Transactions. Once all historical transactions have been fetched, call /transactions/recurring/get to receive the Recurring Transactions streams and subscribe to the RECURRING_TRANSACTIONS_UPDATE webhook. To know when historical transactions have been fetched, if you are using /transactions/sync listen for the SYNC_UPDATES_AVAILABLE webhook and check that the historical_update_complete field in the payload is true. If using /transactions/get, listen for the HISTORICAL_UPDATE webhook.
After the initial call, you can call /transactions/recurring/get endpoint at any point in the future to retrieve the latest summary of recurring streams. Listen to the RECURRING_TRANSACTIONS_UPDATE webhook to be notified when new updates are available.
Request Body
Required
TransactionsRecurringGetRequest defines the request schema for /transactions/recurring/get
Parameters
client_id
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.
access_token
secret
secret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.
options
options must not be null.
include_personal_finance_category
personal_finance_category_version
v1 taxonomy and may request v2 by explicitly setting this field to v2.
If you enabled any Financial Insights products on or after October 2025 you may only receive v2 taxonomy.
account_ids
account_ids to retrieve for the Item. Retrieves all active accounts on item if no account_ids are provided.
Note: An error will be returned if a provided account_id is not associated with the Item.
Response
TransactionsRecurringGetResponse defines the response schema for /transactions/recurring/get
Response Properties
inflow_streams
account_id
stream_id
category
personal_finance_category instead of category. personal_finance_category provides more meaningful categorization and greater accuracy.
category_id
personal_finance_category instead of category. personal_finance_category provides more meaningful categorization and greater accuracy.
description
merchant_name
first_date
last_date
predicted_next_date
frequency
WEEKLY: Assigned to a transaction stream that occurs approximately every week.
BIWEEKLY: Assigned to a transaction stream that occurs approximately every 2 weeks.
SEMI_MONTHLY: Assigned to a transaction stream that occurs approximately twice per month. This frequency is typically seen for inflow transaction streams.
MONTHLY: Assigned to a transaction stream that occurs approximately every month.
ANNUALLY: Assigned to a transaction stream that occurs approximately every year.
UNKNOWN: Assigned to a transaction stream that does not fit any of the pre-defined frequencies.
transaction_ids
average_amount
amount
iso_currency_code
null if unofficial_currency_code is non-null.
See the currency code schema for a full listing of supported iso_currency_codes.
unofficial_currency_code
null if iso_currency_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries.
last_amount
amount
iso_currency_code
null if unofficial_currency_code is non-null.
See the currency code schema for a full listing of supported iso_currency_codes.
unofficial_currency_code
null if iso_currency_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries.
is_active
status
MATURE: A MATURE recurring stream should have at least 3 transactions and happen on a regular cadence (For Annual recurring stream, we will mark it MATURE after 2 instances).
EARLY_DETECTION: When a recurring transaction first appears in the transaction history and before it fulfills the requirement of a mature stream, the status will be EARLY_DETECTION.
TOMBSTONED: A stream that was previously in the EARLY_DETECTION status will move to the TOMBSTONED status when no further transactions were found at the next expected date.
UNKNOWN: A stream is assigned an UNKNOWN status when none of the other statuses are applicable.
personal_finance_category
taxonomy CSV file for a full list of personal finance categories. If you are migrating to personal finance categories from the legacy categories, also refer to the migration guide.
primary
detailed
confidence_level
VERY_HIGH: We are more than 98% confident that this category reflects the intent of the transaction.
HIGH: We are more than 90% confident that this category reflects the intent of the transaction.
MEDIUM: We are moderately confident that this category reflects the intent of the transaction.
LOW: This category may reflect the intent, but there may be other categories that are more accurate.
UNKNOWN: We don’t know the confidence level for this category.
version
is_user_modified
false.
last_user_modified_datetime
is_user_modified is true.
outflow_streams
account_id
stream_id
category
personal_finance_category instead of category. personal_finance_category provides more meaningful categorization and greater accuracy.
category_id
personal_finance_category instead of category. personal_finance_category provides more meaningful categorization and greater accuracy.
description
merchant_name
first_date
last_date
predicted_next_date
frequency
WEEKLY: Assigned to a transaction stream that occurs approximately every week.
BIWEEKLY: Assigned to a transaction stream that occurs approximately every 2 weeks.
SEMI_MONTHLY: Assigned to a transaction stream that occurs approximately twice per month. This frequency is typically seen for inflow transaction streams.
MONTHLY: Assigned to a transaction stream that occurs approximately every month.
ANNUALLY: Assigned to a transaction stream that occurs approximately every year.
UNKNOWN: Assigned to a transaction stream that does not fit any of the pre-defined frequencies.
transaction_ids
average_amount
amount
iso_currency_code
null if unofficial_currency_code is non-null.
See the currency code schema for a full listing of supported iso_currency_codes.
unofficial_currency_code
null if iso_currency_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries.
last_amount
amount
iso_currency_code
null if unofficial_currency_code is non-null.
See the currency code schema for a full listing of supported iso_currency_codes.
unofficial_currency_code
null if iso_currency_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries.
is_active
status
MATURE: A MATURE recurring stream should have at least 3 transactions and happen on a regular cadence (For Annual recurring stream, we will mark it MATURE after 2 instances).
EARLY_DETECTION: When a recurring transaction first appears in the transaction history and before it fulfills the requirement of a mature stream, the status will be EARLY_DETECTION.
TOMBSTONED: A stream that was previously in the EARLY_DETECTION status will move to the TOMBSTONED status when no further transactions were found at the next expected date.
UNKNOWN: A stream is assigned an UNKNOWN status when none of the other statuses are applicable.
personal_finance_category
taxonomy CSV file for a full list of personal finance categories. If you are migrating to personal finance categories from the legacy categories, also refer to the migration guide.
primary
detailed
confidence_level
VERY_HIGH: We are more than 98% confident that this category reflects the intent of the transaction.
HIGH: We are more than 90% confident that this category reflects the intent of the transaction.
MEDIUM: We are moderately confident that this category reflects the intent of the transaction.
LOW: This category may reflect the intent, but there may be other categories that are more accurate.
UNKNOWN: We don’t know the confidence level for this category.
version
is_user_modified
false.
last_user_modified_datetime
is_user_modified is true.
updated_datetime
YYYY-MM-DDTHH:mm:ssZ) indicating the last time transaction streams for the given account were updated on
personal_finance_category_version
v1 taxonomy and may request v2 by explicitly setting this field to v2.
If you enabled any Financial Insights products on or after October 2025 you may only receive v2 taxonomy.
request_id