Update Transaction API
Update a single unlocked Breezing transaction by ID to patch crypto accounting fields without changing other transaction values.
Path Parameters
Transaction ID
"12345"
Query Parameters
Organization ID. Use GET /v1/companies to discover available org/company pairs.
"1"
Company ID. Use GET /v1/companies to discover available companies and their access levels.
"1"
Body
Account code (numeric string). The contra (income/expense) account: what was this transaction for? (e.g. Sales, Legal Expense, Consulting Revenue). IMPORTANT: Always call company_get first to retrieve the chart of accounts, find the account by name, and use its "code" field. Never pass a free-text name like "sales".
Asset account code (numeric string). The balance-sheet account for the token in this transaction. Required in ALL balance sheet modes. If the current value is "(auto)", Breezing resolves it at sync time from token-level or rule-based mappings. You can leave it or override with a specific code. IMPORTANT: Always call company_get first to retrieve the chart of accounts and use the numeric code.
Fee asset account code (numeric string). The balance-sheet account for the fee portion. Same rules as assetAccount: required in ALL balance sheet modes. If "(auto)", Breezing resolves it at sync time. IMPORTANT: Always call company_get first to retrieve the chart of accounts and use the numeric code.
Transaction status lifecycle: notStarted (new/uncategorized) → reviewRequired (flagged for client review; client sees these in the Client Review workflow) → reconciled (categorized and verified) → manuallyReconciled (manually confirmed) → paid (synced to accounting software). Set to reviewRequired when the accountant needs the client to clarify a transaction.
notStarted, reviewRequired, reconciled, manuallyReconciled, paid, synced Transaction type as a freeform label, safe to overwrite. System may set values like "transaction" or "internal" during import, but these are just labels, not business logic. The isInternal boolean controls actual internal transfer logic. Set to any descriptive value: "Opening Balance", "Staking Reward", "Payment", etc.
User note. Internal only, not synced to accounting software. Use accountingDescription for text that should appear in journal entries.
Description that syncs as the journal entry description in Xero/QuickBooks/Bexio. Use for invoice references, vendor names, or transaction context that should appear in the accounting software. Distinct from "note" which is internal only.
VAT or sales tax code as a freeform string that syncs to journal entries. Must match a tax rate name configured in the user's Xero/QuickBooks/Bexio account (e.g. "Output 8.1% VAT", "Tax Exempt"). Default is "no-vat". No validation, so invalid codes may cause sync errors.
Spam flag. Set true to hide airdrop/scam tokens from the main view and prevent syncing to accounting software. Breezing auto-detects many spam tokens; use this for any it missed.
Extra label: freeform text for custom tagging or grouping, visible in Breezing reports.
Skip net gain/loss. When true, realized gain/loss is zeroed for this transaction (excluded from NGL and tax calculations). Use for non-taxable movements like wrapping, staking, or bridging. Requires skipNglReason when set to true. Cannot be set on internal transfers (isInternal=true). Setting this does NOT recalculate NGL automatically; run POST /ngl/calculate afterward to recompute net.
Reason net gain/loss is skipped (e.g. "Wrapping", "Staking", "Bridge transfer"). Required when skipNgl is set to true.
QuickBooks Online class ID. Syncs as the class on the journal entry in QuickBooks. Use the "id" returned by the QuickBooks classes refresh endpoint (call it first to retrieve valid class IDs). Only relevant when QuickBooks is linked.
Xero tracking category option ID. Syncs as the tracking category on the journal entry in Xero. Use the "id" returned by the Xero categories refresh endpoint (call it first to retrieve valid option IDs). Only relevant when Xero is linked.