---
title: "Update multiple transactions"
method: PATCH
path: "/plans/{plan_id}/transactions"
tags: ["Transactions"]
---

# Update multiple transactions

`PATCH /plans/{plan_id}/transactions`

Updates multiple transactions, by `id` or `import_id`.

## Path parameters

- `plan_id` string, required

## Request body

- PatchTransactionsWrapper
  - `transactions` SaveTransactionWithIdOrImportId[], required
    - `id` string, nullable — If specified, this id will be used to lookup a transaction by its `id` for the purpose of updating the transaction itself. If not specified, an `import_id` should be supplied.
    - `import_id` string, nullable — If specified, this id will be used to lookup a transaction by its `import_id` for the purpose of updating the transaction itself. If not specified, an `id` should be supplied. You may not provide both an `id` and an `import_id` and updating an `import_id` on an existing transaction is not allowed.
    - `account_id` string, uuid
    - `date` string, date — The transaction date in ISO format (e.g. 2016-12-01). Future dates (scheduled transactions) are not permitted. Split transaction dates cannot be changed and if a different date is supplied it will be ignored.
    - `amount` integer — The transaction amount in milliunits format. Split transaction amounts cannot be changed and if a different amount is supplied it will be ignored.
    - `payee_id` string, uuid, nullable — The payee for the transaction. To create a transfer between two accounts, use the account transfer payee pointing to the target account. Account transfer payees are specified as `transfer_payee_id` on the account resource.
    - `payee_name` string, nullable — The payee name. If a `payee_name` value is provided and `payee_id` has a null value, the `payee_name` value will be used to resolve the payee by either (1) a matching payee rename rule (only if `import_id` is also specified) or (2) a payee with the same name or (3) creation of a new payee.
    - `category_id` string, uuid, nullable — The category for the transaction. To configure a split transaction, you can specify null for `category_id` and provide a `subtransactions` array as part of the transaction object. If an existing transaction is a split, the `category_id` cannot be changed. Credit Card Payment categories are not permitted and will be ignored if supplied.
    - `memo` string, nullable
    - `cleared` 'cleared' | 'uncleared' | 'reconciled' — The cleared status of the transaction
    - `approved` boolean — Whether or not the transaction is approved. If not supplied, transaction will be unapproved by default.
    - `flag_color` 'red' | 'orange' | 'yellow' | 'green' | 'blue' | 'purple' | '' | 'null', nullable — The transaction flag
    - `subtransactions` SaveSubTransaction[] — An array of subtransactions to configure a transaction as a split. Updating `subtransactions` on an existing split transaction is not supported and will return an error. Splits are not allowed on tracking accounts or on transfers between on-budget accounts; a transfer to a tracking account can be a split.
      - `amount` integer, required — The subtransaction amount in milliunits format.
      - `payee_id` string, uuid, nullable — The payee for the subtransaction.
      - `payee_name` string, nullable — The payee name. If a `payee_name` value is provided and `payee_id` has a null value, the `payee_name` value will be used to resolve the payee by either (1) a matching payee rename rule (only if import_id is also specified on parent transaction) or (2) a payee with the same name or (3) creation of a new payee.
      - `category_id` string, uuid, nullable — The category for the subtransaction. Credit Card Payment categories are not permitted and will be ignored if supplied.
      - `memo` string, nullable

## Response `200`

The transactions were successfully updated

