Overview
In Ottili HQ, converting quotes to orders is part of the lead-to-cash flow: customer → lead → deal → quote → order → invoice → open items → payment. An accepted quote is the hand-off from sales to fulfilment.
A quote is a fixed-price offer to a customer. Once the customer accepts it - through the customer portal or directly in Ottili HQ - you can carry it into an order. In Ottili HQ, order, quote, invoice and payment share the same data model and the same company boundary; conversion copies the accepted scope and links both records without re-entering data.
[Leads and qualification](/docs/leads-and-qualification) explains how a lead becomes a deal. [Companies and contacts](/docs/companies-and-contacts) covers where the customer and contact are managed.
Prerequisites
- The quote must belong to a company (
company_id) and have a customer. - The quote must be in a convertible status (see the status model below).
- The line items, prices and terms must be final - after conversion the accepted scope is frozen.
Accept the quote
Before a quote becomes an order, it is marked as accepted:
- Through the customer portal* - the customer opens the shared quote and accepts it. This sets the acceptance status to
accepted. - Directly in Ottili HQ* - you mark the quote as accepted as soon as verbal or written confirmation is in hand.
The acceptance status moves through pending → accepted (or rejected). A rejected quote can be reworked and re-sent.
Convert the quote to an order
You convert a quote from two places:
1. From the quote* - in the detail of an accepted quote, choose Convert to order*.
2. From the list* - the quotes list has a bulk action for several quotes at once.
On conversion:
- a new order is created,
- the order keeps a link to the source quote (quote number and version),
- the accepted scope* (line items, prices, taxes, terms, files, customer, deal linkage, owner) is copied immutably,
- the quote moves to the terminal status
converted_to_order.
Quote status model
A quote moves through these statuses:
| Status | Meaning | Convertible to order? |
|---|---|---|
draft | Draft, not yet sent | Yes |
sent | Sent, awaiting the customer's response | Yes |
accepted | Accepted by the customer | Yes |
rejected | Rejected | No (re-open as a draft first) |
expired | Expired | No (re-open as a draft first) |
converted_to_order | Already converted to an order | No (terminal) |
Conversion is therefore possible from any non-terminal status except the terminal converted_to_order. A rejected or expired quote must first be moved back to draft.
Avoiding repeats and conflicts
- No double conversion* - a quote in
converted_to_ordercannot be converted again. A repeat attempt returns a conflict (ALREADY_CONVERTED) and points to the order already created. - Idempotency* - re-submitting with the same idempotency key returns the original order instead of creating a second one.
- Revisions* - a new quote version after conversion starts a fresh quote record; it does not mutate the order already created.
Via the API
Through the Unified API you convert a quote directly:
POST /api/v1/platform/business/quotes/{quote_id}/convert-to-orderThe response contains the newly created order. For several quotes at once:
POST /api/v1/platform/business/quotes/bulk/convert-to-orderMark a quote as accepted by the customer:
POST /api/v1/platform/business/quotes/{quote_id}/document/acceptAll endpoints are company-scoped: a company only sees and converts its own quotes.
What happens after conversion
From the order, the lead-to-cash flow continues:
1. Order* - the binding purchase with the frozen scope.
2. Invoice* - generated from the order.
3. Open items* - the outstanding receivable.
4. Payment* - receipt of payment closes the loop.
Customer, values and line items stay linked across every step.
Status and availability
Quote-to-order conversion in Ottili HQ is Live* (available). The lead-to-cash flow as a whole is available. Individual environments may differ depending on entitlements and module activation - see also [Understand feature status labels](/docs/understand-feature-status-labels).
Privacy and the company boundary
Every quote and every order belongs to a company (company_id). All queries are company-scoped: a company only sees its own quotes, orders and the resulting invoices. This holds for the UI, the API, search, files and flows.
Related topics
- Leads and qualification* - how a lead becomes a qualified contact and deal.
- Companies and contacts* - manage customers and contacts in Ottili HQ.
- Ottili HQ overview* - the ERP/CRM core data model.
- Getting started with Ottili ONE* - create your company and sign in.
- Workspace and modules* - how the surface and modules work together.
- Understand feature status labels* - Live, Beta, Private Beta, In Development, Planned, Concept.
Was this article helpful?
