Docs
API Reference

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.

POST/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.

POST/organisations/{orgId}/quotes/{quoteId}/share-link

mints a public view token (?markSent=false to skip marking sent).

DELETE/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.

On this page