
Create and manage quotes
Quotes are included in Core. Workspace owners and admins manage quote pricing and sharing; other members can browse record titles without accessing pricing. ## Open the Quotes list Select **Quotes** in the workspace navigation (or open **Data → Quotes**). The list shows each quote’s customer, published status, separate cadence totals (one-off, monthly, annual), expiry and acceptance state. A **newer draft** indicator appears when a later private version exists but the published offer has not yet been replaced. Use the **Archived quotes** link to browse historical records. Select **Quote settings** to configure the product catalog. ## Create a quote 1. Select **New quote**. 2. Enter the quote name and the customer (the **Client** field). 3. Select **Create quote** — the record opens at the Quote editor. ## Build the quote In the Quote editor: 1. Set the **customer**, **currency** and **valid until** date. 2. Choose a **tax treatment**: unresolved, tax-inclusive, or tax-exclusive with a percentage. 3. Write the **terms**. 4. Add line items from your product catalog or as custom items: - **Catalog items** — select a product record; Hub copies the price, unit, frequency and currency. Missing prices, unsupported frequencies and currency mismatches fail visibly rather than silently copying wrong values. - **Custom items** — enter a description, unit, quantity, unit price and billing frequency (one-off, monthly or annual). 5. Apply a line-level discount if needed. 6. Select **Save** to create an immutable private version. Saving a new draft does not change any existing published offer. Concurrent saves from two sessions reject the stale version. ## Sharing status Each quote has one status: | Status | Meaning | |---|---| | **Draft** | No version saved or no link created yet. | | **Shared** | A published link is active and within its expiry date. | | **Accepted** | The customer recorded acceptance. | | **Withdrawn** | The link was revoked; the customer page is hidden. | | **Expired** | The link’s expiry date has passed without acceptance. | Expired published offers remain readable for account history. Accepted versions cannot be reissued as revised offers; create a new quote instead. ## Share a quote with a customer link 1. Save a version you are happy to share. 2. Under **Share quote**, select **Share quote** (or **Replace customer link** to replace an existing offer). 3. Enter an expiry date (within 90 days) and confirm. 4. Copy the customer link and send it. The link uses a random token stored only as a hash. Public responses omit internal IDs, Stripe evidence and acceptance contact details. Quote routes use no-index and no-referrer hosting headers. **Tip:** You can also share quotes directly through the client portal — see *Create and manage a client portal*. ## Customer acceptance Customers open the link (or their authenticated portal workspace) and see the exact published prices and terms. They can: - Review the offer. - Accept by entering their name, email and explicit confirmation. - Download the quote PDF. Acceptance records the supplied identity; it does not verify identity, charge a card, create a subscription or send email. The actor UID is recorded privately. Once accepted, the acceptance record is preserved even after the link expires or is withdrawn. **Portal acceptance:** Customers accepting through their portal workspace must use their signed-in email address. The collaborator role or higher is required to accept; viewer roles see a read-only notice. ## Download PDFs PDFs are generated locally using bundled fonts. They include: - Quote title, seller and customer details. - All line items with separate recurring subtotals. - Full terms, version number and page numbers. Customers download the published quote PDF. The owner receipt includes the acceptance name, email and date — private details not shown in the customer download. An accepted quote’s download button switches to **Download acceptance receipt**. These documents are not tax invoices, payment receipts or verified digital signatures. ## Configure the product catalog Go to **Settings → Quotes** to configure which object type and fields Hub uses when adding products to quotes. | Setting | Purpose | |---|---| | **Product object type** | The collection Hub searches when adding catalog items. | | **Price field** | A money or number field containing the unit price. | | **Unit field** | Optional text or select field for the unit label. | | **Frequency field** | Optional select field for billing cadence. Supported values: Monthly/month, Annual/year/yearly/annually, One-off/once/one-time. | | **Currency field** | Optional field for per-product currency. Without it, the catalog currency applies. | | **Currency** | Default catalog currency (GBP, EUR or USD). | Saved quote versions keep a copy of their prices; changing catalog settings does not reprice saved lines. ## Legacy record values The original **Client**, **Amount**, **Valid until** and **PDF** record fields are preserved in a read-only **Legacy record values** disclosure on each quote record. These fields are retained for existing reporting tools. Use the Quote editor for customer details, expiry, pricing and downloads going forward.