Skip to content

Credit notes and refunds

What object reduces an invoice, and what returns the cash? Every negative document is a distinct object with its own numbering, stored with positive amounts, and reconciled separately by the finance team. Merging them into a signed invoice column destroys the audit path.

Concepts
8
Divergences
2
Structural
0

Endpoints

Xero

GET /CreditNotes

Type: ACCRECCREDIT or ACCPAYCREDIT

QBO

SELECT * FROM CreditMemo / VendorCredit

Two entities

NetSuite

creditmemo / vendorcredit

Two record types

The same concept in three vocabularies

Read across a row. Where a cell is absent, the concept has nowhere to live in that system — which is a design constraint, not a gap to paper over.

NativeNative
— A field or object exists for it
PartialPartial
— Exists with a caveat that changes what you can build
DerivedDerived
— Not stored — you compute it
AbsentAbsent
— Nothing in the API
Credit notes and refunds fields compared across Xero, QuickBooks Online and NetSuite
ConceptXeroQBONetSuite
Reduce a customer invoice
Native

CreditNote, Type: ACCRECCREDIT

Native

CreditMemo

Native

creditmemo

Reduce a vendor bill
Native

CreditNote, Type: ACCPAYCREDIT

Native

VendorCredit

Native

vendorcredit

Cash back to a customer
Native

Payment against the ACCRECCREDIT

A refund is a Payment against the credit note itself; allocation to an invoice is a separate Allocations call

Native

RefundReceipt

A separate entity again

Native

customerrefund

Cash back from a vendor
Native

Payment against the ACCPAYCREDIT

Partial

Deposit linked to the VendorCredit

Two objects for one event

Native

vendorpayment / deposit

Cash sale with no receivable
Native

BankTransaction, Type: RECEIVE

Native

SalesReceipt

Native

cashsale

Allocation to a document
Native

Allocations[] on the credit note

Native

LinkedTxn on the invoice or a Payment line

Native

apply sublist

Sign convention
Native

Positive

Native

Positive

Native

Positive

Remaining credit
Native

RemainingCredit

Native

Balance

Unapplied portion

Native

amountremaining

What actually differs, and what you do about it

A difference stated without a response is trivia. Each of these carries the handling.

Sharp edge

Refunds are a third object, not a mode of the credit note

Xero · QBO · NetSuite

Reducing a receivable and returning cash are separate events with separate documents in all three systems, and QuickBooks needs two objects (VendorCredit plus Deposit) to express a vendor refund at all. A UI that treats 'credit' and 'refund' as one action will produce the wrong pair of records.

Do — Model the credit and the cash movement as two linked records, and make the UI ask which one the user means before it writes anything.

Sharp edge

Sign flipping is a one-place decision

Xero · QBO · NetSuite

All three store positive amounts and encode direction in the type. If normalisation flips signs for display or for aggregation, doing it in two places produces a double negation that reads as a plausible number and survives review.

Do — Flip once, at the boundary between the canonical model and the presentation layer, and test the round trip. The ledger table renders debit and credit as two columns, never one signed column.

The type the components consume

credit-notes.ts
/* Credit notes reuse LedgerDocument with a distinct type. The amounts stay
   positive; the type carries the direction; the statement layer decides sign. */
type CreditNote = LedgerDocument & {
  type: "sales_credit" | "purchase_credit";
  remaining: Money;              // unallocated portion
  allocations: Allocation[];     // documents this credit has been applied to
  refund?: { paymentId: string; amount: Money };
};

What this changes in the interface

The payoff. Every difference above that reaches the surface, and what the component does about it.

Credit notes have their own number sequence
They appear as their own document type in every list, with their own number column. Never as a negative row in the invoice list.
A credit and its refund are two records
The document detail shows both, linked, with the cash movement separately dated — because they often are.

Where the accounting is explained

What consumes this payload

The normalised object above is what the components read. These are the surfaces it feeds, the words for the concepts in it, and the document that explains the accounting.

Compared acrossXero docsQuickBooks Online docsNetSuite docs

Works in your QuickBooks Online or Xero file

Get your books closed every month

Lopifi is building AI bookkeeping that keeps your books closed on US GAAP as transactions happen, with a CPA review every quarter, for $200 a month. We’re not open yet.

$200/month when we open. No card now.