---
title: "Create a bank transaction (manual entry)"
method: POST
path: "/v1/banking/transactions"
tags: ["Banking"]
---

# Create a bank transaction (manual entry)

`POST /v1/banking/transactions`

## Request

- Base URL: `https://api.frihet.io`
- URL: `https://api.frihet.io/v1/banking/transactions`
- Auth: API key in header `X-API-Key`

Manually create a bank transaction. The transaction is attached to the
account identified by accountId (which must belong to your workspace).
Reconciliation state is force-initialised (reconciled=false, status=raw);
a caller cannot create an already-reconciled transaction.

## Request body

- BankTransactionCreate
  - `accountId` string, required: ID of the bank account (connection) to attach the transaction to. Must belong to your workspace.
  - `amount` number, required: Non-zero. Positive for income, negative for expenses.
  - `date` string, date, required: ISO date (YYYY-MM-DD).
  - `description` string, required
  - `currency` string: ISO 4217 code. Defaults to the account currency or EUR.
  - `reference` string
  - `category` string
  - `counterparty` object
    - `name` string, required
    - `accountNumber` string
    - `iban` string

## Response `201`

Transaction created

- object
  - `data` BankTransaction: A bank transaction. Positive amount = income, negative = expense.
    - `id` string
    - `connectionId` string: ID of the owning bank account (accountId).
    - `transactionId` string: Provider transaction ID (manual-* for API-created entries).
    - `date` string, date
    - `amount` number: Positive for income, negative for expenses.
    - `currency` string
    - `description` string
    - `reference` string, nullable
    - `category` string, nullable
    - `counterparty` object, nullable
      - `name` string
      - `accountNumber` string
      - `iban` string
    - `reconciled` boolean
    - `reconciledWith` 'invoice' | 'expense', nullable
    - `reconciledId` string, nullable
    - `reconciledAt` string, date-time, nullable
    - `status` 'raw' | 'recognized' | 'matched' | 'categorized' | 'excluded'
    - `source` string, nullable
    - `createdAt` string, date-time, nullable
    - `updatedAt` string, date-time, nullable

## Other responses

- `400`: Bad request - invalid parameters or request body
- `401`: Authentication required or invalid API key
- `404`: Resource not found
- `429`: Rate limit exceeded (100 requests per minute)
- `500`: Internal server error

---

[API](https://skmtc.dev/frihet/apis/frihet-api.md) · [All operations](https://skmtc.dev/frihet/apis/frihet-api/llms.txt) · [OpenAPI document](https://skmtc.dev/frihet/apis/frihet-api/revisions/3dd37f6a72d1?raw)
