Concepts
Document lifecycle
Invoices and quotes share a data model but move through separate sets of statuses.
Invoices
| Status | Meaning |
|---|---|
draft |
Can be edited. No invoice number yet. |
pending_review |
Waiting for someone in the workspace to review it. |
approved |
Reviewed and ready to finalize. |
finalized |
Numbered and locked against changes. |
sent |
Emailed to the customer. |
paid |
Payment recorded. paidAt is set. |
cancelled |
Voided. Kept on record. |
We may add statuses to this list. Treat a value you don’t recognise as still in progress instead of raising an error. See Compatibility.
Drafts
There’s no separate drafts endpoint. List drafts with GET /invoices?status=draft and edit them with PATCH /invoices/{id}. Only drafts can be edited.
Quotes
Quote statuses start with quote_ so they can’t be mistaken for invoice statuses. A quote can only be accepted or declined once it has been sent, and it can expire while sent or accepted. Converting an accepted quote creates a new draft invoice and moves the quote to quote_converted.
Invoice numbers
invoiceNumber is null until the invoice is finalized. Numbers follow the sequence set up in the workspace, so don’t generate your own or depend on the format.
The id field is a public handle, not the invoice number. Use id in API calls and show invoiceNumber to people.