---
title: "Categorise and/or confirm a bank transaction"
method: PATCH
path: "/api/v1/iqbooks/organisations/{organisationId}/bank-transactions/{id}"
tags: ["IQ Books — Bank"]
---

# Categorise and/or confirm a bank transaction

`PATCH /api/v1/iqbooks/organisations/{organisationId}/bank-transactions/{id}`

## Request

- Base URL: `https://api.reconcileiq.com`
- URL: `https://api.reconcileiq.com/api/v1/iqbooks/organisations/{organisationId}/bank-transactions/{id}`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Updates draft fields (category, VAT, description) and/or, with `confirm: true`, posts the double-entry journal via the native confirm path (period-lock and balance enforced there). At least one updatable field or `confirm: true` must be supplied. Requires scope `iqbooks:write`. Requires a vat_control-role account to exist in the organisation when the posting carries VAT; otherwise 422 unprocessable_entity ("VAT Control account is required ...").

## Path parameters

- `organisationId` integer, required
- `id` integer, required

## Request body

- object
  - `category_account_id` integer, nullable: null explicitly clears the category.
  - `vat_amount` number
  - `vat_code` string
  - `description` string
  - `confirm` boolean: true posts the journal.

## Response `200`

Updated / confirmed.

- object
  - `data` BankTransaction, required
    - `id` integer
    - `organisation_id` integer
    - `bank_account_id` integer
    - `bank_account_name` string, nullable
    - `journal_entry_id` integer, nullable: Set once confirmed.
    - `transaction_date` string, date
    - `description` string
    - `direction` 'money_in' | 'money_out'
    - `amount` number: Decimal major units, positive.
    - `currency` string
    - `category_account_id` integer, nullable
    - `category_account_code` string, nullable
    - `category_account_name` string, nullable
    - `category_account_type` string, nullable
    - `vat_amount` number, nullable
    - `vat_code` string, nullable
    - `status` string: Lifecycle status. A newly created manual transaction is 'draft'; once confirmed it is 'confirmed'. May also be 'ignored'. Branch on 'draft' (not 'pending') for un-confirmed rows.
    - `entry_route` string, nullable
    - `reference` string, nullable
    - `created_at` string, date-time
    - `confirmed_at` string, date-time, nullable

## Other responses

- `400`: The request body is not syntactically valid JSON. Returned in the standard envelope with an X-Request-Id, before authentication runs.
- `401`: Missing, invalid, or revoked API key.
- `403`: Authenticated but the key lacks the required scope.
- `404`: Resource not found, or not visible to the caller (no existence leak).
- `409`: Conflict with current resource state (e.g. duplicate code, already voided).
- `422`: CodeIQ / IQ Books strict-format contract violation.

---

[API](https://skmtc.dev/reconcileiq/apis/reconcileiq-public-api.md) · [All operations](https://skmtc.dev/reconcileiq/apis/reconcileiq-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/reconcileiq/apis/reconcileiq-public-api/revisions/5401beef8653?raw)
