A paid invoice can't be deleted, only voided

The server refuses to delete an invoice that has payments against it, and explains what to do instead.

What it is

A server-side block. If paid_amount is above zero, delete returns a 409 with a plain-English explanation: void it instead, or reverse the payment first if it was never really received — then the delete is allowed. The delete action is also disabled in the row menu when money is attached.

Also called: can't delete invoice with payments · orphan payment · money attached to nothing

See it
A paid invoice can't be deleted, only voided
Prepared for
Ivy Brubaker
1140 Ridge Line Rd · Fair Play
Shell package$35,948
Concrete & site$10,436
Doors & windows$6,958
Trim & finish$4,638
Total
$57,980
Signature
The row menu with 'Delete this invoice' greyed out and its disabled reason showing, plus the server's message if forced. src/components/invoices/InvoicesSection.tsx. Sample data — no customer information appears here.
How it works
  1. 1The correct route loads the invoice, reads paid_amount, and refuses if it is above zero.
  2. 2The refusal text names both alternatives rather than just saying no.
  3. 3Reversing every payment on the invoice clears the block.
Why we built it

Deleting an invoice that has already taken money leaves the payment attached to nothing and the books unable to reconcile — and it is the one mistake here whose consequence is invisible at the moment it is made. A paid invoice cannot be deleted. The payment has to be reversed first, with a reason, which puts the correction on the record rather than hiding it.

The problem
  • Orphaned payment rows created by deleting the invoice they were received against.
  • Books that silently stop reconciling.
Sound familiar?
What you get
The destructive path is closed before it can be taken.
The correct remedy is named at the moment of refusal.

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →