---
title: "PUT /jobs/{jobId}/quotes/version/{versionNumber}"
method: PUT
path: "/jobs/{jobId}/quotes/version/{versionNumber}"
tags: ["Jobs"]
---

# PUT /jobs/{jobId}/quotes/version/{versionNumber}

`PUT /jobs/{jobId}/quotes/version/{versionNumber}`

## Request

- Base URL: `https://api.fergus.com`
- URL: `https://api.fergus.com/jobs/{jobId}/quotes/version/{versionNumber}`
- Auth: one of:
  - OAuth 2
    - Authorization code: `https://auth.fergus.com/oauth2/authorize`
    - Token URL: `https://auth.fergus.com/oauth2/token`
  - HTTP bearer
- TypeScript: <https://skmtc.dev/fergus/apis/fergus-api/docs/jobs/:jobId/quotes/version/:versionNumber/put.ts> (a function with typed inputs; its response is checked against the schema)

Update a quote by version number. Supported for jobs with jobType Quote or Estimate. The quote must be a draft.

## Path parameters

- `jobId` integer, required
- `versionNumber` integer, required

## Request body

- object
  - `title` string
  - `description` string
  - `sections` object[], required
    - `name` string, required
    - `favouriteSectionId` union
      - number
      - object
        - `value` number, required
        - `combined` boolean
        - `lineItemMultiplier` number
    - `favouriteSectionIds` union
      - number[]
      - object[]
        - `value` number, required
        - `combined` boolean
        - `lineItemMultiplier` number
    - `sectionLineItemMultiplier` number
    - `parentSectionId` number
    - `description` string
    - `sortOrder` number
    - `lineItems` object[]
      - `quoteLineItemId` number
      - `priceBookLineItemId` number: When set, this line is priced from the price book: itemPrice, itemName, itemCost, isLabour and salesAccountId are all server-derived and any values supplied for them here are ignored. itemName is the price book item's productCode, a space, then its name, the same format as the Fergus quote editor. Both are trimmed first. If one is blank, itemName is just the other one, and if both are blank it is an empty string. itemName is capped at 500 characters.
      - `itemName` string: Ignored when priceBookLineItemId is set; the name is then derived from the price book item (see priceBookLineItemId).
      - `itemQuantity` number
      - `itemPrice` number: The undiscounted unit sell price — discounts are carried by discountRate only, never baked in here. Ignored, and overwritten with the tier-derived price, when priceBookLineItemId is set. For a one-off line (no priceBookLineItemId), an explicit value is used as-is; if omitted and itemCost is greater than 0, the price is instead derived from cost using the pricing tier's markup, and otherwise defaults to 0.
      - `itemCost` number: Ignored, and overwritten from the price book, when priceBookLineItemId is set.
      - `salesAccountId` number: Ignored, and overwritten from the price book, when priceBookLineItemId is set. Otherwise, defaults to the company's default sales account for the item's type (see isLabour).
      - `discountRate` number: The line discount as a fraction of itemPrice, where 0.1 means a 10% discount — not a percentage. Fergus applies this when totalling the quote; itemPrice must remain the undiscounted price.
      - `isLabour` boolean: Ignored, and overwritten from the price book's sales account, when priceBookLineItemId is set.
      - `sortOrder` number
      - `isCombined` boolean
      - `combinedItemName` string
    - `sections` UpsertQuoteSection[]
      - `name` string, required
      - `favouriteSectionId` union
        - number
        - object
          - `value` number, required
          - `combined` boolean
          - `lineItemMultiplier` number
      - `favouriteSectionIds` union
        - number[]
        - object[]
          - `value` number, required
          - `combined` boolean
          - `lineItemMultiplier` number
      - `sectionLineItemMultiplier` number
      - `parentSectionId` number
      - `description` string
      - `sortOrder` number
      - `lineItems` object[]
        - `quoteLineItemId` number
        - `priceBookLineItemId` number: When set, this line is priced from the price book: itemPrice, itemName, itemCost, isLabour and salesAccountId are all server-derived and any values supplied for them here are ignored. itemName is the price book item's productCode, a space, then its name, the same format as the Fergus quote editor. Both are trimmed first. If one is blank, itemName is just the other one, and if both are blank it is an empty string. itemName is capped at 500 characters.
        - `itemName` string: Ignored when priceBookLineItemId is set; the name is then derived from the price book item (see priceBookLineItemId).
        - `itemQuantity` number
        - `itemPrice` number: The undiscounted unit sell price — discounts are carried by discountRate only, never baked in here. Ignored, and overwritten with the tier-derived price, when priceBookLineItemId is set. For a one-off line (no priceBookLineItemId), an explicit value is used as-is; if omitted and itemCost is greater than 0, the price is instead derived from cost using the pricing tier's markup, and otherwise defaults to 0.
        - `itemCost` number: Ignored, and overwritten from the price book, when priceBookLineItemId is set.
        - `salesAccountId` number: Ignored, and overwritten from the price book, when priceBookLineItemId is set. Otherwise, defaults to the company's default sales account for the item's type (see isLabour).
        - `discountRate` number: The line discount as a fraction of itemPrice, where 0.1 means a 10% discount — not a percentage. Fergus applies this when totalling the quote; itemPrice must remain the undiscounted price.
        - `isLabour` boolean: Ignored, and overwritten from the price book's sales account, when priceBookLineItemId is set.
        - `sortOrder` number
        - `isCombined` boolean
        - `combinedItemName` string
      - `sections` UpsertQuoteSection[]

