# Authentication Source: https://docs.pipeline.software/developers/api/authentication API key authentication and rate limits for the Public REST API. For server-to-server integrations (not marketplace tools), use API keys: ``` Authorization: Bearer pip_key_your_api_key_here ``` API keys are scoped to specific endpoints and have configurable rate limits. Generate API keys from Pipeline Settings > API Tokens. **Marketplace tools do NOT need API keys** — the bridge handles all authentication automatically through the Pipeline session. ## Rate Limits API responses include rate limit headers: ``` X-RateLimit-Limit: 100 X-RateLimit-Remaining: 95 X-RateLimit-Reset: 1713200000 ``` When the limit is exceeded, requests return HTTP 429 with a `Retry-After` header indicating seconds until the next request is allowed. # Endpoints Source: https://docs.pipeline.software/developers/api/endpoints Public REST API endpoints currently available. All endpoints are relative to `https://app.pipeline.software/api/v1/` and require an `Authorization: Bearer` header. See [Authentication](/developers/api/authentication). ## Customers ### List customers ```http theme={null} GET /api/v1/customers ``` Returns customers visible to the API key's scope. Supports paging via `?page=` and `?pageSize=`. ## Products ### List products ```http theme={null} GET /api/v1/products ``` Returns SKUs available in the catalog. Use the `id` value when constructing quote line items. ## Quotes ### List quotes ```http theme={null} GET /api/v1/quotes ``` Returns quotes the API key is permitted to read. ### Get a quote ```http theme={null} GET /api/v1/quotes/{id} ``` Returns the full quote payload, including line items. ### Create a quote ```http theme={null} POST /api/v1/quotes Content-Type: application/json { "customerId": "...", "lines": [ { "skuId": "...", "qty": 2, "unitPrice": 199.00 } ] } ``` Returns the created quote with its assigned ID. Refer to [DTO Reference](/developers/bridge/dto-reference) for the line shape - the REST and Bridge surfaces share the same quote DTOs. # REST API Overview Source: https://docs.pipeline.software/developers/api/overview Server-to-server integration with the Pipeline Public REST API. The Pipeline Public REST API lets backend systems read and write Pipeline data over HTTPS. Use it for CRM sync, automated quote creation, scheduled exports, and any integration where your code runs on a server (not inside a Pipeline iframe). **Base URL** ``` https://app.pipeline.software/api/v1/ ``` All requests must be authenticated with an API key. See [Authentication](/developers/api/authentication). Use Pipeline Bridge - no API keys, inherits the user's session, runs in the browser. # DTO Reference Source: https://docs.pipeline.software/developers/bridge/dto-reference skuIdMap pattern and DTO shapes used by bridge methods. ## skuIdMap Pattern For `quoting_extension` tools that work with known SKU codes, the recommended pattern is: 1. At tool init, call `products.list()` and build a local `{ [sku]: productId }` lookup. 2. Your tool's internal logic works with human-readable SKU codes (from a pricing spreadsheet, config object, or product catalogue). 3. When building lines for `quotes.addLines`, look up each SKU in `skuIdMap` and pass both `productCode` (the SKU string) and `productId` (the GUID). This triggers task template injection on the host. 4. Fall back gracefully: if a SKU is not found in `skuIdMap`, send the line without `productId`. The line still appears in the quote as free-form text — no task injection, but no error. ```javascript theme={null} let skuIdMap = {}; async function initBridge() { // Load all products and index by SKU (uppercased for case-insensitive lookup) const productResult = await window.pipeline.products.list({ page: 1, pageSize: 500 }); const products = (productResult && productResult.items) ? productResult.items : []; products.forEach(function(p) { if (p.sku && p.id) { skuIdMap[p.sku.toUpperCase()] = p.id; } }); } // Later, when building a line: function resolveProduct(skuCode) { return { productCode: skuCode, productId: skuIdMap[skuCode.toUpperCase()] || null // null = no task injection (still sends) }; } ``` ## DTO Shapes ```typescript theme={null} // BridgeContextDto interface BridgeContextDto { userName: string; userEmail: string; userRole: string; // e.g. "H_Admin", "H_Field" tenantName: string; tenantId: string; cultureCode: string; // e.g. "en-NZ" } // BridgeCustomerDto interface BridgeCustomerDto { id: string; // GUID name: string; email: string; phone: string; } // BridgeProductDto interface BridgeProductDto { id: string; // GUID sku: string; // Human-readable product code (Stock_SKU.SKU) name: string; price: number; // Retail sell price (Stock_SKU.Sell) unit: string; // UOM token } // BridgeTaskTemplateDto (from taskTemplates.list) interface BridgeTaskTemplateDto { id: string; // GUID — pass as LinkedItemId on a "task" line code: string; // Stable code (e.g. "T_DEFAULT_INSTALLATION_TASK") name: string; } // BridgeCostItemDto (from costItems.list) interface BridgeCostItemDto { id: string; // GUID — pass as LinkedItemId on a "cost" line code: string; // Stable code (e.g. "COS-TRAVEL-TIME") name: string; type: string; // T_Type token (e.g. "T_FINANCIAL", "T_TRAVEL") } // BridgeQuoteDto interface BridgeQuoteDto { id: string; // GUID ref: string; customerName: string; total: number; status: string; date: string; // ISO 8601 datetime } // BridgeJobDto interface BridgeJobDto { id: string; // GUID ref: string; // Human-readable job reference (e.g. "JOB-0042") customerName: string; customerIdGuid: string; // GUID status: string; } // BridgePagedResult interface BridgePagedResult { items: T[]; totalCount: number; page: number; pageSize: number; } // BridgeCreateQuoteRequest interface BridgeCreateQuoteRequest { jobId?: string; customerName?: string; customerEmail?: string; customerPhone?: string; upsertByEmail: boolean; title?: string; quoteRef?: string; lines: BridgeQuoteLineRequest[]; } // BridgeQuoteLineRequest (for quotes.create) interface BridgeQuoteLineRequest { description?: string; productCode?: string; qty: number; unitPrice: number; taxRate: number; } // BridgeCreateQuoteResult interface BridgeCreateQuoteResult { id: string; ref: string; total: number; url?: string; // Relative deep-link to the created quote, if available } // BridgeAddLineDto (for quotes.addLines — quoting_extension only) interface BridgeAddLineDto { description?: string; productCode?: string; qty: number; unitPrice: number; costPrice?: number; // When set: BUY=costPrice, SELL=unitPrice. When omitted: BUY=SELL=unitPrice taxRate: number; location?: string; // Maps to FreeTextField2 specification?: string; // Maps to FreeTextField unit?: string; // "T_ITEM" | "T_SQUARE_METRE" | "T_LINEAR_METRE" groupKey?: string; // Lines sharing the same groupKey get the same QuoteLine.GroupId // -- Line linking (preferred over productId) -- lineType?: string; // "product" | "task" | "cost" (defaults to "product") linkedItemId?: string; // GUID into Stock_SKU / G_Task_Templates / COB_Items based on lineType. // Replaces productId for new tools. Validation: rejects the whole batch // if the GUID does not resolve to an active row in the indicated table. // -- Categorical grouping -- section?: string; // Free-text section label (e.g. "Blinds", "Installation", "Extras"). // Persisted on QuoteLine.Section. Host UI groups lines by section. // Max 100 chars; trimmed; null/empty renders under "Ungrouped". // -- Deprecated (still supported) -- /** @deprecated Use linkedItemId with lineType="product" instead. Retained for back-compat * with Ziptrak v2.1.2 and earlier. New tools should not set this field. */ productId?: string; } ``` ### Three line kinds (lineType) | `lineType` | `linkedItemId` resolves to | Behaviour | | --------------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------- | | `"product"` (default) | `Stock_SKU.IdGuid` | If the linked SKU has a task sequence configured, the host auto-injects its task template lines (e.g. installation tasks). | | `"task"` | `G_Task_Templates.IdGuid` | The line is the task itself. No auto-injection. Use for explicit installation, removal, configuration tasks. | | `"cost"` | `COB_Items.IdGuid` | The line is a cost-of-business item (shipping, travel, disposal, site visit, etc.). No auto-injection. | When `lineType` is omitted (or set to `"product"`) and `linkedItemId` is null, the host falls back to the legacy `productId` field — keeping Ziptrak v2.1.2 and earlier extensions working unchanged. ### Section grouping Quote lines are visually grouped by `section` in both the operator's quote editor and the customer-facing quote preview. Use a small set of stable labels per tool — e.g. for an indoor blinds extension: `"Blinds"`, `"Motorisation"`, `"Installation"`, `"Removal"`, `"Extras"`. Lines with no `section` render in a trailing "Ungrouped" block. # Tool Manifest Source: https://docs.pipeline.software/developers/bridge/manifest manifest.json fields that declare how a tool integrates with Pipeline. Every tool bundle must include a `manifest.json` at the root. The manifest declares how the tool integrates with Pipeline. **Example:** ```json theme={null} { "name": "Ziptrak Retail Estimator", "shortName": "Ziptrak", "type": "quoting_extension", "version": "2.0.0", "description": "Calculate supply and install costs for Ziptrak outdoor blinds. Adds itemised lines directly to the open quote.", "entry": "index.html" } ``` **Manifest fields:** | Field | Type | Required | Description | | ----------- | ------------- | -------- | ----------------------------------------------------------------------------- | | name | string | Yes | Full display name shown in the marketplace listing | | shortName | string | Yes | Short name used in Pipeline UI chrome (e.g. tab labels) | | type | enum | Yes | Integration type — see values below | | version | semver string | Yes | Tool version (e.g. `"2.0.0"`) | | description | string | Yes | One-sentence description shown in the marketplace | | entry | string | Yes | Relative path to the HTML entry point inside the bundle (e.g. `"index.html"`) | **`type` values:** | Value | Behaviour | | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `standalone` | Default. Tool renders as a sidebar panel, launched from the Pipeline tool launcher. Has read access to customers, products, quotes, and jobs, plus `quotes.create`. This is the right type for quoting tools that create a new quote rather than injecting into an existing one. | | `quoting_extension` | Tool integrates with an already-open quote modal. Launched from inside the quote UI rather than the tool launcher. Unlocks `quotes.addLines` — which appends lines directly into the active in-memory quote. Use this type when your tool is designed to add lines to a quote the user is currently editing. | # Bridge Methods Source: https://docs.pipeline.software/developers/bridge/methods Read and write methods exposed on window.pipeline for marketplace tools. ## Read Methods All read methods are available to both `standalone` and `quoting_extension` tool types. ### context.get() Returns the current user and tenant context. ```javascript theme={null} const ctx = await window.pipeline.context.get(); // Returns: // { // userName: "Jane Smith", // userEmail: "jane@example.com", // userRole: "H_Admin", // tenantName: "Acme Corp", // tenantId: "abc-123", // cultureCode: "en-NZ" // } ``` ### customers.list(options?) Returns a paginated list of customers. ```javascript theme={null} const result = await window.pipeline.customers.list({ page: 1, pageSize: 50 }); // Returns: // { // items: [{ id: "...", name: "John Doe", email: "john@example.com", phone: "021..." }], // totalCount: 150, // page: 1, // pageSize: 50 // } ``` ### products.list(options?) Returns a paginated list of products/services. The `sku` field is the human-readable product code from `Stock_SKU.SKU` — use this for stable cross-environment product references (GUIDs can vary between environments). ```javascript theme={null} const result = await window.pipeline.products.list({ page: 1, pageSize: 50 }); // Returns: // { // items: [ // { id: "a1b2c3d4-...", sku: "WGT-001", name: "Widget A", price: 29.99, unit: "T_ITEM" } // ], // totalCount: 42, // page: 1, // pageSize: 50 // } ``` **Response item fields:** `id` (GUID), `sku` (human-readable code), `name`, `price` (retail sell price), `unit` (UOM token). ### taskTemplates.list(options?) Returns task templates from `G_Task_Templates`, filtered to active rows in the current tenant. Use this to resolve a task template's `code` (e.g. `T_DEFAULT_INSTALLATION_TASK`) to its GUID so the GUID can be passed as `linkedItemId` on a `lineType: "task"` line in `quotes.addLines`. When `codes` is provided, page/pageSize are ignored and all matching rows are returned. When `codes` is omitted, results paginate the full active task-template list. ```javascript theme={null} const result = await window.pipeline.taskTemplates.list({ codes: ["T_DEFAULT_INSTALLATION_TASK", "T_DEFAULT_REMOVAL_TASK"] }); // Returns: // { // items: [ // { id: "8a9d034f-...", code: "T_DEFAULT_INSTALLATION_TASK", name: "T_DEFAULT_INSTALLATION_TASK" } // ], // totalCount: 2, // page: 1, // pageSize: 50 // } ``` **Request fields:** `codes` (string\[], optional), `page` (number, optional), `pageSize` (number, optional). **Response item fields:** `id` (GUID), `code` (stable token), `name`. ### costItems.list(options?) Returns cost-of-business items from `COB_Items`, filtered to active rows in the current tenant. Use this to resolve a COB item's `code` (e.g. `COS-TRAVEL-TIME`, `COS-SITE-VISIT`) to its GUID for use as `linkedItemId` on a `lineType: "cost"` line. ```javascript theme={null} const result = await window.pipeline.costItems.list({ codes: ["COS-TRAVEL-TIME", "COS-SITE-VISIT", "COS-SHIPPING", "COS-DISPOSAL"] }); // Returns: // { // items: [ // { id: "95abe0dc-...", code: "COS-TRAVEL-TIME", name: "Travel time", type: "T_TRAVEL" } // ], // totalCount: 4, // page: 1, // pageSize: 50 // } ``` **Request fields:** `codes` (string\[], optional), `page` (number, optional), `pageSize` (number, optional). **Response item fields:** `id` (GUID), `code` (stable token), `name`, `type` (`COB_Items.T_Type` token, e.g. `"T_FINANCIAL"`, `"T_TRAVEL"`). ### jobs.list(options?) Returns a paginated list of active jobs for the tenant. Available to all tool types. ```javascript theme={null} const result = await window.pipeline.jobs.list({ page: 1, pageSize: 50 }); // Returns: // { // items: [ // { // id: "e5f6a7b8-...", // ref: "JOB-0042", // customerName: "Acme Corp", // customerIdGuid: "c1d2e3f4-...", // status: "InProgress" // } // ], // totalCount: 12, // page: 1, // pageSize: 50 // } ``` **Response item fields:** `id` (GUID), `ref` (human-readable job reference), `customerName`, `customerIdGuid` (GUID), `status`. ### quotes.list(options?) Returns a paginated list of quotes. ```javascript theme={null} const result = await window.pipeline.quotes.list({ page: 1, pageSize: 50 }); // Returns: // { // items: [{ id: "...", ref: "QR-001", customerName: "John Doe", total: 115.00, status: "Draft", date: "2026-04-16T00:00:00" }], // totalCount: 25, // page: 1, // pageSize: 50 // } ``` ## 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. ```javascript theme={null} const result = await window.pipeline.quotes.create({ customerName: "John Doe", customerEmail: "john@example.com", customerPhone: "021 123 4567", upsertByEmail: true, title: "Quick Quote", quoteRef: "", lines: [ { description: "Widget A", productCode: "WGT-001", qty: 2, unitPrice: 29.99, taxRate: 0.15 } ] }); // Returns: // { // id: "abc-123-...", // ref: "QR-042", // total: 68.98 // } ``` **Request fields:** | 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 | **Line item fields:** | 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%) | **Validation rules:** * Lines array must not be empty * Maximum 200 line items per quote * Quantity must be `> 0` and `<= 10,000` * Unit price must be `>= 0` and `<= 1,000,000` ### quotes.addLines(lines) **Available to `quoting_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. ```javascript theme={null} await window.pipeline.quotes.addLines([ // Product line (default lineType): generic SKU, with section grouping { description: "Roller blind — Main Lounge", productCode: "BLIND", qty: 1, unitPrice: 480.00, costPrice: 290.00, taxRate: 15, location: "Main Lounge", specification: "Linesque Fleece, 1200×1500, Inside fit", unit: "T_ITEM", groupKey: "blind-1", lineType: "product", linkedItemId: "a1b2c3d4-...", // Stock_SKU.IdGuid — replaces productId section: "Blinds" }, // Task line: explicit installation task { description: "Installation", qty: 1, unitPrice: 95.00, costPrice: 95.00, taxRate: 15, unit: "T_ITEM", lineType: "task", linkedItemId: "8a9d034f-...", // G_Task_Templates.IdGuid section: "Installation" }, // Cost line: shipping pass-through { description: "Shipping (standard)", qty: 1, unitPrice: 20.00, costPrice: 20.00, taxRate: 15, unit: "T_ITEM", lineType: "cost", linkedItemId: "eaaebd29-...", // COB_Items.IdGuid section: "Extras" } ]); ``` **BridgeAddLineDto fields:** | 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. | | 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`. | | 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), `"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 within their section. Lines without a `groupKey` are ungrouped (GroupId = 0). | | lineType | string | optional | One of `"product"` \| `"task"` \| `"cost"`. Defaults to `"product"`. Selects which Pipeline table `linkedItemId` resolves into — see "Three line kinds" below. | | linkedItemId | string (GUID) | optional | GUID into `Stock_SKU` / `G_Task_Templates` / `COB_Items` based on `lineType`. Replaces `productId` for new tools. The whole `addLines` batch is rejected if the GUID does not resolve to an active row in the indicated table. | | section | string | optional | Categorical section label (e.g. `"Blinds"`, `"Motorisation"`, `"Installation"`, `"Extras"`, `"Removal"`). Persisted on `QuoteLine.Section`. The host quote UI groups lines visually by section. Max 100 chars; trimmed; null/empty renders under "Ungrouped". | | productId | string (GUID) | deprecated | **Use `linkedItemId` with `lineType="product"` instead.** Retained for back-compat with Ziptrak v2.1.2 and earlier. When set without `linkedItemId`, behaves as `linkedItemId` with `lineType="product"` — triggers task-sequence auto-injection if the SKU has one configured. | **Three line kinds (lineType → linkedItemId target table):** | `lineType` | Target table | Behaviour | | --------------------- | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `"product"` (default) | `Stock_SKU.IdGuid` | If the linked SKU has a task sequence configured, the host auto-injects its task template lines (e.g. installation tasks). | | `"task"` | `G_Task_Templates.IdGuid` | The line **is** the task. No auto-injection. Use [`taskTemplates.list`](/developers/bridge/methods#tasktemplates-list-options) to resolve codes to GUIDs. | | `"cost"` | `COB_Items.IdGuid` | The line is a cost-of-business item (shipping, travel, disposal, etc.). No auto-injection. Use [`costItems.list`](/developers/bridge/methods#costitems-list-options) to resolve codes to GUIDs. | **Validation:** the host rejects the entire `addLines` batch if any line has an unknown `lineType`, a `section` longer than 100 chars, or a `linkedItemId` that does not resolve to an active row in the indicated table. Failures surface to the extension as an exception from `addLines`. # Pipeline Bridge Overview Source: https://docs.pipeline.software/developers/bridge/overview Embed HTML/JS tools that run inside Pipeline as iframes. Pipeline Marketplace lets you build HTML/JS tools that run inside Pipeline as embedded iframes. Tools can read and write Pipeline data through the JS Bridge — no authentication tokens needed. # Examples Source: https://docs.pipeline.software/developers/bridge/quick-quote-example A working Quick Quote tool plus the Ziptrak Retail Estimator reference implementation. ## Quick Quote Tool This \~50-line tool demonstrates the full bridge loop for a `standalone` tool: read customers and products (now including `sku`), let the user build a quote, and submit via `quotes.create`. ```html theme={null}

