Quote templates
Quote templates in the BlueSuite REST API
Save reusable quote content and create quotes from it. POST /quote-templates/:id/create-quote accepts optional overrides, including the customer and property. An empty JSON object uses the template's defaults. The result is a created quote; sending it is a separate notification.
Use line items for pricing and service details. The template and any associated IDs must belong to the authenticated workspace.
GET /api/v1/quote-templates
GET /api/v1/quote-templatesRequired scopes: quote-templates:read.
Query parameters
| Field | Type / accepted values | Required | Details |
|---|---|---|---|
page | integer | No | Page number, starting at 1. Default: 1. |
per_page | integer | No | Records per page, from 1 to 100. Default: 25. minimum: 1. maximum: 100. |
search | string | No | Search text. maxLength: 100. |
sort_by | string | No | Sort column. See the supported columns below when listed. |
sort_direction | "asc", "desc" | No | Sort direction. Default: "desc". |
Response
200 with { "success": true, "data": [...], "pagination": { "page": 1, "per_page": 25, "total_pages": 1 } }.
See response conventions and errors.
POST /api/v1/quote-templates
POST /api/v1/quote-templatesRequired scopes: quote-templates:write.
JSON body
| Field | Type / accepted values | Required | Details |
|---|---|---|---|
template_name | string | Yes | |
name | string or null | No | |
description | string or null | No | |
message | string or null | No | |
payment_instructions | string or null | No | |
line_items | array of object or object | No | maxItems: 500. |
line_items[]._type | "lineItem" | No | For lineItem rows. Defaults to lineItem when omitted. |
line_items[].name | string | For this variant | For lineItem rows. Item name |
line_items[].description | string or null | No | For lineItem rows. Additional description |
line_items[].quantity | number | No | For lineItem rows. Quantity Default: 1. |
line_items[].unitPrice | number | For this variant | For lineItem rows. Unit price |
line_items[].unitCost | number | No | For lineItem rows. What this costs the business, per unit. Only used when cost tracking is enabled. minimum: 0. |
line_items[].taxable | boolean | No | For lineItem rows. Whether the item is taxable |
line_items[].optional | boolean | No | For lineItem rows. Whether the item is optional |
line_items[]._type | "image" | For this variant | For image rows. |
line_items[].image_path | string | For this variant | For image rows. Storage path returned by /uploads minLength: 1. |
line_items[].image_id | integer or null | No | For image rows. Upload link ID returned by /uploads |
line_items[].description | string or null | No | For image rows. Caption shown beneath the image |
discount | number | No | Default: 0. |
discount_unit | "%", "$" | No | Default: "%". |
deposit | number | No | Default: 0. |
deposit_unit | "%", "$" | No | Default: "%". |
tax_rate | number | No | Default: 0. |
tax_rate_id | integer or null | No | |
total | number | No | Default: 0. |
Unknown body fields are rejected. Conditional requirements are explained above.
Response
201 with { "success": true, "data": ... }. The data contains the result of the operation.
See response conventions and errors.
GET /api/v1/quote-templates/:id
GET /api/v1/quote-templates/:idRequired scopes: quote-templates:read.
Path parameters: id. Use positive integer record IDs from this workspace.
Response
200 with { "success": true, "data": ... }. The data contains the result of the operation.
See response conventions and errors.
PUT /api/v1/quote-templates/:id
PUT /api/v1/quote-templates/:idRequired scopes: quote-templates:write.
Path parameters: id. Use positive integer record IDs from this workspace.
JSON body
| Field | Type / accepted values | Required | Details |
|---|---|---|---|
template_name | string | No | |
name | string or null | No | |
description | string or null | No | |
message | string or null | No | |
payment_instructions | string or null | No | |
line_items | array of object or object | No | maxItems: 500. |
line_items[]._type | "lineItem" | No | For lineItem rows. Defaults to lineItem when omitted. |
line_items[].name | string | For this variant | For lineItem rows. Item name |
line_items[].description | string or null | No | For lineItem rows. Additional description |
line_items[].quantity | number | No | For lineItem rows. Quantity Default: 1. |
line_items[].unitPrice | number | For this variant | For lineItem rows. Unit price |
line_items[].unitCost | number | No | For lineItem rows. What this costs the business, per unit. Only used when cost tracking is enabled. minimum: 0. |
line_items[].taxable | boolean | No | For lineItem rows. Whether the item is taxable |
line_items[].optional | boolean | No | For lineItem rows. Whether the item is optional |
line_items[]._type | "image" | For this variant | For image rows. |
line_items[].image_path | string | For this variant | For image rows. Storage path returned by /uploads minLength: 1. |
line_items[].image_id | integer or null | No | For image rows. Upload link ID returned by /uploads |
line_items[].description | string or null | No | For image rows. Caption shown beneath the image |
discount | number | No | Default: 0. |
discount_unit | "%", "$" | No | Default: "%". |
deposit | number | No | Default: 0. |
deposit_unit | "%", "$" | No | Default: "%". |
tax_rate | number | No | Default: 0. |
tax_rate_id | integer or null | No | |
total | number | No | Default: 0. |
Unknown body fields are rejected. Conditional requirements are explained above.
Response
200 with { "success": true, "data": ... }. The data contains the result of the operation.
See response conventions and errors.
DELETE /api/v1/quote-templates/:id
DELETE /api/v1/quote-templates/:idRequired scopes: quote-templates:write.
Path parameters: id. Use positive integer record IDs from this workspace.
No request body.
Response
200 with { "success": true, "data": ... }. The data contains the result of the operation.
See response conventions and errors.
POST /api/v1/quote-templates/:id/create-quote
POST /api/v1/quote-templates/:id/create-quoteRequired scopes: quotes:write.
Path parameters: id. Use positive integer record IDs from this workspace.
JSON body
| Field | Type / accepted values | Required | Details |
|---|---|---|---|
contact_id | integer or null | No | |
property_id | integer or null | No | |
name | string or null | No | Overrides the name copied from the template. |
salesperson_id | string or null | No | |
expire_on | string or string or null | No |
Unknown body fields are rejected. Conditional requirements are explained above.
Response
201 with { "success": true, "data": ... }. The data contains the result of the operation.