---
title: "Get incremental transaction updates on a processor token"
method: POST
path: "/processor/transactions/sync"
tags: ["plaid"]
---

# Get incremental transaction updates on a processor token

`POST /processor/transactions/sync`

This endpoint replaces `/processor/transactions/get` and its associated webhooks for most common use-cases.

The `/processor/transactions/sync` endpoint allows developers to subscribe to all transactions associated with a processor token and get updates synchronously in a stream-like manner, using a cursor to track which updates have already been seen. `/processor/transactions/sync` provides the same functionality as `/processor/transactions/get` and can be used instead of `/processor/transactions/get` to simplify the process of tracking transactions updates.

This endpoint provides user-authorized transaction data for `credit`, `depository`, and some loan-type accounts (only those with account subtype `student`; coverage may be limited). For transaction history from `investments` accounts, use `/investments/transactions/get` instead.

Returned transactions data is grouped into three types of update, indicating whether the transaction was added, removed, or modified since the last call to the API.

In the first call to `/processor/transactions/sync` for a processor token, the endpoint will return all historical transactions data associated with that processor token up until the time of the API call (as "adds"), which then generates a `next_cursor` for that processor token. In subsequent calls, send the `next_cursor` to receive only the changes that have occurred since the previous call.

Due to the potentially large number of transactions associated with a processor token, results are paginated. The `has_more` field specifies if additional calls are necessary to fetch all available transaction updates. Call `/processor/transactions/sync` with the new cursor, pulling all updates, until `has_more` is `false`.

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 `/processor/transactions/sync` fails when retrieving a paginated update, which can occur as a result of the [`TRANSACTIONS_SYNC_MUTATION_DURING_PAGINATION`](https://plaid.com/docs/errors/transactions/#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.

Whenever new or updated transaction data becomes available, `/processor/transactions/sync` will provide these updates. Plaid typically checks for new data multiple times a day, but these checks may occur less frequently, such as once a day, depending on the institution. To force Plaid to check for new transactions, use the `/processor/transactions/refresh` endpoint.

Note that for newly created processor tokens, data may not be immediately available to `/processor/transactions/sync`. Plaid begins preparing transactions data when the corresponding Item is created, but the process can take anywhere from a few seconds to several minutes to complete, depending on the number of transactions available.

To receive Transactions webhooks for a processor token, set its webhook URL via the [`/processor/token/webhook/update`](https://plaid.com/docs/api/processor-partners/#processortokenwebhookupdate) endpoint.

## Request body

- ProcessorTransactionsSyncRequest — ProcessorTransactionsSyncRequest defines the request schema for `/processor/transactions/sync`
  - `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` string, required — 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.
  - `cursor` string — 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. Note: The upper-bound length of this cursor is 256 characters of base64.
  - `count` integer — The number of transaction updates to fetch.
  - `options` TransactionsSyncRequestOptions — An optional object to be used with the request. If specified, `options` must not be `null`.
    - `include_original_description` boolean, nullable — Include the raw unparsed transaction description from the financial institution.
    - `include_personal_finance_category` boolean — Personal finance categories are now returned by default.
    - `include_logo_and_counterparty_beta` boolean — Counterparties and extra merchant fields are now returned by default.
    - `days_requested` integer — This option only applies to calls for Items that were not initialized with Transactions during Link and are now adding the Transactions product to the Item for the first time. In these cases, this option controls the maximum number of days of transaction history that Plaid will request from the financial institution. For developer accounts created after December 3, 2023, if no value is specified, this will default to 90 days. For developer accounts created on December 3, 2023 or earlier, if no value is specified, this will default to 730 days until June 24, 2024, at which point it will default to 90 days. If Transactions has already been added to the Item prior to this call, this field will have no effect. We strongly recommend that customers utilizing [Recurring Transactions](https://plaid.com/docs/api/products/transactions/#transactionsrecurringget) request at least 180 days of history for optimal results.

## Response `200`

OK

- ProcessorTransactionsSyncResponse — ProcessorTransactionsSyncResponse defines the response schema for `/processor/transactions/sync`
  - `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. `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.
  - `account` AccountBase, required — A single account at a financial institution.
    - `account_id` string, required — Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new `account_id` will be assigned to the account. The `account_id` can also change if the `access_token` is deleted and the same credentials that were used to generate that `access_token` are used to generate a new `access_token` on a later date. In that case, the new `account_id` will be different from the old `account_id`. If an account with a specific `account_id` disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. Like all Plaid identifiers, the `account_id` is case sensitive.
    - `balances` AccountBalance, required — A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by `/accounts/balance/get`.
      - `available` number, double, nullable, required — The amount of funds available to be withdrawn from the account, as determined by the financial institution. For `credit`-type accounts, the `available` balance typically equals the `limit` less the `current` balance, less any pending outflows plus any pending inflows. For `depository`-type accounts, the `available` balance typically equals the `current` balance less any pending outflows plus any pending inflows. For `depository`-type accounts, the `available` balance does not include the overdraft limit. For `investment`-type accounts (or `brokerage`-type accounts for API versions 2018-05-22 and earlier), the `available` balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the `available` balance. In the event that `available` balance is unavailable, Plaid will return an `available` balance value of `null`. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by `/accounts/balance/get`. If `current` is `null` this field is guaranteed not to be `null`.
      - `current` number, double, nullable, required — The total amount of funds in or owed by the account. For `credit`-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For `loan`-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (`ins_116944`). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. For `investment`-type accounts (or `brokerage`-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by `/accounts/balance/get`; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the `available` balance as provided by `/accounts/balance/get`. When returned by `/accounts/balance/get`, this field may be `null`. When this happens, `available` is guaranteed not to be `null`.
      - `limit` number, double, nullable, required — For `credit`-type accounts, this represents the credit limit. For `depository`-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for `credit`-type accounts.
      - `iso_currency_code` string, nullable, required — The ISO-4217 currency code of the balance. Always null if `unofficial_currency_code` is non-null.
      - `unofficial_currency_code` string, nullable, required — The unofficial currency code associated with the balance. 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. See the [currency code schema](https://plaid.com/docs/api/accounts#currency-code-schema) for a full listing of supported `unofficial_currency_code`s.
      - `last_updated_datetime` string, date-time, nullable — Timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format (`YYYY-MM-DDTHH:mm:ssZ`) indicating the oldest acceptable balance when making a request to `/accounts/balance/get`. This field is only used and expected when the institution is `ins_128026` (Capital One) and the Item contains one or more accounts with a non-depository account type, in which case a value must be provided or an `INVALID_REQUEST` error with the code of `INVALID_FIELD` will be returned. For Capital One depository accounts as well as all other account types on all other institutions, this field is ignored. See [account type schema](https://en.wikipedia.org/wiki/ISO_8601) for a full list of account types. If the balance that is pulled is older than the given timestamp for Items with this field required, an `INVALID_REQUEST` error with the code of `LAST_UPDATED_DATETIME_OUT_OF_RANGE` will be returned with the most recent timestamp for the requested account contained in the response.
    - `mask` string, nullable, required — 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.
    - `name` string, required — The name of the account, either assigned by the user or by the financial institution itself
    - `official_name` string, nullable, required — The official name of the account as given by the financial institution
    - `type` 'investment' | 'credit' | 'depository' | 'loan' | 'brokerage' | 'other', required — `investment:` Investment account. In API versions 2018-05-22 and earlier, this type is called `brokerage` instead. `credit:` Credit card `depository:` Depository account `loan:` Loan account `other:` Non-specified account type See the [Account type schema](https://plaid.com/docs/api/accounts#account-type-schema) for a full listing of account types and corresponding subtypes.
    - `subtype` '401a' | '401k' | '403B' | '457b' | '529' | 'brokerage' | 'cash isa' | 'crypto exchange' | 'education savings account' | 'ebt' | 'fixed annuity' | 'gic' | 'health reimbursement arrangement' | 'hsa' | 'isa' | 'ira' | 'lif' | 'life insurance' | 'lira' | 'lrif' | 'lrsp' | 'non-custodial wallet' | 'non-taxable brokerage account' | 'other' | 'other insurance' | 'other annuity' | 'prif' | 'rdsp' | 'resp' | 'rlif' | 'rrif' | 'pension' | 'profit sharing plan' | 'retirement' | 'roth' | 'roth 401k' | 'rrsp' | 'sep ira' | 'simple ira' | 'sipp' | 'stock plan' | 'thrift savings plan' | 'tfsa' | 'trust' | 'ugma' | 'utma' | 'variable annuity' | 'credit card' | 'paypal' | 'cd' | 'checking' | 'savings' | 'money market' | 'prepaid' | 'auto' | 'business' | 'commercial' | 'construction' | 'consumer' | 'home equity' | 'loan' | 'mortgage' | 'overdraft' | 'line of credit' | 'student' | 'cash management' | 'keogh' | 'mutual fund' | 'recurring' | 'rewards' | 'safe deposit' | 'sarsep' | 'payroll' | 'null', nullable, required — See the [Account type schema](https://plaid.com/docs/api/accounts/#account-type-schema) for a full listing of account types and corresponding subtypes.
    - `verification_status` 'automatically_verified' | 'pending_automatic_verification' | 'pending_manual_verification' | 'manually_verified' | 'verification_expired' | 'verification_failed' | 'database_matched' | 'database_insights_pass' | 'database_insights_pass_with_caution' | 'database_insights_fail' — The current verification status of an Auth Item initiated through Automated or Manual micro-deposits. Returned for Auth Items only. `pending_automatic_verification`: The Item is pending automatic verification `pending_manual_verification`: The Item is pending manual micro-deposit verification. Items remain in this state until the user successfully verifies the micro-deposit. `automatically_verified`: The Item has successfully been automatically verified `manually_verified`: The Item has successfully been manually verified `verification_expired`: Plaid was unable to automatically verify the deposit within 7 calendar days and will no longer attempt to validate the Item. Users may retry by submitting their information again through Link. `verification_failed`: The Item failed manual micro-deposit verification because the user exhausted all 3 verification attempts. Users may retry by submitting their information again through Link. `database_matched`: The Item has successfully been verified using Plaid's data sources. `database_insights_pass`: The Item's ACH numbers have been verified using Plaid's data sources and have strong signal for being valid. Note: Database Insights is currently a beta feature, please contact your account manager for more information. `database_insights_pass_with_caution`: The Item's ACH numbers have been verified using Plaid's data sources and have some signal for being valid. Note: Database Insights is currently a beta feature, please contact your account manager for more information. `database_insights_fail`: The Item's ACH numbers have been verified using Plaid's data sources and have signal for being invalid and/or have no signal for being valid. Note: Database Insights is currently a beta feature, please contact your account manager for more information.
    - `verification_insights` AccountVerificationInsights — Insights from performing database verification for the account.
      - `network_status` AccountVerificationInsightsNetworkStatus, required — Status information about the account and routing number in the Plaid network.
        - `has_numbers_match` boolean, required — Indicates whether we found at least one matching account for the ACH account and routing number.
        - `is_numbers_match_verified` boolean, required — Indicates if at least one matching account for the ACH account and routing number is already verified.
      - `previous_returns` AccountVerificationInsightsPreviousReturns — Information about known ACH returns for the account and routing number.
        - `has_previous_administrative_return` boolean, required — Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number.
      - `account_number_format` 'valid' | 'invalid' | 'unknown', required — Indicator of account number format validity for institution. `valid`: indicates that the account number has a correct format for the institution. `invalid`: indicates that the account number has an incorrect format for the institution. `unknown`: indicates that there was not enough information to determine whether the format is correct for the institution.
    - `persistent_account_id` string — A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This is currently only supported for Chase Items. Because Chase accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify a Chase account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field may be populated for any account; in Production and Development, it will only be populated for Chase accounts.
    - `holder_category` 'business' | 'personal' | 'unrecognized', nullable — Provides context as to whether the account is explicitly designated for business purposes in contrast to personal accounts. This label is orthogonal to existing account type/subtype labels (both “Business Checking” and “Personal Checking” would be labeled with a “depository” type and “checking” subtype)
  - `added` Transaction[], required — Transactions that have been added to the Item since `cursor` ordered by ascending last modified time.
    - `account_id` string, required — The ID of the account in which this transaction occurred.
    - `amount` number, double, required — The settled value of the transaction, denominated in the transactions's currency, as stated in `iso_currency_code` or `unofficial_currency_code`. Positive values when money moves out of the account; negative values when money moves in. For example, debit card purchases are positive; credit card payments, direct deposits, and refunds are negative.
    - `iso_currency_code` string, nullable, required — The ISO-4217 currency code of the transaction. Always `null` if `unofficial_currency_code` is non-null.
    - `unofficial_currency_code` string, nullable, required — The unofficial currency code associated with the transaction. 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. See the [currency code schema](https://plaid.com/docs/api/accounts#currency-code-schema) for a full listing of supported `iso_currency_code`s.
    - `category` string[], nullable, required — A hierarchical array of the categories to which this transaction belongs. For a full list of categories, see [`/categories/get`](https://plaid.com/docs/api/products/transactions/#categoriesget). All Transactions implementations are recommended to use the new `personal_finance_category` instead of `category`, as it provides greater accuracy and more meaningful categorization. If the `transactions` object was returned by an Assets endpoint such as `/asset_report/get/` or `/asset_report/pdf/get`, this field will only appear in an Asset Report with Insights.
    - `category_id` string, nullable, required — The ID of the category to which this transaction belongs. For a full list of categories, see [`/categories/get`](https://plaid.com/docs/api/products/transactions/#categoriesget). All Transactions implementations are recommended to use the new `personal_finance_category` instead of `category`, as it provides greater accuracy and more meaningful categorization. If the `transactions` object was returned by an Assets endpoint such as `/asset_report/get/` or `/asset_report/pdf/get`, this field will only appear in an Asset Report with Insights.
    - `check_number` string, nullable — The check number of the transaction. This field is only populated for check transactions.
    - `date` string, date, required — For pending transactions, the date that the transaction occurred; for posted transactions, the date that the transaction posted. Both dates are returned in an [ISO 8601](https://wikipedia.org/wiki/ISO_8601) format ( `YYYY-MM-DD` ). To receive information about the date that a posted transaction was initiated, see the `authorized_date` field.
    - `location` Location, required — A representation of where a transaction took place
      - `address` string, nullable, required — The street address where the transaction occurred.
      - `city` string, nullable, required — The city where the transaction occurred.
      - `region` string, nullable, required — The region or state where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called `state`.
      - `postal_code` string, nullable, required — The postal code where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called `zip`.
      - `country` string, nullable, required — The ISO 3166-1 alpha-2 country code where the transaction occurred.
      - `lat` number, double, nullable, required — The latitude where the transaction occurred.
      - `lon` number, double, nullable, required — The longitude where the transaction occurred.
      - `store_number` string, nullable, required — The merchant defined store number where the transaction occurred.
    - `name` string, required — The merchant name or transaction description. Note: This is a legacy field that is not actively maintained. Use `merchant_name` instead for the merchant name. If the `transactions` object was returned by a Transactions endpoint such as `/transactions/sync` or `/transactions/get`, this field will always appear. If the `transactions` object was returned by an Assets endpoint such as `/asset_report/get/` or `/asset_report/pdf/get`, this field will only appear in an Asset Report with Insights.
    - `merchant_name` string, nullable — The merchant name, as enriched by Plaid from the `name` field. This is typically a more human-readable version of the merchant counterparty in the transaction. For some bank transactions (such as checks or account transfers) where there is no meaningful merchant name, this value will be `null`.
    - `original_description` string, nullable — The string returned by the financial institution to describe the transaction. For transactions returned by `/transactions/sync` or `/transactions/get`, this field will be omitted unless the client has set `options.include_original_description` to `true`.
    - `payment_meta` PaymentMeta, required — Transaction information specific to inter-bank transfers. If the transaction was not an inter-bank transfer, all fields will be `null`. If the `transactions` object was returned by a Transactions endpoint such as `/transactions/sync` or `/transactions/get`, the `payment_meta` key will always appear, but no data elements are guaranteed. If the `transactions` object was returned by an Assets endpoint such as `/asset_report/get/` or `/asset_report/pdf/get`, this field will only appear in an Asset Report with Insights.
      - `reference_number` string, nullable, required — The transaction reference number supplied by the financial institution.
      - `ppd_id` string, nullable, required — The ACH PPD ID for the payer.
      - `payee` string, nullable, required — For transfers, the party that is receiving the transaction.
      - `by_order_of` string, nullable, required — The party initiating a wire transfer. Will be `null` if the transaction is not a wire transfer.
      - `payer` string, nullable, required — For transfers, the party that is paying the transaction.
      - `payment_method` string, nullable, required — The type of transfer, e.g. 'ACH'
      - `payment_processor` string, nullable, required — The name of the payment processor
      - `reason` string, nullable, required — The payer-supplied description of the transfer.
    - `pending` boolean, required — When `true`, identifies the transaction as pending or unsettled. Pending transaction details (name, type, amount, category ID) may change before they are settled.
    - `pending_transaction_id` string, nullable, required — The ID of a posted transaction's associated pending transaction, where applicable.
    - `account_owner` string, nullable, required — The name of the account owner. This field is not typically populated and only relevant when dealing with sub-accounts.
    - `transaction_id` string, required — The unique ID of the transaction. Like all Plaid identifiers, the `transaction_id` is case sensitive.
    - `transaction_type` 'digital' | 'place' | 'special' | 'unresolved' — Please use the `payment_channel` field, `transaction_type` will be deprecated in the future. `digital:` transactions that took place online. `place:` transactions that were made at a physical location. `special:` transactions that relate to banks, e.g. fees or deposits. `unresolved:` transactions that do not fit into the other three types.
    - `logo_url` string, nullable — The URL of a logo associated with this transaction, if available. The logo will always be 100×100 pixel PNG file.
    - `website` string, nullable — The website associated with this transaction, if available.
    - `authorized_date` string, date, nullable, required — The date that the transaction was authorized. For posted transactions, the `date` field will indicate the posted date, but `authorized_date` will indicate the day the transaction was authorized by the financial institution. If presenting transactions to the user in a UI, the `authorized_date`, when available, is generally preferable to use over the `date` field for posted transactions, as it will generally represent the date the user actually made the transaction. Dates are returned in an [ISO 8601](https://wikipedia.org/wiki/ISO_8601) format ( `YYYY-MM-DD` ).
    - `authorized_datetime` string, date-time, nullable, required — Date and time when a transaction was authorized in [ISO 8601](https://wikipedia.org/wiki/ISO_8601) format ( `YYYY-MM-DDTHH:mm:ssZ` ). For posted transactions, the `datetime` field will indicate the posted date, but `authorized_datetime` will indicate the day the transaction was authorized by the financial institution. If presenting transactions to the user in a UI, the `authorized_datetime`, when available, is generally preferable to use over the `datetime` field for posted transactions, as it will generally represent the date the user actually made the transaction. This field is returned for select financial institutions and comes as provided by the institution. It may contain default time values (such as 00:00:00). This field is only populated in API version 2019-05-29 and later.
    - `datetime` string, date-time, nullable, required — Date and time when a transaction was posted in [ISO 8601](https://wikipedia.org/wiki/ISO_8601) format ( `YYYY-MM-DDTHH:mm:ssZ` ). For the date that the transaction was initiated, rather than posted, see the `authorized_datetime` field. This field is returned for select financial institutions and comes as provided by the institution. It may contain default time values (such as 00:00:00). This field is only populated in API version 2019-05-29 and later.
    - `payment_channel` 'online' | 'in store' | 'other', required — The channel used to make a payment. `online:` transactions that took place online. `in store:` transactions that were made at a physical location. `other:` transactions that relate to banks, e.g. fees or deposits. This field replaces the `transaction_type` field.
    - `personal_finance_category` PersonalFinanceCategory, nullable — 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`](https://plaid.com/documents/transactions-personal-finance-category-taxonomy.csv) 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`](https://plaid.com/docs/transactions/pfc-migration/).
      - `primary` string, required — A high level category that communicates the broad category of the transaction.
      - `detailed` string, required — A granular category conveying the transaction's intent. This field can also be used as a unique identifier for the category.
      - `confidence_level` string, nullable — 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.
    - `transaction_code` 'adjustment' | 'atm' | 'bank charge' | 'bill payment' | 'cash' | 'cashback' | 'cheque' | 'direct debit' | 'interest' | 'purchase' | 'standing order' | 'transfer' | 'null', nullable, required — An identifier classifying the transaction type. This field is only populated for European institutions. For institutions in the US and Canada, this field is set to `null`. `adjustment:` Bank adjustment `atm:` Cash deposit or withdrawal via an automated teller machine `bank charge:` Charge or fee levied by the institution `bill payment`: Payment of a bill `cash:` Cash deposit or withdrawal `cashback:` Cash withdrawal while making a debit card purchase `cheque:` Document ordering the payment of money to another person or organization `direct debit:` Automatic withdrawal of funds initiated by a third party at a regular interval `interest:` Interest earned or incurred `purchase:` Purchase made with a debit or credit card `standing order:` Payment instructed by the account holder to a third party at a regular interval `transfer:` Transfer of money between accounts
    - `personal_finance_category_icon_url` string — The URL of an icon associated with the primary personal finance category. The icon will always be 100×100 pixel PNG file.
    - `counterparties` TransactionCounterparty[] — The counterparties present in the transaction. Counterparties, such as the merchant or the financial institution, are extracted by Plaid from the raw description.
      - `name` string, required — The name of the counterparty, such as the merchant or the financial institution, as extracted by Plaid from the raw description.
      - `entity_id` string, nullable — A unique, stable, Plaid-generated ID that maps to the counterparty.
      - `type` 'merchant' | 'financial_institution' | 'payment_app' | 'marketplace' | 'payment_terminal' | 'income_source', required — The counterparty type. `merchant`: a provider of goods or services for purchase `financial_institution`: a financial entity (bank, credit union, BNPL, fintech) `payment_app`: a transfer or P2P app (e.g. Zelle) `marketplace`: a marketplace (e.g DoorDash, Google Play Store) `payment_terminal`: a point-of-sale payment terminal (e.g Square, Toast) `income_source`: the payer in an income transaction (e.g., an employer, client, or government agency)
      - `website` string, nullable, required — The website associated with the counterparty.
      - `logo_url` string, nullable, required — The URL of a logo associated with the counterparty, if available. The logo will always be 100×100 pixel PNG file.
      - `confidence_level` string, nullable — A description of how confident we are that the provided counterparty is involved in the transaction. `VERY_HIGH`: We recognize this counterparty and we are more than 98% confident that it is involved in this transaction. `HIGH`: We recognize this counterparty and we are more than 90% confident that it is involved in this transaction. `MEDIUM`: We are moderately confident that this counterparty was involved in this transaction, but some details may differ from our records. `LOW`: We didn’t find a matching counterparty in our records, so we are returning a cleansed name parsed out of the request description. `UNKNOWN`: We don’t know the confidence level for this counterparty.
    - `merchant_entity_id` string, nullable — A unique, stable, Plaid-generated ID that maps to the merchant. In the case of a merchant with multiple retail locations, this field will map to the broader merchant, not a specific location or store.
  - `modified` Transaction[], required — Transactions that have been modified on the Item since `cursor` ordered by ascending last modified time.
    - `account_id` string, required — The ID of the account in which this transaction occurred.
    - `amount` number, double, required — The settled value of the transaction, denominated in the transactions's currency, as stated in `iso_currency_code` or `unofficial_currency_code`. Positive values when money moves out of the account; negative values when money moves in. For example, debit card purchases are positive; credit card payments, direct deposits, and refunds are negative.
    - `iso_currency_code` string, nullable, required — The ISO-4217 currency code of the transaction. Always `null` if `unofficial_currency_code` is non-null.
    - `unofficial_currency_code` string, nullable, required — The unofficial currency code associated with the transaction. 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. See the [currency code schema](https://plaid.com/docs/api/accounts#currency-code-schema) for a full listing of supported `iso_currency_code`s.
    - `category` string[], nullable, required — A hierarchical array of the categories to which this transaction belongs. For a full list of categories, see [`/categories/get`](https://plaid.com/docs/api/products/transactions/#categoriesget). All Transactions implementations are recommended to use the new `personal_finance_category` instead of `category`, as it provides greater accuracy and more meaningful categorization. If the `transactions` object was returned by an Assets endpoint such as `/asset_report/get/` or `/asset_report/pdf/get`, this field will only appear in an Asset Report with Insights.
    - `category_id` string, nullable, required — The ID of the category to which this transaction belongs. For a full list of categories, see [`/categories/get`](https://plaid.com/docs/api/products/transactions/#categoriesget). All Transactions implementations are recommended to use the new `personal_finance_category` instead of `category`, as it provides greater accuracy and more meaningful categorization. If the `transactions` object was returned by an Assets endpoint such as `/asset_report/get/` or `/asset_report/pdf/get`, this field will only appear in an Asset Report with Insights.
    - `check_number` string, nullable — The check number of the transaction. This field is only populated for check transactions.
    - `date` string, date, required — For pending transactions, the date that the transaction occurred; for posted transactions, the date that the transaction posted. Both dates are returned in an [ISO 8601](https://wikipedia.org/wiki/ISO_8601) format ( `YYYY-MM-DD` ). To receive information about the date that a posted transaction was initiated, see the `authorized_date` field.
    - `location` Location, required — A representation of where a transaction took place
      - `address` string, nullable, required — The street address where the transaction occurred.
      - `city` string, nullable, required — The city where the transaction occurred.
      - `region` string, nullable, required — The region or state where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called `state`.
      - `postal_code` string, nullable, required — The postal code where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called `zip`.
      - `country` string, nullable, required — The ISO 3166-1 alpha-2 country code where the transaction occurred.
      - `lat` number, double, nullable, required — The latitude where the transaction occurred.
      - `lon` number, double, nullable, required — The longitude where the transaction occurred.
      - `store_number` string, nullable, required — The merchant defined store number where the transaction occurred.
    - `name` string, required — The merchant name or transaction description. Note: This is a legacy field that is not actively maintained. Use `merchant_name` instead for the merchant name. If the `transactions` object was returned by a Transactions endpoint such as `/transactions/sync` or `/transactions/get`, this field will always appear. If the `transactions` object was returned by an Assets endpoint such as `/asset_report/get/` or `/asset_report/pdf/get`, this field will only appear in an Asset Report with Insights.
    - `merchant_name` string, nullable — The merchant name, as enriched by Plaid from the `name` field. This is typically a more human-readable version of the merchant counterparty in the transaction. For some bank transactions (such as checks or account transfers) where there is no meaningful merchant name, this value will be `null`.
    - `original_description` string, nullable — The string returned by the financial institution to describe the transaction. For transactions returned by `/transactions/sync` or `/transactions/get`, this field will be omitted unless the client has set `options.include_original_description` to `true`.
    - `payment_meta` PaymentMeta, required — Transaction information specific to inter-bank transfers. If the transaction was not an inter-bank transfer, all fields will be `null`. If the `transactions` object was returned by a Transactions endpoint such as `/transactions/sync` or `/transactions/get`, the `payment_meta` key will always appear, but no data elements are guaranteed. If the `transactions` object was returned by an Assets endpoint such as `/asset_report/get/` or `/asset_report/pdf/get`, this field will only appear in an Asset Report with Insights.
      - `reference_number` string, nullable, required — The transaction reference number supplied by the financial institution.
      - `ppd_id` string, nullable, required — The ACH PPD ID for the payer.
      - `payee` string, nullable, required — For transfers, the party that is receiving the transaction.
      - `by_order_of` string, nullable, required — The party initiating a wire transfer. Will be `null` if the transaction is not a wire transfer.
      - `payer` string, nullable, required — For transfers, the party that is paying the transaction.
      - `payment_method` string, nullable, required — The type of transfer, e.g. 'ACH'
      - `payment_processor` string, nullable, required — The name of the payment processor
      - `reason` string, nullable, required — The payer-supplied description of the transfer.
    - `pending` boolean, required — When `true`, identifies the transaction as pending or unsettled. Pending transaction details (name, type, amount, category ID) may change before they are settled.
    - `pending_transaction_id` string, nullable, required — The ID of a posted transaction's associated pending transaction, where applicable.
    - `account_owner` string, nullable, required — The name of the account owner. This field is not typically populated and only relevant when dealing with sub-accounts.
    - `transaction_id` string, required — The unique ID of the transaction. Like all Plaid identifiers, the `transaction_id` is case sensitive.
    - `transaction_type` 'digital' | 'place' | 'special' | 'unresolved' — Please use the `payment_channel` field, `transaction_type` will be deprecated in the future. `digital:` transactions that took place online. `place:` transactions that were made at a physical location. `special:` transactions that relate to banks, e.g. fees or deposits. `unresolved:` transactions that do not fit into the other three types.
    - `logo_url` string, nullable — The URL of a logo associated with this transaction, if available. The logo will always be 100×100 pixel PNG file.
    - `website` string, nullable — The website associated with this transaction, if available.
    - `authorized_date` string, date, nullable, required — The date that the transaction was authorized. For posted transactions, the `date` field will indicate the posted date, but `authorized_date` will indicate the day the transaction was authorized by the financial institution. If presenting transactions to the user in a UI, the `authorized_date`, when available, is generally preferable to use over the `date` field for posted transactions, as it will generally represent the date the user actually made the transaction. Dates are returned in an [ISO 8601](https://wikipedia.org/wiki/ISO_8601) format ( `YYYY-MM-DD` ).
    - `authorized_datetime` string, date-time, nullable, required — Date and time when a transaction was authorized in [ISO 8601](https://wikipedia.org/wiki/ISO_8601) format ( `YYYY-MM-DDTHH:mm:ssZ` ). For posted transactions, the `datetime` field will indicate the posted date, but `authorized_datetime` will indicate the day the transaction was authorized by the financial institution. If presenting transactions to the user in a UI, the `authorized_datetime`, when available, is generally preferable to use over the `datetime` field for posted transactions, as it will generally represent the date the user actually made the transaction. This field is returned for select financial institutions and comes as provided by the institution. It may contain default time values (such as 00:00:00). This field is only populated in API version 2019-05-29 and later.
    - `datetime` string, date-time, nullable, required — Date and time when a transaction was posted in [ISO 8601](https://wikipedia.org/wiki/ISO_8601) format ( `YYYY-MM-DDTHH:mm:ssZ` ). For the date that the transaction was initiated, rather than posted, see the `authorized_datetime` field. This field is returned for select financial institutions and comes as provided by the institution. It may contain default time values (such as 00:00:00). This field is only populated in API version 2019-05-29 and later.
    - `payment_channel` 'online' | 'in store' | 'other', required — The channel used to make a payment. `online:` transactions that took place online. `in store:` transactions that were made at a physical location. `other:` transactions that relate to banks, e.g. fees or deposits. This field replaces the `transaction_type` field.
    - `personal_finance_category` PersonalFinanceCategory, nullable — 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`](https://plaid.com/documents/transactions-personal-finance-category-taxonomy.csv) 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`](https://plaid.com/docs/transactions/pfc-migration/).
      - `primary` string, required — A high level category that communicates the broad category of the transaction.
      - `detailed` string, required — A granular category conveying the transaction's intent. This field can also be used as a unique identifier for the category.
      - `confidence_level` string, nullable — 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.
    - `transaction_code` 'adjustment' | 'atm' | 'bank charge' | 'bill payment' | 'cash' | 'cashback' | 'cheque' | 'direct debit' | 'interest' | 'purchase' | 'standing order' | 'transfer' | 'null', nullable, required — An identifier classifying the transaction type. This field is only populated for European institutions. For institutions in the US and Canada, this field is set to `null`. `adjustment:` Bank adjustment `atm:` Cash deposit or withdrawal via an automated teller machine `bank charge:` Charge or fee levied by the institution `bill payment`: Payment of a bill `cash:` Cash deposit or withdrawal `cashback:` Cash withdrawal while making a debit card purchase `cheque:` Document ordering the payment of money to another person or organization `direct debit:` Automatic withdrawal of funds initiated by a third party at a regular interval `interest:` Interest earned or incurred `purchase:` Purchase made with a debit or credit card `standing order:` Payment instructed by the account holder to a third party at a regular interval `transfer:` Transfer of money between accounts
    - `personal_finance_category_icon_url` string — The URL of an icon associated with the primary personal finance category. The icon will always be 100×100 pixel PNG file.
    - `counterparties` TransactionCounterparty[] — The counterparties present in the transaction. Counterparties, such as the merchant or the financial institution, are extracted by Plaid from the raw description.
      - `name` string, required — The name of the counterparty, such as the merchant or the financial institution, as extracted by Plaid from the raw description.
      - `entity_id` string, nullable — A unique, stable, Plaid-generated ID that maps to the counterparty.
      - `type` 'merchant' | 'financial_institution' | 'payment_app' | 'marketplace' | 'payment_terminal' | 'income_source', required — The counterparty type. `merchant`: a provider of goods or services for purchase `financial_institution`: a financial entity (bank, credit union, BNPL, fintech) `payment_app`: a transfer or P2P app (e.g. Zelle) `marketplace`: a marketplace (e.g DoorDash, Google Play Store) `payment_terminal`: a point-of-sale payment terminal (e.g Square, Toast) `income_source`: the payer in an income transaction (e.g., an employer, client, or government agency)
      - `website` string, nullable, required — The website associated with the counterparty.
      - `logo_url` string, nullable, required — The URL of a logo associated with the counterparty, if available. The logo will always be 100×100 pixel PNG file.
      - `confidence_level` string, nullable — A description of how confident we are that the provided counterparty is involved in the transaction. `VERY_HIGH`: We recognize this counterparty and we are more than 98% confident that it is involved in this transaction. `HIGH`: We recognize this counterparty and we are more than 90% confident that it is involved in this transaction. `MEDIUM`: We are moderately confident that this counterparty was involved in this transaction, but some details may differ from our records. `LOW`: We didn’t find a matching counterparty in our records, so we are returning a cleansed name parsed out of the request description. `UNKNOWN`: We don’t know the confidence level for this counterparty.
    - `merchant_entity_id` string, nullable — A unique, stable, Plaid-generated ID that maps to the merchant. In the case of a merchant with multiple retail locations, this field will map to the broader merchant, not a specific location or store.
  - `removed` RemovedTransaction[], required — Transactions that have been removed from the Item since `cursor` ordered by ascending last modified time.
    - `transaction_id` string, required — The ID of the removed transaction.
    - `account_id` string, required — The ID of the account of the removed transaction.
  - `next_cursor` string, 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.
  - `has_more` boolean, 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_id` string, required — A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.

## Other responses

- `default` — Error response

## Changes

- **2024-06-18** `be701ec93161` — 1 info
  - added the optional property `account/holder_category` to the response with the `200` status
- **2024-05-03** `1550c043ed31` — 2 info
  - the response property `removed/items/account_id` became required for the status `200`
  - the response property `removed/items/transaction_id` became required for the status `200`
- **2024-04-17** `943c632a075c` — 2 info
  - added the required property `account` to the response with the `200` status
  - added the required property `transactions_update_status` to the response with the `200` status
- **2024-03-21** `5594c3a3f55a` — 1 info
  - added the optional property `removed/items/account_id` to the response with the `200` status
- **2024-02-21** `5de70cc1e6ca` — 4 breaking, 13 warning, 17 info
  - the response property `removed/items/transaction_id` became optional for the status `200`
  - removed the required property `account` from the response with the `200` status
  - removed the required property `removed/items/account_id` from the response with the `200` status
  - removed the required property `transactions_update_status` from the response with the `200` status
  - …30 more

[Change history](https://skmtc.dev/plaid/apis/the-plaid-api/changes/processor/transactions/sync/post.md)

---

[API](https://skmtc.dev/plaid/apis/the-plaid-api.md) · [All operations](https://skmtc.dev/plaid/apis/the-plaid-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/plaid/the-plaid-api/revisions/be701ec93161/schema)
