Skip to content
  • There are no suggestions because the search field is empty.

QuoteWerks REST API — Creating & Updating Quotes

If you need to create or update QuoteWerks quotes from another system, the QuoteWerks REST API gives you direct access to the core quote workflow. This article walks through the practical process of creating a quote, adding line items, updating existing records, and retrieving quote data so you can get an integration working quickly without having to piece the flow together from individual API endpoints. 

Connection & Authentication 

Base URL

 https://qwwapi.quotewerks.com

Send your QuoteWerks API key with each request using the X-API-Key HTTP header: 

X-API-Key: <YOUR_API_KEY>

Content-Type: application/vnd.api+json

Accept: application/vnd.api+json

The API key must have AllowWrite permission enabled to perform POST, PATCH, or DELETE operations.

API requests and responses use the JSON format. Request data is contained within a top-level data object.


Quote Structure

A QuoteWerks quote consists primarily of two resources: 

 Resource   Purpose 
DocumentHeaders Quote-level information 
DocumentItems Products, services, comments, headings, subtotals, and other quote lines 

The quote header is identified by a RecGUID

Each line item belonging to the quote references that value through its DocRecGUID

Typical Quote Creation Flow

  1. Create the quote header.
  2. Store the returned RecGUID and DocNo.
  3. Create one or more line items using the quote's RecGUID.
  4. Optionally retrieve the completed quote and its items.

There is not currently a single API operation that creates a quote and all of its line items at once.


1. Create a Quote Header 

POST /api/v1/qw/tables/DocumentHeaders

Example:

{

  "data": {

    "type": "DocumentHeaders",

    "attributes": {

      "DocType": "QUOTE",

      "DocStatus": "Open",

      "DocDate": "2026-09-14T00:00:00",

      "DocName": "Example Quote"

    }

  }

}

A successful create returns HTTP 201

The response contains an id, which is the quote's RecGUID, along with the server-assigned quote number (DocNo). 

Example:

{

  "data": {

    "type": "DocumentHeaders",

    "id": "<REC_GUID>",

    "attributes": {

      "DocNo": "<QUOTE_NUMBER>",

      "DocType": "QUOTE",

      "DocStatus": "Open"

    }

  }

}

Store the RecGUID. It is used when adding line items and when updating or retrieving the quote later. 


2. Add a Line Item 

POST /api/v1/qw/tables/DocumentItems

Example: 

{

  "data": {

    "type": "DocumentItems",

    "attributes": {

      "DocRecGUID": "<QUOTE_REC_GUID>",

      "LineType": 1,

      "Description": "Example Product",

      "QtyBase": 1,

      "UnitPrice": 100.00

    }

  }

}

Send one request for each line item.

Each successfully created item receives its own RecGUID, which can later be used to update that item.

Quote totals are recalculated automatically as line items are added or changed.


3. Update a Quote Header 

Quote headers support partial updates. 

PATCH /api/v1/qw/tables/DocumentHeaders/{RecGUID} 

Only fields that need to change must be included.

Example:

{

  "data": {

    "type": "DocumentHeaders",

    "id": "<QUOTE_REC_GUID>",

    "attributes": {

      "DocStatus": "Sent"

    }

  }

}

 The id in the request body must match the RecGUID in the URL. 


4. Update a Line Item 

PATCH /api/v1/qw/tables/DocumentItems/{RecGUID}

Example:

{

  "data": {

    "type": "DocumentItems",

     "id": "<ITEM_REC_GUID>",

     "attributes": {

       "QtyBase": 2,

       "UnitPrice": 95.00

    }

  }

}

Derived pricing values and quote totals are recalculated automatically. 


5. Retrieve a Quote 

By RecGUID 

GET /api/v1/qw/tables/DocumentHeaders/{RecGUID}

The RecGUID is the preferred identifier because it is stable and unique. 

Include Quote Items 

GET /api/v1/qw/tables/DocumentHeaders/{RecGUID}?include=Items 

This retrieves the quote header and its associated line items. 

Search for Quotes 

Quotes can also be retrieved using API filters against fields such as quote number, status, sales representative, or other supported fields. 


6. Important Implementation Notes 

Quote creation is multi-step 

Create the DocumentHeaders record first and then create each DocumentItems record separately.

If creation of a line item fails, the previously created quote header remains. Integrations should account for retries or cleanup as appropriate.

Identifiers are server-generated

Values such as DocNo and RecGUID are assigned by QuoteWerks when records are created.

Applications should store the returned RecGUID for subsequent operations.

Calculated fields are server-managed 

QuoteWerks automatically calculates derived values such as extended prices, subtotals, sales tax, and grand totals.

Applications generally should not attempt to calculate or supply these values.

Quantity multipliers 

For standard quantities, QtyBase is normally sufficient. Optional quantity multiplier fields default appropriately when omitted. 


Discovering Available Fields 

The QuoteWerks API exposes schema endpoints that provide the available columns and indicate whether fields are required or read-only. 

Quote Headers 

GET /api/v1/qw/tables/DocumentHeaders/schema 

Quote Items 

GET /api/v1/qw/tables/DocumentItems/schema 

These endpoints should be used as the current reference for fields supported by each resource. 


Error Responses 

API errors are returned using the JSON error format. 

{

  "errors": [

    {

       "status": "400",

        "title": "Missing required field(s)."

    }

  ]

}

Common HTTP responses include:

  • 400 — Validation error or missing required data
  • 403 — API key does not have the required permission
  • 404 — Requested RecGUID could not be found

Recommended Integration Pattern 

For systems creating QuoteWerks quotes:

  1. Create the DocumentHeaders record.
  2. Save the returned RecGUID and DocNo.
  3. Create the required DocumentItems.
  4. Store the QuoteWerks RecGUID in the integrating system.
  5. Use that RecGUID for future reads and updates.
  6. Retrieve the quote with ?include=Items when the complete quote is needed.