Quotes
Create, send, and track quotes linked to a customer or job
Quotes are price proposals you send to customers. A quote can stand alone or
be linked to an existing job (ticketId). Each quote tracks its own send,
view, and accept dates so you can build customer-facing dashboards.
Endpoints
- GET
/organisations/{orgId}/quotes— List quotes (paginated) - POST
/organisations/{orgId}/quotes— Create quote - GET
/organisations/{orgId}/quotes/{quoteId}— Get quote - PUT
/organisations/{orgId}/quotes/{quoteId}— Update quote - DELETE
/organisations/{orgId}/quotes/{quoteId}— Delete quote
List supports customerId, ticketId, and accepted (true/false) filters,
ordered by createdOn descending.
Required scopes: quotes:read / quotes:write / quotes:delete. Convert
needs both quotes:write and invoices:write.
When expirationDate is omitted on create, it is createdOn + expirationDays.
viewedByCustomer / viewedDate are read-only. accepted / invoiced /
sent are client-writable (matching the app); accepting does not create
an invoice.
/organisations/{orgId}/quotes/{quoteId}/convert
creates an invoice and sets invoiced / invoicedDate. Already-converted
quotes return 409 QUOTE_ALREADY_INVOICED unless ?force=true. A job
with outstanding invoice-gate forms returns 409 FORM_GATE_INVOICE.
/organisations/{orgId}/quotes/{quoteId}/share-link
mints a public view token (?markSent=false to skip marking sent).
/organisations/{orgId}/quotes/{quoteId}/share-link/{tokenId}
revokes it (quotes:write).
Auto-incrementing index
index is assigned by the server from the org quote counter. It is not
client-settable — omit it from create/update bodies.
discount is { "isPercentage": true, "value": 10 } (percentage) or
{ "isPercentage": false, "value": 25 } (fixed). services and
inventoryItems are embedded LineItem snapshots.
Machine-readable version: OpenAPI spec.