---
title: "Preview Chart Transaction Merge"
method: GET
path: "/coa/api/transaction/merge"
tags: ["Core Accounting"]
---

# Preview Chart Transaction Merge

`GET /coa/api/transaction/merge`

Preview the result of merging two chart transactions.

        This endpoint shows what the merged journal entry will look like, allowing you to verify
        the merge before committing. The preview includes the journal that will be retained and
        the transactions that will remain after the merge.

        **Parameters:**
        - `transaction_ids` (query, required): Comma-separated list of exactly two transaction IDs

        **Returns:**
        A journal entry object containing the merged result with all remaining transactions.

        **Requirements:**
        - Must provide exactly two transaction IDs
        - Transactions must be from different journals
        - Transactions must have matching amounts
        - Transactions must belong to the same entity

## Response `200`

- JournalEntry
  - `id` integer, required
  - `is_deleted` boolean, required
  - `deleted_at` string, date-time, nullable, required
  - `transactions` ChartTransaction[], required
    - `id` integer, required
    - `is_deleted` boolean, required
    - `deleted_at` string, date-time, nullable, required
    - `entity_name` string, required
    - `entity_currency` string, required
    - `account_name` string, nullable, required — Combines account number and name in the format "number - name"
    - `account_number` string, required
    - `vendor_name` string, required — Name of the linked Campfire Vendor object. Distinct from `merchant_name`, which is free text stored directly on the transaction and not linked to a Campfire object.
    - `vendor_id` string, required
    - `department_name` string, required
    - `department_code` string, required
    - `parent_department_name` string, required
    - `parent_department` integer, required
    - `tags` object[], required
    - `journal` integer, required
    - `journal_order` string, required
    - `journal_memo` string, required
    - `journal_type` string, required
    - `intercompany_journal` integer, required
    - `created_automatically` boolean, required
    - `journal_attachments` File[], required
      - `id` integer, required
      - `customer` integer, required
      - `created_at` string, date-time, required
      - `created_by` integer, nullable, required
      - `created_by_name` string, required
      - `created_by_email` string, required
      - `last_modified_at` string, date-time, required
      - `name` string, required
      - `url` string, required
      - `s3_content_type` string, nullable
      - `s3_content_length` integer, nullable
      - `s3_path` string, required
      - `object_id` integer, nullable
      - `app` string, required
      - `model` string, required
      - `is_deleted` boolean, required
      - `deleted_at` string, date-time, nullable, required
    - `journal_type_name` string, nullable, required
    - `invoice` string, nullable, required
    - `bill` string, nullable, required
    - `date_month` string, nullable, required — Two-digit month (MM) derived from `posted_at`, the transaction date.
    - `date_year` string, nullable, required — Four-digit year (YYYY) derived from `posted_at`, the transaction date.
    - `balance_after_transaction` number, double, required
    - `bank_account` string, required
    - `bank_account_name` string, required
    - `account` integer, nullable
    - `last_modified_by_name` string, required
    - `account_type` string, required
    - `account_subtype` string, required
    - `parent_account_name` string, required
    - `files` string, required
    - `invoice_id` integer, nullable, required
    - `invoice_number` string, nullable, required
    - `bill_id` integer, nullable, required
    - `bill_number` string, nullable, required
    - `file_names` string, required
    - `has_matches` boolean, required
    - `has_ai` boolean, required
    - `has_rules` boolean, required
    - `has_merges` boolean, required
    - `has_fixed_asset_rule_matches` boolean, required
    - `primary_action_type` string, required
    - `suggested_account` integer, nullable, required
    - `suggested_account_name` string, nullable, required
    - `suggested_account_number` string, nullable, required
    - `amount` number, double, required — Amount in consolidated currency (the currency of the root entity).
    - `amount_native` number, double, required — Amount in the currency the transaction was originally created in.
    - `amount_book` number, double, required — Amount in the currency of the entity this transaction belongs to.
    - `amortization_schedule` AmortizationSchedule[], required
      - `id` integer
      - `amortization` integer
      - `accounting_amortization` integer
      - `journal_entry_order` string, required
      - `date` string, date, required
      - `amount` number, double, required
      - `posted` boolean
      - `customer` integer, required
      - `transaction` integer, nullable
      - `bill_line` integer, nullable
      - `debit_memo_line` integer, nullable
      - `journal_entry` integer, nullable
    - `linked_amortizations` object[], required
    - `created_fixed_assets` object[], required — Return all fixed assets this transaction is linked to — via the legacy `purchase_transaction` FK (reverse: `created_fixed_assets`) AND the new `purchase_transactions` M2M (reverse: `linked_fixed_assets`). Dual-write keeps the FK target in the M2M, but using both covers any pre-backfill drift and surfaces non-primary M2M-only links (e.g. the secondary txns in a multi-txn fixed asset, or a split-resized txn).
    - `reconciliation_report` string, required
    - `opposing_account_name` string, required
    - `opposing_account_number` string, required
    - `tax_rate` integer, nullable
    - `apply_both_sides` boolean
    - `transaction_match_id` integer, nullable
    - `transaction_id` string, uuid, required
    - `debit_amount` number, double, nullable
    - `credit_amount` number, double, nullable
    - `debit_amount_book` number, double, nullable
    - `credit_amount_book` number, double, nullable
    - `debit_amount_native` number, double, nullable
    - `credit_amount_native` number, double, nullable
    - `currency` string
    - `exchange_rate` number, double, nullable
    - `exchange_rate_book` number, double, nullable
    - `posted_at` string, date, nullable
    - `merchant_name` string, nullable
    - `bank_description` string, nullable
    - `tag_ids` integer[]
    - `tag_group_ids` integer[]
    - `note` string, nullable
    - `receipt_url` string, uri, nullable
    - `balance_before_transaction` number, double, nullable, required
    - `created_at` string, date-time, required
    - `external_id` string, nullable
    - `needs_review` boolean
    - `last_modified_at` string, date-time, required
    - `draft_matches` unknown
    - `last_lam_prediction_attempt` string, date-time, nullable
    - `customer` integer, required
    - `entity` integer, required
    - `source_entity` integer, nullable
    - `parent_bank_transaction` integer, nullable
    - `vendor` integer, nullable
    - `department` integer, nullable
    - `last_modified_by` integer, nullable
  - `attachments` File[], required
    - `id` integer, required
    - `customer` integer, required
    - `created_at` string, date-time, required
    - `created_by` integer, nullable, required
    - `created_by_name` string, required
    - `created_by_email` string, required
    - `last_modified_at` string, date-time, required
    - `name` string, required
    - `url` string, required
    - `s3_content_type` string, nullable
    - `s3_content_length` integer, nullable
    - `s3_path` string, required
    - `object_id` integer, nullable
    - `app` string, required
    - `model` string, required
    - `is_deleted` boolean, required
    - `deleted_at` string, date-time, nullable, required
  - `invoice` integer, nullable, required
  - `reversal_of_order` string, required
  - `reversals` object[], required
  - `reversal_date` string, date, nullable
  - `entity_name` string, required
  - `entity_currency` string, required
  - `created_by` integer, nullable, required — Derived user ID of the journal entry creator. Check created_by_source before explaining provenance.
  - `created_by_name` string, nullable, required — Derived name of the journal entry creator. Check created_by_source before explaining provenance.
  - `created_by_source` string, nullable, required — Provenance for created_by and created_by_name: 'draft_queue_created_by', 'chart_transaction_last_modified_by_fallback', or null.
  - `order` string
  - `revenue_transactions` integer[]
  - `bulk_upload` boolean
  - `chat_uuid` string, uuid, nullable
  - `close_task_id` string
  - `update_reversal` boolean
  - `credit_memos` object[], required
  - `debit_memos` object[], required
  - `journals_to_delete` integer[]
  - `ramp_use_sandbox` string, required
  - `navan_region` string, nullable, required — Navan data region (``US``/``EU``) for a Navan-sourced journal entry, else ``None``. Mirrors ``ramp_use_sandbox``: the frontend builds the "Open in Navan" deep link from ``source_id`` and uses this to pick the web-app host (US -> app.navan.com, EU -> app-fra.navan.com). Navan records carry no FK to their connection, so the region is resolved per customer and memoized to avoid an N+1 lookup across a transaction list.
  - `float_bill_id` string, nullable, required — Float id of the bill paid by a Float bill-payment journal entry, else ``None``. Payment journal entries store the Float payment id as ``source_id``, which has no page of its own in Float's web app — the frontend deep-links "View on Float" to the paid bill instead.
  - `search_vector` string, nullable, required
  - `search_text` string, nullable, required
  - `type` 'bill' | 'bill_payment' | 'bill_prepayment' | 'check' | 'credit_card' | 'credit_memo' | 'credit_memo_payment' | 'debit_memo' | 'debit_memo_payment' | 'deposit' | 'expense' | 'invoice' | 'intercompany_journal' | 'invoice_payment' | 'journal_entry' | 'lease' | 'payment' | 'receive_payment' | 'refund' | 'revenue_recognition' | 'sales_receipt' | 'transfer' | 'vendor_credit' | 'void_bill' | 'void_bill_payment' | 'void_invoice_payment' | 'void_credit_memo' | 'void_credit_memo_payment' | 'void_debit_memo_payment' | 'void_invoice' | 'elimination' | 'revaluation' | 'asset_reclassification' — * `bill` - Bill * `bill_payment` - Bill Payment * `bill_prepayment` - Bill Prepayment * `check` - Check * `credit_card` - Credit Card * `credit_memo` - Credit Memo * `credit_memo_payment` - Credit Memo Payment * `debit_memo` - Debit Memo * `debit_memo_payment` - Debit Memo Payment * `deposit` - Deposit * `expense` - Expense * `invoice` - Invoice * `intercompany_journal` - Intercompany Journal * `invoice_payment` - Invoice Payment * `journal_entry` - Journal Entry * `lease` - Lease * `payment` - Payment * `receive_payment` - Receive Payment * `refund` - Refund * `revenue_recognition` - Revenue Recognition * `sales_receipt` - Sales Receipt * `transfer` - Transfer * `vendor_credit` - Vendor Credit * `void_bill` - Void Bill * `void_bill_payment` - Void Bill Payment * `void_invoice_payment` - Void Invoice Payment * `void_credit_memo` - Void Credit Memo * `void_credit_memo_payment` - Void Credit Memo Payment * `void_debit_memo_payment` - Void Debit Memo Payment * `void_invoice` - Void Invoice * `elimination` - Elimination * `revaluation` - Revaluation * `asset_reclassification` - Asset Reclassification
  - `journal_id` string, uuid
  - `memo` string, nullable
  - `currency` string
  - `exchange_rate` number, double, nullable
  - `exchange_rate_book` number, double, nullable
  - `use_average_rate` boolean, nullable
  - `created_automatically` boolean
  - `date` string, date
  - `ref_number` string, nullable
  - `created_at` string, date-time, required
  - `source` string, nullable
  - `source_id` string, nullable
  - `last_modified_at` string, date-time, required
  - `customer` integer, required
  - `recurrent_journal_entry` integer, nullable
  - `entity` integer, nullable
  - `reversal_of` integer, nullable
  - `intercompany_journal` integer, nullable
  - `source_file` integer, nullable
  - `chat` integer, nullable
  - `last_draft` integer, nullable, required

## Other responses

- `400`

---

[API](https://skmtc.net/campfire/apis/campfire-developer-apis.md) · [All operations](https://skmtc.net/campfire/apis/campfire-developer-apis/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/campfire/campfire-developer-apis/revisions/6945ebc3180e/schema)
