Invoice Statuses Compared: Stripe vs Xero vs QuickBooks Online
draft, open, paid, void or uncollectible. Xero's API uses DRAFT, SUBMITTED, AUTHORISED, PAID, VOIDED and DELETED. QuickBooks Online shows ten or more statuses that mix payment, delivery and banking. In all three, the key moment is when an invoice stops being a draft: after that it can't be deleted, only voided.The statuses side by side
| Stage | Stripe | Xero (API → what users see) | QuickBooks Online |
|---|---|---|---|
| Being written | draft | DRAFT → Draft | Not sent |
| Waiting for sign-off | — | SUBMITTED → Awaiting approval | — |
| Issued, unpaid | open | AUTHORISED → Awaiting payment / "Approved" | Open, Sent |
| Customer opened it | — | — | Viewed |
| Part paid | (still open) | (still AUTHORISED) | Partially paid |
| Overdue | (a "Past due" badge on open) | — | Overdue |
| Paid | paid | PAID | Paid → Deposited / Not deposited |
| Written off as bad debt | uncollectible | — | — |
| Cancelled after issue | void | VOIDED | Voided |
| Removed before issue | (deleted) | DELETED | — |
Stripe: finalizing is the point of no return
Stripe's five statuses each come with a list of what you are still allowed to do. The rule that matters most sits between draft and open.
A draft is fully editable: "All invoices start in draft status." You can delete it too, "unless it’s associated with a subscription." But once finalized, it is locked: "You can’t delete a finalized invoice. To cancel it, change its status to void."
Voiding is not deleting. "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."
Stripe is the only one of the three with a status for bad debt. uncollectible means "The customer is unlikely to pay the invoice. Normally, you treat it as bad debt in your accounting process." It exists so you can track the amount owed for reporting while admitting you won't get it.
And "past due" is not a Stripe invoice status. "In the Dashboard, invoices in open status can display a different badge, such as Past due or Retrying" — the status underneath is still open.
Xero: an approval step, and the moment it hits your books
Xero is the only one of the three with an approval stage built into the status list. Its developer documentation defines the three statuses you can set:
DRAFT: "No journals are created, meaning the details of these invoices won’t be used in any reports."
SUBMITTED: "This status is used if there’s an approval process required on the invoice. The invoice will be posted to the “Awaiting approval” tab in Xero."
AUTHORISED: "This status assumes there’s no approval process required and that the invoice is ready to be sent to the customer. The invoice will be posted to the “Awaiting payment” tab in Xero."
Two things follow. First, the name changes between the API and the app: "the terminology will differ in Xero and show as Approved." Second, AUTHORISED is when the invoice becomes accounting: "Authorised invoices will create journals in Xero, so all details will be used in reports."
Xero publishes the exact transitions allowed. Drafts and submitted invoices can move freely between each other, be authorised, or be DELETED. An authorised invoice has only one way out: VOIDED. There is no path from AUTHORISED back to DRAFT or to DELETED. And if you don't send a status at all, "the API will default the invoice status to DRAFT."
QuickBooks Online: statuses that track the whole trip
QuickBooks Online's statuses cover more than the invoice itself. Its help centre lists:
| Status | QuickBooks' definition |
|---|---|
| Open | "The invoice has an open balance." |
| Not sent | "You created the invoice, but didn't send it to the customer." |
| Sent | "You emailed the invoice to the customer." |
| Viewed | "Your customer opened the invoice." |
| Partially paid | "Your customer made a partial payment." |
| Paid | "Your customer paid the invoice in full." |
| Deposited | "The bank deposit for the invoice payment is recorded in QuickBooks." |
| Not deposited | "The invoice is paid, but the bank deposit isn't recorded in QuickBooks." |
| Undelivered or Delivery error | "The invoice was undelivered." |
| Voided | "The invoice was voided in QuickBooks." |
Overdue means "the invoice has an open balance and is past the due date."
This is the only one of the three that tells you whether the customer opened the invoice (Viewed), whether the email bounced (Undelivered), and whether the money has reached the bank (Deposited vs Not deposited). Stripe and Xero stop at "paid."
What to take from this
- Pick your point of no return deliberately. All three let you delete a draft and only void an issued invoice. That isn't a UI choice — it's what keeps invoice numbers continuous and an audit trail intact. Copy it.
- Separate "paid" from "money in the bank." QuickBooks splits them because they are different moments for an accountant. If your users reconcile, you'll need both.
- Decide whether overdue is a status or a view. Stripe shows it as a badge on
open; QuickBooks shows it as its own status. A status needs updating when the date passes. A computed view doesn't.
Method and limits
Stripe's statuses and rules are from its invoicing documentation; Xero's from its developer "Invoice Status" guide and its official OpenAPI specification on GitHub; QuickBooks Online's from its help article on tracking invoice status. All were read on 2026-09-24. QuickBooks' article is written for its mobile app; labels in other editions may differ. We have no affiliation with any of the three.
Sources
- Stripe — Invoicing overview: invoice statuses
- Xero — Invoice Status (developer best practices)
- Xero — Official Accounting API OpenAPI spec
- QuickBooks — Track the status of invoices
Researched by SaaSReadyit, which writes AI-generated validation reports for software ideas. Related: Subscription statuses compared · The status that gets you paid.