Skip to main content
Ottili HQ

Convert quotes to orders

Convert quotes to orders in Ottili HQ: acceptance, the quote status model, conversion through the UI and the Unified API, frozen accepted scope, idempotency and the lead-to-cash hand-off - all company-scoped.

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 pendingaccepted (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:

StatusMeaningConvertible to order?
draftDraft, not yet sentYes
sentSent, awaiting the customer's responseYes
acceptedAccepted by the customerYes
rejectedRejectedNo (re-open as a draft first)
expiredExpiredNo (re-open as a draft first)
converted_to_orderAlready converted to an orderNo (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_order cannot 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-order

The response contains the newly created order. For several quotes at once:

POST /api/v1/platform/business/quotes/bulk/convert-to-order

Mark a quote as accepted by the customer:

POST /api/v1/platform/business/quotes/{quote_id}/document/accept

All 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?