---
title: "Approve Quote On Behalf"
method: POST
path: "/api/v1/admin/quotes/{quote_id}/approve-on-behalf"
tags: ["admin-quotes"]
---

# Approve Quote On Behalf

`POST /api/v1/admin/quotes/{quote_id}/approve-on-behalf`

Approve a quote on behalf of the customer.

Used when ops needs to advance a project past the customer's
"Approve and Pay" gate (e.g. an unresponsive buyer who has agreed
out-of-band). Validates the same QUOTED + ``is_human_reviewed`` gate
as the user-side approval, transitions both the quote and the
project to APPROVED, writes a ``quote_approved_by_admin`` audit row,
and fires an in-app notification to the user.

Permission: ``quotes:edit`` (same gate used by ``/review``,
``/auto-price``, etc.).

## Path parameters

- `quote_id` string, uuid, required

## Request body

- QuoteApprovalRequest — Quote approval payload with optional delivery option selection.
  - `delivery_option_id` string, uuid, nullable — Selected delivery option. Optional for legacy quotes; when omitted the backend uses the enabled default option.

## 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)
