Quotes

Quotes are proposals sent to contacts before work begins. They share the same underlying invoices table as sales invoices (with invoice_type = 'quote') and follow a parallel lifecycle.

Lifecycle

draft → sent → accepted → converted
             → declined
  • draft — editable, can be deleted
  • sent — delivered to the contact, no longer editable
  • accepted — contact has agreed, eligible for conversion
  • declined — contact rejected the quote
  • converted — an invoice has been created from this quote

Only accepted quotes can be converted to invoices. Only draft quotes can be edited or deleted.

Conversion

Converting a quote creates a new draft invoice copying all line items, contact, notes, and terms. The quote is marked as converted with a link to the new invoice. The invoice gets a new invoice number from the standard numbering sequence.

Amounts

All monetary values are in minor units (pence). Line-level calculations use Decimal.js for precision. Quote totals are computed server-side from line items.

Numbering

Quotes use the pattern QT-{sequence} (e.g. QT-0001). Numbers are issued atomically from accounting.document_sequences per organisation. The sequence is monotonically increasing and independent of year. Duplicate numbers are impossible under concurrent creation (AX-CON-001).

Expiry

Quotes have a validUntil date. Expired quotes (where validUntil < today and status is sent) are tracked in the stats but not automatically transitioned — the status remains sent.

→ The Quotes object

Endpoints