Void vs Uncollectible: Stripe Invoices in QuickBooks

Void says the invoice should never have existed. Uncollectible says it was real and you gave up collecting. One is terminal, one is reversible, and the...

Acodei Content Team · 8/5/2026 · 12 min read

Stripe puts them in the same dialog. Open an unpaid invoice, click the overflow menu, choose Change invoice status, and you get a short list: Paid, Void, Uncollectible. Two of those three are ways of saying "this one is not getting collected," and they sit one line apart in the same dropdown.

They are not interchangeable. One of them is a permanent, one-way door. The other is a bookmark you can walk back through. Picking the wrong one is not a formatting preference, because it changes what your tax reports say, what your accounts receivable shows, and whether you can still take the money if the customer surprises you in March.

Here is what each one actually does in Stripe, what it does to the tax you have reported, and what lands in QuickBooks Online when Acodei syncs the event.

Start a free trial and see how your Stripe invoices post into QuickBooks.

The short version

Void says the invoice should never have existed. A billing mistake, a duplicate, an order that was canceled before it was ever real.

Uncollectible says the invoice was real, the work happened, the customer owes you, and you have given up on collecting. That is bad debt.

The accounting meanings are genuinely different, but the mechanical difference that catches people out is reversibility.

Void is a one-way door

Stripe's invoicing documentation is unusually blunt about this. In the status table, void is described as "This invoice is canceled," and the column listing what you can do next reads, in full: "No further actions."

The prose section says the same thing twice over:

Voiding an invoice is conceptually similar to deleting or canceling it. However, voiding an invoice 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. This status is terminal, which means that the invoice's status can never change.

Three things in that paragraph matter for your books.

"Maintains a paper trail" is why you void rather than delete. A finalized invoice cannot be deleted at all, only voided, and the invoice number stays searchable. Auditors like that. A gap in an invoice number sequence is a question you have to answer; a voided invoice with a number is an answer already written down.

"Treated as zero-value for reporting purposes" is why voiding is the right call for a mistake. The invoice did not represent revenue, so reports should behave as if it carried none.

"Terminal" is the part people learn the hard way. There is no un-void. If the customer pays a voided invoice by bank transfer next month, you cannot apply that payment to it. You are creating a new invoice or handling the cash some other way.

One more constraint worth knowing before you reach for it: Stripe says "You can only void an invoice in open or uncollectible status." A paid invoice cannot be voided. If money has already moved and you want to give it back, that is a refund or a credit note, not a void.

Uncollectible is a bookmark

In the same status table, uncollectible gets a much softer definition: "The customer is unlikely to pay the invoice. Normally, you treat it as bad debt in your accounting process."

And critically, its list of available next actions is not empty. It reads: "Change the invoice's status to void or paid."

That single line is the whole practical difference. An uncollectible invoice can still become paid. It can also be escalated to void later, once you are certain. Void can become nothing at all.

Stripe's own example is a customer who has declared bankruptcy with no assets. You are not disputing that the invoice was valid. You are recognizing that the receivable is not worth what it says on paper. That is a write-off, and write-offs sometimes come back. Estates settle. Collections agencies land a payment eighteen months later. Marking uncollectible leaves that door open. Voiding nails it shut.

What each one does to your tax reporting

This is the part almost nobody checks, and it is where the two actions look identical right up until they do not.

Stripe's tax reporting documentation lists exactly which operations move the balance of total tax you have reported. Both of our actions appear on the same side of the ledger. The following operations decrease the balance of total tax reported:

  • Voiding an invoice
  • Marking an invoice as uncollectible
  • Creating a credit note
  • Creating a refund of a charge associated with an invoice or a Checkout Session
  • Creating a reversal of a tax transaction using the Stripe Tax API

So far, no difference. Void and uncollectible both back out the tax you reported when the invoice finalized. (Tax gets reported at finalization, not at payment. Stripe notes that finalizing an invoice increases the reported tax balance, and that "This transition happens before the invoice is paid.")

The difference shows up on the increase list. One of the operations that increases the balance of total tax reported is:

Transitioning the state of an invoice from uncollectible to paid through the Pay Invoices API.

