---
title: "Create a bank transaction"
method: POST
path: "/api/v1/iqbooks/organisations/{organisationId}/bank-transactions"
tags: ["IQ Books — Bank"]
---

# Create a bank transaction

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

## Request

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

Creates a draft bank transaction. `amount` is a positive decimal; the direction (`money_in`/`money_out`) carries the sign. No journal is posted until confirmed. Requires scope `iqbooks:write`.

## Path parameters

- `organisationId` integer, required

## Request body

- object
  - `bank_account_id` integer, required
  - `transaction_date` string, date, required: YYYY-MM-DD
  - `description` string, required
  - `direction` 'money_in' | 'money_out', required
  - `amount` number, required: Positive decimal major units (sign comes from direction).
  - `currency` string
  - `category_account_id` integer
  - `vat_amount` number
  - `vat_code` string
  - `reference` string

## Response `201`

Bank transaction created.

- 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).
- `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)