Quick Quote

``` ## Reference: Ziptrak Retail Estimator This is the full reference implementation for a `quoting_extension` tool. It shows `initBridge` with `skuIdMap`, and `collectQuoteLines` with `groupKey`, `productId`, `costPrice`, `unit`, `location`, and `specification`. **This example uses the legacy `productId` field**, which is now deprecated in favour of `linkedItemId` + `lineType`. The deprecated field still works (Ziptrak v2.1.2 is unchanged). For new tools, prefer the modern API: * Use `lineType: "product"` + `linkedItemId: ` for product lines (replaces `productId`). * Use `lineType: "task"` + `linkedItemId: ` for explicit installation, removal, or service tasks. Resolve GUIDs from codes via [`taskTemplates.list`](/developers/bridge/methods#tasktemplates-list-options). * Use `lineType: "cost"` + `linkedItemId: ` for shipping, travel, disposal, and other cost-of-business lines. Resolve GUIDs via [`costItems.list`](/developers/bridge/methods#costitems-list-options). * Tag every line with a `section` (e.g. `"Blinds"`, `"Installation"`, `"Extras"`) — the host quote UI groups lines visually by section. See [`quotes.addLines`](/developers/bridge/methods#quotes-addlines-lines) for the full field reference and a modern multi-line example. **manifest.json:** ```json theme={null} { "name": "Ziptrak Retail Estimator", "shortName": "Ziptrak", "type": "quoting_extension", "version": "2.0.0", "description": "Calculate supply and install costs for Ziptrak outdoor blinds. Adds itemised lines directly to the open quote.", "entry": "index.html" } ``` **index.html (key JS excerpt):** ```html theme={null} ``` **What the Ziptrak example demonstrates:** * `manifest.json` with `type: "quoting_extension"` so `addLines` is unlocked * `initBridge()` calls `products.list({ pageSize: 500 })` and populates `skuIdMap` * `collectQuoteLines()` builds lines with: * `groupKey` (`"blind-1"`, `"blind-2"`) so blind + pelmet lines are grouped in the quote * `productId` resolved from `skuIdMap` for task template injection * `productCode` as the human-readable SKU * `costPrice` (wholesale) alongside `unitPrice` (retail) for real margin in the COB panel * `unit: "T_ITEM"` for per-blind lines (use `"T_SQUARE_METRE"` for fabric area charges) * `location` for the area/zone label and `specification` for dimensions and config detail # SDK Include Source: https://docs.pipeline.software/developers/bridge/sdk How to load the Pipeline SDK in your tool. Add this script tag to your entry HTML file: ```html theme={null} ``` The SDK creates a `window.pipeline` namespace with all available methods. All methods return Promises. The SDK waits internally for the bridge to be ready — you do not need to poll or delay before calling methods. ## Namespaces The current SDK (v2.1.0) exposes: ```javascript theme={null} window.pipeline.context.get() window.pipeline.customers.list({ page, pageSize }) window.pipeline.products.list({ page, pageSize }) window.pipeline.taskTemplates.list({ codes, page, pageSize }) // since v2.1.0 window.pipeline.costItems.list({ codes, page, pageSize }) // since v2.1.0 window.pipeline.jobs.list({ page, pageSize }) window.pipeline.quotes.list({ page, pageSize }) window.pipeline.quotes.create(request) window.pipeline.quotes.addLines(lines) // quoting_extension only ``` `window.pipeline.version` reports the SDK version string at runtime. ## Runtime environment Marketplace tools run inside a sandboxed iframe. A few host constraints to design around: ### Native modals are blocked `alert()`, `confirm()`, and `prompt()` are silently ignored — the iframe is sandboxed without the `allow-modals` capability. Calls to these functions log a warning to the DevTools console and return immediately without showing anything to the user. **Use in-page UI for all user feedback instead:** * For ephemeral confirmations and errors, render a toast (a small, non-interactive div positioned `fixed; bottom: 1rem; right: 1rem;` that auto-hides after 2-3 seconds). * For persistent warnings (e.g. "couldn't reach Pipeline catalogue, submit unavailable"), render a banner at the top of the tool with an inline retry button. * For destructive confirmations (e.g. "clear all rows?"), use a two-click pattern: the first click changes the button label to "Click again to confirm" for a few seconds, the second click commits. ### Storage The host does not expose a persistent-storage API to extensions. Use standard [`localStorage`](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) for tool-side preferences (pricing, defaults, the operator's last-used settings). Storage is scoped to the iframe origin, which is per-tool. Do **not** persist the in-progress quote in `localStorage` — Pipeline owns the quote. Submit-or-discard is the expected lifecycle. ### XSS hygiene If you build HTML via template strings (`element.innerHTML = \`...\`\`), escape every interpolated user-supplied value. A 6-line helper is enough: ```javascript theme={null} function escHtml(s) { return String(s == null ? "" : s) .replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">") .replaceAll('"', """).replaceAll("'", "'"); } ``` Apply it to anything the operator typed (notes, location names, free-text specifications) and to anything coming back from `customers.list` or `products.list` (supplier names, descriptions). Numeric and boolean values are safe. # Tool Bundle Format Source: https://docs.pipeline.software/developers/bridge/tool-bundle Package format, allowed file types, and size limits for marketplace tools. * Package as a `.zip` file containing your entry point HTML file at the root * Allowed file types: .html, .css, .js, .svg, .png, .jpg, .woff2, .json * Max compressed size: 10 MB * Max decompressed size: 50 MB * Max file count: 200 * No path traversal (../) in filenames ### manifest.json Every tool bundle must include a `manifest.json` at the root. The manifest declares how the tool integrates with Pipeline. **Example:** ```json theme={null} { "name": "Ziptrak Retail Estimator", "shortName": "Ziptrak", "type": "quoting_extension", "version": "2.0.0", "description": "Calculate supply and install costs for Ziptrak outdoor blinds. Adds itemised lines directly to the open quote.", "entry": "index.html" } ``` **Manifest fields:** | Field | Type | Required | Description | | ----------- | ------------- | -------- | ----------------------------------------------------------------------------- | | name | string | Yes | Full display name shown in the marketplace listing | | shortName | string | Yes | Short name used in Pipeline UI chrome (e.g. tab labels) | | type | enum | Yes | Integration type — see values below | | version | semver string | Yes | Tool version (e.g. `"2.0.0"`) | | description | string | Yes | One-sentence description shown in the marketplace | | entry | string | Yes | Relative path to the HTML entry point inside the bundle (e.g. `"index.html"`) | **`type` values:** | Value | Behaviour | | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `standalone` | Default. Tool renders as a sidebar panel, launched from the Pipeline tool launcher. Has read access to customers, products, quotes, and jobs, plus `quotes.create`. This is the right type for quoting tools that create a new quote rather than injecting into an existing one. | | `quoting_extension` | Tool integrates with an already-open quote modal. Launched from inside the quote UI rather than the tool launcher. Unlocks `quotes.addLines` — which appends lines directly into the active in-memory quote. Use this type when your tool is designed to add lines to a quote the user is currently editing. | # Choosing a Path Source: https://docs.pipeline.software/developers/choosing-a-path Compare the Public REST API and Pipeline Bridge to pick the right integration path. Both integration paths target different use cases. Use this table to choose. | | Public REST API | Pipeline Bridge | | ------------- | --------------------------------------------- | --------------------------------------- | | **Best for** | Backend sync, webhooks, third-party platforms | Embedded tools, estimators, calculators | | **Auth** | API key (Bearer token) | None - inherits Pipeline session | | **Language** | Any language (HTTP) | JavaScript (browser) | | **Entry** | REST endpoints | `window.pipeline.*` methods | | **Use cases** | CRM bridges, automated quoting, data export | Quote tools, configurators, lookups | # Build on Pipeline Source: https://docs.pipeline.software/developers/index Two integration paths: Pipeline Bridge for embedded tools, and the Public REST API for server-to-server. Pipeline is built to be extended. Whether you're a developer at a trade business building internal tools, or a software company integrating Pipeline into a larger workflow - this section covers everything you need to build on top of Pipeline. You can embed custom HTML/JavaScript tools directly into the Pipeline interface using the **Pipeline Bridge**, or automate and sync data server-to-server using the **Public REST API**. Both are designed to be straightforward to start with and grow with your needs. Embed HTML/JS tools inside Pipeline. No API keys - the bridge inherits the user's session. Server-to-server integration with API key auth. Read customers, products, quotes; create quotes. # Asset History Source: https://docs.pipeline.software/kb/assets/asset-history Asset History - Pipeline knowledge base. ## Asset History Pipeline maintains a complete history of where each asset has been and what has happened to it, giving you full traceability. ### Location History > **Screenshot:** The asset location history grid showing Date, Location, Address, User, and Accessories Checked columns, with the Update Location button visible in the toolbar. The history grid shows every recorded location change: * **Date** - When the location was recorded * **Location** - Physical location name * **Address** - Full address of the location * **User** - Who recorded the location change * **Accessories Checked** - List of accessories present at the time * **Notes** - Additional notes about the move (shown in tooltip) ### Recording a Location Change 1. Open the asset detail page 2. Click **Update Location** 3. Fill in the location details: * **Date/Time** - When the asset was moved * **Location Type**: * **Local** - On-site at a known location (select from dropdown) * **Ad-hoc** - Temporary location (enter address manually) * **Supplier** - At a supplier's premises * **Customer** - At a customer's site * **Location** - Select or enter the specific location * **Accessories Checked** - Tick the checkboxes for accessories present with the asset * **Notes** - Add any notes about the asset's condition 4. Save the location record ### Exporting History Click **Export to Excel** to download the complete location history for the asset. ### Current Location The asset grid's Location column always shows the most recently recorded location, with a tooltip displaying the full address. This gives you real-time visibility of where all your assets are. # Asset Registry Source: https://docs.pipeline.software/kb/assets/asset-registry Asset Registry - Pipeline knowledge base. ## Asset Registry The Asset Registry is your central database for tracking all equipment, tools, vehicles, and other assets used in your operations. ### Accessing Assets Click **Assets** in the top navigation bar to open the asset management page. ### Asset Grid > **Screenshot:** The Asset Registry grid showing columns for UID, Type, Name, Manufacturer, Model, Serial Number, Location, and Status with colour-coded status pills. Include the search box, status filter radio buttons, and Add/Export toolbar buttons. The main grid displays all registered assets with columns: * **UID** - System-generated unique identifier * **Type** - Asset category (equipment, tools, vehicle, etc.) * **Name** - Asset description * **Manufacturer** - Brand name * **Model** - Model number * **Description** - Additional details * **Serial Number** - Serial or registration number * **Location** - Current location (with address tooltip) * **Status** - Active, Retired, In Repair, etc. (colour-coded) * **Custom Dates** - Configurable date fields (e.g., purchase date, next service date) ### Filtering and Searching * Use the **search box** to find assets by any column value * Filter by **status** (Active, All, etc.) using the radio buttons * Apply **tag filters** using the multi-select dropdown * Combine filters with AND/OR logic using the predicate toggle ### Creating a New Asset 1. Click the **Add** button in the toolbar 2. Choose numbering: **Auto** (system-generated) or **Manual** (custom UID) 3. Fill in the required fields: * **Name** (required) * **Type** - Select from the asset category dropdown * **Serial Number** * **Manufacturer** - Select from dropdown or add a new one * **Model** * **Owner** - Link to a supplier or organisation * **Description** (up to 1,000 characters) 4. Optionally set custom date fields 5. Click **Save** Pipeline automatically creates a default hire cost code and supply line for the new asset. ### Exporting Click the **Export** button to download the asset list as an Excel spreadsheet. # Assets Source: https://docs.pipeline.software/kb/assets/index Register equipment, track locations, log faults, and manage asset history. Register equipment, track locations, log faults, and manage asset history. # Logging Asset Faults Source: https://docs.pipeline.software/kb/assets/logging-asset-faults Logging Asset Faults - Pipeline knowledge base. ## Logging Asset Faults When equipment breaks down or has issues, Pipeline's fault logging system helps you track and manage the problem through to resolution. ### Viewing Faults > **Screenshot:** The fault report modal showing the read-only asset info (UID, Name, Manufacturer), the Report Type radio buttons (Return to Store / Drop for Repair), the Synopsis text area, and the Submit button. The fault registry for each asset shows a grid with: * **Date** - When the fault was reported * **Ref** - Unique fault reference number * **Status** - Open (red badge) or Closed * **Fault Description** - Summary of the issue * **User** - Email of the person who reported the fault ### Reporting a New Fault 1. Navigate to the asset detail page 2. Open the fault section 3. Click **Report Fault** 4. The modal shows read-only asset information: UID, Name, Manufacturer, Type, Serial Number 5. Select the **Report Type**: * **Return to Store (Faulty)** - The asset is being returned to warehouse storage. Select the warehouse location. * **Drop for Repair** - The asset is going to an external repair shop. Select the repair shop supplier and optionally enter the shop address. 6. Enter a **Synopsis** describing the fault in detail 7. Submit the fault report ### Fault Status * **Open** - Fault has been reported and is being addressed (shown with a red badge) * **Closed** - Fault has been resolved ### Tracking Faults The asset detail page shows: * **Open Fault Count** - Number of currently open faults * **Open Fault Ref** - Reference of the current open fault * **Asset Status** - Updates to reflect the fault state (e.g., "In Repair") This provides quick visibility of which assets have active problems. # CRM Reminders Source: https://docs.pipeline.software/kb/customers-and-crm/crm-reminders CRM Reminders - Pipeline knowledge base. ## CRM Reminders The Reminders board is Pipeline's built-in CRM tool for managing follow-ups, customer engagement, and task tracking. ### Accessing Reminders Click **Reminders** in the top navigation bar to open the reminder board. ### Reminder Board Layout > **Screenshot:** The Reminders board showing the section headers (Overdue, Due Today, Upcoming, Open Tasks) with count badges, the "My Reminders / All" toggle, and several reminder cards with titles, due dates, and priority indicators. The board organises reminders into sections by status: * **Overdue** - Reminders past their due date (with count badge) * **Due Today** - Reminders due today (with count badge) * **Upcoming** - Future reminders (with count badge) * **Open Tasks** - Active tasks (with count badge) * **Completed** - Finished reminders (shown when the "Show Completed" toggle is on) ### Filtering Reminders * **My Reminders / All** - Toggle between viewing only your reminders or the entire team's * **Show Completed** - Toggle to reveal or hide completed items ### Creating a Reminder 1. Click **Create New** 2. Fill in the details: * **Title** (required) - e.g., "Follow up on trial feedback" * **Description** - Additional context (optional) * **Due Date** - When the reminder should trigger (optional) * **Priority** - Low, Normal, or High * **Assigned To** - Select a team member from the dropdown * **Company** - Optionally link to a CRM company 3. Click **Save** ### Managing Reminders * Click a reminder to edit its details * Mark a reminder as complete when the follow-up is done * Reminders past their due date automatically appear in the Overdue section ### CRM Item Board The reminder board also includes a CRM item view with colour-coded expiration indicators: * **Green** - Not expired, on track * **Amber** - Warning, approaching expiration * **Red** - Overdue or expired Categories show the count of items by status. Click a category to focus on that type of follow-up. # Customer Profiles Source: https://docs.pipeline.software/kb/customers-and-crm/customer-profiles Customer Profiles - Pipeline knowledge base. ## Customer Profiles Every customer in Pipeline has a detailed profile page where you can view their information, activity, invoices, files, and history. ### Accessing a Customer Click on a customer name from any job, invoice, or search result to open their profile page. ### Profile Header The header displays: * **Customer reference** and **name** * **Phone number** (Contact 1) * **Email address** (Contact 2) * **Billing address** (formatted) ### Profile Tabs > **Screenshot:** A customer profile page showing the header with customer name, phone, email, and billing address, and the four tabs (Activity, Invoices, Files, History) with the Activity tab selected showing the timeline. The customer profile has four tabs: **Activity Tab** Shows a timeline of all customer interactions using a visual timeline component. This includes jobs, quotes, communications, and other transactions - giving you a complete picture of your relationship with the customer. **Invoices Tab** Displays a table of all financial transactions for the customer, including: * Invoice references and amounts * Invoice status * Payment history Click any invoice to view its full details. **Files Tab** Manage documents associated with this customer: * **Upload** - Drag and drop files or click to browse * **File List** - View all uploaded files with options to preview, download, or delete Supports images, PDFs, and other document types. **History Tab** A complete audit trail showing every change made to this customer record: * Object type and record type (Create, Edit, Delete) * Description of what changed * Who made the change * Date and time Expand any entry to see detailed change information. # Customers & CRM Source: https://docs.pipeline.software/kb/customers-and-crm/index Manage customer profiles, view activity, and use CRM reminders. Manage customer profiles, view activity, and use CRM reminders. # Getting Started Source: https://docs.pipeline.software/kb/getting-started/index Learn the basics of Pipeline and get up and running quickly. Learn the basics of Pipeline and get up and running quickly. # Logging In and Your Dashboard Source: https://docs.pipeline.software/kb/getting-started/logging-in-and-your-dashboard Logging In and Your Dashboard - Pipeline knowledge base. ## Logging In Navigate to your organisation's Pipeline URL in your web browser. Enter your email address and password to sign in. If you have forgotten your password, click the "Forgot password?" link on the login page to receive a password reset email. ## Your Dashboard After logging in, you land on the Dashboard - your central hub for viewing and managing jobs. ### Dashboard Views The Dashboard has two main sections: **Pipeline Matrix** The top of the Dashboard shows the Pipeline Matrix - a summary grid where: * **Columns** represent workflow stages: Pending, Pricing, Stock, Scheduling, In Progress, Back Costing, Invoicing, Payments * **Rows** represent status colours: Purple (priority), Red (critical), Amber (warning), Green (on track) * Each **cell** shows a count of jobs matching that stage and status * Click any cell to open a filtered list of those specific jobs > **Screenshot:** The Pipeline Matrix at the top of the Dashboard showing the grid of workflow stages (columns) and status colours (rows) with count numbers in each cell. **Job List** Below the matrix, a detailed job grid shows all active jobs with columns for Job Ref, Stage, Schedule, Customer, Service Address, Channel, and traffic light status indicators. > **Screenshot:** The job list grid below the Pipeline Matrix showing several rows of jobs with their reference numbers, workflow stages, customer names, and coloured status dots. ### Activity Panel The right-hand sidebar displays a real-time activity feed showing messages, notifications, and status changes. It includes a **New Job** button and a **Message** button at the top. ### Quick Actions * Click the **New Job** button in the activity panel to create a new job * Click any job reference in the grid to open the full job detail page * Click any cell in the Pipeline Matrix to see jobs matching that stage and status # Understanding User Roles Source: https://docs.pipeline.software/kb/getting-started/understanding-user-roles Understanding User Roles - Pipeline knowledge base. ## User Roles in Pipeline Pipeline uses role-based access to control what each user can see and do. Your administrator assigns roles when creating your account. ### Available Roles **Super User** Full access to all features including system configuration, integrations, debug tools, and all module settings. This is typically reserved for system administrators. **Admin** Access to administrative features including user management, workflow configuration, and all operational modules. Can view Pulse analytics dashboards. **Office** Designed for office-based staff who manage the day-to-day operations. Access includes: * Creating and managing jobs * Sales and invoicing * Purchase order management * Stock management (if Stock module is enabled) * Customer management * Time tracking * CRM reminders **Field** Designed for field workers who perform on-site work. Access includes: * Viewing assigned jobs * Updating job and task status * Schedule viewing * Asset management (if Assets module is enabled) ### Module Access In addition to roles, your organisation may have specific modules enabled: * **Pipeline** - Core job management, scheduling, and invoicing * **Stock** - Inventory and stock management * **Assets** - Equipment tracking and fault logging Your navigation bar only shows modules that are both enabled for your organisation and accessible by your role. ### Checking Your Access If you cannot see a particular feature or menu item, it may be because your role does not include access to that area. Contact your administrator to request a role change if needed. # Using Global Search Source: https://docs.pipeline.software/kb/getting-started/using-global-search Using Global Search - Pipeline knowledge base. ## Global Search Pipeline's Global Search lets you quickly find customers, jobs, contacts, and other records across the system. ### How to Search 1. Click the **Search** icon in the navigation bar, or navigate to the search page 2. Type your search term in the search box (up to 50 characters) 3. Results appear automatically as you type (with a short delay for performance) 4. Click the **X** button to clear your search and start over ### Search Scope > **Screenshot:** The Global Search page showing the search box at the top with scope checkboxes (Customers, Prospects, Contacts, Quotes) and a set of search results below. Use the checkboxes to control which types of records to search: * **Customers** - Search by customer name, reference, phone, email, or address * **Prospects** (Jobs) - Search by job reference, customer name, phone, email, or address * **Contacts** - Search individual contact records * **Quotes** - Search quote references You can enable multiple scopes at once to search across different record types simultaneously. ### Search Results Results are displayed in separate grids by type: **Customer Results** show: * Customer Reference * Customer Name * Phone Number * Email Address * Billing Address * Date Created **Job Results** show: * Job Reference (auto-number) * Customer Name * Phone and Email * Billing Address * Current Status ### Navigating to Results Click any row in the search results to navigate directly to that record's detail page. ### Tips * Search is case-insensitive * Partial matches are supported - you don't need to type the full name or reference * Use the most specific term you can to narrow down results quickly # Welcome to Pipeline Source: https://docs.pipeline.software/kb/getting-started/welcome-to-pipeline Welcome to Pipeline - Pipeline knowledge base. ## What is Pipeline? Pipeline is a complete field service management platform designed to help your business manage jobs, scheduling, invoicing, stock, assets, and customer relationships - all in one place. ### Key Modules Pipeline is organised into several core modules, each accessible from the top navigation bar: * **Dashboard** - Your home base. The Pipeline Matrix shows a summary grid of all jobs by workflow stage and status colour, with a detailed job list below and a real-time activity panel on the right. * **Schedule** - Plan and allocate resources with multiple views including Month, Timeline, Week, and Agenda. Drag-and-drop workers onto jobs. * **Sales** - Track invoices by aging bucket (7, 30, 60, 90, 120+ days), create and send invoices, and manage quotes. * **Purchases** - Manage supplier invoices, purchase orders, and back-costing reconciliation. * **Stock** - Full inventory management with SKUs, stock in/out tracking, job allocation, and stock kits. * **Assets** - Register and track equipment, log faults, and maintain location history. * **Time Tracking** - Weekly timesheet entry for employees with daily status indicators. * **Reminders** - CRM-style reminder board for customer follow-ups and task management. * **Pulse** - Admin-only analytics dashboards with AI-powered insights, charts, and business intelligence. * **Settings** - System configuration for workflows, users, teams, templates, and integrations. > **Screenshot:** The top navigation bar showing all module links (Dashboard, Schedule, Pulse, Reminders, Stock, Sales, Purchases, Time Tracking, Assets, Settings). Capture while logged in as an Admin user so all modules are visible. ### Navigation The top navigation bar adapts based on your role and the modules enabled for your organisation. Click any module name to navigate to it. Your current location is highlighted in the navigation bar. ### Real-Time Updates Pipeline uses real-time communication so your screen updates automatically when colleagues make changes. You don't need to manually refresh - new jobs, status changes, and notifications appear instantly. ### Getting Help If you need assistance, browse the articles in this Knowledge Base by category, or use the search bar at the top of the Knowledge Base page to find specific topics. # Knowledge Base Source: https://docs.pipeline.software/kb/index Guides and how-tos for using Pipeline. Browse Pipeline guides by topic. Learn the basics of Pipeline and get up and running quickly. Everything about creating and managing jobs, tasks, quotes, and the job lifecycle. Schedule jobs, allocate workers, and manage your team's calendar. Create invoices, manage aging, track purchase orders, and handle supplier invoices. Manage SKUs, track stock levels, allocate materials to jobs, and create stock kits. Register equipment, track locations, log faults, and manage asset history. Log employee hours, manage weekly timesheets, and track time against jobs. Manage customer profiles, view activity, and use CRM reminders. System configuration for administrators - workflows, users, teams, and integrations. Using the Pipeline mobile app — jobs, timers, expenses, photos, and more. Admin dashboards, business intelligence, and AI-powered insights. Send emails and SMS to customers, manage message templates, and understand real-time notifications. Connect Pipeline to Xero for automatic invoice, customer, and payment synchronisation. # Creating and Editing Invoices Source: https://docs.pipeline.software/kb/invoicing-and-finance/creating-and-editing-invoices Creating and Editing Invoices - Pipeline knowledge base. ## Creating and Editing Invoices Pipeline provides a full invoice editor for creating, editing, and managing invoices linked to your jobs. ### Invoice Header > **Screenshot:** The draft invoice editor showing the header (Invoice Reference, Date, Customer), the line items table with Cost Code, Description, Units, Rate, and Line Nett columns, and the Nett/Tax/Total summary box at the bottom right. When editing a draft invoice, the header contains: * **Invoice Reference** - Editable reference number (required, shown with red border if empty) * **Invoice Date** - Date picker for when the invoice is issued * **Customer Name** - The invoiced customer * **Customer Address** - Full billing address Click the **pencil icon** next to the date to enter edit mode for header fields. ### Invoice Line Items Each invoice line includes: * **Job Date** - Date the work was performed * **Job Ref** - Reference to the related job * **Cost Code** - Select from the dropdown (automatically fills description, rate, and tax rate) * **Description** - Line item description (editable) * **Units** - Quantity or hours (0 to 1000) * **Charge Rate** - Rate per unit (calculated from cost code) * **Tax Rate** - Tax percentage (from cost code) * **Line Nett** - Automatically calculated (Units x Rate) **Editing a line:** Click the pencil icon on any line to enter edit mode. The row highlights and becomes editable. Click the checkmark to save or X to cancel. **Deleting a line:** Click the trash icon (requires PIN confirmation for security). ### Invoice Totals The summary box at the bottom right shows: * **Nett** - Subtotal before tax * **Tax** - Total tax amount * **Total** - Gross amount (all formatted to 2 decimal places) ### Invoice Workflow Invoices progress through three statuses: 1. **Draft** - Fully editable. Title shows "DRAFT Invoice". You can add/edit/delete lines and change the date and reference. 2. **Approved** - Click "Approve Only" to lock the invoice. Lines are no longer editable. You can "Unapprove" to return to Draft if needed. 3. **Sent** - After sending, the invoice is fully locked. You can only view the PDF. # Invoicing & Finance Source: https://docs.pipeline.software/kb/invoicing-and-finance/index Create invoices, manage aging, track purchase orders, and handle supplier invoices. Create invoices, manage aging, track purchase orders, and handle supplier invoices. # Purchase Orders Source: https://docs.pipeline.software/kb/invoicing-and-finance/purchase-orders Purchase Orders - Pipeline knowledge base. ## Purchase Orders Purchase Orders (POs) in Pipeline let you order materials and services from suppliers, linked to specific jobs. ### PO Header > **Screenshot:** The Purchase Order modal showing the PO header (Reference, Supplier, Delivery Option), the line items grid with SKU, Description, Quantity, Rate, and Nett columns, and the Send PO button. Each PO contains: * **PO Reference** - Unique purchase order number * **Supplier Name** - The supplier you are ordering from * **Supplier Email** - For sending the PO electronically * **Delivery Option** - Choose between: * **Deliver** - Delivery to the project service address * **Collection** - Pick up from the supplier * **Delivery Address** - Automatically filled based on the delivery option ### PO Line Items POs support two types of lines: **Stock/SKU Lines** (for inventory items): * Our Ref (SKU code) * Supplier Ref * Description * Quantity (editable inline) * GL Account * Supplied Rate * Nett total (auto-calculated) * Manifest link status **Generic Lines** (for non-stock items): * Supplier Ref * Description * Quantity (editable inline) * GL Account * Supplied Rate * Nett total Edit quantities by clicking directly in the quantity cell (inline editing). Line totals recalculate automatically. ### Sending a PO 1. Ensure at least one line item exists (the Send button is disabled without lines) 2. Click **Send PO** 3. The email modal opens with a template including the supplier name, PO reference, and a link for the supplier to view the PO 4. Click **Send** to deliver the PO to the supplier ### Deleting Lines Click the trash icon on any line to remove it from the PO. # Sales Aging Overview Source: https://docs.pipeline.software/kb/invoicing-and-finance/sales-aging-overview Sales Aging Overview - Pipeline knowledge base. ## Sales Aging Overview The Sales page provides a clear picture of your outstanding invoices, organised by how long they have been due. ### Aging Buckets > **Screenshot:** The Sales Aging page showing the five aging bucket cards (7, 30, 60, 90, 120+ days) at the top with invoice counts and amounts, and the invoice summary table below. At the top of the Sales page, five aging cards show your invoice aging at a glance: | Bucket | Description | | ------------- | ------------------------- | | **7 Days** | Invoices 0-7 days old | | **30 Days** | Invoices 8-30 days old | | **60 Days** | Invoices 31-60 days old | | **90 Days** | Invoices 61-90 days old | | **120+ Days** | Invoices over 90 days old | Each card displays: * **Invoice count** - A badge showing how many invoices fall in that range * **Amount outstanding** - The gross amount minus any credits applied * **Credits** - Shown separately in red if credit notes have been issued * **Sales total** - Original sales amount before credits ### Invoice Summary Table Below the aging cards, a detailed table lists all invoices with: * **Customer Name/Ref** - The customer linked to the invoice * **Invoice Reference** - Unique invoice number * **Invoice Date** - When the invoice was issued * **Amount Outstanding** - Balance still due * **Total Paid** - Cumulative payments received (shown in green, click to view payment breakdown) * **Invoice Status** - Draft, Approved, or Sent * **Credit Notes** - Any related credit notes with their own outstanding and paid amounts ### Actions * **Click an invoice row** to open a detailed invoice preview and analysis * **Click the green "Total Paid" amount** to see a breakdown of payments received * **Create Credit Note** - Available via the dropdown action for qualifying invoices * **Search and filter** invoices using the toolbar # Sending Invoices by Email Source: https://docs.pipeline.software/kb/invoicing-and-finance/sending-invoices-by-email Sending Invoices by Email - Pipeline knowledge base. ## Sending Invoices by Email Once an invoice is approved, you can send it directly to your customer via email. ### How to Send 1. Open the invoice from the Sales page 2. If the invoice is in Draft, click **Approve and Send** or approve first, then click **Send** 3. The send modal opens with the email details ### Email Configuration > **Screenshot:** The invoice send modal showing the customer name, email address, rich text email body editor with template placeholders, the "Alert on Status Update" checkbox, and the Send button. The send modal shows: * **Customer name** - Confirmed recipient * **Email address** - Pre-filled from the customer record **Email Body:** A rich text editor with a pre-populated template that includes: * Customer name * Invoice reference * Total amount * Link to view the invoice online * Link for online payment * Your organisation's accounts team name You can customise the email text before sending. **Alert on Status Update:** Tick this checkbox to receive notifications when the customer opens or interacts with the invoice. ### What Happens When You Send When you click **Send**: 1. An HTML version of the invoice is generated 2. A PDF copy is created and stored 3. The email is queued with the invoice attached 4. The invoice status updates to "Sent" 5. A confirmation notification appears The invoice is now locked and cannot be edited. To view it later, use the **View PDF** option. ### After Sending * The invoice appears as "Sent" in the Sales aging view * Payment tracking begins * If "Alert on Status Update" was enabled, you will be notified of customer interaction # Supplier Invoices Source: https://docs.pipeline.software/kb/invoicing-and-finance/supplier-invoices Supplier Invoices - Pipeline knowledge base. ## Supplier Invoices The Purchases page lets you manage invoices received from your suppliers and reconcile them against purchase orders. ### Supplier Invoice Grid > **Screenshot:** The Purchases page showing the supplier invoice grid with columns for Type, Reference, Supplier, PO, Date, Nett/Tax/Gross, and Reconciliation Status. Include a visible "Reconcile" button on an unreconciled row. The main grid shows all supplier invoices with columns: * **Type** - Invoice classification * **Reference** - Supplier's invoice reference number (click to open details) * **Supplier** - Supplier company name * **Purchase Order** - Linked PO reference * **Date** - Invoice date * **Nett / Tax / Gross** - Financial amounts * **Payment Due Date** - When payment is due * **Payment Status** - Current payment state * **Reconciliation Status** - Whether the invoice has been matched to PO lines ### Searching and Filtering Use the search box in the toolbar to filter invoices across all visible columns. ### Importing Supplier Invoices Drag and drop supplier invoice files onto the upload area in the toolbar, or click to browse for files. ### Reconciliation (Back Costing) For invoices that are not yet reconciled, a **Reconcile** button appears. Click it to open the Back Costing modal: **Left panel** - Supplier invoice lines showing: * Item name, Supplier Ref, Quantity, Rate, Nett * Allocation status * Reconciliation status **Right panel** - Unreconciled PO lines available for matching **Auto Allocate** - Click the magic wand icon to automatically match PO lines to invoice lines by SKU name. **Manual Allocation** - Drag PO lines from the right panel onto invoice lines in the left panel to create manual matches. After reconciliation, the status updates and the invoice is linked to the corresponding purchase order lines. # Adding Notes and Communications Source: https://docs.pipeline.software/kb/jobs-and-pipeline/adding-notes-and-communications Adding Notes and Communications - Pipeline knowledge base. ## Notes and Communications Pipeline tracks all communications related to a job in a dedicated activity view, giving you a complete history of interactions. ### Communications View > **Screenshot:** The Communications view showing the split-panel layout - message list on the left with type icons and timestamps, and the full message detail on the right with subject, from/to, and body content. The communications panel uses a split-panel layout: * **Left panel** - Message list showing all communications, newest first * **Right panel** - Full message detail when a message is selected ### Message List Each message in the list shows: * **Type icon** - Email, SMS, phone call, or manual note * **Sender name** - Who sent or created the message * **Direction** - "Sent" with the recipient, or "Received" with the sender * **Date and time** - When the communication occurred * **Subject or synopsis** - Brief preview of the content ### Message Detail Click a message to view full details: * **Subject** - Full message subject line * **Send Date** - Exact date and time * **From/To** - Sender and recipient information * **Attachments** - Count and list of attached files (click to preview or download) * **Message Body** - Complete message content ### Communication Types * **Received** - Incoming communications from the customer * **Sent** - Outgoing communications from your organisation * **Notes** - Internal notes added by team members ### Attachments Messages can include file attachments. Click an attachment to preview it, or use the download option to save it locally. # Creating a New Job Source: https://docs.pipeline.software/kb/jobs-and-pipeline/creating-a-new-job Creating a New Job - Pipeline knowledge base. ## Creating a New Job To create a new job in Pipeline, click the **Add Job** button from your Dashboard or navigate to the new job page. ### Required Information > **Screenshot:** The New Job form showing the full page with Workflow dropdown, Channel selector, Customer Information fields, Location section, and Enquiry text area. **Workflow** Select the workflow type from the dropdown. This determines how the job will progress through stages (e.g., Quoted Job, Reactive Job). This is a required field. **Channel** Select how the customer enquiry came in - phone, web, email, referral, etc. **Customer Information** * **Company Name** - Start typing to search for an existing customer, or enter a new name to create one * **Account Reference** - The customer's account reference number * **Primary Contact** - The main contact person's name * **Phone Number** - Contact phone number * **Email Address** - Contact email Use the **Find Customer** icon to open a customer lookup if you need to search by different criteria. **Location Information** * Tick the checkbox if the billing address is the same as the service address * Enter the **Billing Address** - Pipeline will verify the address and calculate travel time * Enter the **Service Address** if different from billing A green checkmark confirms the address has been verified. **Job Details** * **Enquiry** - Describe the customer's requirements in the large text area * **Tags** - Add searchable tags to categorise the job ### After Creation When you click **Save and Close**: 1. Pipeline generates a unique job reference number 2. The workflow instance is created at the first stage 3. You are returned to the Dashboard with a confirmation notification 4. Depending on the workflow selected, you may need to create a quote or schedule the job next # Jobs & Pipeline Source: https://docs.pipeline.software/kb/jobs-and-pipeline/index Everything about creating and managing jobs, tasks, quotes, and the job lifecycle. Everything about creating and managing jobs, tasks, quotes, and the job lifecycle. # Job Holds and Status Changes Source: https://docs.pipeline.software/kb/jobs-and-pipeline/job-holds-and-status-changes Job Holds and Status Changes - Pipeline knowledge base. ## Job Holds and Status Changes Pipeline allows you to put jobs on hold and manage their status throughout the lifecycle. ### Placing a Job on Hold Sometimes a job needs to be paused - waiting for a customer decision, materials, or approvals. To place a job on hold: 1. Open the job detail page 2. Click the **Options** button in the job header 3. Select **Hold Job** 4. Choose the hold reason (e.g., Hold for Quote, Hold for Schedule) > **Screenshot:** A job detail page header showing the red Hold badge next to the workflow stage, the Options button, and the Close Job button. When a job is on hold: * A **red badge** appears in the job header showing the hold status * Certain actions may be restricted until the hold is released * The job remains visible in your Dashboard and reports ### Releasing a Hold To remove a hold: 1. Open the job detail page 2. Click the **Options** button 3. Select **Unhold Job** The red hold badge will be removed and normal operations resume. ### Closing a Job When all work is complete, a **Close Job** button appears in the job header (only visible when the job is ready and in Open status): 1. Click **Close Job** in the header bar 2. Confirm the closure Closing a job finalises it and prevents further task updates. ### Configuring a Job Click the **pencil icon** in the job header to open the configuration modal where you can change: * **Channel** - How the enquiry was received * **Workflow** - The job workflow type (changes available stages) * **Invoice Option** - How the customer should be invoiced * **Credit Limit** - Maximum spend allowed for this job # Managing Job Tasks Source: https://docs.pipeline.software/kb/jobs-and-pipeline/managing-job-tasks Managing Job Tasks - Pipeline knowledge base. ## Managing Job Tasks Tasks are the individual units of work within a job. Each job contains tasks that need to be completed as the job progresses through its workflow. ### Viewing Tasks Tasks can be viewed in two formats: **Kanban View** Three columns showing task status: * **Todo** - Tasks not yet started (sorted ascending) * **Started** - Tasks currently in progress (sorted ascending) * **Completed** - Finished tasks (sorted newest first) Each column shows a count of tasks in that status. > **Screenshot:** The task Kanban view showing the three columns (Todo, Started, Completed) with task cards in each column and count badges in the column headers. **List View** A detailed table showing all task properties including status, estimated time, due date, and assigned workers. ### Task Properties Each task has: * **Name** - The task description (from the task template) * **Status** - Todo, Started, or Completed * **Estimated Minutes** - Time budget for the task * **Due Date** - When the task should be completed * **Chargeable** - Whether time on this task is billable to the customer * **Assigned Workers** - Employees allocated to this task ### Updating a Task Click on a task to open the task update modal: > **Screenshot:** The task update modal showing the status dropdown, chargeable checkbox, time tracking fields (Total Time, Chargeable, Unchargeable), and the employee assignment grid with the "Add Employee" button. 1. **Change Status** - Use the status dropdown to move the task from Todo to Started or Completed 2. **Toggle Chargeable** - Check or uncheck the chargeable box to control billing 3. **View Time** - See total time logged, chargeable time, and unchargeable time (read-only) 4. **Manage Workers** - Click "Add Employee" to assign workers. The grid shows each employee's name, hours, rates, and cost codes ### Task Time Tracking Time is tracked automatically when workers log their hours against tasks. The task update modal shows: * **Total Time on Task** - All hours logged * **Chargeable Time** - Hours that will be invoiced * **Unchargeable Time** - Hours absorbed as cost # Understanding Workflow Stages Source: https://docs.pipeline.software/kb/jobs-and-pipeline/understanding-workflow-stages Understanding Workflow Stages - Pipeline knowledge base. ## Understanding Workflow Stages Every job in Pipeline follows a workflow - a defined sequence of stages that the job progresses through from creation to completion. ### What Are Workflow Stages? Workflow stages represent the key milestones in a job's lifecycle. Common stages include: * **Pending** - Job has been created but not yet actioned * **Pricing** - Quote or estimate is being prepared * **Stock** - Materials are being allocated or ordered * **Scheduling** - Job is being scheduled for a site visit * **In Progress** - Work is being carried out * **Completed** - Work has been finished * **Invoiced** - Invoice has been sent to the customer The exact stages depend on the workflow type selected when the job was created. Your administrator configures these in Settings. ### Stage Indicators > **Screenshot:** A job detail page header showing the workflow stage tabs along the top, with the current stage highlighted and completed stages showing checkmarks. On the Dashboard, the Pipeline Matrix groups jobs by their current stage (columns) and status colour (rows). Each cell shows a colour-coded count: * **Green** - On track, no issues * **Amber** - Warning, approaching a deadline or requires attention * **Red** - Overdue or a problem has been identified * **Purple** - Critical priority ### Moving Between Stages Jobs advance through stages as tasks are completed or as you manually update the workflow. Some transitions happen automatically (e.g., completing all tasks at a stage may advance the job), while others require manual action. ### Viewing Stage Progress On the job detail page, tabs correspond to workflow stages. The current stage is highlighted, and completed stages show a checkmark. You can review the work done at each stage by clicking the relevant tab. # Working with Quotes Source: https://docs.pipeline.software/kb/jobs-and-pipeline/working-with-quotes Working with Quotes - Pipeline knowledge base. ## Working with Quotes Pipeline's quoting system lets you create, edit, and send quotes to customers as part of the job workflow. ### Quote Lifecycle Quotes move through these statuses: 1. **Draft** - Editable, not yet sent to the customer 2. **Sent** - Delivered to the customer, awaiting response 3. **Accepted** - Customer has accepted the quote 4. **Rejected** - Customer has declined the quote 5. **Expired** - Quote validity period has passed ### Creating a Quote From the job detail page: 1. Navigate to the Quotes section 2. Click **New Quote** 3. Fill in the quote details > **Screenshot:** The Quote editor showing the header fields (Customer, Date, Expiry, Address), the line items table with columns for description, quantity, rate, and total, and the financial summary (Nett, Tax, Total) at the bottom. **Quote Header Fields:** * **Customer** - Pre-filled from the job (editable in Draft only) * **Date** - Quote date (editable in Draft only) * **Expiry** - Select quote validity period from the dropdown * **Address** - Toggle between billing and service address * **Type** - Switch between Quote and Estimate (Draft only) **Quote Line Items:** Each line includes: * Task or item description * Quantity * Unit rate * Total price * Whether the line is chargeable * Notes ### Financial Summary The quote header displays key financial metrics: * **Cost** - Total cost of quoted items * **Margin** - Profit amount (Gross minus Cost) * **Margin %** - Percentage profit * **Budget** - Project budget limit The bottom of the quote shows: * **Nett** - Subtotal before tax * **Tax** - Tax amount * **Total** - Gross amount including tax ### Sending a Quote Once your quote is ready: 1. Review all line items and totals 2. Click **Send Quote** 3. The quote status changes to Sent and fields become locked ### Quote Actions * **Preview** - View the quote as a formatted PDF * **Clone** - Create a copy of an existing quote * **Create Invoice** - Generate an invoice from an accepted quote * **Export** - Download as PDF # App Settings Source: https://docs.pipeline.software/kb/mobile-and-field-worker/app-settings App Settings - Pipeline knowledge base. ## App Settings The Settings tab lets you configure the app to suit your preferences. ### Your Profile Shows your name and login status with an avatar displaying your initials. ### Organisation Switching If you have access to multiple organisations, the Settings page lists them all. Tap an organisation to switch — you will be prompted for your password to confirm. ### Theme Toggle **Dark Mode** on or off. The change applies immediately across the entire app. ### Timer Auto-Stop Choose how long timers can run before automatically stopping: * 1 hour, 2 hours, 4 hours, 8 hours, 12 hours, 24 hours, or **No limit** This prevents timers from running indefinitely if you forget to stop them. ### API Environment Shows the current server URL. This can be changed for testing or if directed by your administrator. ### Logging Out Tap **Log Out** to sign out and remove all local data from the device. This clears: * Authentication tokens * Cached job data and databases * Your profile information Your theme preference, API URL, and timer settings are preserved. # Arriving on Site and Risk Assessment Source: https://docs.pipeline.software/kb/mobile-and-field-worker/arriving-on-site-and-risk-assessment Arriving on Site and Risk Assessment - Pipeline knowledge base. ## Arriving on Site and Risk Assessment When you arrive at a job site, Pipeline records your arrival and ensures you have reviewed any identified risks. ### Starting the Arrival Flow From the job card, tap **Arrive on Site**, or open the job and use the actions menu. ### Risk Assessment > **Screenshot:** The Risk Acceptance screen showing the "Identified Risks" section with risk content, and the "Decline" and "Accept & Proceed" buttons at the bottom. Before confirming arrival, you are shown any risks identified for the job: * **Identified risks** are displayed with their descriptions * If no risks have been recorded, a message confirms this You have two options: * **Accept & Proceed** — Acknowledges the risks and confirms your arrival * **Decline** — Returns you to the job detail without arriving ### What Happens on Arrival When you accept and proceed: 1. The job status changes to **In Progress** 2. The job timer starts automatically 3. A success notification confirms "Arrived on site" 4. The job card updates to show the "On Site" status badge ### Already Arrived If you have already arrived on site, the app shows a warning and prevents duplicate arrivals. # Calendar View Source: https://docs.pipeline.software/kb/mobile-and-field-worker/calendar-view Calendar View - Pipeline knowledge base. ## Calendar View The Calendar tab gives you a month-at-a-glance view of your scheduled work. ### Navigating * Use **Previous** and **Next** buttons to move between months * Swipe left or right to navigate months * The current month and year are shown in the header ### Day Indicators > **Screenshot:** The Calendar month view showing the day grid with blue dots under dates that have jobs, an orange circle on dates with leave/unavailability, today highlighted with a blue ring, and the selected date with a blue filled circle. Each day in the calendar can show: * **Blue dots** (1-3) — Days with scheduled jobs * **Orange circle** — Days with leave or unavailability * **Blue ring** — Today's date * **Blue filled circle** — Currently selected date * **Dimmed dates** — Weekend-blocked dates (if weekends are disabled) ### Viewing a Day Tap any date to select it and view the agenda for that day, including scheduled jobs and any blocked time. # Expenses and Receipt Scanning Source: https://docs.pipeline.software/kb/mobile-and-field-worker/expenses-and-receipt-scanning Expenses and Receipt Scanning - Pipeline knowledge base. ## Expenses and Receipt Scanning The Expenses tab lets you track job-related expenses with optional receipt photo scanning. ### Viewing Expenses > **Screenshot:** The Expenses list showing the summary card (total count and amount, this month's count and amount), and expense cards with category icon, vendor, date, amount, and category badge. The expenses page shows: * **Summary** — Total expense count and amount, plus current month figures * **Expense cards** — Each showing vendor name, date, amount, category badge, and linked job reference * Expenses marked "Auto-extracted" include a confidence percentage from OCR ### Adding an Expense 1. Tap the **+** button 2. Optionally capture or select a receipt photo: * **Take Photo** — Opens the device camera * **Choose Photo** — Selects from your photo library 3. If a photo is provided, Pipeline attempts **OCR receipt extraction** to auto-fill fields 4. Fill in or review the expense details: * **Vendor Name** (required) * **Date** (required) * **Total Amount** (required) * **Tax** (optional) * **Category** — Food, Fuel, Materials, Other, etc. * **Payment Method** — e.g., "Company Card", "Cash" * **Link to Job** — Select a job to associate the expense with * **Description** (optional) 5. Tap **Save Expense** ### Receipt OCR When you capture or select a receipt photo, Pipeline automatically extracts: * Merchant name * Transaction date * Total amount and tax * Payment method A success message shows the confidence percentage. Always review extracted data before saving. ### Editing and Deleting Tap any expense to view details. Use the **Edit** (pencil) button to modify or the **Delete** (trash) button to remove it. # Mobile & Field Worker Source: https://docs.pipeline.software/kb/mobile-and-field-worker/index Using the Pipeline mobile app — jobs, timers, expenses, photos, and more. Using the Pipeline mobile app — jobs, timers, expenses, photos, and more. # Job Notes and Messages Source: https://docs.pipeline.software/kb/mobile-and-field-worker/job-notes-and-messages Job Notes and Messages - Pipeline knowledge base. ## Job Notes and Messages Pipeline's mobile app lets you add notes to jobs and send messages to your team. ### Adding Notes 1. Open a job and navigate to the **Notes** tab 2. Tap **Add Note** 3. Type your note in the text area 4. Save the note Notes display with: * Author name * Timestamp * "System" badge for system-generated notes * Note text Notes are visible to all team members with access to the job. ### Job Messages The **Messages** tab on each job shows messages related to that specific job. * Unread messages are marked with a blue dot * Messages show sender name, timestamp, and content * Tap **New Message** to compose **Composing a Message:** 1. Tap the **New Message** button (pencil icon) 2. Select recipients using the autocomplete search 3. Selected recipients appear as removable chips 4. Type your message in the text area 5. Tap **Send** ### Global Messages The **Messages** tab in the bottom navigation shows all your messages (not just job-specific ones): * **Inbox** — Received messages with unread count badge * **Sent** — Messages you have sent Swipe left on any inbox message to dismiss it. Pull down to refresh. # Job Photos and Files Source: https://docs.pipeline.software/kb/mobile-and-field-worker/job-photos-and-files Job Photos and Files - Pipeline knowledge base. ## Job Photos and Files The Files tab on each job lets you upload and manage photos and documents. ### Uploading Files 1. Open a job and navigate to the **Files** tab 2. Tap the **Upload** button 3. Select a photo from your device or take a new one > **Screenshot:** The Files tab showing a thumbnail grid of uploaded images, the Upload button, and the Edit toggle button. Files are uploaded to the server and linked to the job. A spinning indicator shows while the upload is processing. ### Viewing Files * **Images** display as thumbnail previews in a grid * **Non-image files** (documents, PDFs) show a generic file icon with the filename below * Tap any file to view it in full size ### Deleting Files 1. Tap the **Edit** toggle to enter edit mode 2. Tap the delete button on any file 3. Confirm the deletion ### Requirements File management requires an active server connection. If the job is not connected, a message prompts you to connect first. # Linking Your Device Source: https://docs.pipeline.software/kb/mobile-and-field-worker/linking-your-device Linking Your Device - Pipeline knowledge base. ## Linking Your Device Before you can use the Pipeline mobile app, you need to link it to your account. There are two ways to sign in. ### Method 1: Email and Password 1. Open the Pipeline app 2. Enter your **email address** and **password** 3. Tap **Sign In** ### Method 2: 16-Digit Activation Code Your administrator can generate an activation code for your device from the web portal. > **Screenshot:** The activation code entry screen showing the 4x4 grid of digit input fields and the "Link My Account" button. 1. Open the Pipeline app 2. Tap **Use activation code** to switch to code entry 3. Enter the 16-digit code in the grid (you can also paste the full code) 4. Tap **Link My Account** 5. A success message confirms your device is linked ### Switching Methods You can switch between email/password and activation code sign-in by tapping the link at the bottom of the login screen. ### After Linking Once linked, the app downloads your job data and you are taken to the Jobs list. Your login persists until you explicitly log out from Settings. # Scheduling a Job from Mobile Source: https://docs.pipeline.software/kb/mobile-and-field-worker/scheduling-a-job-from-mobile Scheduling a Job from Mobile - Pipeline knowledge base. ## Scheduling a Job from Mobile You can schedule unscheduled jobs directly from the mobile app. ### Opening the Scheduler From the job card, tap the **Schedule** button, or use the three-dot menu and select **Schedule Job**. ### Selecting a Date > **Screenshot:** The mobile schedule page showing the date navigator with previous/next arrows, the "Expected Duration" card, and the time slot grid with available and unavailable slots. Use the **previous** and **next** arrows to navigate between dates. The current date is displayed as "Month Day, Year". ### Setting Duration Tap the **Expected Duration** card to adjust how long the job will take. Use the +/- buttons to set hours and minutes. ### Choosing a Time Slot The schedule page shows available time slots based on your organisation's settings: * Available slots show the time range and duration * **Unavailable slots** are greyed out and disabled (due to existing bookings, blocked dates, or outside work hours) * Tap an available slot to select it (highlighted with an outline) ### Scheduling Rules The app respects your organisation's scheduling configuration: * Work hours (earliest and latest times) * Weekend booking restrictions * Buffer time between site visits * Slot size increments * Existing calendar conflicts ### Confirming After selecting a time slot, confirm to schedule the job. It will move from "Unscheduled" to "Upcoming" or "Today" in your job list. # Task Completion and Time Tracking Source: https://docs.pipeline.software/kb/mobile-and-field-worker/task-completion-and-time-tracking Task Completion and Time Tracking - Pipeline knowledge base. ## Task Completion and Time Tracking The Tasks tab on each job shows all tasks that need to be completed, with options to log time and track progress. ### Simple Task Mode In simple mode, tasks appear as a checklist. Tap a task to mark it complete. Use the **Complete All** button to finish all tasks at once (with confirmation). ### Detailed Task Mode > **Screenshot:** The Tasks tab showing an expanded task with the task name, time logged, percentage complete bar, +/- 30min time buttons, +/- 25% progress buttons, and the task timer play/stop button. In detailed mode, each task shows more information and controls: **Viewing Tasks:** * Task name * Time logged so far * Percentage complete **Expanding a Task** (tap to expand): * **Log Time** — Use the +/- 30 minute buttons to add or remove logged time * **Percentage Complete** — Use the +/- 25% buttons to update progress * **Task Timer** — Tap the play button to start a timer for this specific task. Tap stop to pause it. Use **Expand All** or **Collapse All** to toggle all tasks at once. ### Complete All The **Complete All** button marks every task as done. A confirmation dialog appears before applying. ### Permissions Task completion and time logging require the appropriate permissions. If you cannot edit tasks, contact your administrator. # The Job Timer Source: https://docs.pipeline.software/kb/mobile-and-field-worker/the-job-timer The Job Timer - Pipeline knowledge base. ## The Job Timer Pipeline includes timers at both the job level and individual task level to accurately track time on site. ### Job-Level Timer The job timer appears in the Details tab when you are on site: * Shows **"JOB TIMER"** heading with a red **"RECORDING"** indicator * Displays elapsed time in **h:mm:ss** format * Use the play/stop button to control the timer The job timer starts automatically when you arrive on site and stops when you depart. ### Task-Level Timers Each task in detailed mode has its own timer (play/stop button). Use task timers when you want to track time against specific tasks. ### Floating Timer Widget > **Screenshot:** The floating timer widget shown at the bottom of the screen during an active timer, displaying the job title, timer type (Job timer or Task timer), elapsed time, red pulsing dot, and stop button. When any timer is running, a floating widget appears at the bottom of every screen showing: * Job title * Timer type ("Job timer" or "Task timer") * Elapsed time (h:mm:ss) * Red pulsing dot indicating active recording * Stop button Tap the floating timer to navigate directly to that job. ### Auto-Stop Timers can be configured to automatically stop after a set duration. Configure this in **Settings > Timer Auto-Stop**: * 1 hour, 2 hours, 4 hours, 8 hours, 12 hours, 24 hours, or no limit This prevents accidentally leaving a timer running overnight. # Your Job List Source: https://docs.pipeline.software/kb/mobile-and-field-worker/your-job-list Your Job List - Pipeline knowledge base. ## Your Job List The Jobs tab is your home screen in the Pipeline mobile app, showing all your assigned work. ### Job Grouping > **Screenshot:** The mobile job list showing cards grouped under "Today", "Unscheduled", and "Upcoming" section headers, with status badges and visit indicators on each card. Jobs are organised into four sections: * **Today** — Jobs scheduled for today, showing the time slot (e.g., "Wed, Mar 13 · 9:30 AM") * **Unscheduled** — Jobs assigned to you but not yet scheduled, marked "Awaiting scheduling" * **Upcoming** — Future scheduled jobs * **Archived** — Completed or past jobs ### Job Cards Each job card displays: * Job title and service address * **Status badge** — Scheduled (blue), On Site (blue), Completed (green), or Unscheduled (grey) * **Visit sequence** — "Visit 1 of 3" for multi-site jobs * **Primary action button** — Changes based on job status (Schedule, Arrive on Site, or Leave Site) * **More actions menu** (three dots) — Additional options ### Search Use the search bar at the top to filter jobs by title, address, customer name, or phone number. Results update as you type. ### Pull to Refresh Pull down on the job list to manually refresh and sync with the server. ### Blocked Dates Unavailable dates appear in the Upcoming section as yellow cards with a "Blocked" badge, showing the date range and reason. # Activity Panel and Notifications Source: https://docs.pipeline.software/kb/notifications-and-messaging/activity-panel-and-notifications Activity Panel and Notifications - Pipeline knowledge base. ## Activity Panel and Notifications Pipeline keeps you informed with real-time notifications through the Activity Panel and toast alerts. ### Activity Panel > **Screenshot:** The Activity Panel on the right side of the Dashboard showing message cards with avatars, timestamps, and close buttons, plus the New Job and Message buttons at the top. The Activity Panel appears on the right side of the Dashboard and shows a live feed of events: * **System messages** — Automated notifications (job started, completed, etc.) * **User messages** — Communications from team members * **Status events** — Quotes accepted/rejected, invoices paid, app events Each message shows: * Colour-coded avatar (system logo, user initials, or status icon) * Sender name * Elapsed time since the event * Message content * Close button to dismiss ### Toast Notifications When important events occur, a toast notification briefly appears at the top centre of the screen: * **Green** — Success (e.g., "Job updated", "Invoice sent") * **Orange** — Warning (e.g., data conflict detected) * **Red** — Error (e.g., save failed) Toasts automatically dismiss after a few seconds with a progress bar animation. ### Real-Time Updates Pipeline uses SignalR for instant updates. When a colleague makes a change — starting a job, updating a schedule, or sending a message — your screen updates automatically without needing to refresh. # Notifications & Messaging Source: https://docs.pipeline.software/kb/notifications-and-messaging/index Send emails and SMS to customers, manage message templates, and understand real-time notifications. Send emails and SMS to customers, manage message templates, and understand real-time notifications. # Internal Messaging Source: https://docs.pipeline.software/kb/notifications-and-messaging/internal-messaging Internal Messaging - Pipeline knowledge base. ## Internal Messaging Pipeline includes an internal messaging system for team communication, available on both web and mobile. ### Sending Messages from the Dashboard The Activity Panel includes a **Message** button for quick messaging: 1. Click **Message** in the Activity Panel 2. Select recipients from the grid (use **Select All** or pick individually) 3. Type your message (up to 1,000 characters) 4. Click **Send** ### Job-Specific Messages You can also send messages linked to specific jobs from the job's Communications tab or the mobile app's Messages tab. ### Mobile Messaging On the mobile app, the **Messages** tab in the bottom navigation shows: * **Inbox** — Received messages with an unread count badge * **Sent** — Messages you have sent Messages are grouped by date with headers like "Today", "Yesterday", or the specific date. **Composing on mobile:** 1. Tap the **New Message** button (pencil icon) 2. Search and select recipients (shown as removable chips) 3. Type your message 4. Tap **Send** ### Unread Indicators Unread messages are marked with a blue dot. The Messages tab badge shows the total unread count. ### Dismissing Messages On mobile, swipe left on any inbox message to reveal the **Dismiss** button. This removes the message from your inbox view. # Managing Message Templates Source: https://docs.pipeline.software/kb/notifications-and-messaging/managing-message-templates Managing Message Templates - Pipeline knowledge base. ## Managing Message Templates Message templates control the content of automated emails and SMS messages sent by Pipeline. Administrators can customise templates to match your organisation's communication style. ### Accessing Templates Navigate to **Settings > Message Templates**. ### Template Types > **Screenshot:** The Message Templates grid showing the Name column and System column with filled/empty icons indicating system vs custom templates. The template grid shows: * **Name** — Template name * **System** — Filled icon for built-in system templates, empty icon for custom templates **System templates** are provided with Pipeline and serve as starting points. **Custom templates** can be created and fully edited. ### Template Structure Each template is composed of parts that are rendered in sequence: * **Header** — Top section of the message * **Body** — Main content * **Footer** — Bottom section * **Signature** — Closing block Each part can be toggled on/off using the Active and Visible settings. ### Dynamic Placeholders Templates support placeholders that are replaced with real data when sent: * Customer name and contact details * Job and invoice references * Amounts and dates * Links to view documents online * Links for online payment ### Editing a Template Double-click a template in the grid to open the editor: 1. Use the rich text editor to modify HTML content 2. Insert placeholders from the variable dropdown 3. Preview the rendered output 4. Reorder parts using the sort order field 5. Save your changes ### Where Templates Are Used * Invoice and quote emails * Purchase order emails * Workflow task actions (automatic emails on task completion) * SMS notifications * CRM automation rules # Sending Emails from Pipeline Source: https://docs.pipeline.software/kb/notifications-and-messaging/sending-emails-from-pipeline Sending Emails from Pipeline - Pipeline knowledge base. ## Sending Emails from Pipeline Pipeline can send emails to customers for invoices, quotes, purchase orders, and other documents. ### How Email Sending Works When you send a document (invoice, quote, or PO), Pipeline: 1. Generates an HTML version of the document 2. Converts it to a PDF attachment in the background 3. Sends the email via your configured email provider 4. Records the message for tracking ### The Send Modal > **Screenshot:** The Send Modal showing the document preview on the left, and the email configuration panel on the right with the recipient email, rich text editor for the email body, and the Send button. When sending a document, the Send Modal shows: * **Document preview** on the left side * **Email configuration** on the right: * Customer name and email (pre-filled) * Rich text editor with the email body * Pre-populated template with placeholders for customer name, document reference, amounts, and view/pay links * **Alert on Status Update** checkbox — tick this to be notified when the customer opens or acts on the document You can customise the email text before sending. Click **Send** to deliver. ### Message Status Tracking Emails are queued and processed in the background: * **Queued** — Email is waiting to be sent * **Sending** — Email is being delivered * **Sent** — Email was delivered successfully * **Failed** — Delivery failed (will be retried automatically up to 3 times) ### Email Provider Your organisation's email is sent via a configured provider (such as AWS SES or Resend). Custom sending domains can be set up in **Settings > Email Domains** to send from your own company domain. # Sending SMS Messages Source: https://docs.pipeline.software/kb/notifications-and-messaging/sending-sms-messages Sending SMS Messages - Pipeline knowledge base. ## Sending SMS Messages Pipeline can send SMS text messages to customers for job reminders and other communications. ### Enabling SMS SMS sending is controlled by a system setting. If SMS is not available, contact your administrator to enable it. ### Sending an SMS > **Screenshot:** The SMS confirmation modal showing the message text preview and the send button options ("Send SMS Only" or "Send SMS and Email"). When sending an SMS: 1. A confirmation modal shows the message text before sending 2. You can review the message content 3. Choose your send option: * **Send SMS Only** — Sends just the text message * **Send SMS and Email** — Sends both an SMS and an email simultaneously (when available) ### SMS Use Cases Common scenarios for SMS: * **Schedule reminders** — Notify customers of upcoming appointments * **Job updates** — Inform customers when work is starting or completed * **General communication** — Send quick messages to customers ### Message Templates SMS messages use pre-configured templates with variable substitution, so customer names, job references, and dates are automatically inserted. Templates are managed in **Settings > Message Templates**. # AI Insights and Chat Source: https://docs.pipeline.software/kb/pulse-and-analytics/ai-insights-and-chat AI Insights and Chat - Pipeline knowledge base. ## AI Insights and Chat Pipeline's Pulse module includes AI-powered features that analyse your operational data and provide actionable business intelligence. ### Accessing AI Features > **Screenshot:** The AI panel slid open from the right side of the Pulse page, showing the three tabs (Chat, Insights, Visualisations). Capture the Chat tab active with a sample conversation and the "Ask about your data..." input field at the bottom. Click the **sparkle button** in the bottom-right corner of the Pulse page to open the AI panel. The panel slides in from the right and contains three tabs. ### AI Chat The Chat tab provides an interactive conversation interface where you can ask questions about your business data. **How to use:** 1. Type your question in the "Ask about your data..." input field 2. Press Enter or click Send 3. The AI analyses your data and responds **Example questions:** * "Show me my stock valuation" * "Which projects are over budget?" * "What's my Cost of Business breakdown?" * "Show me stock valued over \$50,000" * "Give me a business overview" * "Show me active projects with credit limits" The AI can query your live operational data to provide current answers. A "Thinking..." indicator shows while processing. Token usage and estimated cost are displayed in the footer. ### AI Insights The Insights tab generates automated business intelligence. **Generating Insights:** 1. Select a domain from the dropdown: All Domains, Stock, Projects, or Cost of Business 2. Click **Generate Insights** 3. Insights appear as collapsible cards **Each insight card shows:** * **Impact level** - High (red), Medium (orange), or Low (green) * **Confidence percentage** - How certain the AI is about the finding * **Category** - What area the insight relates to * **Description** - Explanation of the finding * **Recommended Actions** - Suggested next steps (expandable) * **Related Items** - Top 5 linked records (expandable) * **Timestamp** - When the insight was generated ### AI Visualisations The Visualisations tab creates dynamic charts from your data. **Supported chart types:** * Line charts (time series and trends) * Bar charts (comparisons) * Pie charts (composition) * Area charts (trends over time) * Stacked area charts (multi-series) Click **Generate Business Overview** to create a default set of charts covering key business metrics. Each chart includes a title, axis labels, and an expandable insights panel. # Pulse & Analytics Source: https://docs.pipeline.software/kb/pulse-and-analytics/index Admin dashboards, business intelligence, and AI-powered insights. Admin dashboards, business intelligence, and AI-powered insights. # Pulse Dashboard Overview Source: https://docs.pipeline.software/kb/pulse-and-analytics/pulse-dashboard-overview Pulse Dashboard Overview - Pipeline knowledge base. ## Pulse Dashboard Overview Pulse is Pipeline's analytics dashboard, giving administrators a comprehensive view of business performance across all operational areas. ### Accessing Pulse Click **Pulse** in the top navigation bar (Admin access required). ### Dashboard Layout > **Screenshot:** The Pulse dashboard showing the tile layout with COB breakdown, Current Jobs grid, Sales/Quotes section, Cashflow panel, Stock Valuation, and Task Effort Analysis. Show at least three tiles visible with data. Pulse uses a responsive tile layout with six main sections. Tiles can be dragged to reorder and resized to focus on what matters most. **Cost of Business (COB)** Displays a breakdown of operational costs with three columns: * Budgeted amounts * Actual amounts * Predicted amounts Individual line items (labour, materials, etc.) with totals. The current period row is highlighted. **Current Jobs** A detailed grid showing active projects with: * Customer name and workflow status * Project reference (clickable to open the job) * Budgeted, Current, and Predicted costs * Predicted profit vs quoted cost Sortable and paginated (10 rows per page). **Sales** Tracks quote and invoice performance: * Quotes: Issued, Accepted, and Rejected counts across time periods * Invoices: Period-over-period financial comparison Current period is highlighted for easy comparison. **Cashflow** Monitors money in and out: * Purchase order flow and accounts payable * Invoice receipts and payments **Back Costing** Tracks cost allocations against projects: * Links purchase orders to job cost analysis * Helps identify margin discrepancies **Stock Valuation** Three valuation perspectives: * **Purchased rate** - Acquisition cost * **Replacement value** - Current market cost * **Sales value** - Marked-up retail price Split between held inventory and allocated inventory. **Task Effort Analysis** Compares estimated vs actual time on tasks: * Sample size and default effort * Average actual time * Tasks exceeding estimates are highlighted in red # Allocating Workers to Jobs Source: https://docs.pipeline.software/kb/scheduling/allocating-workers-to-jobs Allocating Workers to Jobs - Pipeline knowledge base. ## Allocating Workers to Jobs Allocating workers to scheduled jobs ensures the right people are assigned to the right work at the right time. ### Drag-and-Drop Allocation The primary way to allocate workers is by dragging scheduled items on the calendar: 1. Click and hold a scheduled item 2. Drag it to the desired date, time, and resource lane 3. Release to drop it When you drop an item, Pipeline automatically: * Validates the proposed time slot * Checks for resource conflicts (employee availability) * Verifies required certifications * Calculates travel time between locations If there are conflicts, a modal dialog appears showing the issues and letting you confirm or cancel the move. > **Screenshot:** The conflict resolution modal showing employee availability indicators (green/red/amber), certification checks, and Accept/Cancel buttons. ### Allocation Details Panel The allocation panel shows two views: **By Staff** Lists each employee with their assigned tasks, showing: * Employee name and reference * Tasks assigned to them * Minutes allocated for "This" visit vs "All" visits (cumulative) * Progress gauges for task completion **By Task** Lists each task with its employee assignments, showing: * Task reference with progress gauge (Allocated vs Required) * Employee names assigned * Individual time allocations ### Allocation Modes Choose how time is allocated using the mode buttons: * **Sequence** - Allocate jobs for consecutive days * **Date Only** - Allocate for a single date only * **Single Span** - Allocate total duration across a selected period ### Conflict Resolution When a conflict is detected, the conflict modal shows: * Which employees are affected * The nature of the conflict (availability, certifications, travel time) * Visual indicators (green/red/amber) for each employee's status * Options to accept or cancel the allocation # Scheduling Source: https://docs.pipeline.software/kb/scheduling/index Schedule jobs, allocate workers, and manage your team's calendar. Schedule jobs, allocate workers, and manage your team's calendar. # Managing Unallocated Jobs Source: https://docs.pipeline.software/kb/scheduling/managing-unallocated-jobs Managing Unallocated Jobs - Pipeline knowledge base. ## Managing Unallocated Jobs Unallocated jobs are scheduled work items that have not yet been assigned to workers. Pipeline makes it easy to identify and allocate these jobs. ### Finding Unallocated Jobs > **Screenshot:** The Schedule toolbar showing the Allocate button with a blue badge displaying the count of unallocated items. The **Schedule button** in the toolbar shows a badge with the count of unallocated items. Click it to open the unallocated jobs panel. Each unallocated item shows: * **Job Reference** - The unique job identifier * **Customer Name** - Who the work is for * **Service Address** - Where the work needs to happen * **Duration** - How long the job is estimated to take * **Status** - Current scheduling status ### Allocating from the List You can allocate unallocated jobs in several ways: **Drag to Schedule** Drag an unallocated item from the list directly onto the schedule calendar. Drop it on the desired date, time, and resource to assign it. **Allocation Mode** Select an allocation mode before dragging: * **Sequence** - Fills consecutive days with work * **Date Only** - Assigns to a single day * **Single Span** - Spreads the total duration across a period ### Bulk Operations Select multiple unallocated items to allocate them as a batch. This is useful when scheduling a group of related jobs for the same crew or timeframe. ### Tips * Regularly check the unallocated count badge to ensure no jobs are missed * Use the Timeline view for efficient allocation when planning weeks ahead * Consider travel time between locations when scheduling consecutive jobs # Schedule Overview Source: https://docs.pipeline.software/kb/scheduling/schedule-overview Schedule Overview - Pipeline knowledge base. ## Schedule Overview The Schedule module is your central hub for planning and managing when and where work happens. It offers multiple views to suit different planning needs. ### Schedule Views > **Screenshot:** The Schedule page showing the view toggle buttons (Month, Timeline, Week, Agenda) at the top, with the Week view active displaying scheduled items in hourly time slots across multiple resource lanes. Switch between views using the buttons at the top of the schedule: **Month View** A calendar month layout showing all scheduled items. Good for getting a big-picture overview of the month's workload. **Timeline View** A horizontal timeline spanning multiple months. Ideal for long-range resource planning and seeing how work is distributed over time. **Week View** A detailed weekly calendar with hourly time slots. Best for day-to-day scheduling and fine-tuning appointment times. Shows: * Job reference (clickable) * Allocated resource/worker * Job title * Service address * Project reference **Agenda View** A list-based view of upcoming appointments. Useful for quickly seeing what's coming up, with full details including: * Reference and status * Customer name * Service address * Duration * SMS send option ### Scheduled Item Information Each scheduled item displays: * Job/appointment reference (clickable to open the job) * Customer name * Start and end times * Duration * Service address * Allocated workers * Current status ### Navigating the Schedule * Use the **date picker** or **arrow buttons** to move between time periods * Click a scheduled item to view its details * Use the **Allocate** button (with badge showing unallocated count) to manage resource allocation # Email Domain Setup Source: https://docs.pipeline.software/kb/settings-and-configuration/email-domain-setup Email Domain Setup - Pipeline knowledge base. ## Email Domain Setup Configure a custom email domain so Pipeline can send emails from your company's address (e.g., [invoices@yourcompany.com](mailto:invoices@yourcompany.com)) rather than a generic sender. ### Why Set Up a Custom Domain? By default, Pipeline sends emails from a shared system address. Setting up your own domain: * Makes emails appear more professional and trustworthy to customers * Reduces the chance of emails being marked as spam * Allows customers to reply directly to your company ### Accessing Domain Settings Navigate to **Settings > Email Domains** (Super User access required). > **Screenshot:** The Email Domains settings page showing the domain name input field, the "Add Domain" button, and a verified domain with its DNS records table and green checkmark status. ### Adding a Domain 1. Enter your domain name (e.g., yourcompany.com) 2. Click **Add Domain** 3. Pipeline generates the DNS records you need to add ### Configuring DNS Records After adding your domain, Pipeline displays the required DNS records. You need to add these to your domain's DNS settings (usually managed by your domain registrar or hosting provider): * **CNAME records** — For domain verification * **MX records** — For email routing * **TXT records** — For sender authentication (SPF/DKIM) Use the **copy** button next to each record to copy it to your clipboard for easy pasting into your DNS management panel. ### Verifying Your Domain After adding the DNS records, click **Verify Domain** to check if they have propagated. **Domain Status:** * **Pending** — DNS records have been provided but not yet verified * **Verified** — Domain is confirmed and emails can be sent (green checkmark) * **Failed** — Verification failed — double-check your DNS settings ### Tips * DNS changes can take up to 48 hours to propagate, though most verify within a few hours * If verification fails, check for typos in the DNS records and ensure they are set on the correct domain * You can re-click **Verify Domain** at any time to re-check * For help with DNS settings, contact your domain registrar's support team # Settings & Configuration Source: https://docs.pipeline.software/kb/settings-and-configuration/index System configuration for administrators - workflows, users, teams, and integrations. System configuration for administrators - workflows, users, teams, and integrations. # Managing Users Source: https://docs.pipeline.software/kb/settings-and-configuration/managing-users Managing Users - Pipeline knowledge base. ## Managing Users User management lets administrators create, edit, and control access for everyone in the organisation. ### Accessing User Management Navigate to **Settings > Users** (Admin access required). ### User List > **Screenshot:** The User Management grid showing columns for Name (with avatar), Email, Phone, Roles (colour-coded pill), Linked Employee (green badge), and Status (green/red dot). Include the search box and New User button. The user grid displays: * **Name** - With a colour-coded avatar showing initials * **Email Address** - The user's login identifier * **Phone** - Contact number * **Roles** - Colour-coded role pill (Super User, Admin, Office, Field) * **Linked Employee** - Green badge showing linked employee name, or "No employee" if not linked * **Status** - Green dot for "Active" or red dot for "Inactive" (locked out) Use the **search box** to filter by name, email, or other fields. Results are paginated with "Showing X of Y users" at the bottom. ### Creating a New User 1. Select the organisation from the dropdown (required before creating) 2. Click **New User** 3. Fill in the user details: * First and Last Name * Email address (used for login) * Phone number * Role assignment * Employee linking (optional) 4. Save to create the account ### Editing a User Click any user row to open the edit modal, where you can: * Update name, email, and phone * Change role assignment * Link or unlink an employee record * **Reset Password** - Send a password reset to the user * **Lock/Unlock** - Lock a user account to prevent login, or unlock a previously locked account ### User Status * **Active** - User can log in and access Pipeline * **Inactive** - User is locked out and cannot log in (lockout end date is in the future) # Message Templates Source: https://docs.pipeline.software/kb/settings-and-configuration/message-templates Message Templates - Pipeline knowledge base. ## Message Templates Message templates define the content used for automated emails, SMS messages, and notifications sent by Pipeline. ### Accessing Templates Navigate to **Settings > Message Templates**. ### Template List > **Screenshot:** The Message Templates grid showing the Name and System columns, with a mix of system templates (filled icon) and custom templates (empty icon). The grid shows all templates with: * **Name** - Template name/title * **System** - A filled icon indicates a system template (built-in), an empty icon indicates a custom template System templates are provided with Pipeline and serve as reference. Custom templates can be created and edited freely. ### Template Structure Each template is composed of multiple parts: * **Header** - Top section of the message * **Body** - Main content area * **Footer** - Bottom section * **Signature** - Closing signature block Each part has: * HTML content (can include dynamic placeholders) * Sort order (controls rendering sequence) * Active/Visible toggles * System flag (whether it's a built-in or custom part) ### Dynamic Placeholders Templates support dynamic placeholders that are replaced with real data when sent. Common placeholders include: * Customer name and contact details * Job and invoice references * Amounts and dates * Links to view documents online ### Editing Templates Double-click a template in the grid to open the editor. Modify the HTML content of any part, reorder parts using sort order, and toggle parts on or off as needed. ### Usage Templates are used by: * Workflow task actions (automatic emails on task completion) * Invoice sending * Purchase order sending * CRM automation rules # Teams Source: https://docs.pipeline.software/kb/settings-and-configuration/teams Teams - Pipeline knowledge base. ## Teams Teams let you organise your employees into groups for easier scheduling, assignment, and management. ### Accessing Teams Navigate to **Settings > Teams**. ### Managing Teams The team manager allows you to: **Create a Team:** 1. Click **Add Team** 2. Enter the team name and details 3. Assign team members 4. Save **Edit a Team:** Click on a team to modify its name, description, or member list. **Team Assignments:** Add or remove employees from teams. Employees can belong to multiple teams. ### Using Teams Teams are used throughout Pipeline for: * **Scheduling** - View and filter the schedule by team * **Assignment** - Allocate work to teams rather than individuals * **Reporting** - Group performance metrics by team * **Access Control** - Some features may be restricted by team membership # Workflow Configuration Source: https://docs.pipeline.software/kb/settings-and-configuration/workflow-configuration Workflow Configuration - Pipeline knowledge base. ## Workflow Configuration Workflows define how jobs progress through your business processes. Administrators can create and configure workflows to match your operational needs. ### Accessing Workflow Settings Navigate to **Settings** and select **Configuration** (Super User access required), or use the dedicated Workflows admin page. ### Workflow Components > **Screenshot:** The Workflow configuration page showing the workflow list grid with Name, Last Modified, and Actions columns, and a workflow expanded to show its stages with task rows and action buttons. Each workflow is made up of: **Stages** Sequential steps that a job moves through. Stages can be: * **External** - Visible and actionable by users * **Internal** - Milestone gates shown in amber (for internal checkpoints) * **Option** - Conditional stages that may or may not apply **Tasks within Stages** Each stage contains tasks that need to be completed. Tasks show: * Completion checkmark (for finished tasks) * Active/inactive indicator * Task name and assignee * Completion date * Action buttons (if applicable) **Task Actions** Tasks can trigger automated actions when completed: * **Email** - Send an email using a template, with optional CC recipients * **SMS** - Send a text message using a message template * **Webhook** - Call an external URL with configurable HTTP method, headers, and payload * **Notification** - Send an in-app notification to specified users with priority levels ### Managing Workflows **Creating a Workflow:** 1. Click **New Workflow** 2. Enter the workflow name 3. Define stages and their order 4. Add tasks to each stage 5. Configure actions for each task 6. Save and activate **Editing a Workflow:** Click a workflow in the list, then click **Edit** to modify stages, tasks, and actions. **Deactivating a Workflow:** Workflows can be deactivated to prevent new jobs from using them, while existing jobs continue on the current workflow. # Allocating Stock to Jobs Source: https://docs.pipeline.software/kb/stock-and-inventory/allocating-stock-to-jobs Allocating Stock to Jobs - Pipeline knowledge base. ## Allocating Stock to Jobs Stock allocation links inventory items to specific jobs, ensuring materials are reserved for the work that needs them. ### Allocation Status Flow > **Screenshot:** The auto-allocate modal showing the progress bar, allocation line items grouped by supplier and SKU, and the status indicators (Unallocated, Allocated, Completed). Stock allocations move through three statuses: 1. **Unallocated** - Stock is needed but not yet reserved 2. **Allocated** - Stock has been reserved from inventory 3. **Completed** - Stock has been consumed or delivered ### Manual Allocation To manually allocate stock to a job: 1. Open the allocation interface for the job 2. The grid shows available stock by location and batch, displaying: * Location name * Free balance (available) * Allocated balance (already committed) * Total stock 3. Click **Select** on the batch you want to allocate from 4. Enter the quantity to allocate in the popup 5. Confirm the allocation Allocation details include: * Job and task reference * Stock location and bin position * Serial number (for trackable items) * Delivery option * Whether the allocation is chargeable to the customer ### Auto-Allocation For faster allocation across multiple items: 1. Open the auto-allocate modal 2. Pipeline processes all allocation lines automatically: * Groups items by supplier and SKU * Attempts to fulfil from available stock * Handles partial allocations when stock is insufficient * Creates purchase orders for unmet quantities 3. A progress bar shows processing status 4. Status updates to Allocated for fulfilled items ### Delivery Options When allocating, choose how the stock should be delivered: * **Allocate Materials** - Reserve from existing warehouse stock * **Direct Delivery** - Order directly to the job site * **To Warehouse** - Order to warehouse for later dispatch # Stock & Inventory Source: https://docs.pipeline.software/kb/stock-and-inventory/index Manage SKUs, track stock levels, allocate materials to jobs, and create stock kits. Manage SKUs, track stock levels, allocate materials to jobs, and create stock kits. # Managing SKUs Source: https://docs.pipeline.software/kb/stock-and-inventory/managing-skus Managing SKUs - Pipeline knowledge base. ## Managing SKUs SKUs (Stock Keeping Units) are the individual products and materials you track in Pipeline's inventory system. ### Navigating to Stock Click **Stock** in the top navigation bar to open the stock management page. Use the search component to find existing SKUs. > **Screenshot:** The Stock management page showing the SKU search component and a selected SKU with its detail fields (name, pack info, free/allocated quantities) visible. ### SKU Fields Each SKU record contains: **Identification:** * **SKU Code** - Unique product identifier * **Name** - Product name * **UPC** - Universal Product Code (barcode) * **EAN** - European Article Number **Physical Characteristics:** * Height, Width, Depth (dimensions) * Weight * Container Type (box, case, pallet, etc.) * Pieces per pack **Supplier & Pricing:** * Primary Supplier and Supplier Code * Buy price (cost) * Sell price * Markup percentage * Default discount percentage **Classifications:** * Unit of Measure (unit, item, or weight) * Handling Category * Installation Category * Stock Rotation (FIFO/LIFO) **Descriptions:** * Purchase Description (for supplier orders) * Sales Description (for customer-facing documents) * Additional notes ### Creating a New SKU 1. Click **Add SKU** on the stock page 2. Enter the SKU name 3. Pipeline checks for duplicates - if it already exists, you will be linked to the existing record 4. Fill in the SKU details in the editor 5. Save your changes ### Editing a SKU Click the pencil icon on any field to enter edit mode. Fields validate in real-time with colour-coded error indicators. Save changes when done. # Stock In and Stock Out Source: https://docs.pipeline.software/kb/stock-and-inventory/stock-in-and-stock-out Stock In and Stock Out - Pipeline knowledge base. ## Stock In and Stock Out Pipeline tracks all stock movements as either input (receiving) or output (consumption) transactions. ### Stock In (Receiving Stock) > **Screenshot:** The Stock In form showing the Date, Supplier, Batch Number, Packs, Items, Location, and Sub-location fields. To record stock received from a supplier: 1. Navigate to the SKU detail page 2. Open the Stock In section 3. Fill in the transaction details: * **Date** - When the stock was received * **Supplier** - Which supplier delivered it * **Batch Number** - Supplier's batch or lot reference * **Packs** - Number of packs received * **Items** - Automatically calculated (Packs x Pack Quantity) * **Location** - Which warehouse or store location * **Sub-locations (A-E)** - Bin, shelf, aisle, or other position identifiers 4. Save the transaction Additional tracking fields are available for: * Best Before End (BBE) date * Use By date * Manufactured date * Serial number * Shipment reference and expected date ### Stock Out (Consuming Stock) To record stock consumption: 1. Navigate to the SKU detail page 2. Open the Stock Out section 3. The grid shows available stock by location with: * Location name * Free Balance (available for allocation) * Allocated Balance (committed to jobs) * Total Stock on hand 4. Expand a row to see individual batches and sub-locations 5. Click **Select** on the batch you want to use 6. Enter the quantity in the popup 7. Link the output to a specific job if applicable ### Stock Activity History All transactions are recorded in the activity history for the SKU, providing a complete audit trail of stock movements. # Stock Kits Source: https://docs.pipeline.software/kb/stock-and-inventory/stock-kits Stock Kits - Pipeline knowledge base. ## Stock Kits Stock Kits allow you to bundle multiple items together as a package that can be assigned to jobs as a single unit. ### What is a Stock Kit? > **Screenshot:** The Stock Kit manager in Settings showing the kit list grid with Name, Charge Type, Charge Code, and Total columns, and an expanded kit showing its line items. A kit is a pre-defined collection of items - SKUs, tasks, or assets - that are commonly used together. For example, a "Bathroom Installation Kit" might include pipes, fittings, sealant, and the installation labour task. ### Kit Structure Each kit has: **Kit Header:** * **Description** - Kit name and title * **Charge Type** - How the kit is billed (bundled kit charge or specific charge code) * **Charge Code** - Links to a cost code for billing * **Summary** - Description or notes about the kit * **Total** - Total kit cost * **Buy** - Wholesale cost **Kit Lines:** Each item in the kit includes: * **Item Type** - SKU, Task, or Asset * **Description** - What's included * **Quantity** - How many of this item * **Markup** - Individual line markup percentage * **Multiplier** - Quantity multiplier * **Chargeable** - Whether to bill the customer for this line ### Managing Kits Navigate to **Settings > Stock Kits** to manage your kits. The kit manager shows a grid of all kits with: * Kit name * Charge type * Charge code * Total cost **Creating a Kit:** 1. Click the **Add** button 2. Enter the kit description and charge settings 3. Use the item selection modal to add SKUs, tasks, or assets 4. Set quantities and markup for each line 5. Save the kit **Editing a Kit:** Click a kit row to expand it and modify items, quantities, or pricing. **Searching Kits:** Use the search function to find kits by name. # Entering Time Source: https://docs.pipeline.software/kb/time-tracking/entering-time Entering Time - Pipeline knowledge base. ## Entering Time Pipeline's Time Tracking module uses a weekly timesheet view where you log hours for each day of the week. ### Accessing Timesheets Click **Time Tracking** in the top navigation bar to open the timesheet page. ### Weekly View > **Screenshot:** The weekly timesheet grid showing employee names in the left column, Monday through Sunday columns with colour-coded status cells (green, amber, red, grey), and the weekly total column on the right. The timesheet displays as a grid with: * **Rows** - One per employee * **Columns** - Monday through Sunday, plus a weekly total * **Cells** - Each cell shows the hours logged for that employee on that day ### Daily Status Indicators Each cell is colour-coded to show the status: * **Green** - Time has been logged and is complete * **Amber** - Time has been partially logged * **Red** - Time is missing or overdue * **Grey** - No activity expected (e.g., non-working day) ### Logging Time 1. Click on any daily cell in the grid 2. The time entry dialog opens 3. Enter the hours and minutes worked 4. Link the time to specific jobs and tasks if applicable 5. Save the entry Time can be entered as: * **Task time** - Linked to specific job tasks (TimeOnTasks) * **Manual entries** - General time entries not linked to a specific task (TimeSheetManualEntries) ### Weekly Totals The rightmost column shows the total hours and minutes logged for each employee across the week. This gives a quick overview of each person's workload. ### Searching Employees Use the search function to filter the grid to specific employees when managing large teams. # Time Tracking Source: https://docs.pipeline.software/kb/time-tracking/index Log employee hours, manage weekly timesheets, and track time against jobs. Log employee hours, manage weekly timesheets, and track time against jobs. # Timesheet Status Indicators Source: https://docs.pipeline.software/kb/time-tracking/timesheet-status-indicators Timesheet Status Indicators - Pipeline knowledge base. ## Timesheet Status Indicators Time Tracking uses visual indicators to quickly communicate the state of each employee's timesheet entries. ### Daily Cell Status Each cell in the weekly timesheet grid shows a colour-coded status: | Colour | Meaning | | --------- | ----------------------------------------------------------------- | | **Green** | Time fully logged for the day | | **Amber** | Partial time entry (some hours logged but potentially incomplete) | | **Red** | Time is due but has not been logged | | **Grey** | No time expected (non-working day, leave, etc.) | The status is rendered as an HTML badge within each cell, making it easy to scan across the entire week at a glance. ### Reading the Grid * **Scan horizontally** to see an individual employee's week * **Scan vertically** to see the team's status for a particular day * Look for **red cells** to quickly identify missing timesheet entries ### Weekly Total Column The total column aggregates all daily entries into a single hours/minutes figure. Compare this against expected hours to identify under- or over-reporting. ### Approval and Lock Status Timesheets may have approval and lock statuses: * **Locked** entries cannot be modified (typically after manager approval) * **Unlocked** entries can still be edited If you need to change a locked entry, contact your manager or administrator to unlock it first. ### Tips * Log your time daily to maintain accuracy * Review your weekly totals before the end of the week * Ensure time is linked to the correct jobs and tasks for accurate project costing # Connecting Pipeline to Xero Source: https://docs.pipeline.software/kb/xero-integration/connecting-pipeline-to-xero Connecting Pipeline to Xero - Pipeline knowledge base. ## Connecting Pipeline to Xero Pipeline integrates with Xero accounting software to automatically sync invoices, customers, and payment data. This guide covers how to set up and manage the connection. ### Before You Start You will need: * A Xero account with access to the organisation you want to connect * Super User access in Pipeline (the Accounting settings page is restricted to Super Users) ### Setting Up the Connection > **Screenshot:** The Accounting settings page showing the Xero card in its "Not Connected" state, with the Xero logo, feature list, and the blue "Connect to Xero" button. 1. Navigate to **Settings > Accounting** 2. Find the **Xero** integration card — it shows "Not Connected" if no connection exists 3. Click **Connect to Xero** 4. You will be redirected to Xero's login page 5. Sign in to your Xero account 6. Grant Pipeline the requested permissions: * Access to invoices and transactions * Read access to contacts * Offline access (for background sync) 7. After granting access, you are redirected back to Pipeline 8. A success notification confirms the connection ### Connected State Once connected, the Xero card shows: * **Status** — "Connected" (green badge) * **Organisation** — The name of your connected Xero organisation * **Connected Date** — When the connection was established > **Screenshot:** The Xero integration card in its "Connected" state showing the organisation name, connected date, and Disconnect button. ### Token Refresh The connection uses secure tokens that expire periodically. Pipeline handles this automatically in the background. If a manual refresh is needed: * A yellow warning appears: "Token Refresh Required — Your access token is expiring soon" * Click the **Refresh Token** button to renew the connection * If the token has already expired, the status shows "TOKEN\_EXPIRED" and you may need to reconnect ### Disconnecting from Xero 1. Navigate to **Settings > Accounting** 2. Click **Disconnect** on the Xero card 3. Confirm the disconnection in the dialog Disconnecting does not delete any previously synced data — it only stops future synchronisation. # Customer and Contact Sync Source: https://docs.pipeline.software/kb/xero-integration/customer-and-contact-sync Customer and Contact Sync - Pipeline knowledge base. ## Customer and Contact Sync Pipeline synchronises customer records with Xero contacts so your accounting and job management systems share the same customer data. ### What Gets Synced The following customer fields are synchronised: * Company name / display name * Email address * Phone number * Website * City and postal address * Customer reference (stored as Xero's Account Number) ### Sync Direction **Pipeline to Xero:** When you create or update a customer in Pipeline, the corresponding Xero contact is automatically created or updated. Pipeline's customer reference is stored in Xero's "Account Number" field for matching. **Xero to Pipeline:** When a contact is updated in Xero, Pipeline receives a webhook notification and refreshes the local record. ### Creating Xero Contacts from Admin Administrators can create new Xero contacts directly from the Pipeline admin panel: > **Screenshot:** The "Create Xero Contact" modal showing fields for Company Name, First Name, Last Name, Email, Phone, Website, City, and Postal Address, with the "Create in Xero & Link" button. 1. Open the contact creation modal 2. Fill in the required fields (Company Name is required) 3. Click **Create in Xero & Link** 4. The contact is created in Xero and linked to the Pipeline record ### Limitations * Contact management is primarily driven from Pipeline * Deleting a contact in Pipeline archives it in Xero (Xero does not support true contact deletion) * Contacts are matched using the Xero Contact ID — once linked, the relationship is maintained automatically # Xero Integration Source: https://docs.pipeline.software/kb/xero-integration/index Connect Pipeline to Xero for automatic invoice, customer, and payment synchronisation. Connect Pipeline to Xero for automatic invoice, customer, and payment synchronisation. # Invoice Synchronisation with Xero Source: https://docs.pipeline.software/kb/xero-integration/invoice-synchronisation-with-xero Invoice Synchronisation with Xero - Pipeline knowledge base. ## Invoice Synchronisation with Xero When Pipeline is connected to Xero, invoices are automatically synchronised so your accounting records stay up to date. ### What Gets Synced The following invoice data is sent from Pipeline to Xero: * Invoice number and reference * Customer/contact details * Invoice date and due date * All line items (description, quantity, unit amount, tax, account code) * Currency code * Invoice status (Draft, Submitted, Paid) ### How Sync Works **Pipeline to Xero (automatic):** * When you create an invoice in Pipeline, it is automatically created in Xero * When you update an invoice, the changes sync to Xero * When you delete an invoice, it is voided in Xero (Xero does not allow true deletion) **Xero to Pipeline (via webhooks):** * When an invoice is updated in Xero (e.g., marked as paid), Pipeline receives a notification * Payment data is automatically fetched and displayed in Pipeline * Status changes in Xero are reflected in Pipeline > **Screenshot:** An invoice detail page showing the sync status with Xero, with payment information that has been synced back from Xero. ### Important Notes * **Invoices created directly in Xero are not synced to Pipeline** — the sync is initiated from Pipeline * Sync happens in the background via a job queue, so there may be a short delay * All dates are handled in UTC to prevent timezone conversion issues ### Out-of-Sync Detection If an invoice is modified in both Pipeline and Xero, the system detects the conflict and marks the invoice as **out of sync**. This happens when: * The gross total, net total, or tax amount differs * The invoice date or due date was changed in Xero * The number of line items differs When out of sync, further automatic syncing is paused to prevent data loss. You will need to review and resolve the discrepancy manually. # Payment Tracking from Xero Source: https://docs.pipeline.software/kb/xero-integration/payment-tracking-from-xero Payment Tracking from Xero - Pipeline knowledge base. ## Payment Tracking from Xero When customers pay invoices through Xero, the payment information is automatically synced back to Pipeline. ### How Payment Sync Works 1. A payment is recorded against an invoice in Xero 2. Xero sends a webhook notification to Pipeline 3. Pipeline fetches the full payment details from Xero's API 4. Payment data is stored against the corresponding Pipeline invoice 5. The invoice status updates to reflect the payment (e.g., marked as Paid) ### What Payment Data is Shown For each payment synced from Xero, Pipeline displays: * **Payment Amount** — How much was paid * **Payment Date** — When the payment was received * **Payment Status** — The current status (e.g., Authorised) Payments appear in the invoice detail view under the payments section. ### Deleted Payments If a payment is deleted or reversed in Xero, Pipeline detects this during the next sync and updates the local records accordingly. ### Automatic Processing Payment sync is fully automatic — there are no manual steps required. The system processes payments in the background, so there may be a brief delay between a payment being recorded in Xero and appearing in Pipeline. ### Viewing Payments To see payment data for an invoice: 1. Open the invoice from the **Sales** page 2. Click the green **Total Paid** amount to view the payment breakdown 3. Individual payments from Xero are listed with their amounts and dates # Troubleshooting Xero Connection Issues Source: https://docs.pipeline.software/kb/xero-integration/troubleshooting-xero-connection-issues Troubleshooting Xero Connection Issues - Pipeline knowledge base. ## Troubleshooting Xero Connection Issues If you experience problems with the Xero integration, this guide covers common issues and how to resolve them. ### Connection Fails During Setup **Problem:** Clicking "Connect to Xero" redirects to Xero but the connection does not complete. **Solutions:** * Ensure you are signing into the correct Xero account * Check that you are granting all requested permissions * Try clearing your browser cookies and attempting the connection again * Ensure pop-up blockers are not interfering with the redirect ### Token Expired **Problem:** The Xero card shows "TOKEN\_EXPIRED" status. **Solutions:** * Click **Refresh Token** if the button is available * If refresh fails, click **Disconnect** and then reconnect with **Connect to Xero** * Token expiry is usually handled automatically — if it keeps expiring, check your Xero app permissions ### Invoice Not Syncing **Problem:** An invoice was created in Pipeline but does not appear in Xero. **Solutions:** * Check the connection status is "Connected" (not expired or disconnected) * Sync operates in the background — wait a few minutes and check again * Ensure the customer linked to the invoice has a valid Xero contact mapping * If the customer does not exist in Xero, the invoice sync will fail. Create the customer first. ### Out of Sync Invoice **Problem:** An invoice shows as out of sync between Pipeline and Xero. **Cause:** The invoice was modified in both systems. Pipeline blocks further sync to prevent data loss. **Solutions:** * Review the differences between the Pipeline and Xero versions * Make corrections in one system to align with the other * The sync will resume once the data is consistent ### Payments Not Appearing **Problem:** A payment was recorded in Xero but is not showing in Pipeline. **Solutions:** * Webhook notifications may take a few minutes to process * Check the connection status is active * If the issue persists, the webhook may have failed — contact your administrator ### General Tips * Always manage invoices and customers from Pipeline, not directly in Xero * Keep the connection active — disconnecting stops all synchronisation * If you need to make changes directly in Xero, be aware of out-of-sync detection * Contact your system administrator if connection issues persist