## Response `200`

Successful Response

- UpdateQuoteResponse
  - `result` string, required
  - `data` object, required
    - `id` number, required
    - `versionNumber` number, required
    - `jobId` number, required
    - `guid` string, nullable, required
    - `title` string, nullable, required
    - `description` string, nullable, required
    - `footerText` string, nullable
    - `quoteDate` string, date-time, nullable, required
    - `isSent` boolean, required
    - `isAccepted` boolean, required
    - `isSuperseded` boolean, required
    - `isLocked` boolean, required
    - `isDraft` boolean, required
    - `createdAt` string, date-time, required
    - `lastModified` string, date-time, required
    - `publishedAt` string, date-time, nullable, required
    - `dueDate` string, date-time, nullable, required
    - `declinedAt` string, date-time, nullable, required
    - `voidedAt` string, date-time, nullable, required
    - `acceptedAt` string, date-time, nullable, required
    - `dueDays` string, nullable, required
    - `acceptedBy` string, nullable, required
    - `attn` string, nullable, required
    - `receiverPostalAddress` string, nullable, required
    - `receiverFullName` string, nullable, required
    - `jobNo` integer, nullable
    - `totals` QuoteTotal
      - `subTotal` number, required
      - `discount` number, required
      - `discountedSubTotal` number, required
      - `gst` number, required
      - `total` number, required
    - `quoteConfig` QuoteConfig
      - `showDocumentTotals` boolean, required
      - `showLineItemPrices` boolean, required
      - `showLineItemTotals` boolean, required
      - `showLineItemQuantities` boolean, required
      - `showSectionTotals` boolean, required
      - `showLabourPrices` boolean, required
      - `showMaterialPrices` boolean, required
      - `showLabourSummary` boolean, required
      - `showMaterialSummary` boolean, required
      - `showAllLineItems` boolean, required
      - `mainColour` string, nullable, required
      - `accentColour` string, nullable, required
      - `fontColour` string, nullable, required
      - `orientation` string, nullable, required
      - `fontSizeOverride` string, nullable, required
      - `indentCustomerAddress` boolean, required
    - `sections` object[]
      - `sectionId` number, required
      - `name` string, nullable, required
      - `sortOrder` number, nullable, required
      - `parentSectionId` number, nullable, required
      - `description` string, nullable, required
      - `selectionMode` union, required
        - 'Fixed'
        - 'Optional'
        - 'Multiple Choice'
      - `sectionConfig` object
        - `showAllLineItems` boolean, nullable, required
        - `showPrices` boolean, nullable, required
        - `showTotals` boolean, nullable, required
        - `showSummary` boolean, nullable, required
        - `showQuantities` boolean, nullable, required
      - `lineItems` object[]
        - `quoteLineItemId` number, required
        - `priceBookLineItemId` number, nullable, required
        - `itemName` string, nullable, required
        - `itemQuantity` number, nullable, required
        - `unitOfMeasureSell` union, required
          - 'each'
          - 'hour'
          - 'day'
          - 'kilogram'
          - 'tonne'
          - 'litre'
          - 'bag'
          - 'sheet'
          - 'length'
          - 'box'
          - 'millimetre'
          - 'centimetre'
          - 'metre'
          - 'square_metre'
          - 'cubic_metre'
        - `itemPrice` number, nullable, required
        - `itemRrp` number, nullable, required
        - `itemCost` number, nullable, required
        - `salesAccountId` number, nullable, required
        - `isLabour` boolean, nullable, required
        - `sortOrder` number, nullable, required
        - `discountRate` number, nullable, required: The line discount as a fraction of itemPrice, where 0.1 means a 10% discount — not a percentage. itemPrice is the undiscounted price; Fergus applies this rate when totalling the quote.
        - `isCombined` boolean, nullable, required
        - `combinedItemId` number, nullable, required
        - `combinedItemName` string, nullable, required
      - `sections` QuoteSection[]
        - `sectionId` number, required
        - `name` string, nullable, required
        - `sortOrder` number, nullable, required
        - `parentSectionId` number, nullable, required
        - `description` string, nullable, required
        - `selectionMode` union, required
          - 'Fixed'
          - 'Optional'
          - 'Multiple Choice'
        - `sectionConfig` object
          - `showAllLineItems` boolean, nullable, required
          - `showPrices` boolean, nullable, required
          - `showTotals` boolean, nullable, required
          - `showSummary` boolean, nullable, required
          - `showQuantities` boolean, nullable, required
        - `lineItems` object[]
          - `quoteLineItemId` number, required
          - `priceBookLineItemId` number, nullable, required
          - `itemName` string, nullable, required
          - `itemQuantity` number, nullable, required
          - `unitOfMeasureSell` union, required
            - 'each'
            - 'hour'
            - 'day'
            - 'kilogram'
            - 'tonne'
            - 'litre'
            - 'bag'
            - 'sheet'
            - 'length'
            - 'box'
            - 'millimetre'
            - 'centimetre'
            - 'metre'
            - 'square_metre'
            - 'cubic_metre'
          - `itemPrice` number, nullable, required
          - `itemRrp` number, nullable, required
          - `itemCost` number, nullable, required
          - `salesAccountId` number, nullable, required
          - `isLabour` boolean, nullable, required
          - `sortOrder` number, nullable, required
          - `discountRate` number, nullable, required: The line discount as a fraction of itemPrice, where 0.1 means a 10% discount — not a percentage. itemPrice is the undiscounted price; Fergus applies this rate when totalling the quote.
          - `isCombined` boolean, nullable, required
          - `combinedItemId` number, nullable, required
          - `combinedItemName` string, nullable, required
        - `sections` QuoteSection[]
    - `deposit` object
      - `optionType` union, required
        - 'PERCENT'
        - 'FIXED'
      - `optionValue` number, nullable, required
      - `isPaid` boolean, nullable, required
      - `invoiceGuid` string, nullable, required
      - `invoiceUrl` string, nullable, required
    - `links` object[]
      - `href` string, required
      - `rel` string, required
      - `type` 'GET' | 'POST' | 'PUT' | 'PATCH', required
    - `lineItems` object[]
      - `quoteLineItemId` number, required
      - `priceBookLineItemId` number, nullable, required
      - `itemName` string, nullable, required
      - `itemQuantity` number, nullable, required
      - `unitOfMeasureSell` union, required
        - 'each'
        - 'hour'
        - 'day'
        - 'kilogram'
        - 'tonne'
        - 'litre'
        - 'bag'
        - 'sheet'
        - 'length'
        - 'box'
        - 'millimetre'
        - 'centimetre'
        - 'metre'
        - 'square_metre'
        - 'cubic_metre'
      - `itemPrice` number, nullable, required
      - `itemRrp` number, nullable, required
      - `itemCost` number, nullable, required
      - `salesAccountId` number, nullable, required
      - `isLabour` boolean, nullable, required
      - `sortOrder` number, nullable, required
      - `discountRate` number, nullable, required: The line discount as a fraction of itemPrice, where 0.1 means a 10% discount — not a percentage. itemPrice is the undiscounted price; Fergus applies this rate when totalling the quote.
      - `isCombined` boolean, nullable, required
      - `combinedItemId` number, nullable, required
      - `combinedItemName` string, nullable, required

## Other responses

- `4XX`: Client Request Errors
- `5XX`: Server Errors

## Changes

- **2026-09-22** `da879313663f`: 4 warning, 4 info
  - the `sections/items/lineItems/items/discountRate` request property's max was set to `1.00`
  - the `sections/items/sections/items/lineItems/items/discountRate` request property's max was set to `1.00`
  - the `sections/items/lineItems/items/discountRate` request property's min was set to `0.00`
  - the `sections/items/sections/items/lineItems/items/discountRate` request property's min was set to `0.00`
  - …4 more

[Operation history](https://skmtc.dev/fergus/apis/fergus-api/changes/jobs/:jobId/quotes/version/:versionNumber/put.md)

---

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