---
title: "Update Quote"
method: PATCH
path: "/api/v1/admin/quotes/{quote_id}"
tags: ["admin-quotes"]
---

# Update Quote

`PATCH /api/v1/admin/quotes/{quote_id}`

Update quote fields such as status, pricing, lead time, and notes.

Status transitions are validated against the allowed transition map.

## Path parameters

- `quote_id` string, uuid, required

## Request body

- QuoteAdminUpdate — Admin sets pricing, lead time, status, and review flag on a quote. Used by the admin panel to transition a quote through its lifecycle. ``total_amount`` is typically the sum of line item totals but can be overridden (e.g. to apply a project-level discount).
  - `status` string, nullable — New quote status (must be a valid QuoteStatus value)
  - `total_amount` union — Total quote amount in USD
    - number
    - string
  - `lead_time_days` integer, nullable — Estimated business days until delivery (numeric, used for arithmetic)
  - `lead_time_display` string, nullable — Display override for lead time (e.g. '4-5', '7-10'). Overrides the numeric lead_time_days on the PDF and user-facing quote cards. When unset, the numeric value is rendered instead.
  - `additional_line_items` AdditionalLineItemInput[], nullable — Admin-entered misc line items rendered ABOVE the tax line (e.g. rush fee, tooling). INCLUDED in the Stripe Tax base.
    - `label` string, required
    - `quantity` integer, nullable — Optional display quantity for admin-entered misc line items. When set, the PDF shows the quantity alongside the label. The amount remains the line amount, not a unit price.
    - `amount` union, required
      - number
      - string
  - `additional_line_items_post_tax` AdditionalLineItemInput[], nullable — Admin-entered misc line items rendered BELOW the tax line (e.g. shipping, handling, flat discount). NOT taxed — adds to the grand total without affecting the Stripe Tax base.
    - `label` string, required
    - `quantity` integer, nullable — Optional display quantity for admin-entered misc line items. When set, the PDF shows the quantity alongside the label. The amount remains the line amount, not a unit price.
    - `amount` union, required
      - number
      - string
  - `valid_until` string, date-time, nullable — Quote expiration timestamp (timezone-aware)
  - `notes` string, nullable — Notes visible to the customer
  - `is_human_reviewed` boolean, nullable — Flag indicating an admin has reviewed this quote
  - `tax_amount` union — Tax amount in USD (overrides auto-calculated value)
    - number
    - string
  - `require_deposit` boolean, nullable — Whether a deposit is required before production
  - `deposit_percentage` union — Deposit percentage (0-100)
    - number
    - string
  - `customer_name_override` string, nullable — Override for the 'Prepared For' name on the quote PDF. Used when an admin creates a quote on behalf of an end customer. Pass an empty string to clear the override.
  - `customer_email_override` string, nullable — Override for the 'Prepared For' email on the quote PDF. Pass an empty string to clear the override.
  - `customer_billing_address_override` string, nullable — Free-form billing address override for the 'Bill To' block on the quote and invoice PDFs. Multi-line strings (newline-separated) are rendered as-is. Pass an empty string to clear the override and fall back to the order's shipping address / BusinessProfile billing address.
  - `customer_shipping_address_override` string, nullable — Free-form shipping address override for the 'Ship To' block on the quote and invoice PDFs. Multi-line strings (newline-separated) are rendered as-is. Pass an empty string to clear the override and fall back to the project's resolved shipping address.
  - `customer_shipping_name_override` string, nullable — Shipping CONTACT name override for the 'Ship To' block on the quote, invoice, and packing slip PDFs (the receiving dock vs AP-department distinction). Pass an empty string to clear and fall back to customer_name_override, then the project owner's full name.

## Response `200`

Successful Response