There is no equivalent entry for void, and there cannot be, because the transition it would describe is not a legal one.

Read those two lists together and the asymmetry is complete. Marking uncollectible subtracts the tax and leaves a way to add it back. Voiding subtracts the tax permanently. If you void an invoice that later gets paid outside the system and you record that cash somewhere else, your Stripe tax reports will never learn about it, and the tax on that sale is now your problem to track by hand.

One caveat on the same page, worth reading if you file in the US or Canada: disputes are not reflected in tax reports at all. Stripe states that for an upheld dispute, "Stripe Tax doesn't decrease the balance of the collected total tax." That is a separate reconciliation gap from the one in this post, but it lives in the same reports.

What Acodei writes into QuickBooks

Acodei's Invoice Sync mirrors the Stripe invoice lifecycle into QuickBooks Online, and it reacts to status transitions rather than to the invoice document. Each webhook is a QuickBooks write.

For context, the two events before the ones we care about: when a Stripe invoice is created or finalized, Acodei creates a QuickBooks Invoice that reproduces every line item and the tax lines, subject to your mapping settings. When it is paid, either through invoice.paid or charge.succeeded, Acodei creates a Payment and auto-applies it to that invoice. That auto-application requires QuickBooks Automatic Application to be switched on, which is why Acodei's documented best practice is to leave it on.

Now the two events in question.

invoice.voided causes Acodei to void the QuickBooks invoice or create a Credit Memo. If credit notes are already attached to that invoice, they are deleted first. That ordering is deliberate, and it is the step most likely to be missed when someone does this by hand: the credits have to come off the invoice before the void can land cleanly.

invoice.marked_uncollectible is documented as the same handling as void. The QuickBooks invoice gets voided or converted to a Credit Memo the same way.

Which of the two outcomes you get, a void or a Credit Memo, is not something to guess at from the outside. If you need to know what happened to one specific invoice, check that invoice in the Data Feed rather than assuming.

The reopen path

Here is where Acodei's handling stops being symmetric, for exactly the reason Stripe's is not.

Acodei documents a reversal path for an invoice that was marked uncollectible and is later paid: reopen the invoice, delete the transactions that wrote it off, and process the new payment so it applies to the reopened invoice.

There is no matching path for a voided invoice, and there does not need to be one. Stripe will not transition a voided invoice to paid, so the event never arrives. The integration mirrors the constraint rather than working around it.

Worth checking rather than assuming: Acodei has more than one way of writing off an uncollectible invoice, depending on your settings, and how the write-off was recorded is what a reversal has to find and undo. If uncollectible-then-paid is a case your business actually hits, confirm with Acodei support how it behaves on your configuration before you rely on it being automatic.

The structural point stands regardless of that detail. Mark uncollectible and a later payment is a case the system can represent, in Stripe and in your tax reports. Void and a later payment is a case that cannot be represented at all, because Stripe will not reopen the invoice. You are doing manual work in QuickBooks, and your Stripe tax reports will not learn about the sale.

Bad debt, and what the integration does not decide for you

Acodei's documented handling for both events is to void the QuickBooks invoice or create a Credit Memo. How you want bad debt to appear in your chart of accounts is a QuickBooks-side accounting policy decision, and it is worth agreeing with your accountant before you start marking invoices uncollectible in volume. Many businesses want written-off receivables landing in a dedicated bad debt expense account so the write-offs are visible as a line rather than as an absence. That structure is something you set up in QuickBooks.

The related point: a Credit Memo behaves like a payment that came from you rather than from the customer. It settles invoice balance without bringing money with it. If you want the full mechanics of that, the QuickBooks credit memo glossary entry covers how they apply and the automatic-application setting that decides which invoice they land on.

Choosing, in practice

Ask one question: was the invoice ever a legitimate claim on the customer?

No, it was a mistake. Wrong customer, wrong amount, duplicate of another invoice, service canceled before it started. Void it. There is no receivable to write off because there was never a real receivable. Voiding removes the tax you reported and keeps the number in your records.

Yes, but you are not getting paid. Work delivered, invoice valid, customer gone quiet or gone bankrupt. Mark it uncollectible. It is bad debt. You keep the write-off reversible, your tax reporting can be corrected if payment ever arrives, and the invoice history reflects what actually happened, which is that you were owed money and did not collect it.

