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-{year}-{sequence} (e.g. QT-2026-0001). The prefix and next number are configurable via organisation settings.

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