- SaveTransactionsResponse
  - `data` object, required
    - `transaction_ids` string[], required — The transaction ids that were saved
    - `transaction` TransactionDetail
      - `id` string, required
      - `date` string, date, required — The transaction date in ISO format (e.g. 2016-12-01)
      - `amount` integer, required — The transaction amount in milliunits format
      - `memo` string, nullable
      - `cleared` 'cleared' | 'uncleared' | 'reconciled', required — The cleared status of the transaction
      - `approved` boolean, required — Whether or not the transaction is approved
      - `flag_color` 'red' | 'orange' | 'yellow' | 'green' | 'blue' | 'purple' | '' | 'null', nullable — The transaction flag
      - `flag_name` string, nullable — The customized name of a transaction flag
      - `account_id` string, uuid, required
      - `payee_id` string, uuid, nullable
      - `category_id` string, uuid, nullable
      - `transfer_account_id` string, uuid, nullable — If a transfer transaction, the account to which it transfers
      - `transfer_transaction_id` string, nullable — If a transfer transaction, the id of transaction on the other side of the transfer
      - `matched_transaction_id` string, nullable — If transaction is matched, the id of the matched transaction
      - `import_id` string, nullable — If the transaction was imported, this field is a unique (by account) import identifier. If this transaction was imported through File Based Import or Direct Import and not through the API, the import_id will have the format: 'YNAB:[milliunit_amount]:[iso_date]:[occurrence]'. For example, a transaction dated 2015-12-30 in the amount of -$294.23 USD would have an import_id of 'YNAB:-294230:2015-12-30:1'. If a second transaction on the same account was imported and had the same date and same amount, its import_id would be 'YNAB:-294230:2015-12-30:2'.
      - `import_payee_name` string, nullable — If the transaction was imported, the payee name that was used when importing and before applying any payee rename rules
      - `import_payee_name_original` string, nullable — If the transaction was imported, the original payee name as it appeared on the statement
      - `debt_transaction_type` 'payment' | 'refund' | 'fee' | 'interest' | 'escrow' | 'balanceAdjustment' | 'credit' | 'charge' | 'null', nullable — If the transaction is a debt/loan account transaction, the type of transaction
      - `deleted` boolean, required — Whether or not the transaction has been deleted. Deleted transactions will only be included in delta requests.
      - `amount_formatted` string — The transaction amount formatted in the plan's currency format
      - `amount_currency` number, double — The transaction amount as a decimal currency amount
      - `account_name` string, required
      - `payee_name` string, nullable
      - `category_name` string, nullable — The name of the category. If a split transaction, this will be 'Split'.
      - `subtransactions` SubTransaction[], required — If a split transaction, the subtransactions.
        - `id` string, required
        - `transaction_id` string, required
        - `amount` integer, required — The subtransaction amount in milliunits format
        - `memo` string, nullable
        - `payee_id` string, uuid, nullable
        - `payee_name` string, nullable
        - `category_id` string, uuid, nullable
        - `category_name` string, nullable
        - `transfer_account_id` string, uuid, nullable — If a transfer, the account_id which the subtransaction transfers to
        - `transfer_transaction_id` string, nullable — If a transfer, the id of transaction on the other side of the transfer
        - `deleted` boolean, required — Whether or not the subtransaction has been deleted. Deleted subtransactions will only be included in delta requests.
        - `amount_formatted` string — The subtransaction amount formatted in the plan's currency format
        - `amount_currency` number, double — The subtransaction amount as a decimal currency amount
    - `transactions` TransactionDetail[] — If multiple transactions were specified, the transactions that were saved
      - `id` string, required
      - `date` string, date, required — The transaction date in ISO format (e.g. 2016-12-01)
      - `amount` integer, required — The transaction amount in milliunits format
      - `memo` string, nullable
      - `cleared` 'cleared' | 'uncleared' | 'reconciled', required — The cleared status of the transaction
      - `approved` boolean, required — Whether or not the transaction is approved
      - `flag_color` 'red' | 'orange' | 'yellow' | 'green' | 'blue' | 'purple' | '' | 'null', nullable — The transaction flag
      - `flag_name` string, nullable — The customized name of a transaction flag
      - `account_id` string, uuid, required
      - `payee_id` string, uuid, nullable
      - `category_id` string, uuid, nullable
      - `transfer_account_id` string, uuid, nullable — If a transfer transaction, the account to which it transfers
      - `transfer_transaction_id` string, nullable — If a transfer transaction, the id of transaction on the other side of the transfer
      - `matched_transaction_id` string, nullable — If transaction is matched, the id of the matched transaction
      - `import_id` string, nullable — If the transaction was imported, this field is a unique (by account) import identifier. If this transaction was imported through File Based Import or Direct Import and not through the API, the import_id will have the format: 'YNAB:[milliunit_amount]:[iso_date]:[occurrence]'. For example, a transaction dated 2015-12-30 in the amount of -$294.23 USD would have an import_id of 'YNAB:-294230:2015-12-30:1'. If a second transaction on the same account was imported and had the same date and same amount, its import_id would be 'YNAB:-294230:2015-12-30:2'.
      - `import_payee_name` string, nullable — If the transaction was imported, the payee name that was used when importing and before applying any payee rename rules
      - `import_payee_name_original` string, nullable — If the transaction was imported, the original payee name as it appeared on the statement
      - `debt_transaction_type` 'payment' | 'refund' | 'fee' | 'interest' | 'escrow' | 'balanceAdjustment' | 'credit' | 'charge' | 'null', nullable — If the transaction is a debt/loan account transaction, the type of transaction
      - `deleted` boolean, required — Whether or not the transaction has been deleted. Deleted transactions will only be included in delta requests.
      - `amount_formatted` string — The transaction amount formatted in the plan's currency format
      - `amount_currency` number, double — The transaction amount as a decimal currency amount
      - `account_name` string, required
      - `payee_name` string, nullable
      - `category_name` string, nullable — The name of the category. If a split transaction, this will be 'Split'.
      - `subtransactions` SubTransaction[], required — If a split transaction, the subtransactions.
        - `id` string, required
        - `transaction_id` string, required
        - `amount` integer, required — The subtransaction amount in milliunits format
        - `memo` string, nullable
        - `payee_id` string, uuid, nullable
        - `payee_name` string, nullable
        - `category_id` string, uuid, nullable
        - `category_name` string, nullable
        - `transfer_account_id` string, uuid, nullable — If a transfer, the account_id which the subtransaction transfers to
        - `transfer_transaction_id` string, nullable — If a transfer, the id of transaction on the other side of the transfer
        - `deleted` boolean, required — Whether or not the subtransaction has been deleted. Deleted subtransactions will only be included in delta requests.
        - `amount_formatted` string — The subtransaction amount formatted in the plan's currency format
        - `amount_currency` number, double — The subtransaction amount as a decimal currency amount
    - `duplicate_import_ids` string[] — If multiple transactions were specified, a list of import_ids that were not created because of an existing `import_id` found on the same account
    - `server_knowledge` integer, required — The knowledge of the server

## Other responses

- `400` — The request could not be understood due to malformed syntax or validation error(s).

## Changes

- **2026-07-21** `55edc8061420` — 1 breaking, 1 info
  - removed the success response with the status `209`
  - added the success response with the status `200`

[Change history](https://skmtc.dev/ynab/apis/ynab-api-endpoints/changes/plans/:plan_id/transactions/patch.md)

---

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