Yes, and you already collected. Neither one is available. A paid invoice cannot be voided. Issue a credit note or a refund.

A useful tiebreaker for the genuinely ambiguous cases: if you are not sure, uncollectible is the safer choice, because you can still escalate it to void afterwards. Stripe explicitly allows voiding an invoice in uncollectible status. You cannot go the other way.

Keeping QuickBooks honest afterwards

Two habits keep these two events from turning into month-end mysteries.

Do not hand-edit the QuickBooks side. Acodei's documented best practice is to instruct accounting teams to resync from the Data Feed instead of manually altering transactions in QuickBooks. A hand-deleted Credit Memo does not tell Stripe anything, and the next event on that invoice will be reconciling against a QuickBooks state the integration did not write. If something looks wrong, resync it.

Check the invoice, not the summary, when totals disagree. Acodei validates that the invoice generated in QuickBooks matches the Stripe invoice amount exactly, though that specific check applies only when tax is enabled. If your totals are drifting, invoice mismatches have their own diagnostic path.

One last thing that surprises people: Stripe fees are never added to invoices by Acodei, because adding them would make the invoice total stop matching Stripe. Fees are handled through sales receipts, deposits, or expenses depending on your setup, which is a separate flow from anything on this page. If fee placement is the thing you are actually chasing, start with reconciling Stripe fees in QuickBooks.

FAQ

Can I undo a voided Stripe invoice?

No. Stripe documents void as a terminal status, stating that "the invoice's status can never change," and the list of available actions on a voided invoice is "No further actions." If you voided something you should not have, you create a new invoice.

Can an uncollectible invoice still be paid?

Yes. Stripe lists the available actions on an uncollectible invoice as changing its status to void or paid. Stripe's tax reporting docs confirm the same path, listing the transition from uncollectible to paid as an operation that increases the balance of total tax reported. On the QuickBooks side, Acodei documents a reversal path that reopens the invoice, removes the write-off, and processes the payment. Because there is more than one way a write-off can have been recorded, confirm with support how that reversal behaves on your configuration before relying on it.

Does voiding a Stripe invoice reduce the sales tax I have reported?

Yes. Stripe lists voiding an invoice among the operations that decrease the balance of total tax reported, alongside marking an invoice uncollectible, creating a credit note, and refunding a charge. Because tax is reported when an invoice finalizes rather than when it is paid, that reduction is backing out tax you had already reported.

What happens in QuickBooks when I void a Stripe invoice with credit notes on it?

Acodei deletes the attached credit notes first, then voids the invoice or creates a Credit Memo. Doing it in that order is what lets the void land cleanly, and it is the step most often missed when the same cleanup is attempted by hand.

Should uncollectible invoices go to a bad debt account in QuickBooks?

That is an accounting policy decision for your business rather than something the integration picks for you. Acodei's documented handling is to void the QuickBooks invoice or create a Credit Memo. If you want write-offs visible as bad debt expense, set that up in QuickBooks and agree the treatment with your accountant.

Can I void an invoice that has already been paid?

No. Stripe states that you can only void an invoice in open or uncollectible status. Once an invoice is paid, giving money back is a refund or a credit note.

The point

Void and uncollectible sit next to each other in a dropdown and mean opposite things. Void erases a claim that should not have existed. Uncollectible records a real claim you failed to collect, and leaves the door open in case you eventually do.

Stripe enforces that difference structurally: one status is terminal, the other still has two exits. Acodei's QuickBooks handling follows the same shape, which is why a reversal path exists for an uncollectible invoice that later gets paid and no such path exists for a voided one.

Pick based on whether the invoice was ever real. Everything downstream, in your receivables and in your tax reports, follows from that one call.

Start a free trial and get your Stripe invoice lifecycle posting into QuickBooks without the manual cleanup.

Share

Automate your Stripe to QuickBooks sync

Save hours every month. Acodei automatically syncs your Stripe transactions, invoices, and payouts to QuickBooks Online.

Get more operational finance guides like this one

We will only send high-value product and finance content.