---
title: "Quote update"
method: PUT
path: "/public/v1/documents/{document_id}/quotes/{quote_id}"
tags: ["Quotes"]
---

# Quote update

`PUT /public/v1/documents/{document_id}/quotes/{quote_id}`

## Request

- Base URL: `https://api.pandadoc.com`
- URL: `https://api.pandadoc.com/public/v1/documents/{document_id}/quotes/{quote_id}`
- Auth: one of:
  - API key in header `Authorization`
  - OAuth 2
    - Authorization code: `https://app.pandadoc.com/oauth2/authorize`
    - Token URL: `https://api.pandadoc.com/oauth2/access_token`
- TypeScript: <https://skmtc.dev/pandadoc/apis/pandadoc-public-api/docs/public/v1/documents/:document_id/quotes/:quote_id/put.ts> (a function with typed inputs; its response is checked against the schema)

This operation updates the details of a specific quote within a document by specifying the document ID and quote ID.

> 📘 **Permissions**
>
> Requires the 'Can Edit Document' and 'Can Edit Content' permissions.
> The document must be in Draft (`document.draft`).
> Updating quotes is available on plans that include
> [Product Catalog](https://support.pandadoc.com/en/articles/9714691-product-catalog).

> 🚧 Payload size
>
> The maximum request body size is 512 KiB (524288 bytes). Larger requests return `413` and are not applied.

## Path parameters

- `document_id` string, required
- `quote_id` string, required

## Request body

- QuoteUpdateRequest
  - `currency` string: Currency code (ISO 4217)
  - `summary` QuoteUpdateRequestSummary: Summary settings containing adjustments (discounts, fees, taxes) and custom columns that apply to the entire quote / section total.
    - `custom_columns` object
    - `discounts` object: Summary level discounts.
    - `fees` object: Summary level fees.
    - `taxes` object: Summary level taxes.
  - `sections` object[]: Quote sections - this property overrides existing sections in the specified order. If you want to change only one section, you must still pass other sections IDs. Otherwise these sections will be removed.
    - `id` string, uuid: Section ID to update. Invalid (or missing) ID causes creating a new section.
    - `name` string, nullable: Name of the quotes section. If you create a section without providing a value, it will have the default value.
    - `summary` QuoteUpdateRequestSummary: Summary settings containing adjustments (discounts, fees, taxes) and custom columns that apply to the entire quote / section total.
      - `custom_columns` object
      - `discounts` object: Summary level discounts.
      - `fees` object: Summary level fees.
      - `taxes` object: Summary level taxes.
    - `columns` object[], nullable: Omitted, null, or an empty list leaves the columns unchanged. A non-empty list replaces the full set, so columns not in the list are removed.
      - `header` string, nullable
      - `name` string, required
      - `merge_name` string, nullable
      - `hidden` boolean, required
      - `formula_expression` string, nullable
    - `items` object[]: Section items - this property overrides the existing items in the order specified. If you want to change only one item, you must still pass other items IDs. Otherwise these items will be removed.
      - `id` string, uuid: Item ID to update. Invalid (or missing) ID causes creating a new item.
      - `sku` string: Product SKU. If you create an item without providing a value, it will have the default value.
      - `name` string: Item name. If you create an item without providing a value, it will have the default value.
      - `description` string: Item description. If you create an item without providing a value, it will have the default value.
      - `qty` integer: Item QTY. If you create an item without providing a value, it will have the default value.
      - `price` number: Item price. If you create an item without providing a value, it will have the default value. If `price_settings` is passed, this value may change after the quote is updated.
      - `price_settings` object: Price settings if the price is not flat rate. If it is null, the price is flat rate.
        - `base_value` number, nullable, required: Base value for volume discount pricing. If set, tiers are treated like percentage of discount on this value. If not set, tiers are treated like a flat value discount of chosen currency.
        - `tiers` object[], required
          - `min_qty` integer, required
          - `value` number, required
      - `cost` number: Item cost. If you create an item without providing a value, it will have the default value.
      - `billing_frequency` 'weekly' | 'monthly' | 'annually' | 'quarterly' | 'semiannually', nullable
      - `contract_term` integer, nullable: Contract term. Measured in units set in the `billing_frequency` parameter.
      - `reference_id` string, nullable: Use this field to pass an id that references this item in external systems.
      - `options` object: Denotes whether an item is selected, optional, and has editable quantity.
        - `selected` boolean
        - `qty_editable` boolean, required
        - `optional` boolean
      - `custom_columns` object
      - `external_columns` object
      - `text_columns` object
      - `discounts` object: Item discounts.
      - `taxes` object: Item taxes.
      - `fees` object: Item fees.
      - `multipliers` object: Item multipliers.
    - `settings` object: Section settings. Denotes whether a section is optional or selected, and selection type inside the section - single, multiple, or custom.
      - `optional` boolean
      - `selected` boolean
      - `selection_type` 'custom' | 'single' | 'multiple'
  - `settings` object: Quote settings. Denotes whether a quote is optional or selected, and selection type inside the section - single, multiple, or custom.
    - `selection_type` 'custom' | 'single' | 'multiple'

## Response `200`

OK

- QuoteResponse
  - `id` string
  - `currency` string
  - `total` string
  - `summary` object
    - `total` string
    - `subtotal` string, nullable
    - `one_time_subtotal` string, nullable
    - `recurring_subtotal` object[], nullable
      - `billing_cycle` string
      - `value` string
    - `total_qty` string, nullable
    - `discounts` object, nullable
    - `taxes` object, nullable
    - `fees` object, nullable
    - `custom_fields` object, nullable
    - `total_discount` string, nullable
    - `total_tax` string, nullable
    - `total_fee` string, nullable
    - `total_savings` string, nullable
    - `total_contract_value` string, nullable
  - `sections` object[]
    - `id` string
    - `name` string
    - `summary` object
      - `total` string
      - `subtotal` string, nullable
      - `one_time_subtotal` string, nullable
      - `recurring_subtotal` object[], nullable
        - `billing_cycle` string
        - `value` string
      - `total_qty` string, nullable
      - `discounts` object, nullable
      - `taxes` object, nullable
      - `fees` object, nullable
      - `custom_fields` object, nullable
      - `total_section_value` string, nullable
    - `columns` object[]
      - `header` string, nullable
      - `name` string
      - `merge_name` string, nullable
      - `hidden` boolean
      - `formula_expression` string, nullable
      - `formula_error_code` string, nullable
    - `items` object[], nullable
      - `id` string, nullable
      - `sku` string, nullable
      - `name` string, nullable
      - `description` string, nullable
      - `qty` string, nullable
      - `price` string, nullable
      - `cost` string, nullable
      - `billing_frequency` 'weekly' | 'monthly' | 'annually' | 'quarterly' | 'semiannually', nullable
      - `contract_term` string, nullable
      - `pricing_method` string, nullable
      - `type` string, nullable
      - `reference_type` string, nullable
      - `options` object, nullable
        - `selected` boolean, nullable
        - `qty_editable` boolean, nullable
      - `custom_columns` object, nullable
      - `formula_columns` object, nullable
      - `external_columns` object
      - `discounts` object, nullable
      - `taxes` object, nullable
      - `fees` object, nullable
      - `multipliers` object, nullable
      - `total` string, nullable
      - `overall_total` string, nullable
      - `total_qty` string, nullable
      - `reference_id` string, nullable
      - `thumbnail` string, nullable
      - `images` string[], nullable
      - `merged_data` object, nullable
    - `total` string
    - `settings` QuoteSectionSettings
      - `optional` boolean
      - `selected` boolean
      - `selection_type` 'custom' | 'single' | 'multiple'
      - `data_merge_enabled` boolean
  - `merge_rules` object[]
    - `id` string
    - `enabled` boolean
    - `action` object
      - `type` string
      - `section_id` string
    - `condition` object
      - `field_name` string
      - `type` string
      - `comparison` object[]
        - `type` string
        - `value` string
  - `settings` object
    - `selection_type` 'custom' | 'single' | 'multiple'

## Other responses

- `401`: Authentication error
- `403`: Permission error
- `404`: Not found
- `409`: Conflict
- `413`: Request entity too large.
- `429`: Too Many Requests

## Changes

- **2026-11-03** `b9a306b1a421`: 2 breaking, 5 warning, 12 info
  - removed the enum value `semiannualy` of the request property `sections/items/items/items/billing_frequency`
  - the `sections/items/columns/items/hidden` response's property type changed from `string` to `boolean` for status `200`
  - added the new `annually` enum value to the `sections/items/items/items/billing_frequency` response property for the response status `200`
  - added the new `monthly` enum value to the `sections/items/items/items/billing_frequency` response property for the response status `200`
  - …15 more

[Operation history](https://skmtc.dev/pandadoc/apis/pandadoc-public-api/changes/public/v1/documents/:document_id/quotes/:quote_id/put.md)

---

[API](https://skmtc.dev/pandadoc/apis/pandadoc-public-api.md) - [All operations](https://skmtc.dev/pandadoc/apis/pandadoc-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/pandadoc/apis/pandadoc-public-api/revisions/b9a306b1a421?raw)