- QuoteDetailResponse — Full quote representation with nested line items. Used by GET /quotes/{id} to return the quote along with all of its line items in a single response. Includes AI estimation metadata, review tracking fields, and tax calculation results.
  - `id` string, uuid, required
  - `status` string, required
  - `intent` string
  - `total_amount` string, nullable
  - `lead_time_days` integer, nullable
  - `lead_time_display` string, nullable
  - `additional_line_items` AdditionalLineItemOutput[], nullable
    - `label` string, required
    - `quantity` integer, nullable — Optional display quantity for admin-entered misc line items. When set, the PDF shows the quantity alongside the label. The amount remains the line amount, not a unit price.
    - `amount` string, required
  - `additional_line_items_post_tax` AdditionalLineItemOutput[], nullable
    - `label` string, required
    - `quantity` integer, nullable — Optional display quantity for admin-entered misc line items. When set, the PDF shows the quantity alongside the label. The amount remains the line amount, not a unit price.
    - `amount` string, required
  - `valid_until` string, date-time, nullable
  - `notes` string, nullable
  - `ai_estimate` object, nullable
  - `ai_estimate_generated_at` string, date-time, nullable
  - `is_human_reviewed` boolean, required
  - `require_deposit` boolean
  - `deposit_percentage` string, nullable
  - `customer_name_override` string, nullable
  - `customer_email_override` string, nullable
  - `customer_billing_address_override` string, nullable
  - `customer_shipping_address_override` string, nullable
  - `customer_shipping_name_override` string, nullable
  - `reviewed_by` string, nullable
  - `reviewed_at` string, date-time, nullable
  - `tax_amount` string, nullable
  - `tax_auto_calculated` string, nullable
  - `tax_rate` string, nullable
  - `quote_pdf_url` string, nullable
  - `cost_snapshot` object, nullable
  - `pricing_config_version` string, nullable
  - `snapshot_version` integer
  - `selected_delivery_option_id` string, uuid, nullable
  - `selected_delivery_option` QuoteDeliveryOptionResponse — Selectable quote option with its own lead time and pricing.
    - `id` string, uuid, required
    - `quote_id` string, uuid, required
    - `key` string, required
    - `label` string, required
    - `description` string, nullable
    - `sort_order` integer, required
    - `is_enabled` boolean, required
    - `is_default` boolean, required
    - `lead_time_days` integer, nullable
    - `lead_time_display` string, nullable
    - `pricing_multiplier` string, nullable
    - `lead_time_multiplier` string, nullable
    - `taxable_amount` string, nullable
    - `tax_amount` string, nullable
    - `tax_auto_calculated` string, nullable
    - `tax_rate` string, nullable
    - `stripe_tax_calculation_id` string, nullable
    - `post_tax_amount` string, nullable
    - `grand_total_amount` string, nullable
    - `admin_notes` string, nullable
    - `line_items` QuoteDeliveryOptionLineItemResponse[]
      - `id` string, uuid, required
      - `delivery_option_id` string, uuid, required
      - `part_id` string, uuid, nullable
      - `part_name` string, nullable
      - `description` string, nullable
      - `quantity` integer, nullable
      - `unit_price` string, nullable
      - `total_price` string, nullable
      - `is_additional` boolean
      - `is_taxable` boolean
      - `sort_order` integer
      - `notes` string, nullable
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `project_id` string, uuid, required
  - `line_items` QuoteLineItemResponse[]
    - `id` string, uuid, required
    - `part_id` string, uuid, required
    - `part_name` string, nullable
    - `description` string, nullable
    - `quantity` integer, required
    - `unit_price` string, nullable
    - `total_price` string, nullable
    - `notes` string, nullable
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `delivery_options` QuoteDeliveryOptionResponse[]
    - `id` string, uuid, required
    - `quote_id` string, uuid, required
    - `key` string, required
    - `label` string, required
    - `description` string, nullable
    - `sort_order` integer, required
    - `is_enabled` boolean, required
    - `is_default` boolean, required
    - `lead_time_days` integer, nullable
    - `lead_time_display` string, nullable
    - `pricing_multiplier` string, nullable
    - `lead_time_multiplier` string, nullable
    - `taxable_amount` string, nullable
    - `tax_amount` string, nullable
    - `tax_auto_calculated` string, nullable
    - `tax_rate` string, nullable
    - `stripe_tax_calculation_id` string, nullable
    - `post_tax_amount` string, nullable
    - `grand_total_amount` string, nullable
    - `admin_notes` string, nullable
    - `line_items` QuoteDeliveryOptionLineItemResponse[]
      - `id` string, uuid, required
      - `delivery_option_id` string, uuid, required
      - `part_id` string, uuid, nullable
      - `part_name` string, nullable
      - `description` string, nullable
      - `quantity` integer, nullable
      - `unit_price` string, nullable
      - `total_price` string, nullable
      - `is_additional` boolean
      - `is_taxable` boolean
      - `sort_order` integer
      - `notes` string, nullable
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/prototyping/apis/prototyping-io-api.md) · [All operations](https://skmtc.dev/prototyping/apis/prototyping-io-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/prototyping/prototyping-io-api/revisions/f4a0079fbb57/schema)
