---
title: "Create bank transactions"
method: POST
path: "/companies/{companyId}/connections/{connectionId}/push/bankAccounts/{accountId}/bankTransactions"
tags: ["Transactions"]
---

# Create bank transactions

`POST /companies/{companyId}/connections/{connectionId}/push/bankAccounts/{accountId}/bankTransactions`

## Request

- Base URL: `https://api.codat.io`
- URL: `https://api.codat.io/companies/{companyId}/connections/{connectionId}/push/bankAccounts/{accountId}/bankTransactions`
- Auth: API key in header `Authorization`

The *Create bank transactions* endpoint creates new [bank transactions](https://docs.codat.io/bank-feeds-api#/schemas/BankTransactions) for a given company's connection.

[Bank transactions](https://docs.codat.io/bank-feeds-api#/schemas/BankTransactions) are records of monetary amounts that have moved in and out of an SMB's bank account.

**Integration-specific behavior**

The required properties may vary based on the integration. For detailed requirements specific to each accounting software, refer to the API reference examples.
Alternatively, you can view the [Get create bank transaction model](https://docs.codat.io/bank-feeds-api#/operations/get-create-bank-transactions-model) for more information.

## Path parameters

- `companyId` string, uuid, required: Unique identifier for your SMB in Codat.
- `connectionId` string, uuid, required: Unique identifier for a company's data connection.
- `accountId` string, required

## Query parameters

- `timeoutInMinutes` integer
- `allowSyncOnPushComplete` boolean

## Request body

- CreateBankTransactions
  - `accountId` string, required: Unique identifier for a bank account.
  - `transactions` object[], required
    - `id` string: Identifier for the bank account transaction, unique for the company in the accounting software.
    - `date` string: In Codat's data model, dates and times are represented using the <a class="external" href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8601 standard</a>. Date and time fields are formatted as strings; for example: ``` 2023-08-22T10:21:00 2023-08-22 ``` When pushing bank transaction data to Codat, the date is treated as a local date. This means: - The date/time is used exactly as provided, without any timezone conversion. - If a timezone offset is included (e.g., `2023-08-22T10:21:00-05:00`), the offset will be ignored and only the local date/time portion will be used. - We recommend providing dates without a timezone suffix for clarity (e.g., `2023-08-22T10:21:00` rather than `2023-08-22T10:21:00Z`).
    - `description` string, nullable: Description of the bank transaction.
    - `counterparty` string, nullable: The giving or receiving party such as a person or organization.
    - `reference` string, nullable: An optional reference to the bank transaction.
    - `reconciled` boolean, nullable: `True` if the bank transaction has been [reconciled](https://www.xero.com/uk/guides/what-is-bank-reconciliation/) in the accounting software.
    - `amount` number: The amount transacted in the bank transaction.
    - `balance` number: The remaining balance in the account with ID `accountId`. This field is optional for QuickBooks Online but is required for Xero, Sage, NetSuite, Exact, and FreeAgent.
    - `transactionType` 'Unknown' | 'Credit' | 'Debit' | 'Int' | 'Div' | 'Fee' | 'SerChg' | 'Dep' | 'Atm' | 'Pos' | 'Xfer' | 'Check' | 'Payment' | 'Cash' | 'DirectDep' | 'DirectDebit' | 'RepeatPmt' | 'Other', nullable: Type of transaction for the bank statement line.

## Response `200`

Success

- CreateBankTransactionsResponse
  - `data` CreateBankTransactions
    - `accountId` string, required: Unique identifier for a bank account.
    - `transactions` object[], required
      - `id` string: Identifier for the bank account transaction, unique for the company in the accounting software.
      - `date` string: In Codat's data model, dates and times are represented using the <a class="external" href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8601 standard</a>. Date and time fields are formatted as strings; for example: ``` 2023-08-22T10:21:00 2023-08-22 ``` When pushing bank transaction data to Codat, the date is treated as a local date. This means: - The date/time is used exactly as provided, without any timezone conversion. - If a timezone offset is included (e.g., `2023-08-22T10:21:00-05:00`), the offset will be ignored and only the local date/time portion will be used. - We recommend providing dates without a timezone suffix for clarity (e.g., `2023-08-22T10:21:00` rather than `2023-08-22T10:21:00Z`).
      - `description` string, nullable: Description of the bank transaction.
      - `counterparty` string, nullable: The giving or receiving party such as a person or organization.
      - `reference` string, nullable: An optional reference to the bank transaction.
      - `reconciled` boolean, nullable: `True` if the bank transaction has been [reconciled](https://www.xero.com/uk/guides/what-is-bank-reconciliation/) in the accounting software.
      - `amount` number: The amount transacted in the bank transaction.
      - `balance` number: The remaining balance in the account with ID `accountId`. This field is optional for QuickBooks Online but is required for Xero, Sage, NetSuite, Exact, and FreeAgent.
      - `transactionType` 'Unknown' | 'Credit' | 'Debit' | 'Int' | 'Div' | 'Fee' | 'SerChg' | 'Dep' | 'Atm' | 'Pos' | 'Xfer' | 'Check' | 'Payment' | 'Cash' | 'DirectDep' | 'DirectDebit' | 'RepeatPmt' | 'Other', nullable: Type of transaction for the bank statement line.
  - `changes` PushOperationChange[], nullable: Contains a single entry that communicates which record has changed and the manner in which it changed. (unresolved $ref)
  - `dataType` 'accountTransactions' | 'balanceSheet' | 'bankAccounts' | 'bankTransactions' | 'billCreditNotes' | 'billPayments' | 'bills' | 'cashFlowStatement' | 'chartOfAccounts' | 'company' | 'creditNotes' | 'customers' | 'directCosts' | 'directIncomes' | 'invoices' | 'itemReceipts' | 'items' | 'journalEntries' | 'journals' | 'paymentMethods' | 'payments' | 'profitAndLoss' | 'purchaseOrders' | 'salesOrders' | 'suppliers' | 'taxRates' | 'trackingCategories' | 'transfers' | 'banking-accountBalances' | 'banking-accounts' | 'banking-transactionCategories' | 'banking-transactions' | 'commerce-companyInfo' | 'commerce-customers' | 'commerce-disputes' | 'commerce-locations' | 'commerce-orders' | 'commerce-paymentMethods' | 'commerce-payments' | 'commerce-productCategories' | 'commerce-products' | 'commerce-taxComponents' | 'commerce-transactions': Available data types
  - `companyId` Schema, required (unresolved $ref)
  - `pushOperationKey` string, uuid, required: A unique identifier generated by Codat to represent this single push operation. This identifier can be used to track the status of the push, and should be persisted.
  - `dataConnectionKey` Schema, required (unresolved $ref)
  - `requestedOnUtc` string, required: In Codat's data model, dates and times are represented using the <a class="external" href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8601 standard</a>. Date and time fields are formatted as strings; for example: ``` 2020-10-08T22:40:50Z 2021-01-01T00:00:00 ``` When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information: - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z` - Unqualified local time: `2021-11-15T01:00:00` - UTC time offsets: `2021-11-15T01:00:00-05:00` > Time zones > > Not all dates from Codat will contain information about time zones. > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced.
  - `completedOnUtc` string: In Codat's data model, dates and times are represented using the <a class="external" href="https://en.wikipedia.org/wiki/ISO_8601" target="_blank">ISO 8601 standard</a>. Date and time fields are formatted as strings; for example: ``` 2020-10-08T22:40:50Z 2021-01-01T00:00:00 ``` When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information: - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z` - Unqualified local time: `2021-11-15T01:00:00` - UTC time offsets: `2021-11-15T01:00:00-05:00` > Time zones > > Not all dates from Codat will contain information about time zones. > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced.
  - `timeoutInMinutes` integer, nullable: Number of minutes the push operation must complete within before it times out.
  - `timeoutInSeconds` integer, nullable: Number of seconds the push operation must complete within before it times out.
  - `status` PushOperationStatus, required (unresolved $ref)
  - `errorMessage` string, nullable: A message about the error.
  - `validation` Validation (unresolved $ref)
  - `statusCode` integer, required: Push status code.

## Other responses

- `400`: The request made is not valid.
- `401`: Your API request was not properly authorized.
- `402`: An account limit has been exceeded. The type of limit is described in the error property: - You have exceeded the 50-company limit that applies to a Free plan. Delete any companies you no longer need and retry the request. - The requested sync schedule is not allowed. You requested an hourly sync schedule but this functionality is not included in the Free plan. - Your Free account is older than 365 days and has expired. Contact support@codat.io.
- `403`: You are using an outdated API key or a key not associated with that resource.
- `404`: One or more of the resources you referenced could not be found. This might be because your company or data connection id is wrong, or was already deleted.
- `429`: Too many requests were made in a given amount of time. Wait a short period and then try again.
- `500`: There is a problem with our server. Please try again later.
- `503`: The Codat API is temporarily offline for maintenance. Please try again later.

## Changes

- **2024-11-12** `899965fc1d3b`: 3 breaking, 3 info
  - the response property `allOf[subschema #1]/data/transactions/items/amount` became optional for the status `200`
  - the response property `allOf[subschema #1]/data/transactions/items/date` became optional for the status `200`
  - the response property `allOf[subschema #1]/data/transactions/items/id` became optional for the status `200`
  - the request property `transactions/items/amount` became optional
  - …2 more
- **2024-05-30** `4537fc0e985d`: 5 breaking, 1 warning, 18 info
  - added the new required request property `transactions/items/amount`
  - added the new required request property `transactions/items/date`
  - added the new required request property `transactions/items/id`
  - the request property `accountId` became required
  - …20 more

[Operation history](https://skmtc.dev/codatio/apis/bank-feeds/changes/companies/:companyId/connections/:connectionId/push/bankAccounts/:accountId/bankTransactions/post.md)

---

[API](https://skmtc.dev/codatio/apis/bank-feeds.md) - [All operations](https://skmtc.dev/codatio/apis/bank-feeds/llms.txt) - [OpenAPI document](https://skmtc.dev/codatio/apis/bank-feeds/revisions/ffea4a4680c5?raw)
