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
- Create the quote header.
- Store the returned
RecGUIDandDocNo. - Create one or more line items using the quote's
RecGUID. - 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
RecGUIDcould not be found
Recommended Integration Pattern
For systems creating QuoteWerks quotes:
- Create the
DocumentHeadersrecord. - Save the returned
RecGUIDandDocNo. - Create the required
DocumentItems. - Store the QuoteWerks
RecGUIDin the integrating system. - Use that
RecGUIDfor future reads and updates. - Retrieve the quote with
?include=Itemswhen the complete quote is needed.