API ReferenceGetting Started
Invoice Lifecycle
Invoices progress through a defined set of statuses. Understanding this lifecycle is important when building integrations.
Invoices progress through a defined set of statuses. Understanding this lifecycle is important when building integrations.
Status flow
draft → finalized → sent → paid
↓
overdue (set automatically when past due date)
Any status → voidStatuses
| Status | Description |
|---|---|
draft | Editable. Not yet issued. Line items can be added, changed, or removed. |
finalized | Locked for editing. Amounts are fixed. Ready to send to the client. |
sent | Issued to the client. Payment reminder schedule begins. |
paid | Payment has been recorded (manually or via Stripe). |
overdue | Was sent but the due date has passed without payment. Set automatically. |
void | Cancelled. No further state changes are permitted. |
Key transitions
| Action | Endpoint | Requirement |
|---|---|---|
| Lock amounts | POST /invoices/{id}/finalize | Must be draft |
| Issue to client | POST /invoices/{id}/send | Must be finalized |
| Record payment | POST /invoices/{id}/mark-paid | Must be sent or overdue |
| Cancel | POST /invoices/{id}/void | Any status |
Editing restrictions
Only draft invoices can be updated (PATCH /invoices/{id}) or deleted. Attempting to edit a non-draft invoice returns 422 Unprocessable.