Update Quote
PUT /quotes/{quote_id}
Update a quote in place (PUT or PATCH — both accepted).
All fields are optional; only the ones you send change. Draft quotes edit
directly. A sent / viewed quote is recalled to draft first (voiding
its live signing link) while keeping the same row + quote number; terminal
quotes (accepted/declined/voided/expired) reject the update.
owner_id reassigns the quote’s AE (a blank value is ignored — it never
nulls an existing owner). billing_legal_name / billing_email /
billing_primary_email / billing_address set the customer’s billing
identity. Passing line_items replaces the entire line-item set (and
re-runs quotable-product authorization). Totals recalculate automatically.
Authorizations
Parameters
Path Parameters
Quote UUID
Quote UUID
Header Parameters
Request Body required
Partial update for a draft quote.
All fields optional. Passing line_items replaces them entirely
(and re-runs quotable-product authorization). Quotes in any status
other than draft reject updates with 400 — use edit-as-draft
on a sent quote, or duplicate on a terminal one, to get a
fresh editable copy.
object
One line item on a quote request body.
Shape mirrors integrations_v4.interfaces.fastapi.quote_router.LineItemDTO
exactly. Pass either stripe_product_id + stripe_price_id (for a
Stripe-catalogue product) or manual_product_id (for an org-owned
manual catalogue entry), or neither (for a custom one-off line).
Authorization is enforced server-side — non-quotable products are
rejected with 400.
object
Contract month when recurring billing begins; 1 means at contract start. Use billing_start_date instead for an exact date.
In cents
Responses
200
Successful Response
object
Full row + line items + activity + envelope from GET /quotes/{id}.
Open dict because _get_quote_detail returns the dynamic
_row_to_dict shape plus resolved contact/company/envelope blocks.
object
object
object
422
Validation Error