Read Methods
All read methods are available to bothstandalone and quoting_extension tool types.
context.get()
Returns the current user and tenant context.customers.list(options?)
Returns a paginated list of customers.products.list(options?)
Returns a paginated list of products/services. Thesku field is the human-readable
product code from Stock_SKU.SKU — use this for stable cross-environment product
references (GUIDs can vary between environments).
id (GUID), sku (human-readable code), name, price (retail sell price), unit (UOM token).
jobs.list(options?)
Returns a paginated list of active jobs for the tenant. Available to all tool types.id (GUID), ref (human-readable job reference), customerName, customerIdGuid (GUID), status.
quotes.list(options?)
Returns a paginated list of quotes.Write Methods
quotes.create(request)
Creates a new quote in Pipeline. Available to all tool types. Marketplace tools do NOT need API keys or inbound tokens — the bridge handles all authentication through the current user’s Pipeline session.| Field | Type | Required | Description |
|---|---|---|---|
| customerName | string | No | Customer display name |
| customerEmail | string | Conditional | Required when upsertByEmail is true |
| customerPhone | string | No | Customer phone number |
| upsertByEmail | boolean | No | If true, creates or matches customer by email |
| title | string | No | Quote title |
| quoteRef | string | No | Custom quote reference |
| lines | array | Yes | At least one line item required |
| Field | Type | Required | Description |
|---|---|---|---|
| description | string | No | Line item description |
| productCode | string | No | Product code reference |
| qty | number | Yes | Quantity (1-10000) |
| unitPrice | number | Yes | Unit price (0-1000000) |
| taxRate | number | Yes | Tax rate as decimal (e.g. 0.15 for 15%) |
- Lines array must not be empty
- Maximum 200 line items per quote
- Quantity must be
> 0and<= 10,000 - Unit price must be
>= 0and<= 1,000,000
quotes.addLines(lines)
Available toquoting_extension tools only.
Appends one or more lines to the currently-open quote. No server round-trip — the host
merges the lines into its in-memory quote and the user saves normally. Calling this method
from a standalone tool will return an error.
| Field | Type | Required | Description |
|---|---|---|---|
| description | string | optional | Free-text line description. Displayed as the line name in the quote. |
| productCode | string | optional | Human-readable SKU code. Stored as WorkObjectCode on the quote line. Pair with productId for full SKU linking. |
| productId | string (GUID) | optional | Product GUID from products.list(). When set, the host injects the SKU’s task template sequence into the line — scheduling tasks, material requirements, etc. When omitted, the line is free-form with no task injection. |
| qty | number | required | Line quantity. Must be > 0. |
| unitPrice | number | required | Retail/sell price per unit. Markup must already be applied — the host does not re-mark up. |
| costPrice | number | optional | Buy/cost price per unit. When provided: BUY column = costPrice, SELL column = unitPrice (real margin visible in COB panel). When omitted: both BUY and SELL use unitPrice (legacy behaviour, zero margin). |
| taxRate | number | required | Tax rate. Accepted as percentage (e.g. 15) or decimal fraction (e.g. 0.15) — the host normalises. |
| location | string | optional | Location or zone label. Maps to QuoteLine.FreeTextField2. Use for room, area, or zone labels (e.g. "Patio", "Living Room"). |
| specification | string | optional | Configuration or specification detail. Maps to QuoteLine.FreeTextField. Use for dimensions, colours, or model info. |
| unit | string | optional | Unit of measure token. Valid values: "T_ITEM" (default, each/unit), "T_SQUARE_METRE" (m²), "T_LINEAR_METRE" (lm). |
| groupKey | string | optional | Arbitrary stable string identifier. Lines sharing the same groupKey receive the same QuoteLine.GroupId on the host, keeping related lines visually grouped in the quote UI (e.g. a blind, its pelmet, and injected install task all share one group). Lines without a groupKey are ungrouped (GroupId = 0). |