Fetch recurring transaction streams

POST /processor/transactions/recurring/get

The /processor/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 a processor token that has already been initialized with Transactions (either during Link, by specifying it in /link/token/create; or after Link, by calling /processor/transactions/get or /processor/transactions/sync). Once all historical transactions have been fetched, call /processor/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 /processor/transactions/sync listen for the SYNC_UPDATES_AVAILABLE webhook and check that the historical_update_complete field in the payload is true. If using /processor/transactions/get, listen for the HISTORICAL_UPDATE webhook.

After the initial call, you can call /processor/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.

To receive Transactions webhooks for a processor token, set its webhook URL via the /processor/token/webhook/update endpoint.

Request Body

Required

ProcessorTransactionsRecurringGetRequest defines the request schema for /processor/transactions/recurring/get

Parameters

client_id
string
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.
processor_token
required, string
The processor token obtained from the Plaid integration partner. Processor tokens are in the format: processor-<environment>-<identifier>
secret
string
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.
options
object
An optional object to be used with the request. If specified, options must not be null.
include_personal_finance_category
boolean
Personal finance categories are now returned by default.
personal_finance_category_version
string
Optional parameter that specifies which version of the personal finance category taxonomy to return. The v2 taxonomy is defined here. The legacy v1 taxonomy is defined here. If you enabled any Financial Insights products before October 2025 you will receive a default of 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.

Response

ProcessorTransactionsRecurringGetResponse defines the response schema for /processor/transactions/recurring/get

Response Properties

inflow_streams
required, array[object]
An array of depository transaction streams.
account_id
required, string
The ID of the account to which the stream belongs
stream_id
required, string
A unique id for the stream
category
required, array[string]
A hierarchical array of the categories to which this transaction belongs. See Categories. All implementations are encouraged to use the new personal_finance_category instead of category. personal_finance_category provides more meaningful categorization and greater accuracy.
category_id
required, string
The ID of the category to which this transaction belongs. See Categories. All implementations are encouraged to use the new personal_finance_category instead of category. personal_finance_category provides more meaningful categorization and greater accuracy.
description
required, string
A description of the transaction stream.
merchant_name
required, string
The merchant associated with the transaction stream.
first_date
required, string
The posted date of the earliest transaction in the stream.
last_date
required, string
The posted date of the latest transaction in the stream.
predicted_next_date
string
The predicted date of the next payment. This will only be set if the next payment date can be predicted.
frequency
required, string
Describes the frequency of the transaction stream. 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
required, array[string]
An array of Plaid transaction IDs belonging to the stream, sorted by posted date.
average_amount
required, object
Object with data pertaining to an amount on the transaction stream.
amount
number
Represents the numerical value of an amount.
iso_currency_code
string
The ISO-4217 currency code of the amount. Always 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
string
The unofficial currency code of the amount. Always 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
required, object
Object with data pertaining to an amount on the transaction stream.
amount
number
Represents the numerical value of an amount.
iso_currency_code
string
The ISO-4217 currency code of the amount. Always 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
string
The unofficial currency code of the amount. Always 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
required, boolean
Indicates whether the transaction stream is still live.
status
required, string
The current status of the transaction stream. 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
object
Information describing the intent of the transaction. Most relevant for personal finance use cases, but not limited to such use cases. See the 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
required, string
A high level category that communicates the broad category of the transaction.
detailed
required, string
A granular category conveying the transaction’s intent. This field can also be used as a unique identifier for the category.
confidence_level
string
A description of how confident we are that the provided categories accurately describe the transaction intent. 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
string
The version of the personal finance category requested. Possible values are “v1” and “v2”
is_user_modified
required, boolean
As the ability to modify transactions streams has been discontinued, this field will always be false.
last_user_modified_datetime
string
The date and time of the most recent user modification. This will only be set if is_user_modified is true.
outflow_streams
required, array[object]
An array of expense transaction streams.
account_id
required, string
The ID of the account to which the stream belongs
stream_id
required, string
A unique id for the stream
category
required, array[string]
A hierarchical array of the categories to which this transaction belongs. See Categories. All implementations are encouraged to use the new personal_finance_category instead of category. personal_finance_category provides more meaningful categorization and greater accuracy.
category_id
required, string
The ID of the category to which this transaction belongs. See Categories. All implementations are encouraged to use the new personal_finance_category instead of category. personal_finance_category provides more meaningful categorization and greater accuracy.
description
required, string
A description of the transaction stream.
merchant_name
required, string
The merchant associated with the transaction stream.
first_date
required, string
The posted date of the earliest transaction in the stream.
last_date
required, string
The posted date of the latest transaction in the stream.
predicted_next_date
string
The predicted date of the next payment. This will only be set if the next payment date can be predicted.
frequency
required, string
Describes the frequency of the transaction stream. 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
required, array[string]
An array of Plaid transaction IDs belonging to the stream, sorted by posted date.
average_amount
required, object
Object with data pertaining to an amount on the transaction stream.
amount
number
Represents the numerical value of an amount.
iso_currency_code
string
The ISO-4217 currency code of the amount. Always 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
string
The unofficial currency code of the amount. Always 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
required, object
Object with data pertaining to an amount on the transaction stream.
amount
number
Represents the numerical value of an amount.
iso_currency_code
string
The ISO-4217 currency code of the amount. Always 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
string
The unofficial currency code of the amount. Always 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
required, boolean
Indicates whether the transaction stream is still live.
status
required, string
The current status of the transaction stream. 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
object
Information describing the intent of the transaction. Most relevant for personal finance use cases, but not limited to such use cases. See the 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
required, string
A high level category that communicates the broad category of the transaction.
detailed
required, string
A granular category conveying the transaction’s intent. This field can also be used as a unique identifier for the category.
confidence_level
string
A description of how confident we are that the provided categories accurately describe the transaction intent. 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
string
The version of the personal finance category requested. Possible values are “v1” and “v2”
is_user_modified
required, boolean
As the ability to modify transactions streams has been discontinued, this field will always be false.
last_user_modified_datetime
string
The date and time of the most recent user modification. This will only be set if is_user_modified is true.
updated_datetime
required, string
Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time transaction streams for the given account were updated on
personal_finance_category_version
string
Optional parameter that specifies which version of the personal finance category taxonomy to return. The v2 taxonomy is defined here. The legacy v1 taxonomy is defined here. If you enabled any Financial Insights products before October 2025 you will receive a default of 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
required, string
A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.