v51

latestOpenAPI 3.0.0raw.githubusercontent.com2026-07-313352,3122.9 MB
plaid

Get incremental transaction updates on an Item

The /transactions/sync endpoint retrieves transactions associated with an Item and can fetch updates using a cursor to track which updates have already been seen.

For important instructions on integrating with /transactions/sync, see the Transactions integration overview. If you are migrating from an existing integration using /transactions/get, see the Transactions Sync migration guide.

This endpoint supports credit, depository, and some loan-type accounts (only those with account subtype student or mortgage). For investments accounts, use /investments/transactions/get instead.

When retrieving paginated updates, track both the next_cursor from the latest response and the original cursor from the first call in which has_more was true; if a call to /transactions/sync fails when retrieving a paginated update (e.g. due to the TRANSACTIONS_SYNC_MUTATION_DURING_PAGINATION error), the entire pagination request loop must be restarted beginning with the cursor for the first page of the update, rather than retrying only the single request that failed.

If transactions data is not yet available for the Item, which can happen if the Item was not initialized with transactions during the /link/token/create call or if /transactions/sync was called within a few seconds of Item creation, /transactions/sync will return empty transactions arrays.

Plaid typically checks for new transactions data between one and four times per day, depending on the institution. To find out when transactions were last updated for an Item, use the Item Debugger or call /item/get; the item.status.transactions.last_successful_update field will show the timestamp of the most recent successful update. To force Plaid to check for new transactions, use the /transactions/refresh endpoint.

To be alerted when new transactions are available, listen for the SYNC_UPDATES_AVAILABLE webhook.

post/transactions/sync

Request body

client_idstring

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.

access_tokenstring required

The access token associated with the Item for which data is being requested.

secretstring

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.

cursorstring

The cursor value represents the last update requested. Providing it will cause the response to only return changes after this update. If omitted, the entire history of updates will be returned, starting with the first-added transactions on the Item. The cursor also accepts the special value of "now", which can be used to fast-forward the cursor as part of migrating an existing Item from /transactions/get to /transactions/sync. For more information, see the Transactions sync migration guide. Note that using the "now" value is not supported for any use case other than migrating existing Items from /transactions/get.

The upper-bound length of this cursor is 256 characters of base64.

countinteger

The number of transaction updates to fetch.

Response

OK

transactions_update_status'TRANSACTIONS_UPDATE_STATUS_UNKNOWN' | 'NOT_READY' | 'INITIAL_UPDATE_COMPLETE' | 'HISTORICAL_UPDATE_COMPLETE' required

A description of the update status for transaction pulls of an Item. This field contains the same information provided by transactions webhooks, and may be helpful for webhook troubleshooting or when recovering from missed webhooks.

TRANSACTIONS_UPDATE_STATUS_UNKNOWN: Unable to fetch transactions update status for Item. NOT_READY: The Item is pending transaction pull. INITIAL_UPDATE_COMPLETE: Initial pull for the Item is complete, historical pull is pending. HISTORICAL_UPDATE_COMPLETE: Both initial and historical pull for Item are complete.

next_cursorstring required

Cursor used for fetching any future updates after the latest update provided in this response. The cursor obtained after all pages have been pulled (indicated by has_more being false) will be valid for at least 1 year. This cursor should be persisted for later calls. If transactions are not yet available, this will be an empty string.

If account_id is included in the request, the returned cursor will reflect updates for that specific account.

has_moreboolean required

Represents if more than requested count of transaction updates exist. If true, the additional updates can be fetched by making an additional request with cursor set to next_cursor. If has_more is true, it's important to pull all available pages, to make it less likely for underlying data changes to conflict with pagination.

request_idstring required

A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.