---
title: "Post a manual journal"
method: POST
path: "/api/v1/iqbooks/organisations/{organisationId}/journals"
tags: ["IQ Books — Journals"]
---

# Post a manual journal

`POST /api/v1/iqbooks/organisations/{organisationId}/journals`

## Request

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

Posts a balanced manual double-entry journal via the native adjustment service. At least 2 lines; each line has exactly one positive value (`debit` OR `credit`); total debits must equal total credits. An unbalanced journal is rejected with HTTP **422 `unprocessable_entity`**. 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

## Request body

- JournalCreate
  - `entry_date` string, date
  - `description` string
  - `lines` JournalLineCreate[], required
    - `account_id` integer, required
    - `debit` number
    - `credit` number
    - `memo` string
    - `vat_code` string
    - `vat_amount` number

## Response `201`

A single journal entry with lines.

- object
  - `data` JournalDetail, required
    - `id` integer
    - `je_number` integer, nullable
    - `organisation_id` integer
    - `entry_date` string, date, nullable
    - `description` string, nullable
    - `status` string
    - `source_system` string, nullable
    - `source_reference` string, nullable
    - `posted_at` string, date-time, nullable
    - `created_at` string, date-time
    - `lines` object[]
      - `line_number` integer
      - `account_id` integer
      - `account_code` string
      - `account_name` string
      - `account_type` string
      - `debit` number, nullable
      - `credit` number, nullable
      - `memo` string, nullable
      - `vat_code` string, nullable
      - `vat_rate` number, nullable
      - `vat_amount` number, 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`: Semantically rejected (e.g. an unbalanced journal: total debits != total credits).

---

[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)
