BlueSuite API
REST API v1

Quote Templates

Manage quote templates via the REST API

Quote templates are reusable starting points for creating new quotes. They store line items, pricing, discounts, deposits, tax rates, messages, and payment instructions so you can quickly generate consistent quotes without re-entering the same information each time.

List Quote Templates

Retrieve a paginated list of quote templates.

GET /api/v1/quote-templates

Required Scope: quote-templates:read

Query Parameters:

ParameterTypeDefaultDescription
pageinteger1Page number
per_pageinteger25Results per page (1-100)
searchstringSearch by template name
sort_bystringField to sort by: id, template_name, total, created_at, modified_at
sort_directionstringdescSort direction (asc or desc)
curl https://app.bluesuite.com/api/v1/quote-templates \
  -H "Authorization: Bearer wk_YOUR_API_KEY"
{
  "success": true,
  "data": [
    {
      "id": 1,
      "template_name": "Standard Lawn Care",
      "name": "Lawn Care Service",
      "description": "Weekly lawn maintenance package",
      "message": "Thank you for choosing us!",
      "payment_instructions": null,
      "line_items": [
        { "_type": "lineItem", "id": "a1b2c3d4-...", "name": "Lawn Mowing", "description": null, "quantity": 1, "unitPrice": 75.00 },
        { "_type": "lineItem", "id": "e5f6a7b8-...", "name": "Edging", "description": null, "quantity": 1, "unitPrice": 25.00 }
      ],
      "discount": 0,
      "discount_unit": "%",
      "deposit": 0,
      "deposit_unit": "%",
      "tax_rate": 6,
      "total": 106.00,
      "tax_rate_obj": {
        "id": 1,
        "name": "Maryland Sales Tax",
        "rate": 6
      },
      "created_by": {
        "id": "uuid",
        "first_name": "Jane",
        "last_name": "Doe"
      },
      "created_at": "2025-03-01T10:00:00.000Z"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 25,
    "total_pages": 1
  }
}

Create Quote Template

Create a new quote template.

POST /api/v1/quote-templates

Required Scope: quote-templates:write

Request Body:

FieldTypeRequiredDescription
template_namestringYesInternal label for the template
namestringNoDefault quote name/title when using this template
descriptionstringNoTemplate description
messagestringNoDefault message to client
payment_instructionsstringNoDefault payment instructions
line_itemsarrayNoArray of line item objects (see Quotes - Line Items)
discountnumberNoDiscount amount. Defaults to 0
discount_unitstringNoDiscount unit: % or $. Defaults to %
depositnumberNoDeposit amount. Defaults to 0
deposit_unitstringNoDeposit unit: % or $. Defaults to %
tax_ratenumberNoTax rate percentage. Defaults to 0
tax_rate_idintegerNoID of a saved tax rate
totalnumberNoTemplate total. Defaults to 0
curl -X POST https://app.bluesuite.com/api/v1/quote-templates \
  -H "Authorization: Bearer wk_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "template_name": "Standard Lawn Care",
    "name": "Lawn Care Service",
    "message": "Thank you for choosing us!",
    "line_items": [
      { "name": "Lawn Mowing", "quantity": 1, "unitPrice": 75.00 },
      { "name": "Edging", "quantity": 1, "unitPrice": 25.00 }
    ],
    "tax_rate": 6,
    "tax_rate_id": 1,
    "total": 106.00
  }'
{
  "success": true,
  "data": {
    "id": 1,
    "template_name": "Standard Lawn Care",
    "name": "Lawn Care Service",
    "description": null,
    "message": "Thank you for choosing us!",
    "payment_instructions": null,
    "line_items": [
      { "_type": "lineItem", "id": "a1b2c3d4-...", "name": "Lawn Mowing", "description": null, "quantity": 1, "unitPrice": 75.00 },
      { "_type": "lineItem", "id": "e5f6a7b8-...", "name": "Edging", "description": null, "quantity": 1, "unitPrice": 25.00 }
    ],
    "discount": 0,
    "discount_unit": "%",
    "deposit": 0,
    "deposit_unit": "%",
    "tax_rate": 6,
    "tax_rate_id": 1,
    "total": 106.00,
    "workspace_id": 123,
    "created_at": "2025-03-15T12:00:00.000Z"
  }
}

