Skip to main content
PATCH
/
transactions
/
{id}
Update a single transaction
curl --request PATCH \
  --url https://api.breezing.io/v1/transactions/{id} \
  --header 'Content-Type: application/json' \
  --data '
{
  "account": "<string>",
  "assetAccount": "<string>",
  "feeAssetAccount": "<string>",
  "type": "<string>",
  "note": "<string>",
  "accountingDescription": "<string>",
  "vat": "<string>",
  "isSpam": true,
  "extraLabel": "<string>",
  "skipNgl": true,
  "skipNglReason": "<string>",
  "qboClass": "<string>",
  "xeroTrackingCategory": "<string>"
}
'
{
  "success": true,
  "data": {
    "updated": 123
  }
}

Path Parameters

id
string
required

Transaction ID

Example:

"12345"

Query Parameters

orgId
string
required

Organization ID. Use GET /v1/companies to discover available org/company pairs.

Example:

"1"

companyId
string
required

Company ID. Use GET /v1/companies to discover available companies and their access levels.

Example:

"1"

Body

application/json
account
string | null

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".

assetAccount
string | null

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.

feeAssetAccount
string | null

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.

status
enum<string>

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.

Available options:
notStarted,
reviewRequired,
reconciled,
manuallyReconciled,
paid,
synced
type
string | null

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.

note
string | null

User note. Internal only, not synced to accounting software. Use accountingDescription for text that should appear in journal entries.

accountingDescription
string | null

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
string | null

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.

isSpam
boolean

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.

extraLabel
string | null

Extra label: freeform text for custom tagging or grouping, visible in Breezing reports.

skipNgl
boolean

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.

skipNglReason
string | null

Reason net gain/loss is skipped (e.g. "Wrapping", "Staking", "Bridge transfer"). Required when skipNgl is set to true.

qboClass
string | null

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.

xeroTrackingCategory
string | null

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.

Response

Transaction updated successfully

success
enum<boolean>
required
Available options:
true
data
object
required
Last modified on April 12, 2026