Public API - set the primary quote of an opportunity
What is the problem, wish or change?
Integrations can read which quote is primary on an opportunity, but they cannot change it. Quote create through the Public API only makes a quote primary when it is the opportunity's first quote. A second or replacement quote built by an integration stays non-primary until someone clicks the star in Salesbuildr.
Who or what is impacted?
MSPs that build quotes from their own tooling through the Public API (requested by GOsensit, an Autotask tenant). The primary quote drives the opportunity's value and contract length, and on Autotask the primary flag of the PSA quote.
Why does this matter now?
It is the last manual step in the UI for a quote flow built entirely through the API. The logic already exists behind the UI star, so the API can reuse it as-is.
What does "done" look like?
An integration makes any quote of an opportunity primary, addressed by internal id or external identifier. The result is identical to clicking the star in the UI: the previous primary is unset, the opportunity value and contract length follow the new primary, and Autotask receives the primary flag.
Acceptance criteria:
A quote can be made primary through the Public API using its internal id or its external identifier.
Afterwards exactly one quote of the opportunity is primary; the API response and webhooks show the change.
Opportunity value and contract length follow the new primary quote, exactly as in the UI.
The UI rules apply: only callers allowed to manage the quote, and on ConnectWise tenants no change while the current primary is approved; both return a clear error.
Making the current primary primary again succeeds without side effects; deleted quotes are rejected.
On Autotask the new primary flag reaches the PSA quote, as when done in the UI.
The endpoint is documented in the Public API docs.
Log in to comment and vote
Comments1
Bram Fofana
Nov 4
Reading the primary quote through the Public API but not being able to set it is the last manual step in an API-driven flow. The logic already exists behind the star in the UI. I am taking it to refinement so an integration can set the primary quote of an opportunity, with the same rules as the UI. No timeline yet.