---
title: "Pair Internal Transfer"
method: POST
path: "/bank-entries/{entry_id}/internal-transfer"
tags: ["reconciliation"]
---

# Pair Internal Transfer

`POST /bank-entries/{entry_id}/internal-transfer`

## Request

- Base URL: `https://app.zeno-works.ch` (the document declares no server; this is the origin it was published from)
- URL: `https://app.zeno-works.ch/bank-entries/{entry_id}/internal-transfer`
- Auth: none declared

Pair this movement with the other side of its internal transfer — posting NOTHING
(ZET-435, owner ruling 2026-09-30).

For money moved between two of the company's own bank accounts whose statements are
both imported: each side was parked on the suspense account on import, and those two
parkings already are the whole booking of the transfer (they cancel on suspense). This
links each movement to the other side's parking and marks both booked. Nothing is
posted and no balance changes.

The other side must be on another of the company's bank accounts, in the opposite
direction, for the same amount and currency, booked or valued on one of this movement's
dates; both sides must be parked on suspense with nothing linked, and the two parkings
must cancel in the company's currency. Otherwise **409** with the reason
(``conflict.transferNotParked``, ``…CounterpartNotFound``, ``…CounterpartAmbiguous``,
``…ParkingsDoNotNet``) — e.g. sides that differ by a fee or
a currency conversion are booked by hand. ``internal_transfer_preview`` answers the same
question without acting. Undo: unlink either side's link to the other side's parking
(``unlink_gl_journal_entry``) — both return to suspense. Accountant/owner (ZCT-257).

## Path parameters

- `entry_id` string, required

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Response `200`

Successful Response

