Voids, credit notes and refunds in Stripe Billing: how each one should hit the ledger
When to void a Stripe invoice, issue a credit note or refund, and the journal entry each needs in NetSuite, QuickBooks or Xero. Every rule cites Stripe.
Part of the subscription and usage billing guide.

Void a Stripe invoice when it should never have existed and nothing has been paid on it. Issue a credit note when the invoice was valid but the amount owed has to come down. Refund only when money has to go back to the customer, and route that refund through a credit note so Stripe and the ERP describe the same event. In the ledger, a void reverses the original invoice entry. A credit note reduces revenue against receivables, a customer credit or cash. A refund moves cash out against that credit note.
The three actions look alike in Stripe Billing. They create different records, and mixing them up leaves stale balances in AR aging or records the same reduction twice. This guide sets out when to use each, what Stripe records, and the entry your ERP needs. Every Stripe rule below comes from Stripe's own documentation.
Key takeaways
- Void only open or uncollectible invoices. Stripe treats a voided invoice as zero-value for reporting, and the void is terminal.
- A credit note adjusts a finalized invoice without replacing it. On an open invoice it lowers the amount due. On a paid invoice it becomes a refund, a customer credit balance or an out-of-band credit.
- A credit note that takes an open invoice to zero marks it paid with no payment recorded. Your sync must not treat that status as cash received.
- Route refunds through credit notes. Stripe lets a credit note create a refund or link one already issued, which keeps the invoice, the refund and the ledger tied together.
- Write-offs are a different action. Marking an invoice uncollectible is the bad-debt path; voiding it as well credits AR twice and leaves the allowance misstated.
The decision table
Pick the action from what happened to the invoice, then post the entry that matches. The entries assume a $1,000 invoice originally booked as debit accounts receivable, credit revenue (or deferred revenue if the service period has not started). The figures are illustrative.
| Situation | Stripe action | What Stripe records | ERP record (NetSuite, QuickBooks, Xero) | Journal entry |
|---|---|---|---|---|
| Invoice issued in error, nothing paid | Void | Status void, zero-value, terminal | Void or reverse the invoice | Dr Revenue (or deferred revenue) 1,000 / Cr AR 1,000 |
| Wrong details on an open one-off invoice | Revise | Original voided, new invoice finalized | Void the original, post the new invoice | Reverse original, book new |
| Amount owed reduced, invoice still open | Credit note on open invoice | Amount due reduced; paid at zero | Credit memo (NetSuite, QuickBooks) or credit note (Xero) applied to the invoice | Dr Contra revenue 200 / Cr AR 200 |
| Paid invoice, customer keeps the credit | Credit note to customer credit balance | Credit applies to next finalized invoice | Unapplied credit memo or credit note on the customer | Dr Contra revenue 200 / Cr Customer credit 200 |
| Paid invoice, money goes back | Credit note with refund | Refund to original payment method | Credit memo or credit note plus a customer refund | Dr Contra revenue 200 / Cr Stripe clearing 200 |
| Paid invoice, credit paid outside Stripe | Credit note with out-of-band amount | Credit recorded, no Stripe money movement | Credit memo or credit note plus a refund from the bank | Dr Contra revenue 200 / Cr Cash 200 |
| Customer will not pay | Mark uncollectible | Status uncollectible | Write-off against the allowance | Dr Allowance (or bad debt) 1,000 / Cr AR 1,000 |
The account names are examples. Whether a credit hits revenue directly or a contra-revenue account is your policy and your auditor's call. What matters is that each event posts once, to one place.
When should you void a Stripe invoice?
Void a Stripe invoice when it should not exist at all: wrong customer, duplicate, or billed in error, with no payment applied. A void cancels the invoice and keeps the paper trail.
Stripe's invoicing overview describes voiding as "conceptually similar to deleting or canceling" an invoice, except that it "maintains a paper trail, which allows you to look up the invoice by number." Voided invoices "are treated as zero-value for reporting purposes, and aren't payable." The status is terminal. Stripe only lets you void an invoice in open or uncollectible status, so a paid invoice cannot be voided.
The ledger entry for a void reverses the original invoice entry in full. If the original period is still open, date the reversal in that period. If the period is locked, post the reversal in the current open period rather than reopening the books. Our guide to locking accounting periods covers why.
One failure to watch for is a void that never leaves Stripe. Stripe sends an invoice.voided event when an invoice moves to void. If the integration ignores it, the ERP keeps the invoice open and AR aging overstates receivables. The article on what breaks when a voided Stripe invoice doesn't clear from AR aging walks through the symptoms.
What about revising an invoice instead?
Revising a finalized invoice in Stripe is a void plus a new invoice, and the ledger needs both. Stripe's guide "Edit finalized invoices" states that when you update the invoice, "Stripe finalizes the new invoice and voids the old one."
Stripe allows revisions on open or uncollectible invoices, not void or paid ones. It also states that you cannot revise invoices attached to subscriptions after finalization (editing them is in private preview for one billing mode). Your sync has to post the void of the original as well as the new invoice. A sync that only picks up new invoices leaves the original open. Stripe also notes that compliance rules vary by country and that a business in the European Union may want to void and issue a credit note rather than revise. Confirm the right approach with your advisers.
When should you issue a credit note?
Issue a credit note when the invoice was right to issue but the amount the customer owes has to change. Overcharges, undelivered services and discounts agreed after finalization all fit.
Stripe's documentation states that a credit note "reduces the amount of a finalized invoice without voiding and replacing the original invoice." You can issue one against an open, paid or uncollectible invoice through the API, though the Dashboard does not support credit notes on uncollectible invoices. Per Stripe's credit notes guide, "the sum of all credit notes issued for an invoice can't exceed the total amount of the invoice."
Credit note on an open invoice
On an open invoice, a credit note lowers the amount due, and the ledger entry reduces revenue against accounts receivable. No money moves.
Stripe states that a credit note "reduces the amount due without recording any payment. However, if a credit note reduces the balance of an open invoice to 0, the invoice status changes to paid." That paid status is the trap. An integration that books a cash receipt whenever an invoice turns paid will record cash that never arrived. Match cash on payment records, not on invoice status.
A credit note on an open invoice can be voided. Stripe states that voiding it "reverses its adjustment, increasing the amount due on the invoice." Credit notes on paid invoices cannot be voided. In the ERP, reverse the credit memo or credit note with the same date logic as an invoice void.
Credit note on a paid invoice
On a paid invoice, a credit note does not change the amount due; instead, the credit goes somewhere. Stripe's guide "Generate credit notes programmatically" lists four options: create a refund, link an existing refund, credit the customer's credit balance, or credit outside of Stripe. For a paid invoice, the refund, credit and out-of-band amounts must add up to the credit note total.
Each option posts differently:
- Refund: contra revenue against Stripe clearing. Money leaves your Stripe balance.
- Customer credit balance: contra revenue against a customer credit. Stripe's "Customer credit balance" documentation states the credit "automatically applies to the next finalized invoice" and that you "can't choose a specific invoice to apply the credit balance to." When it applies, clear the customer credit against that invoice's receivable.
- Out of band: contra revenue against the bank account or a payable to the customer, for a credit paid by check or wire outside Stripe.
When should you refund, and how?
Refund when money has to return to the customer, and issue the refund through a credit note on the invoice. A refund created on its own from the Payments page sits against the charge, not the invoice lines.
Stripe's credit note options include "Link a refund," which links an existing refund for the invoice's charge. If someone refunded from the Payments page, create a credit note that links that refund, so the invoice shows why money went back. Without it, the Stripe invoice and the ERP describe the same customer differently, and month-end reconciliation finds the gap.
Three refund facts from Stripe's refunds documentation change the entries:
- Fees are not returned. "Stripe's processing fees from the original transaction aren't returned." The original fee stays as an expense; only the refunded amount reverses.
- Refunds draw on your available Stripe balance. If the balance cannot cover a card refund, Stripe holds it as pending; refunds for other payment method types fail.
- Refunds can fail. When a bank or card issuer cannot process a refund, the money returns to your Stripe balance, which "can take up to 30 days." Stripe sends a refund.failed event. Reverse the refund entry and arrange another way to pay the customer.
How refunds show up in Stripe payouts and the bank deposit is a payout-side question, covered in our guides to reconciling Stripe with NetSuite and reconciling Stripe with QuickBooks.
Where does marking an invoice uncollectible fit?
Mark an invoice uncollectible when the customer will not pay, and treat it as a write-off, not a void. Stripe states that uncollectible means "the customer is unlikely to pay the invoice. Normally, you treat it as bad debt in your accounting process."
An uncollectible invoice can later move to void or paid. This is where AR gets credited twice. The write-off already credited AR against the allowance (or bad debt expense). If someone later voids the same invoice in Stripe and the sync reverses every void, it credits AR a second time and debits revenue. The customer's AR goes negative, revenue is understated, and the allowance carries a loss for an invoice that was cancelled. Decide what the event is. If the invoice was valid and the customer did not pay, it stays a write-off. If the invoice was wrong, reverse the write-off and post the void. If the customer pays after all, reverse the write-off and apply the cash.
The four errors this table prevents
Four errors account for many problems with voids, credit notes and refunds, and each one shows up in a different report.
| Error | Where it shows | Root cause |
|---|---|---|
| Stale open balance | AR aging overstates receivables | A void or revision in Stripe never reached the ERP |
| Revenue reduced twice | Revenue understated; contra revenue too high | Credit note and refund both posted as separate reductions |
| AR credited twice | Negative AR for the customer; allowance misstated; revenue understated | A write-off followed by a void of the same invoice |
| Phantom cash receipt | Cash and AR disagree with the bank | A credit note took an invoice to paid and the sync booked a payment |
Checking these at month-end is the job of a reconciliation between Stripe invoice status and open AR. The article on reconciling Stripe invoice payment status against open AR covers that tie-out. Preventing them is a matter of posting each Stripe event once, by type.
What this looks like as a workflow
A governed workflow reads each Stripe event, applies the decision table as fixed rules, and posts one ERP entry per event. Anything that does not fit the table goes to a person.
Loopfour, the deterministic finance workflow automation platform, builds this on your Stripe account and your ERP, with approvals in Slack:
Stripe event received (invoice.voided, credit note created, refund.failed, invoice.marked_uncollectible) → event typed by rule → matching ERP record built (reversal, credit memo or credit note, refund, write-off) → amounts above your threshold approved in Slack → posted to NetSuite, QuickBooks or Xero → execution tree records the event, the rule and the approver
Every step is predefined, so the same event always produces the same entry. No model chooses an account. Loopfour is SOC 2 Type II certified, and we build, run and maintain the workflow, so a new Stripe event type or an ERP field change is our fix to make. If credit notes and refunds are where your Stripe-to-ERP sync breaks, book a workflow review and we will map your event types against this table.
Frequently asked questions
What happens when you void an invoice in Stripe?
Stripe changes the invoice status to void, which is terminal. The invoice keeps its number and stays searchable, but Stripe treats it as zero-value for reporting and it can no longer be paid. You can only void an invoice that is open or uncollectible.
What is the difference between a credit note and a refund in Stripe?
A credit note reduces what a customer owes on a finalized invoice without voiding it. A refund sends money back to the customer's original payment method. On a paid invoice, a credit note can create a refund, link an existing one, add to the customer's credit balance, or record a credit made outside Stripe.
Can you void a paid invoice in Stripe?
No. Stripe only allows voiding invoices in open or uncollectible status. To reduce or reverse a paid invoice, issue a credit note and choose a refund, a customer credit balance, or an out-of-band credit.
Does a Stripe credit note reduce revenue?
In the ledger, a credit note is usually recorded as a reduction of revenue, often through a contra-revenue account, with the other side to accounts receivable, a customer credit, or cash, depending on whether the invoice was open or paid. Your revenue policy and auditor set the exact accounts.
Why does a voided Stripe invoice still show in AR aging?
Usually because the void in Stripe never reached the ERP. Stripe sends an invoice.voided event when an invoice is voided; if the integration does not handle that event, the ERP keeps the invoice open and AR aging overstates what customers owe.
Are Stripe fees returned when you refund an invoice payment?
No. Stripe's refund documentation states that processing fees from the original transaction are not returned. The fee stays as an expense in the ledger; only the refunded amount reverses.
Conclusion
A Stripe void invoice action is for an invoice that should not exist. A credit note is for an invoice that was right but now owes less. A refund is money going back, recorded through a credit note. Post each one once, by type, and AR aging, revenue and cash all agree with Stripe.
Tell us the one workflow your team dreads. We will show it running. Book a demo.
Sources
- Stripe Documentation: How invoicing works
- Stripe Documentation: Issue credit notes
- Also cited by name: Stripe Documentation, "Generate credit notes programmatically", "Edit finalized invoices" and "Customer credit balance" (docs.stripe.com, Invoicing section)
- Stripe Documentation: Refund and cancel payments