Get Quote Template

Retrieve a single quote template by ID with expanded details including tax rate and creator.

GET /api/v1/quote-templates/:id

Required Scope: quote-templates:read

curl https://app.bluesuite.com/api/v1/quote-templates/1 \
  -H "Authorization: Bearer wk_YOUR_API_KEY"
{
  "success": true,
  "data": {
    "id": 1,
    "template_name": "Standard Lawn Care",
    "name": "Lawn Care Service",
    "description": null,
    "message": "Thank you for choosing us!",
    "payment_instructions": null,
    "line_items": [
      { "_type": "lineItem", "id": "a1b2c3d4-...", "name": "Lawn Mowing", "description": null, "quantity": 1, "unitPrice": 75.00 },
      { "_type": "lineItem", "id": "e5f6a7b8-...", "name": "Edging", "description": null, "quantity": 1, "unitPrice": 25.00 }
    ],
    "discount": 0,
    "discount_unit": "%",
    "deposit": 0,
    "deposit_unit": "%",
    "tax_rate": 6,
    "total": 106.00,
    "tax_rate_obj": {
      "id": 1,
      "name": "Maryland Sales Tax",
      "rate": 6
    },
    "created_by": {
      "id": "uuid",
      "first_name": "Jane",
      "last_name": "Doe"
    },
    "workspace_id": 123,
    "created_at": "2025-03-15T12:00:00.000Z"
  }
}

Update Quote Template

Update an existing quote template. All fields are optional -- only include the fields you want to change. Modifying a template does not affect quotes that were already created from it.

PUT /api/v1/quote-templates/:id

Required Scope: quote-templates:write

Request Body: Same fields as Create Quote Template. All fields are optional.

curl -X PUT https://app.bluesuite.com/api/v1/quote-templates/1 \
  -H "Authorization: Bearer wk_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "total": 120.00,
    "line_items": [
      { "name": "Lawn Mowing", "quantity": 1, "unitPrice": 85.00 },
      { "name": "Edging", "quantity": 1, "unitPrice": 25.00 },
      { "name": "Leaf Blowing", "quantity": 1, "unitPrice": 10.00 }
    ]
  }'
{
  "success": true,
  "data": {
    "id": 1,
    "template_name": "Standard Lawn Care",
    "name": "Lawn Care Service",
    "total": 120.00,
    "workspace_id": 123,
    "created_at": "2025-03-15T12:00:00.000Z"
  }
}

Delete Quote Template

Delete a quote template by ID. Deleting a template does not affect quotes that were already created from it.

DELETE /api/v1/quote-templates/:id

Required Scope: quote-templates:write

curl -X DELETE https://app.bluesuite.com/api/v1/quote-templates/1 \
  -H "Authorization: Bearer wk_YOUR_API_KEY"
{
  "success": true,
  "data": {
    "deleted": true
  }
}

Create Quote from Template

Create a new draft quote from an existing template. The new quote inherits the template's line items, pricing, discounts, deposits, tax rate, message, and payment instructions. A quote number is auto-generated.

POST /api/v1/quote-templates/:id/create-quote

Required Scope: quotes:write

curl -X POST https://app.bluesuite.com/api/v1/quote-templates/1/create-quote \
  -H "Authorization: Bearer wk_YOUR_API_KEY"
{
  "success": true,
  "data": {
    "id": 5,
    "number": 2005,
    "name": "Lawn Care Service",
    "status": "draft",
    "template_id": 1,
    "message": "Thank you for choosing us!",
    "line_items": [
      { "_type": "lineItem", "id": "f1e2d3c4-...", "name": "Lawn Mowing", "description": null, "quantity": 1, "unitPrice": 75.00 },
      { "_type": "lineItem", "id": "b5a6c7d8-...", "name": "Edging", "description": null, "quantity": 1, "unitPrice": 25.00 }
    ],
    "discount": 0,
    "discount_unit": "%",
    "deposit": 0,
    "deposit_unit": "%",
    "tax_rate": 6,
    "total": 106.00,
    "workspace_id": 123,
    "created_at": "2025-03-20T09:00:00.000Z"
  }
}

After creating the quote, you can update it to assign a contact, property, or change any other fields using the Update Quote endpoint.

On this page