- BankEntryMsgResponse
  - `msg` string, required
  - `bank_entry` BankEntryDetail, required
    - `id` string, required
    - `company_id` string, required
    - `bank_account_id` string, required
    - `bank_statement_id` string, required
    - `entry_index` integer, required
    - `amount` string, required
    - `currency` string, required
    - `credit_debit` 'credit' | 'debit', required
    - `booking_date` string, date, nullable
    - `value_date` string, date, nullable
    - `account_servicer_ref` string, nullable
    - `end_to_end_id` string, nullable
    - `reference` string, nullable
    - `reference_type` string, nullable
    - `remittance_info` string, nullable
    - `additional_entry_info` string, nullable
    - `counterparty_name` string, nullable
    - `counterparty_iban` string, nullable
    - `counterparty_id` string, nullable
    - `reconciliation_status` 'unmatched' | 'partially_matched' | 'matched' | 'ignored', required
    - `settlement_status` 'unsettled' | 'settled' | 'partially_settled' | 'suspense': Clean-bank settlement state of a bank entry (distinct from ``reconciliation_status``, which the matcher owns). Set by ``settle_bank_entry``.
    - `matched_amount` string, required
    - `possible_duplicate` boolean, required
    - `is_own_payment` boolean
    - `created_at` string, date-time, required
    - `has_invoice` boolean
    - `has_journal` boolean
    - `has_ledger_match` boolean
    - `needs_review` boolean
    - `journal_exportable` boolean
    - `journal_export_blocked_reason` string, nullable
    - `journal_export_soft_warning` string, nullable
    - `counterparty_hint` InvoiageCoreAccountingReconciliationSchemasReconciliationCounterpartyBrief
      - `id` string, required
      - `kind` string, required
      - `name` string, required
      - `normalized_name` string, required
      - `vat_number` string, nullable
    - `counterparty` InvoiageCoreAccountingReconciliationSchemasReconciliationCounterpartyBrief
      - `id` string, required
      - `kind` string, required
      - `name` string, required
      - `normalized_name` string, required
      - `vat_number` string, nullable
    - `match_quality` 'full' | 'strong' | 'partial' | 'weak' | 'manual' | 'imported': Graded bank-entry ↔ invoice match quality (match-quality feature, 2026-06-09). Auto bands (from how many matchable fields line up, see ``services.reconciliation``): ``full`` > ``strong`` > ``partial`` > ``weak``. ``manual`` (user-created/confirmed) and ``imported`` (asserted by a source export) are provenance values that win over any auto band.
    - `links` BankEntryLinks
      - `items` LinkedItem[]
        - `link_id` string, required
        - `item_id` string, required
        - `allocated_amount` string, required
        - `match_quality` 'full' | 'strong' | 'partial' | 'weak' | 'manual' | 'imported', required: Graded bank-entry ↔ invoice match quality (match-quality feature, 2026-06-09). Auto bands (from how many matchable fields line up, see ``services.reconciliation``): ``full`` > ``strong`` > ``partial`` > ``weak``. ``manual`` (user-created/confirmed) and ``imported`` (asserted by a source export) are provenance values that win over any auto band.
        - `match_signals` object, nullable
        - `confidence` string, nullable
        - `filename` string, nullable
        - `direction` string, nullable
      - `journal_entries` LinkedJournalEntry[]
        - `link_id` string, required
        - `journal_entry_id` string, required
        - `allocated_amount` string, required
        - `match_quality` 'full' | 'strong' | 'partial' | 'weak' | 'manual' | 'imported', required: Graded bank-entry ↔ invoice match quality (match-quality feature, 2026-06-09). Auto bands (from how many matchable fields line up, see ``services.reconciliation``): ``full`` > ``strong`` > ``partial`` > ``weak``. ``manual`` (user-created/confirmed) and ``imported`` (asserted by a source export) are provenance values that win over any auto band.
        - `match_signals` object, nullable
        - `confidence` string, nullable
        - `document_number` string, nullable
        - `description` string, nullable
      - `accounting_invoices` LinkedAccountingInvoice[]
        - `link_id` string, required
        - `accounting_invoice_id` string, required
        - `allocated_amount` string, required
        - `released_amount_currency` string, nullable
        - `match_quality` 'full' | 'strong' | 'partial' | 'weak' | 'manual' | 'imported', required: Graded bank-entry ↔ invoice match quality (match-quality feature, 2026-06-09). Auto bands (from how many matchable fields line up, see ``services.reconciliation``): ``full`` > ``strong`` > ``partial`` > ``weak``. ``manual`` (user-created/confirmed) and ``imported`` (asserted by a source export) are provenance values that win over any auto band.
        - `match_signals` object, nullable
        - `confidence` string, nullable
        - `invoice_number` string, nullable
        - `counterparty_name` string, nullable
        - `direction` 'payable' | 'receivable'
        - `currency` string, nullable
        - `open_amount` string, nullable
        - `needs_discharge` boolean
        - `published_rate` string, nullable
        - `booking_rate` string, nullable
      - `gl_open_items` LinkedGlOpenItem[]
        - `link_id` string, required
        - `gl_open_item_id` string, required
        - `allocated_amount` string, required
        - `released_amount_currency` string, nullable
        - `match_quality` 'full' | 'strong' | 'partial' | 'weak' | 'manual' | 'imported', required: Graded bank-entry ↔ invoice match quality (match-quality feature, 2026-06-09). Auto bands (from how many matchable fields line up, see ``services.reconciliation``): ``full`` > ``strong`` > ``partial`` > ``weak``. ``manual`` (user-created/confirmed) and ``imported`` (asserted by a source export) are provenance values that win over any auto band.
        - `match_signals` object, nullable
        - `confidence` string, nullable
        - `document_no` string, nullable
        - `counterparty_name` string, nullable
        - `direction` 'payable' | 'receivable'
        - `open_amount` string, nullable
        - `currency` string, nullable
        - `due_date` string, date, nullable
        - `is_credit_note` boolean
        - `needs_discharge` boolean
        - `published_rate` string, nullable
        - `booking_rate` string, nullable
      - `gl_journal_entries` LinkedGlJournalEntry[]
        - `link_id` string, required
        - `gl_journal_entry_id` string, required
        - `allocated_amount` string, required
        - `match_quality` 'full' | 'strong' | 'partial' | 'weak' | 'manual' | 'imported', required: Graded bank-entry ↔ invoice match quality (match-quality feature, 2026-06-09). Auto bands (from how many matchable fields line up, see ``services.reconciliation``): ``full`` > ``strong`` > ``partial`` > ``weak``. ``manual`` (user-created/confirmed) and ``imported`` (asserted by a source export) are provenance values that win over any auto band.
        - `match_signals` object, nullable
        - `confidence` string, nullable
        - `entry_no` integer, nullable
        - `posting_date` string, date, nullable
        - `description` string, nullable
        - `status` 'draft' | 'posted' | 'reversed'
        - `transfer_bank_entry_id` string, nullable
    - `settlement_blocker` string, nullable
    - `pays_card_bill` boolean
    - `card_clearing_account_code` string, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/zeno-works/apis/zeno-api.md) · [All operations](https://skmtc.dev/zeno-works/apis/zeno-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zeno-works/apis/zeno-api/revisions/1eb93dde146c?raw)
