BlueSuite Developers
REST API v1

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-templates

Required scopes: quote-templates:read.

Query parameters

FieldType / accepted valuesRequiredDetails
pageintegerNoPage number, starting at 1. Default: 1.
per_pageintegerNoRecords per page, from 1 to 100. Default: 25. minimum: 1. maximum: 100.
searchstringNoSearch text. maxLength: 100.
sort_bystringNoSort column. See the supported columns below when listed.
sort_direction"asc", "desc"NoSort 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-templates

Required scopes: quote-templates:write.

JSON body

FieldType / accepted valuesRequiredDetails
template_namestringYes
namestring or nullNo
descriptionstring or nullNo
messagestring or nullNo
payment_instructionsstring or nullNo
line_itemsarray of object or objectNomaxItems: 500.
line_items[]._type"lineItem"NoFor lineItem rows. Defaults to lineItem when omitted.
line_items[].namestringFor this variantFor lineItem rows. Item name
line_items[].descriptionstring or nullNoFor lineItem rows. Additional description
line_items[].quantitynumberNoFor lineItem rows. Quantity Default: 1.
line_items[].unitPricenumberFor this variantFor lineItem rows. Unit price
line_items[].unitCostnumberNoFor lineItem rows. What this costs the business, per unit. Only used when cost tracking is enabled. minimum: 0.
line_items[].taxablebooleanNoFor lineItem rows. Whether the item is taxable
line_items[].optionalbooleanNoFor lineItem rows. Whether the item is optional
line_items[]._type"image"For this variantFor image rows.
line_items[].image_pathstringFor this variantFor image rows. Storage path returned by /uploads minLength: 1.
line_items[].image_idinteger or nullNoFor image rows. Upload link ID returned by /uploads
line_items[].descriptionstring or nullNoFor image rows. Caption shown beneath the image
discountnumberNoDefault: 0.
discount_unit"%", "$"NoDefault: "%".
depositnumberNoDefault: 0.
deposit_unit"%", "$"NoDefault: "%".
tax_ratenumberNoDefault: 0.
tax_rate_idinteger or nullNo
totalnumberNoDefault: 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/:id

Required 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/:id

Required scopes: quote-templates:write.

Path parameters: id. Use positive integer record IDs from this workspace.

JSON body

FieldType / accepted valuesRequiredDetails
template_namestringNo
namestring or nullNo
descriptionstring or nullNo
messagestring or nullNo
payment_instructionsstring or nullNo
line_itemsarray of object or objectNomaxItems: 500.
line_items[]._type"lineItem"NoFor lineItem rows. Defaults to lineItem when omitted.
line_items[].namestringFor this variantFor lineItem rows. Item name
line_items[].descriptionstring or nullNoFor lineItem rows. Additional description
line_items[].quantitynumberNoFor lineItem rows. Quantity Default: 1.
line_items[].unitPricenumberFor this variantFor lineItem rows. Unit price
line_items[].unitCostnumberNoFor lineItem rows. What this costs the business, per unit. Only used when cost tracking is enabled. minimum: 0.
line_items[].taxablebooleanNoFor lineItem rows. Whether the item is taxable
line_items[].optionalbooleanNoFor lineItem rows. Whether the item is optional
line_items[]._type"image"For this variantFor image rows.
line_items[].image_pathstringFor this variantFor image rows. Storage path returned by /uploads minLength: 1.
line_items[].image_idinteger or nullNoFor image rows. Upload link ID returned by /uploads
line_items[].descriptionstring or nullNoFor image rows. Caption shown beneath the image
discountnumberNoDefault: 0.
discount_unit"%", "$"NoDefault: "%".
depositnumberNoDefault: 0.
deposit_unit"%", "$"NoDefault: "%".
tax_ratenumberNoDefault: 0.
tax_rate_idinteger or nullNo
totalnumberNoDefault: 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/:id

Required 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-quote

Required scopes: quotes:write.

Path parameters: id. Use positive integer record IDs from this workspace.

JSON body

FieldType / accepted valuesRequiredDetails
contact_idinteger or nullNo
property_idinteger or nullNo
namestring or nullNoOverrides the name copied from the template.
salesperson_idstring or nullNo
expire_onstring or string or nullNo

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.

On this page