# Get Event Source: https://docs.flashquotes.com/api-reference/event/get GET /events/{id} Retrieve a single event, optionally expanding related objects Retrieves the event with the given id. By default the response includes the event's own scalar fields plus the foreign-key ids for related objects (`bookingId`, `locationId`, `eventBriefId`). Relations are inlined only when requested via `expand[]`. ## Expanding related objects Pass one or more `expand[]` query parameters to inline related objects. On this endpoint, paths are written as-is — no prefix. ```bash theme={null} curl "https://app.flashquotes.com/api/events/evt_8K3aN1qV2x?expand[]=booking.lead&expand[]=services" \ -H "x-api-key: $FLASHQUOTES_API_KEY" ``` Allow-listed expand paths: | Path | Adds | | ------------------- | ----------------------------------------------------------- | | `location` | The event's `location` object | | `services` | The event's `services` array | | `staff` | The event's `staff` array | | `addons` | The event's `addons` array | | `resources` | The event's `resources` array | | `booking` | The parent `booking` object | | `booking.lead` | `lead` inside `booking` (auto-promotes `booking`) | | `booking.eventType` | `eventType` inside `booking` (auto-promotes `booking`) | | `booking.invoices` | `invoices` array inside `booking` (auto-promotes `booking`) | Requesting any nested `booking.*` path automatically expands `booking` itself — you do not need to list `booking` separately. ### Expanded response With `expand[]=booking.lead&expand[]=booking.invoices`, the response inlines the nested objects under `booking`: ```json theme={null} { "object": "event", "id": "evt_8K3aN1qV2x", "booking": { "object": "booking", "id": "bkg_4F2yL8", "lead": { "object": "lead", "id": "led_2T7nC4", "companyName": "Acme", "firstName": "Jane", "lastName": "Doe", "email": "jane@acme.com", "source": "Website" }, "invoices": [ { "object": "invoice", "id": "inv_9P5xK3", "status": "Paid", "total": 250000, "amountPaid": 250000, "amountDue": 0, "url": "https://app.flashquotes.com/invoice/..." } ] } } ``` ### Limits * Maximum **20** expand paths per request (duplicates are deduplicated). * Maximum nesting depth of **4** segments. * Unknown or malformed paths return `400`. # Get Event (Legacy) Source: https://docs.flashquotes.com/api-reference/event/get-legacy GET /event/getEventData/{event_id} Legacy single-event endpoint — use Get Event for new integrations **Deprecated.** This endpoint returns the original flat response shape. It is maintained for backwards compatibility only. For new integrations, use [`GET /events/{id}`](/api-reference/event/get), which supports the standard public API conventions (`object` discriminators, `expand[]`, slim canonical shapes, and the standard error envelope). This endpoint returns comprehensive information about a specific event, including its location, resources, staff assignments, and associated booking details. ### Response The response includes a detailed event object containing: * Event identification and basic details * Location information (venue name, address) * Assigned resources (equipment, machines) * Staff assignments * Associated addons * Booking status and details * Event brief reference ### Common Use Cases * Retrieving event details for display * Checking resource and staff assignments * Verifying event location and timing * Accessing booking information * Confirming addon selections ### Notes * The event ID must be valid and associated with your company * Returns a 404 error if the event is not found * All event times are returned in ISO 8601 format with timezone * Access requires a valid API key with appropriate permissions ### Migrating to `GET /events/{id}` The new endpoint returns a slim default body with foreign-key ids; relations move behind `expand[]`. Key mappings: | Legacy (top-level flat) | v2 (nested via expand) | | ----------------------------------------------------------- | ------------------------------------------------------------- | | `leadCompanyName` | `booking.lead.companyName` (with `expand[]=booking.lead`) | | `booking.eventTypeName` | `booking.eventType.name` (with `expand[]=booking.eventType`) | | `location`, `resources`, `staff`, `addons` (always present) | Available via `expand[]=location`, `expand[]=resources`, etc. | # List Events Source: https://docs.flashquotes.com/api-reference/event/list-events GET /events List events with cursor pagination, date-range filters, and optional expand Returns a paginated list of events for your company, newest first. Supports Stripe-style range filters on `service_start_time` and `created_at`, equality filters on `location_id` and `booking_id`, cursor-based pagination, and inline expansion of related objects. ```bash theme={null} curl "https://app.flashquotes.com/api/events?limit=25&service_start_time[gte]=2026-06-01T00:00:00Z&expand[]=data.location" \ -H "x-api-key: $FLASHQUOTES_API_KEY" ``` ## Pagination List endpoints use cursor-based pagination — pass the `id` of the last event in the previous page as `starting_after`: ```bash theme={null} # First page GET /api/events?limit=25 # Next page GET /api/events?limit=25&starting_after=evt_8K3aN1qV2x ``` The response includes a `hasMore` flag indicating whether further pages exist. ## Date-range filters `service_start_time` and `created_at` accept Stripe-style bracket-notation operators (`gt`, `gte`, `lt`, `lte`). Values must be full ISO 8601 datetimes with a timezone designator (`Z` or `±HH:MM`): ``` ?service_start_time[gte]=2026-06-01T00:00:00Z &service_start_time[lt]=2026-07-01T00:00:00Z ``` Bare dates like `2026-06-01` are rejected — include the time and offset. Multiple operators on the same field combine as a range. ## Expanding related objects `expand[]` accepts the same allow-list as the [single-event endpoint](/api-reference/event/get), with one difference: **every path must be prefixed with `data.`** because the objects you're expanding live inside the envelope's `data` array. ``` ?expand[]=data.location &expand[]=data.booking.lead ``` Limits: 20 paths max per request, depth 4 max (counted after stripping the `data.` prefix). Unknown, malformed, or un-prefixed paths return `400`. ## Sort order Results are always returned sorted by `createdAt desc`. Sort order is not configurable. # List Events (Legacy) Source: https://docs.flashquotes.com/api-reference/event/list-events-legacy GET /event/get-events Legacy date-range list endpoint — use List Events for new integrations **Deprecated.** This endpoint returns the original wrapped response shape and is capped at a 7-day window. It is maintained for backwards compatibility only. For new integrations, use [`GET /events`](/api-reference/event/list-events), which supports cursor pagination, broader date-range filters, equality filters, and `expand[]` for related objects. This endpoint returns a list of events that fall within the specified date range. You can optionally filter events by location. ### Response The response includes an array of event objects containing: * Event identification and basic details * Location information (venue name, address) * Assigned resources (equipment, machines) * Staff assignments * Associated addons * Booking status and details * Event brief reference ### Common Use Cases * Retrieving events for a specific time period * Checking event schedules by location * Planning resource and staff allocation * Reviewing upcoming bookings * Generating event reports ### Notes * Date ranges must be provided in ISO 8601 format with timezone offset (e.g., `2024-01-01T00:00:00-05:00`) * **Maximum date range span is 7 days** * Results are ordered by event start time * Returns a 400 error if date format is invalid or date range exceeds 7 days * Responses are wrapped in an array envelope * Access requires a valid API key with appropriate permissions ### Migrating to `GET /events` The new endpoint uses Stripe-style range filters and cursor pagination instead of a single required date range: | Legacy parameter | v2 equivalent | | -------------------------------- | ----------------------------------------------------------------------------- | | `event_starts_after` (required) | `service_start_time[gte]` (optional) | | `event_starts_before` (required) | `service_start_time[lt]` (optional) | | (7-day cap) | No range cap — use `limit` (default 10, max 100) and `starting_after` to page | | `location` filter | `location_id` query parameter | The response is the standard list envelope (`{ object: "list", url, hasMore, data }`) rather than the legacy wrapped array. # Get Form Response Source: https://docs.flashquotes.com/api-reference/form-response/get GET /api/form-response/{id} Retrieve detailed information about a specific form response This endpoint returns comprehensive information about a specific form response, including all question responses and their associated questions. The response format is optimized for Zapier integration, returning a flattened object structure where questions appear as keys with their corresponding answers as values. This makes it easy to map form data directly to other systems. ### Response The response includes a detailed form response object containing: * Form response identification and metadata * Form and booking associations * Question responses with: * Question details (title, type, requirements) * User's response data * Question metadata (position, system links) * Timestamps for creation and updates ### Common Use Cases * Retrieving submission details for display * Accessing customer responses * Verifying form completion status * Integrating with external systems * Analyzing response data ### Notes * The form response ID must be valid and associated with your company * Returns a 404 error if the form response is not found * All timestamps are returned in ISO 8601 format * Access requires a valid API key with appropriate permissions * Response data format varies based on question type # Introduction Source: https://docs.flashquotes.com/api-reference/introduction Welcome to the Flashquotes API documentation ## Welcome to the Flashquotes API The Flashquotes API enables you to programmatically access and manage your quotes, events, bookings, forms, invoices, and tasks. Our REST API provides endpoints for retrieving quote summaries and live totals, retrieving event data, creating tasks, managing form responses, and accessing invoice information. ## Plan access What you can use depends on your plan: * **Full REST API** — every endpoint in this reference: quotes, events, bookings, form responses, invoices, and tasks. Needs the **Scale** plan. * **Zapier** — the endpoints the Flashquotes Zapier app uses. Included with **Pro** and above. [Set up Zapier →](/settings/integrations/zapier) Upgrade anytime in [Plan Settings](https://app.flashquotes.com/settings/plans). ## Authentication All API endpoints require authentication using an API key. You must include your API key in the request headers: ```bash theme={null} 'x-api-key: your_api_key_here' ``` You use one API key for everything. Find it in [Settings > Integrations](https://app.flashquotes.com/settings/integrations). On Pro, it works with the Zapier endpoints. On Scale, it also works with the full REST API. Keep it secret — never share it publicly. ## Base URL All API requests should be made to: ```bash theme={null} https://app.flashquotes.com/api ``` ## Available Endpoints Our API provides several endpoint groups: Retrieve quote summaries and live totals, filter quotes, and expand related objects Manage events, retrieve event details, and list events within date ranges Create and manage tasks on events programmatically Access form submission data and response details Retrieve invoice information and payment details ## Response Format All responses are returned in JSON format. Successful responses will have a 2xx status code, while errors will return appropriate 4xx or 5xx status codes with error details. ### Conventions The current public API follows Stripe-style conventions: * **`snake_case` query parameters, `camelCase` response keys.** * Every returned object carries an **`object` discriminator** (e.g. `"object": "event"`) at the top of its JSON. * List endpoints return a standard envelope: ```json theme={null} { "object": "list", "url": "/api/events", "hasMore": true, "data": [ /* ... */ ] } ``` * Default responses include only an object's own scalar fields plus the foreign-key ids for its relations. Related objects are inlined only when explicitly requested via `expand[]`. ### Expanding related objects By default, an endpoint returns the object's own scalar fields plus foreign-key ids (e.g. an event includes `bookingId`, `locationId`, `eventBriefId`, but not the booking or location objects themselves). To inline a related object, pass its path in `expand[]`: ```bash theme={null} GET /api/events/evt_123?expand[]=location&expand[]=booking.lead ``` **Dot notation** walks the object graph. `booking.lead` reads "expand the booking, then expand the lead inside that booking." Each path segment must be an allow-listed relation on its parent — unknown paths return `400`. ```jsonc theme={null} // expand[]=booking.lead → lead nested inside booking { "object": "event", "id": "evt_123", "booking": { "object": "booking", "id": "bkg_456", "lead": { "object": "lead", "id": "led_789", "...": "..." } } } ``` **Parent auto-promote.** Requesting any nested path automatically expands its parents. `expand[]=booking.lead` includes `booking` in the response even if you don't list `booking` separately. **Multiple paths.** Repeat `expand[]` to combine paths. Comma-separated values are also accepted: `?expand[]=location,services`. #### `data.` prefix on list endpoints On list endpoints, each path **must** be prefixed with `data.` because the objects you're expanding live inside the envelope's `data` array, not at the top level: ```bash theme={null} # Single object — no prefix GET /api/events/evt_123?expand[]=booking.lead # List — every path is prefixed with data. GET /api/events?expand[]=data.booking.lead&expand[]=data.location ``` A list request that omits the `data.` prefix returns `400` with an `invalid_request_error` describing the offending path. #### Limits * Maximum **20** paths per request (duplicates are deduplicated, so `?expand[]=booking&expand[]=booking` counts once). * Maximum nesting depth of **4** segments. On list endpoints, the `data.` prefix doesn't count against the depth — `data.a.b.c.d` is allowed. * Paths must use only allow-listed relation names; the allowed paths are documented on each endpoint. ### Pagination List endpoints use cursor-based pagination: * `limit` — page size (default `10`, maximum `100`). * `starting_after` — the `id` of the last item from the previous page. The response `hasMore` flag indicates whether more pages are available. ### Date-range filters Date fields on list endpoints accept Stripe-style bracket-notation operators: `[gt]`, `[gte]`, `[lt]`, `[lte]`. Values must be full ISO 8601 datetimes including a timezone designator (e.g. `2026-06-01T00:00:00Z` or `2026-06-01T00:00:00-05:00`). ``` ?service_start_time[gte]=2026-06-01T00:00:00Z&service_start_time[lt]=2026-07-01T00:00:00Z ``` ### Error envelope Errors return a structured envelope: ```json theme={null} { "error": { "type": "invalid_request_error", "code": "invalid_parameter", "message": "limit must be an integer between 1 and 100", "param": "limit" } } ``` The `type` field is one of `api_error`, `invalid_request_error`, `authentication_error`, `permission_error`, `rate_limit_error`, or `idempotency_error`. The `code` field is a machine-readable identifier and `param` (when present) names the offending parameter. ## Need Help? If you need assistance or have questions about the API: * Email us at [support@flashquotes.com](mailto:support@flashquotes.com) * Check our documentation for examples and guides * Contact your account manager for enterprise support # List Invoices Source: https://docs.flashquotes.com/api-reference/invoice/list-invoices GET /api/invoice/{booking_id} Retrieve invoice IDs and URLs associated with a booking This endpoint returns the invoice IDs and encrypted invoice URLs associated with a specific booking. ### Response The response includes: * `bookingId`: The ID of the booking * `invoiceIds`: Array of invoice IDs associated with the booking * `invoiceUrls`: Array of encrypted invoice URLs that can be used to access the invoices ### Example Usage Here's an example of how to use this endpoint with curl: ```bash theme={null} curl -X GET 'https://app.flashquotes.com/api/invoice/book_123' \ -H 'x-api-key: your_api_key_here' ``` ### Common Use Cases * Retrieving invoice URLs for a booking * Accessing invoice documents through encrypted URLs * Tracking which invoices are associated with a booking # Get Quote Source: https://docs.flashquotes.com/api-reference/quote/get GET /quotes/{id} Retrieve a quote summary with live totals and optional related objects Retrieve a quote by ID, including its live `totalPriceCents`, currency, dates, contact and location IDs, and event details. Related objects are included only when requested with `expand[]`. Use your `x-api-key` with [public API access](/api-reference/introduction#plan-access). These endpoints require Scale or an eligible Grandfathered Pro plan. ```bash theme={null} curl --get 'https://app.flashquotes.com/api/quotes/cmf2q8n4x0000kz01a1b2c3d4' \ --header "x-api-key: $FLASHQUOTES_API_KEY" \ --data-urlencode 'expand[]=lead' \ --data-urlencode 'expand[]=serviceDays' ``` Set `FLASHQUOTES_API_KEY` to your API key and replace the quote ID with one from [List Quotes](/api-reference/quote/list-quotes). `--data-urlencode` safely encodes the brackets in query parameters. ## Live quote total `totalPriceCents` is calculated on every request from saved line prices, base and travel fees, line and quote discounts, service charges, and tax. It uses the same calculation, rounding, and currency rules as the app. Monetary amounts use the currency's minor units: `250000` with `currency.isoCode: "USD"` represents \$2,500.00. The total does not reprice services, refresh tax-provider data, include booking-time gratuity, or represent an invoice's unpaid balance. Expanding related objects does not change the total. Child pricing changes can change `totalPriceCents` without changing the quote's `updatedAt`. Do not use `updated_at` filtering as a complete financial change feed. ## Expanding related objects Repeat `expand[]` for each relation you need. Single-quote paths have no `data.` prefix. Comma-separated paths are also accepted. | Path | Adds | | ---------------------------------- | -------------------------------------------------------------------------------------------- | | `lead` | Contact: ID, name, email, phone, company name, and source | | `location` | Location: ID, name, address fields, and time zone | | `eventType` | Event type ID and name | | `services` | Distinct service definitions: ID, name, description, and image URL | | `addons` | Distinct add-on definitions: ID, name, description, and image URL | | `discounts` | Discount definitions: ID, name, type, `percentOff`, and `amountOff` | | `taxRate` | Tax rate ID, name, and rate | | `paymentTerms` | Payment schedule, deposit terms, and invoice due-days value | | `serviceCharges` | Flat array of charge definitions, including type, percentage or fixed amount, and taxability | | `serviceDays` | Flat array of service days with quote ID, start/end times, and creation/update times | | `contract` | Contract template ID, name, description, and creation/update times | | `booking` | Booking summary | | `booking.lead` | Contact inside the booking | | `booking.eventType` | Event type inside the booking | | `booking.invoices` | Invoice summaries, including totals, paid/due amounts, status, and payment URLs | | `booking.events` | Events inside the booking | | `booking.events.location` | Each event's location | | `booking.events.services` | Each event's services | | `booking.events.addons` | Each event's add-ons | | `booking.events.staff` | Each event's assigned staff | | `booking.events.resources` | Each event's assigned resources | | `booking.events.booking` | Each event's booking summary | | `booking.events.booking.lead` | Contact inside each event's booking | | `booking.events.booking.eventType` | Event type inside each event's booking | | `booking.events.booking.events` | Events inside each event's booking | | `booking.events.booking.invoices` | Invoice summaries inside each event's booking | A nested path automatically includes its parents. For example, `booking.events.resources` includes `booking`, its `events`, and each event's `resources`. Other relations remain absent unless requested. Expanded single relations return `null` when missing or inaccessible; empty collections return `[]`. Every expanded lead object includes `source`, the contact's recorded lead source (for example, `"Website"`), or `null` when no source is set. This applies to `lead`, `booking.lead`, and `booking.events.booking.lead`. ### Services, discounts, and charges `services` and `addons` come from current line-item associations and are deduplicated by ID. Archived services and add-ons are omitted, although their saved pricing still contributes to the total. These objects do not include quantities or unit prices. `discounts` combines quote-level and line-level definitions, deduplicated by ID, with the quote-level definition first. Use the base `discountId` to identify the quote-level discount. No line IDs, discount allocations, or realized discount amounts are returned. Attached archived discount and service-charge definitions remain visible. `serviceCharges` and `serviceDays` are direct arrays without association wrappers. `serviceDays` and `booking.events` are ordered by start time ascending, then ID ascending. Invoice summaries are terminal: they have no expandable children. ### Limits and excluded fields * Maximum **20 distinct paths** per request; duplicates count once. The full list above exceeds this limit. * Maximum **four segments** per path. * Unknown, malformed, or unsupported paths return `400` with `param: "expand"`. * Quote and invoice line items, quantities, unit prices, pricing configuration, contract content, and signatures are excluded. For example, `lineItems`, `serviceDays.lineItems`, `booking.invoices.lineItems`, `discount`, and `serviceCharges.serviceCharge` are unsupported. Free-text descriptions can still contain details entered by your team. Request only the relations you need. Expanded collections are not independently paginated or truncated; repeated booking/event traversal can produce large responses. These routes do not currently enforce per-key rate or concurrency limits. ## Errors | Status | Meaning | | ------ | ---------------------------------------------------------------------- | | `400` | Invalid expansion path or expansion limit exceeded | | `401` | Authentication denied: check the API key, allowed IPs, and plan access | | `404` | Quote is missing, deleted, or inaccessible to your company | | `500` | Internal server error | | `503` | Authentication service temporarily unavailable | Requesting an unsupported expansion returns: ```json theme={null} { "error": { "type": "invalid_request_error", "code": "invalid_parameter", "message": "Unknown expand path: 'lineItems'", "param": "expand" } } ``` Quotes and expanded objects are scoped to your company. Missing and inaccessible quote IDs return the same `404`. Foreign pricing relationships are excluded from the total; if stored relationships are invalid, this can differ from the app's total until the data is repaired. # List Quotes Source: https://docs.flashquotes.com/api-reference/quote/list-quotes GET /quotes List quote summaries with live totals, date filters, cursor pagination, and optional expansions Return a paginated list of quotes for your company. Each quote includes the same base fields and live `totalPriceCents` as [Get Quote](/api-reference/quote/get). Use your `x-api-key` with [public API access](/api-reference/introduction#plan-access). These endpoints require Scale or an eligible Grandfathered Pro plan. ```bash theme={null} curl --get 'https://app.flashquotes.com/api/quotes' \ --header "x-api-key: $FLASHQUOTES_API_KEY" \ --data-urlencode 'limit=25' \ --data-urlencode 'service_start_time[gte]=2026-10-01T00:00:00Z' \ --data-urlencode 'service_start_time[lt]=2026-11-01T00:00:00Z' \ --data-urlencode 'expand[]=data.lead' \ --data-urlencode 'expand[]=data.serviceDays' ``` Set `FLASHQUOTES_API_KEY` to your API key. This request finds quotes with at least one service day starting in October 2026 and includes contact and service-day details. ## Pagination | Parameter | Description | | ---------------- | -------------------------------------------------- | | `limit` | Page size. Integer from `1` to `100`; default `10` | | `starting_after` | ID of the last quote from the previous page | Results are sorted by `createdAt` descending, then `id` descending. Sort order is fixed. The response contains `object: "list"`, `url: "/api/quotes"`, `hasMore`, and a `data` array of quote objects. When `hasMore` is `true`, pass the ID of the last quote in `data` as `starting_after`. Keep the filters unchanged between pages. ```bash theme={null} curl --get 'https://app.flashquotes.com/api/quotes' \ --header "x-api-key: $FLASHQUOTES_API_KEY" \ --data-urlencode 'limit=25' \ --data-urlencode 'starting_after=cmf2q8n4x0000kz01a1b2c3d4' \ --data-urlencode 'service_start_time[gte]=2026-10-01T00:00:00Z' \ --data-urlencode 'service_start_time[lt]=2026-11-01T00:00:00Z' \ --data-urlencode 'expand[]=data.lead' \ --data-urlencode 'expand[]=data.serviceDays' ``` Replace the example cursor with the last returned quote ID. An unknown or inaccessible cursor, or one that does not match the supplied filters, returns an empty page. No matching quotes also returns: ```json theme={null} { "object": "list", "url": "/api/quotes", "hasMore": false, "data": [] } ``` ## Equality filters | Parameter | Matches | | --------------- | ------------------------------------------- | | `lead_id` | Exact contact ID (`leadId` in the response) | | `location_id` | Exact location ID | | `booking_id` | Exact booking ID | | `event_type_id` | Exact event type ID | All supplied filters apply together. For example, pass `lead_id` and `location_id` to find a contact's quotes at one location. ## Date-range filters | Field | Matches | | -------------------- | ----------------------------------------------------------------------- | | `created_at` | Quote creation time | | `updated_at` | Quote row update time | | `service_start_time` | At least one service day whose start time satisfies all supplied bounds | Each field accepts `[gt]` (after), `[gte]` (at or after), `[lt]` (before), and `[lte]` (at or before). Values must be full ISO 8601 datetimes with a timezone: for example, `2026-10-01T00:00:00Z` or `2026-10-01T00:00:00-06:00`. Bare dates such as `2026-10-01` return `400`. Use `--data-urlencode` as shown above to encode brackets and timezone offsets correctly, including the `+` in positive offsets. For a multi-day quote, **one service day must satisfy the entire range**. A start time before the lower bound on one day and after the upper bound on another does not match. Expanding `serviceDays` returns all of the matching quote's service days, including days outside the filter range. `updated_at` filters the quote row's timestamp. Child pricing edits can change `totalPriceCents` without updating that timestamp, so this filter is not a complete financial change feed. ## Expanding related objects Use the [Get Quote expansion paths](/api-reference/quote/get#expanding-related-objects), prefixed with **`data.`** on every path: ```bash theme={null} curl --get 'https://app.flashquotes.com/api/quotes' \ --header "x-api-key: $FLASHQUOTES_API_KEY" \ --data-urlencode 'expand[]=data.booking.invoices' \ --data-urlencode 'expand[]=data.booking.events.resources' ``` Nested paths include their parents. Missing single relations return `null`; empty collections return `[]`. Expansions do not change quote totals and do not expose line items or unit prices. Expanded lead objects include the contact's `source` as a string, or `null` when no source is set. Use `data.lead`, `data.booking.lead`, or `data.booking.events.booking.lead` to include it. The limit is **20 distinct paths** and **four segments per path**, excluding the `data.` prefix. Missing prefixes and unsupported paths return `400`. Request only what you need: expanded collections are not independently paginated, and these routes do not currently enforce per-key rate or concurrency limits. ## Errors | Status | Meaning | | ------ | ----------------------------------------------------------------------- | | `400` | Invalid page size, date-range value, expansion path, or expansion limit | | `401` | Authentication denied: check the API key, allowed IPs, and plan access | | `500` | Internal server error | | `503` | Authentication service temporarily unavailable | For example, `limit=101` returns: ```json theme={null} { "error": { "type": "invalid_request_error", "code": "invalid_parameter", "message": "limit must be an integer between 1 and 100", "param": "limit" } } ``` # Get Resource Source: https://docs.flashquotes.com/api-reference/resource/get GET /resources/{id} Retrieve a single resource by id Retrieves the resource with the given id. Use this endpoint to look up a specific piece of equipment or asset when you already have its id — for example, from the `resources` array returned by an expanded event. ```bash theme={null} curl "https://app.flashquotes.com/api/resources/res_5M2wQ8" \ -H "x-api-key: $FLASHQUOTES_API_KEY" ``` The response includes the resource's own scalar fields plus its `locationId`, `createdAt`, and `updatedAt`. Cross-tenant or unknown ids return `404`. ## Expand Resources have no expandable relations. Any `expand[]` value returns `400` with the offending path echoed as `param`. # List Resources Source: https://docs.flashquotes.com/api-reference/resource/list-resources GET /resources List resources with cursor pagination and an optional location filter Returns a paginated list of resources for your company, newest first. Use this endpoint to sync your Flashquotes resource catalog with an external system, populate a picker in a custom booking tool, or check what equipment is assigned to a given location. ```bash theme={null} curl "https://app.flashquotes.com/api/resources?limit=25&location_id=loc_7H2pQ9" \ -H "x-api-key: $FLASHQUOTES_API_KEY" ``` ## Pagination Resources use cursor-based pagination — pass the `id` of the last resource in the previous page as `starting_after`: ```bash theme={null} # First page GET /api/resources?limit=25 # Next page GET /api/resources?limit=25&starting_after=res_5M2wQ8 ``` The response includes a `hasMore` flag indicating whether further pages exist. ## Filtering by location Pass `location_id` to return only resources attached to that location. This filter combines with pagination — you can page through resources for a single location by repeating `location_id` alongside `starting_after`. ``` ?location_id=loc_7H2pQ9&limit=25 ``` ## Expand Resources have no expandable relations. Any `expand[]` value returns `400` with the offending path echoed as `param`. ## Sort order Results are always sorted by `createdAt desc`. Sort order is not configurable. # Get Staff Source: https://docs.flashquotes.com/api-reference/staff/get GET /staff/{id} Retrieve a single staff member by id Retrieves the staff member with the given id. The lookup is scoped to your API key's company. Ids that don't exist and ids that belong to another company both return `404` — the response doesn't distinguish between them. Retrieve does not apply a status filter, so inactive staff resolve directly by id. Use this endpoint when you already have a specific staff id (for example, one returned by an expanded event) and need the full record. ## Example request ```bash theme={null} curl "https://app.flashquotes.com/api/staff/stf_5J9pK2mR7t" \ -H "x-api-key: $FLASHQUOTES_API_KEY" ``` ## Example response ```json theme={null} { "object": "staff", "id": "stf_5J9pK2mR7t", "firstName": "Alex", "lastName": "Nguyen", "email": "alex@example.com", "phone": "+15555550137", "role": "Bartender", "status": "active", "createdAt": "2026-03-14T18:02:44.000Z", "updatedAt": "2026-06-02T11:48:19.000Z" } ``` ## Expanding related objects No `expand[]` paths are supported on staff yet. Passing any value in `expand[]` returns `400` with an `invalid_parameter` error. ## Plan access This endpoint requires a **Scale**-plan API key. See [Plan access](/api-reference/introduction#plan-access). # Create Task Source: https://docs.flashquotes.com/api-reference/task/create POST /api/task/create Create a task for a specific event This endpoint creates a task on an event. Tasks are automatically added to the event's Admin checklist. ### Request Body The request body should be a JSON object with the following fields: | Field | Type | Required | Description | | ------------- | ------ | -------- | ----------------------------------------------------------------------- | | `eventId` | string | Yes | The ID of the event to create the task on | | `description` | string | Yes | The task description | | `dueDate` | string | No | Due date for the task in ISO 8601 format (e.g., `2025-10-20T00:00:00Z`) | ### Example Request ```bash theme={null} curl -X POST https://app.flashquotes.com/api/task/create \ -H "x-api-key: your_api_key_here" \ -H "Content-Type: application/json" \ -d '{ "eventId": "cm123abc456", "description": "Call venue to confirm table and chair arrangements", "dueDate": "2025-10-20T00:00:00Z" }' ``` ### Example Response ```json theme={null} { "success": true, "task": { "id": "cm456def789", "description": "Call venue to confirm table and chair arrangements", "dueDate": "2025-10-20T00:00:00.000Z", "eventId": "cm123abc456", "completed": false, "createdAt": "2025-10-13T14:22:00.000Z" } } ``` ### Response Fields | Field | Type | Description | | ------------------ | -------------- | ------------------------------------------------------------ | | `success` | boolean | Whether the task was created successfully | | `task.id` | string | Unique identifier for the created task | | `task.description` | string | The task description | | `task.dueDate` | string \| null | Due date in ISO 8601 format, or null if not provided | | `task.eventId` | string | ID of the event this task belongs to | | `task.completed` | boolean | Whether the task is completed (always `false` for new tasks) | | `task.createdAt` | string | Timestamp when the task was created | ### Common Use Cases * Automatically create follow-up tasks from external systems * Trigger task creation based on booking events or customer actions * Bulk import tasks from spreadsheets or other systems * Automatically create additional tasks after event booking ### Error Responses **400 Bad Request** - Invalid request body or date format ```json theme={null} { "error": "Invalid request body", "details": { "description": { "_errors": ["Task description is required"] } } } ``` **404 Not Found** - Event doesn't exist or doesn't belong to your company ```json theme={null} { "error": "Event not found" } ``` **500 Internal Server Error** - Unexpected error occurred ```json theme={null} { "error": "Internal server error" } ``` ### Notes Date format must be valid ISO 8601 (e.g., `2025-10-20T00:00:00Z`). # Bookings Source: https://docs.flashquotes.com/bookings Learn how to manage bookings, handle multi-day events, and track event details in Flashquotes ## Overview A booking in Flashquotes represents a client's confirmed service agreement, which may include one or multiple event days. Each booking serves as an umbrella that contains payment terms, event details, and client information. Bookings can be created automatically through your booking form or manually for special cases. ## Booking Structure In Flashquotes, there's an important distinction between bookings and events: * **Booking**: The overall service agreement that includes payment terms and client details * **Event**: A single day of service within a booking One booking can contain multiple events (service days) and multiple invoices. Each invoice can have its own recipient, due date, and payments. Each booking includes: * Booking form responses * Payment information * Client details * Associated events * Invoice details * Dynamic booking confirmation If your booking has a signed contract, you can view and download it from the **Contract** tab on the booking page. [Learn more about contracts →](/templates/contracts/overview) ## Creating and Managing Bookings ### Manual Booking Creation To manually create a booking: 1. Navigate to the [Bookings](https://app.flashquotes.com/bookings) page 2. Click the `New Booking` button in the top right 3. Enter booking details: * Client information * Payment terms * Event details * Service requirements Manual booking creation is particularly useful for corporate clients with special payment terms or recurring conventions. The form includes a **Send booking confirmation** checkbox, checked by default, that emails the contact a confirmation when you save. Uncheck it to record the booking quietly — for example, when backfilling past events or logging an arrangement made over the phone. See [Booking Confirmation Email](#booking-confirmation-email). ### Managing Multiple Events To add additional event days to a booking: 1. Navigate to the booking view 2. Locate an existing event 3. Click the `Copy` button next to the event 4. Select the new date 5. Customize the timeline and details as needed This is useful for: * Adding setup days * Creating multiple service days * Scheduling recurring events Multi-day bookings allow you to: * Manage multiple events under one booking, with one or more invoices * Create different timelines for each day based on service days from the original quote * Track setup and service days separately * Maintain consistent client information across all event days * Handle complex scheduling like wedding weekends or corporate events ### Changing the Booking Contact If a booking ended up under the wrong contact, or the point of contact changes (say, a planner hands off to the client), you can move the booking to a different contact at any time. **Where to change it:** * On the booking page, open the `More Actions` menu and select **Change contact** * On any of the booking's events, click **Change** next to the booking contact in the Contacts card Search for the new contact, confirm, and the whole booking moves. **What moves with the booking:** * The original quote * Every invoice on the booking * All event days, with their client details * Notes on the booking or quote * Pending workflow emails — steps that haven't sent yet go to the new contact (see [who receives workflow emails](/workflows/overview#who-receives-workflow-emails)) * Auto-generated event titles like "Jordan's event" update to the new contact's name; titles you've edited by hand are left alone * Google Calendar events synced from the booking update to match **What stays with the previous contact:** * Emails already sent to the previous contact * Contracts the previous contact signed These stay because they record what actually happened. Booking workflow emails address the booking's current contact when they send. [Invoice reminders](/invoices/reminders) use each invoice's saved bill-to email, which is preserved when the booking contact changes. Review **Bill to details** on each invoice if its recipient should change too. Older invoices without a saved bill-to email follow the booking's current contact. ## Booking Confirmation ### Dynamic Confirmation Page The booking confirmation page provides clients with: * Most up-to-date event information * Invoice payment links * Site contact details * Parking and loading information * Event timeline for each service day The confirmation page updates automatically whenever you make changes in the admin panel, ensuring clients always have access to the latest information. ### Sharing Confirmations To share a booking confirmation: 1. Open the booking 2. Click `More Actions` in the top right 3. Select `Share Confirmation Link` 4. Send the link to your client ### Booking Confirmation Email Flashquotes automatically emails your customer a confirmation whenever a booking is completed through your booking form. This is a system email — it's separate from (and in addition to) any [workflow emails](/workflows/overview) the booking triggers. **When it doesn't send:** * **Imported bookings** — [importing bookings](/imports-exports/import-bookings) never triggers the confirmation email (or any other notifications), so your existing clients aren't re-notified about events they already booked * **Manual bookings, when you opt out** — the `New Booking` form has a **Send booking confirmation** checkbox, checked by default. Uncheck it and the contact isn't emailed. Only the customer email is skipped — your team's new-booking alerts still send **How it's sent:** * **To:** the booking contact's email address * **From:** your company name, with replies routed to your company contact email * **Subject:** "Your booking with \[Your Company] is confirmed" **What it looks like:** 1. **Your logo** at the top, if you've uploaded one in [Branding](/settings/branding) 2. **"Your booking is confirmed"** headline with a short thank-you note addressed to your customer by name 3. **Event details** — the event date with start time, and the event address 4. **"See all booking details" button** — styled with your brand color, linking to the customer's [confirmation page](#dynamic-confirmation-page) 5. **Contact footer** — "Questions?" with your company name and contact email Your team gets its own heads-up too — anyone with new-booking alerts turned on in their notification preferences receives an email whenever a new booking comes in. ## Filtering Bookings Click the dashed **Filter** button on the Bookings page to add a filter. Once one is applied, the button becomes **Add filter**, and each active filter appears as a pill you can click to edit or remove with the **×**. Filters combine, so adding more narrows the list further. Available dimensions: * **Booking date** — when the booking was confirmed * **First event date** — the earliest service day on the booking (bookings can span months, so only the first event is matched) * **Location** — shown when your company has more than one * **Payment status** — Paid, Pending, Partially paid, Open invoice, Overdue, Void, No invoice, or Draft invoice **Booking date** and **First event date** are independent filters. Each names its own date in its pill, and you can apply either, both, or neither at the same time — for example, "Booking date: last 30 days" plus "First event date: this year" to see recently confirmed bookings for events happening in the current year. Booking date is applied by default so the stats and table stay bounded. The stat cards' period-over-period deltas use Booking date as the comparison window when both dates are set, and hide when no range is fully bounded. ## Financial Management ### Payment Tracking From the booking view, you can: * View cards on file * See deposit payment details * Record manual payments (ACH/check) * Access and edit invoices To configure payment terms for your quotes, see our [Booking Flow guide](/contacts/booking-flow). ### Invoice Integration Each booking can have multiple invoices, allowing you to: * Bill different people or companies for separate charges * Set a due date and track payments for each invoice * Add charges after booking on a new invoice * See totals and payment status across all active invoices Open the booking or event's **Billing** tab to create, duplicate, send, or download an invoice. Payment schedules and payment history are managed inside each invoice. See [Multiple invoices per booking](/invoices/multiple-invoices), including how invoices are handled when you [copy a booking](/invoices/multiple-invoices#copy-a-booking-with-its-invoices). ## Export Bookings Data ### CSV Export Export your booking data to CSV format for business analytics, accounting reconciliation, and operational reporting. Go to the [Bookings](https://app.flashquotes.com/bookings) page Click the **Export to CSV** button in the top toolbar Your browser downloads a CSV file with up to 2,000 bookings #### Export Contents The booking export includes: * **Client Details**: Name, email, phone, company * **Event Information**: Dates, types, guest counts, locations * **Financial Data**: Total amount, deposits, payments, balance due * **Service Details**: Resources, staff assignments, timelines * **Booking Status**: Confirmed, tentative, cancelled * **Form Responses**: Custom field data from booking forms #### Common Uses * **Accounting**: Reconcile bookings with QuickBooks or other accounting software * **Analytics**: Analyze booking trends, popular services, and seasonal patterns * **Operations**: Plan resource allocation and staff scheduling * **Marketing**: Track conversion rates and ROI from different channels The export respects your current filters. Apply date ranges or status filters before exporting to get specific data subsets. ## Best Practices 1. Use manual booking creation for clients with special requirements 2. Regularly verify booking details are up-to-date 3. Utilize the copy feature for recurring events 4. Keep client confirmation links accessible 5. Monitor payment status regularly 6. Export data regularly for backup and analysis ## Next Steps After creating a booking: * [Set up event details](/events) * [Manage invoices](/invoices) * [Export contact data](/imports-exports/export-contacts) * Track payment status * Coordinate with your team # Calendar Source: https://docs.flashquotes.com/calendar View and manage all your events, quotes, tasks, and payments in one place with the Flashquotes calendar. Use the calendar to see everything happening in your business — booked events, open quotes, tasks, payments, and more — across day, week, month, or agenda views. To open it, go to **Event Schedule** in the sidebar and switch to **Calendar** view using the toggle at the top of the page. ## Switch calendar views The calendar defaults to **Week** view. To change it: 1. Click the **view selector dropdown** in the top-right corner of the calendar. 2. Choose **Day**, **Week**, **Month**, or **Agenda**. On mobile, only **Day** and **Agenda** views are available. ## Navigate dates * Click **Today** to jump back to the current date. * Use the **back/forward arrows** to move by day, week, or month. * Click the **date heading** to open a date picker and jump to a specific date. ## Show or hide item types The left sidebar lets you toggle what appears on the calendar. | Item | Color | | ------------------------ | ---------------------- | | Events | Indigo (solid) | | Quotes (unbooked quotes) | Indigo (dashed border) | | Blocked dates | Slate | | Invoice due dates | Rose | | Tasks | Amber | | Scheduled payments | Teal | | Quote expirations | Slate | Toggle any item type on or off using the checkboxes in the **Calendar items** section. Your preferences save automatically. ## Filter by location, staff, or resource In the **Filters** section of the left sidebar: 1. Select one or more **locations** to scope the calendar. 2. Use **Staff** and **Resources** filters to narrow further — these are faceted by the locations you selected. 3. Click **Clear all** to reset all filters. The location filter only appears if you have multiple locations set up. ## Block out dates 1. Click **Block out dates** at the top of the left sidebar. 2. Fill in the date range and reason. 3. Save. The blocked period appears on the calendar in slate. To remove a blocked date, click it on the calendar and select **Delete** in the slideover. [Learn more about blocked dates →](/calendar-blocked-dates) ## Open item details Click any calendar item to see its details. | Item type | What happens | | --------------------------------------- | ---------------------------------- | | Booked event | Opens a detail slideover | | Quote | Navigates to the quote detail page | | Blocked date | Opens slideover to view or delete | | Task, invoice, payment, or quote expiry | Opens a detail slideover | ## Switch timezones In **Day** or **Week** view, a timezone button appears in the calendar header. Click it to switch the displayed timezone. ## Calendar settings Click **Calendar settings**, the sliders icon beside the view selector. The settings menu is available on desktop and mobile. ### Show service time vs. shift time Under **Event times**, choose how booked events appear: * **Shift time** (default): The full shift, including setup and teardown. * **Service time**: Only the customer-facing service hours. ### Choose the first day of the week Under **First day of week**, choose **Sunday** or **Monday**. Monday is the default. The calendar and its date picker update immediately. Your selected date and calendar view stay the same. This preference applies to the Event Schedule calendar, not other date pickers. Both settings save automatically in your current browser. Other browsers and devices keep their own preferences. Clearing this site's browser data restores the defaults. ## Multi-day events Events that span more than one day render across each day they touch, so you can see the full footprint of a setup → event → teardown weekend without clicking into the event. ## Resource availability Resource availability is displayed on each day to give you a snapshot view of which days have high resource availability and which days are nearly booked out. [Learn more about resources →](/resources) ## Connect Google Calendar To sync your calendar with Google Calendar, upgrade to Flashquotes Plus. The upsell option appears at the bottom of the left sidebar. The calendar auto-scrolls to the current time when you first open it in Day or Week view — no need to scroll manually to find your next event. # Product Updates Source: https://docs.flashquotes.com/changelog/overview New features and improvements to Flashquotes are released **every week**. This changelog documents product updates and new features in Flashquotes. These updates are rolled out directly to the live application - no separate changelog feature exists within the app itself. ## Multiple Invoices per Booking Create separate invoices for extras, different billing recipients, or charges due on different dates — all under one booking. * **Add or duplicate invoices** from the booking or event's **Billing** tab. Each gets its own number, payments, and PDF. * **Bill different people** with an independent bill-to name and email on each invoice, while keeping the booking contact the same. * **Set separate due dates** with automatic reminders that follow each invoice's date and recipient. * **Copy a booking's invoices** into a new booking with fresh numbers and no payments carried over. [Learn about multiple invoices per booking →](/invoices/multiple-invoices) ## Minimum Notice for Add-ons Keep add-ons that need extra prep, ordering, or scheduling from being requested too close to an event. * **Set the lead time** — choose from 1 to 365 days in the add-on's **Availability** settings, or leave it blank for no minimum. * **Show only eligible add-ons** — once a customer picks an event date, the lead intake form automatically hides options that need more notice. * **Adapt as the date changes** — add-ons stay visible until a date is selected, and the available choices update with the selected date. [Learn about add-on minimum notice →](/services/add-ons) ## Holiday, Time-of-Day, and Day-of-Week Pricing Three new dynamic pricing modifiers, so the calendar and the clock set your rates instead of you editing prices by hand. Find them on a service under **Pricing → Advanced**. * **Holiday & date pricing** — add every holiday for your country in one step with a single percentage, or pick them one at a time. Holidays recalculate their date each year, so Thanksgiving and Memorial Day stay correct without maintenance. * **Custom dates that repeat** — name a one-off range like "Peak season," set a percentage, and tick **Repeats every year** to have it apply on the same dates annually * **Time-of-day pricing** — charge more for early starts and late finishes. Set ranges of clock time, each with its own percentage. A common setup is +10% before 7:00 AM and after 10:00 PM, with your normal hours left at the base rate. * **Day-of-week pricing** — upcharge Saturdays, discount the days you're trying to fill. Add only the days that need a change. [Learn about dynamic pricing →](/services/pricing#dynamic-pricing) ## Add-on Base Price per Day and Live Price Preview Add-on pricing got a new billing option and a way to check your math before it reaches a customer. * **Charge the base price each day** — a new checkbox that multiplies an add-on's base price by the number of service days. Use it for costs you incur every day of a multi-day event, like daily delivery or setup. * **Combines with per-unit** — leave both on and the base scales by quantity and days together * **Price preview** — the add-on page now shows the price for any quantity, guest count, resource count, hours, and number of days, with the calculated price and base price broken out separately [Learn about add-ons →](/services/add-ons) ## Lead Detection with Flashquotes AI Flashquotes AI now finds quote requests sitting in your Gmail inbox and turns them into quote opportunities. Connect a Google account and new emails are checked as they arrive. * **Suggestions in the Pipeline** — each inquiry found appears at the top of the New inquiry column with the event date, guest count, and a brief AI summary * **Build the quote in one click** — Flashquotes creates the contact and a draft quote with the date, time, address, and service filled in, then opens it for you to finish * **See the source** — read the original email before you decide, and discard anything that isn't a real inquiry Flashquotes AI is in public beta. Click **Give feedback** on any suggestion to help us make it better next time. [Lead detection →](/flashquotes-ai/lead-detection) · [Flashquotes AI overview →](/flashquotes-ai/overview) ## Duplicate a Quote with New Dates Reuse a quote for a repeat client or a similar event without rebuilding it. **Duplicate** now opens a dialog where you set the new service dates before the copy is created, so the duplicate is ready to send instead of pointing at last year's event. * **Pick the dates first** — service days start pre-filled from the original; change any date or time, add or remove days, and check availability right in the date picker * **Everything else carries over** — pricing, line items, service charges, event details, quote message, booking form, payment terms, and the same contract as the original * **Optionally copy intake answers** — tick **Duplicate lead intake form responses** to bring the original lead's form answers along; it's off by default and only appears when the original has answers to copy * **Same look, guaranteed** — the duplicate keeps the original quote's exact template appearance, even if the template has changed since Find it in the quote page's **More actions** menu or the row menu on a contact's **Quotes** tab. The new quote opens as soon as it's created. [Duplicating a quote →](/contacts/quotes#duplicating-a-quote) ## Update a Quote to the Latest Template Version Quotes keep a snapshot of their template, so editing the template never silently changes a quote you've already sent. When a quote's photos, add-ons, testimonials, or service details fall behind its template, the **Quote Template** tab now shows an **Update to latest version** button. * The confirmation names exactly which sections will change and the template they'll match * Applying the update can't be undone — choose **Keep current version** to leave the quote as is [Updating a quote to the latest template →](/templates/quote-templates#updating-a-quote-to-the-latest-template-version) ## Change a Booking's Contact Move a booking to a different contact when the wrong person ended up on the record, or when the point of contact changes — like a planner handing off to the client. Everything attached to the booking moves together. * **Change it from anywhere** — the booking page's `More Actions` menu, the event's Contacts card, or the invoice editor * **Everything moves together** — the quote, every invoice, all event days, and notes follow the new contact * **Titles keep up** — auto-generated event titles and synced Google Calendar events update to the new contact's name; titles you've edited by hand are left alone * **History stays put** — emails already sent to the previous contact and contracts they signed stay on their record Workflow emails and automated invoice reminders now resolve their recipient when each email sends, so pending follow-ups always go to the current contact on the quote or booking. [Changing the booking contact →](/bookings#changing-the-booking-contact) · [Who receives workflow emails →](/workflows/overview#who-receives-workflow-emails) ## Collect a Tip After the Event Add a gratuity to an invoice once the event is over without creating a separate payment link. Edit the booking's **Tip amount** field or add a **Gratuity** line item to the existing invoice, then re-send the invoice link so the customer pays the updated balance on the same invoice page. * You set the tip amount on the invoice — customers can't pick their own tip after booking * Works with any completed booking; totals and remaining balance recalculate on save * No standalone Stripe payment link for tipping — everything stays on the invoice [Add a tip after the event →](/invoices#add-a-tip-after-the-event) ## Export Quotes to CSV Export your quotes from the Pipeline with more of your inbound quote data, so you can analyze where inquiries come from and what they're for — right in a spreadsheet or BI tool. * **Event type** — see which kinds of events drive your inquiries * **Referral source** — measure which marketing channels bring in quotes * **Event address** — break down demand by city and venue location * **Your view, your file** — the export matches your current filters and sort, includes booked and lost quotes for win/loss analysis, and lets you pick exactly the columns you need [How to export quotes →](/imports-exports/export-quotes) ## Attach Files to Event Notes Keep site maps, floor plans, and reference photos with the event instead of digging through email. * **Where it works** — internal notes, plus the event description, additional location details, and parking & loading info fields * **Add files** by clicking the paperclip in the toolbar, dragging a file onto the field, or pasting a copied image — images and PDFs up to 16 MB each * **Manage files** — click a tile to open a full-screen viewer, rename in place, or remove with the ✕ (files can only be removed that way, so a slip while editing text won't delete one) * **Event Briefs** automatically include attached files, so field staff see maps and photos without asking * **Internal notes save automatically** when you click away, confirmed by a "Saved" badge — saving waits for uploads to finish so nothing's lost [Learn more →](/events/attachments) ## Contact Shortcodes on Booking Workflows Personalize post-booking and event-timed emails with contact details. The `{{lead.*}}` shortcodes now resolve on the **Quote Booked**, **First Event Start**, and **Last Event End** workflow triggers, so first name, email, phone, and city can flow into confirmations, day-of reminders, and follow-ups. * Use `{{lead.first_name}}`, `{{lead.last_name}}`, `{{lead.full_name}}`, `{{lead.email}}`, `{{lead.phone}}`, `{{lead.company_name}}`, and `{{lead.city}}` in any booking-triggered workflow * The five duplicate booking contact shortcodes (`{{booking.first_name}}`, `{{booking.last_name}}`, `{{booking.full_name}}`, `{{booking.email}}`, `{{booking.phone}}`) are retired and no longer appear in the shortcode picker * Existing templates that already use the retired codes keep sending and now pull from the live contact record [View all shortcodes →](/workflows/shortcodes/overview) · [Workflow triggers →](/workflows/triggers) ## Resources API Sync your Flashquotes resource catalog with external systems, populate resource pickers in custom booking tools, or check what equipment is attached to a location, all through the public REST API. * **List resources** — `GET /resources` returns resources newest-first with cursor pagination (`limit`, `starting_after`) and a `hasMore` flag * **Get a resource** — `GET /resources/{id}` returns a single resource's scalar fields plus `locationId`, `createdAt`, and `updatedAt` * **Filter by location** — pass `location_id` to scope results to one location; combines with pagination Requires a Scale-plan API key. Follows the same Stripe-style conventions as the rest of the public API (snake\_case query params, camelCase response keys, standard list envelope). [List resources →](/api-reference/resource/list-resources) · [Get a resource →](/api-reference/resource/get) · [API overview →](/api-reference/introduction) ## Retrieve a Staff Member via API Look up a single staff member by id from the public API. Pair it with expanded event responses to pull the full record for whoever is assigned to a shift, without a second list-and-filter step. * `GET /api/staff/{id}` returns the staff member's name, email, phone, role, status, and `createdAt` / `updatedAt` timestamps * Scoped to your API key's company — ids that don't exist and ids from another company both return `404` * Retrieve ignores the active/inactive filter, so inactive staff still resolve by id * Requires a **Scale**-plan API key; `expand[]` paths aren't supported on staff yet [Read the endpoint reference →](/api-reference/staff/get) ## Leads Is Now Pipeline and Contacts The new Pipeline board showing quote cards organized into stages The Leads page has been split into two views built around how you actually work — quotes to win, and people to know. * **Pipeline** — every open quote on a kanban board, moving through stages from **New inquiry** to **Quote sent** to **Booked**. Drag cards between stages, spot 🔥 hot quotes where the client just engaged, and catch idle quotes before they go cold. Prefer rows? Flip to the list view. * **Custom stages** — add, rename, and reorder stages to match your sales process * **Contacts** — everyone you've quoted or booked in one searchable directory, with quote and booking counts, last activity, filters, and CSV export [Explore the Pipeline →](/pipeline) · [Meet the Contacts page →](/contacts) ## Reorganized Navigation The main sidebar has been streamlined so related tools live together and take fewer clicks to reach. * **Services & items** — Services, add-ons, and resources are now unified under one section with tabs, replacing the separate top-level entries * **Templates** — Quote templates and contracts share a single **Templates** section with tabs * **Payments** — The former Payouts page is now a tab inside **Payments**, so payments, refunds, and payouts sit side-by-side * **Event Schedule** — Events and Calendar are combined into one **Event Schedule** page with a List/Calendar toggle * **Sales Tax under Reports** — The sales tax report has moved into **Reports** * **Workspace switcher** — Switch between the companies you belong to from a new switcher at the top of the sidebar Every page in your bookmarks still works — only the location in the sidebar has changed. [Explore the updated navigation →](/quickstart) ## Per-Line-Item Discounts on Quotes and Invoices Mark down a single service without touching the rest of the order — attach any discount directly to a line item on a quote or invoice. * Pick an existing discount from the line-item editor's **Discount** picker, or create one inline with **+ New discount** * Customers see the original price with a strikethrough next to the discounted price, along with the discount name * Totals, taxes, and QuickBooks sync all use the discounted amount, so your books reconcile automatically * Line-item discounts apply before any order-level discount, floor at \$0, and are never applied to gratuity [Learn about per-line-item discounts →](/contacts/quotes#per-line-item-discounts) ## Group Services into Sections on Your Lead Intake Form Organize 10+ services into named, collapsible groups so leads can find what they need without scrolling a wall of options. * Add named sections (e.g. "Bar service", "Desserts") to the Services question on any form * Drag services between sections, reorder sections, and rename them inline * Leads see sections collapsed by default with a count — tap to expand [Learn about lead intake forms →](/forms/lead-intake) ## Custom Themes for Your Lead Intake Form Customizing the lead intake form theme in the form editor Now you can design a theme for your lead intake form that fully matches your brand and website! Open the design panel from the palette icon in the top-right of the form editor to customize colors, font, and corners and see the changes live on your form. You can even have different themes for different forms and will get live feedback on color pairs for the best form readability. * **Copy from another form** — reuse a theme you've already built via the **Copy from** menu in the Design panel header * **Reset theme** — restore the Flashquotes default, seeded from your company brand color [Customize your form theme →](/forms/lead-intake#custom-themes) ## Add-on and Service Quantities on Events and Event Briefs Quantities for add-ons and services now flow through to events and event briefs, so your team sees exactly how many of each item the customer ordered. * Add-on and service quantities surface on the event details page and the [event brief](/events/event-brief) * Special add-ons still appear as prominent yellow banners — now with quantity included * Quantities update automatically when you edit the underlying quote or booking [Learn more about event briefs →](/events/event-brief) ## Auto-Calculate Travel Fee When Adding Services Add a service to a quote and the travel fee calculates automatically — no second step, no manual math. * Auto-calculate travel fees when adding a new service line item to a quote * Override or remove the calculated fee on any line item * Configure per-service calculation with [service-level travel fees](/services/travel-fees) [Learn about travel fees →](/services/travel-fees) ## Resource Availability and Calendar Improvements See exactly when your resources are free, and view the calendar the way you actually work. * **Resource availability** in the quote editor and on the calendar — spot conflicts before they happen * **Service time vs. shift time** toggle on the calendar to plan around setup and teardown * **Multi-day events** render cleanly across both days [Learn more about resources →](/resources) and [calendar →](/calendar) ## Shortcodes in Line Item Descriptions Use [quote shortcodes](/workflows/shortcodes/overview) inside Service and Add-on line item descriptions on your quotes. * Personalize each line with guest count, event date, customer name, and more * Edit descriptions inline with a rich text editor * Shortcodes resolve when the quote is created [Learn about shortcodes →](/workflows/shortcodes/overview) ## Custom Button Labels on Your Lead Intake Form Editing the CTA button label inline in the lead intake form editor You can now edit the CTA button copy on your lead intake form directly in the form editor — no code, no settings panel. * **First-page button** — defaults to **"Get Custom Pricing"** (or **"Get My Instant Quote"** when Instant Quoting is on) * **Last-page button** — defaults to **"Get My Quote"** (or **"Get My Instant Quote"** when Instant Quoting is on) In the form editor, hover the button to highlight it, click to edit, then press **Enter** or click outside to save. Leave it blank to restore the default. Labels are capped at 100 characters. [Learn how to edit button labels →](/forms/lead-intake) ## Pricing by Event Type Charge differently for the same service depending on the event type — wedding pricing, corporate pricing, festival pricing, set once per service. * Set a price modifier for any event type * Applies everywhere prices are calculated, including instant quoting * Pairs with the new [Event Type form question](/forms/lead-intake) [Learn about pricing →](/services/pricing) ## Event Type on Quotes and Booked Events Ask customers what kind of event they're hosting, then surface that answer where it matters. * New **Event Type** lead intake form question — configure and sort your own options * Event type displays on the quote, the event details page, and booked events * Use it for filtering, reporting, and event-type pricing [Learn about lead intake forms →](/forms/lead-intake) ## Tiered Pricing for Volume Discounts Offer volume discounts on services and add-ons by setting per-guest pricing tiers. * **Service tiers** — drop the per-guest rate as guest counts climb, with an optional minimum hourly guests floor * **Add-on tiers** — the same volume-discount logic applies to add-ons [Learn about service pricing →](/services/pricing) and [add-ons →](/services/add-ons) ## Surge Pricing and Days-Out Modifier Charge more when resource availability is low or when bookings come in late — automatically. * **Surge pricing** — percentage uplift triggered when [resources linked to a service](/resources#service-specific-resources) are scarce on the event date (service-aware, no flat-fee option) * **Days-out modifier** — modify pricing based on event lead time (upcharge rush jobs, premium-price far-out reservations, or both) [See Scale plan features →](/settings/plans) ## Per-Staff-Hour Travel Billing Bill drive time per staff member in addition to your per-mile, per-resource travel fee. * Travel labor scales with crew size — the per-mile, per-resource charge still covers the vehicles * Added on top of the existing travel fee (not subject to the mileage minimum) [Learn about travel fees →](/services/travel-fees) ## Per-Shift-Hour Labor Pricing Choose how hourly labor is counted on each service — by **shift hours** (full on-site time, including setup and teardown) or **service hours** (the customer-facing window only). * Both modes exclude travel — bill drive time separately via [travel fees](/services/travel-fees) * Pairs naturally with [per-staff-hour travel billing](/services/travel-fees) to itemize travel as its own line [Learn about service pricing →](/services/pricing) ## Service-Level Travel Fees Travel fees are now configured and calculated **per service** — each service on a quote gets its own travel fee based on its core resources. * **Free Travel Radius**: Set a radius around your business with no travel charge — events outside the radius are charged on the full distance * **Per-Service Settings**: Each service has its own price per mile and minimum fee * **Resource-Aware**: Fees calculate from the resources needed for that specific service * **Editable Line Items**: View the calculation breakdown and edit or remove travel fees per service [Learn about travel fee settings →](/services/travel-fees) ## Platform Fee Flexibility You set how to pay for the platform fee - either pass it to the end customer (**default**) or absorb it. Easily override your company's platform fee setting to absorb or pass the fee at a customer quote level. For example, you can choose to absorb and not show any fee to certain customers. [Learn about platform fee options →](/settings/plans#platform-fee) ## Staff & Resource Rules Now you can always calculate the right number of staff and resources for each service, allowing you to dial in your AutoDraft and instant quotes! Set per-service staffing rules that automatically calculate staff and resource quantities on quotes. Choose from four modes — Hourly Capacity, By Guest Count, By Duration, or By Guest Count + Duration — based on how your staffing scales. [Learn more about Staff & Resource Rules →](/services/staff-resource-rules) ## Show or Hide Tip on Event Briefs Control whether staff can see pre-paid gratuity amounts on event briefs. The setting lives on the event details page under the **Tip amount** field — click the inline link to toggle it on or off company-wide. When hidden, the "Pre-paid gratuity" in the **Setup** section of the event brief will not be shown. [Learn how to change the setting →](/events/event-brief#gratuity-visibility) ## Notes on Contacts Add notes directly to any contact. Create, edit, delete, and pin notes from the new **Notes** tab on the contact detail page. Pin important notes to keep them at the top, and use search to find what you need fast. [Learn more about managing contacts →](/contacts) ## Per-Unit Pricing for Services Add per-unit pricing to any service — useful for services where you want to price based on user-selected quantities. * Set a unit name, price per unit, and optional min/max quantity limits * Customers see a quantity selector on the lead intake form for services with unit pricing [Learn more about service pricing →](/services/pricing) ## Invoice and Payment Exports Improved sorting, filtering and search on the Invoices view as well as a new Payments view under Finance > Payments. Additionally, you can now export both Invoices and Payments to CSV to support accounting and data analysis. [Learn more about invoices →](/invoices) and [Learn more about exports →](/imports-exports/overview) ## Quote PDF Download Download or print any quote as a PDF. Open a quote and click the menu icon to find the new **Download PDF** and **Print** options. The PDF includes your full quote details, line items, and pricing — ready to share offline. [Learn more about the quote page →](/contacts/quote-view) ## Pay Full Balance at Booking Customers with a deposit payment schedule now see a **"Pay full balance today"** checkbox on the booking form. When toggled, the full invoice amount due is charged in a single transaction instead of a deposit with a later balance payment. [Learn more about payment terms →](/contacts/booking-flow) *** ## Quote Booked Workflow Trigger Create workflows that fire automatically when a quote is booked. Select "When a quote is booked" as the trigger when creating a new workflow. Use booking and lead shortcodes in your message templates to personalize post-booking communications. [Learn more about triggers →](/workflows/triggers) *** ## Hide Services from Lead Intake Form Control which services appear on your public lead intake form. In the form builder, each service now has a toggle switch to show or hide it. Hidden services won't appear to customers but stay available for quotes you build manually. [Learn more about the lead intake form →](/forms/lead-intake) *** ## New Booking Shortcodes Six new shortcodes are available for booking-based workflow templates: * `{{booking.first_event_end_date}}` and `{{booking.first_event_end_time}}` — end of the first event * `{{booking.last_event_start_date}}` and `{{booking.last_event_start_time}}` — start of the last event * `{{booking.first_event_address}}` — venue address * `{{booking.first_event_guest_count}}` — guest count (shows "TBD" if not set) [View all shortcodes →](/workflows/shortcodes/overview) ## Multiple Quote Follow-Up Workflows Create as many Quote Sent workflows as you need. Previously limited to one, you can now build different follow-up sequences for different situations — and choose which workflow to enroll a quote in when sending. * Designate a default workflow per trigger type * Default is pre-selected in the send quote modal * Switch workflows per quote as needed [Learn more about workflows →](/workflows/overview) ## Per Guest Per Hour Add-on Pricing A new add-on pricing type lets you charge based on guest count and service duration combined. Set a per-guest-per-hour rate, and the price calculates automatically: rate x guests x hours. **Example**: $2/guest/hr add-on with 50 guests, 1 day, 4 hours = $400 [Learn more about add-on pricing →](/services/add-ons) ## Calendar Month View The calendar is completely rebuilt. You now have four views, a smarter sidebar, and full control over what you see. **Views** * Day, Week, Month, and Agenda views (Week was the only option before) * On mobile, Day and Agenda views only * Week and Day headers include a timezone switcher * Calendar auto-scrolls to current time on load **Sidebar** * Toggle visibility for Events, Quotes, Blocked dates, Invoice due dates, Tasks, Scheduled payments, and Quote expirations * Filter by Location, Staff, and Resource — Staff and Resource filters update based on selected locations * "Block out dates" button for quick date blocking * "Clear all" resets all filters at once **Clicking items** * Events, Tasks, Invoices, and Payments open a detail slideover * Quotes navigate directly to the quote page * Blocked dates let you view or delete them Your sidebar visibility preferences save automatically in your browser. [Learn more about the calendar →](/calendar) ## Service-Specific Add-ons You can now control which add-ons are available for each service. When a customer selects services on a quote request form, only add-ons linked to those services are shown. * **Configure per service** — On the service detail page, use the "Linked Add-ons" section to select which add-ons apply * **Multiple services** — When multiple services are selected, the customer sees every add-on linked to any of the selected services * Add-on options update instantly as customers change their service selection on forms [Learn more →](/services/core-services#service-specific-add-ons) *** ## Service-Specific Resources You can now control which resources are eligible for each service, ensuring the right equipment is matched to the right services. * **Configure per service** — On the service detail page, use the "Linked Resources" section to select which resources can fulfill the service * **Date selection** — The date picker on your lead intake form now reflects only the resources linked to the selected services * **Availability badges** — Quote presentation and booking form availability badges update based on linked resources * **Multi-day events** — The date picker checks that linked resources are available for every consecutive day, not just the start date * **Multiple services** — When a quote includes multiple services, only resources linked to all selected services count toward availability [Learn more →](/services/core-services#service-specific-resources) ## Conditional Logic for Booking Forms Show or hide form pages based on what a customer has already selected. Set rules like "show this page when the service selected is the Premium Package" or "show this page when the Custom Branding add-on is included." Flashquotes automatically skips hidden pages and drops their required fields. **How it works:** * Open any booking form and go to the new **Logic** tab * Set visibility conditions per page using the service or add-on the customer selected * Pages match on ANY rule (OR logic), or show always if no rules are set * Hidden pages are skipped automatically and their fields won't block form submission Only available for booking forms. Lead intake form support is coming soon. [Set up conditional logic →](/forms/conditional-logic) ## New Pricing Options * **Per unit per guest add-on pricing** — Add-ons that scale by quantity and guest count (and days); quantity limits apply. [Learn more →](/services/add-ons) * **Minimum price for add-ons** — Optional floor for variable-rate add-ons; if the calculated price is below the minimum, the minimum is used. [Learn more →](/services/add-ons) * **Per guest per hour service pricing** — Service price scales with both guest count and event duration (e.g. \$3/guest/hr for bar service). [Learn more →](/services/pricing) *** ## QuickBooks Deposit Sync Improvements QuickBooks deposits now sync based on actual Stripe payouts instead of being created immediately with each payment. This aligns your QuickBooks records with real bank deposits for easier reconciliation. **What changed:** * **Stripe payments**: Deposits are created automatically when Stripe sends the payout to your bank, grouping multiple payments into a single deposit that matches your bank statement * **Manual payments** (cash, check): Continue to create deposits immediately when synced * **Payout trace ID**: Each deposit includes the Stripe trace ID for automatic bank reconciliation * **Failed payouts**: If a Stripe payout fails, the corresponding deposit is automatically removed [QuickBooks sync docs →](/finance/quickbooks-sync) | [QuickBooks integration →](/settings/integrations/quickbooks) *** ## Saved Filters & Sorting on the Contacts Table Your contacts table filters and sort preferences are now automatically saved and restored when you return to the page. No more re-applying the same filters every time you navigate away. **What's saved:** * Date range filter * Status filter * Source filter * Location filter * Owner filter * Sort column and direction Preferences are saved per company, so switching between companies loads the right view for each. Click **Clear filters** to reset everything back to defaults. [Learn about managing contacts →](/contacts) ## Global Currency Support Flashquotes now supports multiple currencies and locales, enabling businesses outside the United States to quote, invoice, and accept payments in their local currency. **Supported Currencies:** | Currency | Code | Symbol | Locales | | ----------------- | ---- | ------ | ------- | | US Dollar | USD | \$ | en-US | | British Pound | GBP | £ | en-GB | | Australian Dollar | AUD | \$ | en-AU | | Canadian Dollar | CAD | \$ | en-CA | Currency and locale are configured during company onboarding based on your country. All amounts — quotes, invoices, payments, and reports — display in your company's currency with locale-appropriate formatting. [Learn about company settings →](/settings/general#currency-and-locale) ## Google Analytics & Tag Manager Integration Google Tag Manager and Google Analytics integration with Flashquotes Finally know which marketing channels are actually driving bookings. Connect Google Analytics 4 or Google Tag Manager to track every step of your lead funnel — from form view to submission. **What You Can Track:** * **Form views** — See how many people land on your intake form * **Form starts** — Know when someone begins filling out your form * **Lead conversions** — Track successful submissions as conversions UTM parameters are automatically captured, so you can attribute leads back to specific campaigns, ads, and traffic sources. Build conversion funnels in GA4, optimize your ad spend, and finally prove ROI on your marketing efforts. Using Google Tag Manager? Push events to your dataLayer to fire Facebook Pixel, LinkedIn Insight Tag, TikTok Pixel, and any other tracking tools — all from one place. [Set up Google Analytics →](/settings/integrations/google-analytics) | [Set up Google Tag Manager →](/settings/integrations/google-tag-manager) ## Enhancements to the Contacts Table We gave the contacts table some love with faster data retrieval and more functionality! **New Columns** * Upcoming Bookings count - View future confirmed events * Contact Created date * Latest Quote date * Contact Owner - the company member assigned to this contact * Latest Communication - See the date of your last email with the contact **Improved Functionality** * All columns are sortable * Owner filter (Plus/Pro plans) * Sticky first column for easier scrolling on wide tables The enhanced table gives you instant visibility into contact engagement and helps prioritize follow-up actions. [Learn about managing contacts →](/contacts) ## Bulk Enroll Bookings in Workflows Save time by enrolling multiple upcoming bookings into workflows at once. **Key Features** * Select multiple bookings with upcoming events * See booking details including event name, date, and location * Only eligible bookings appear (future events, not already enrolled) Perfect for enrolling existing bookings when you create a new pre/post-event workflow. [Learn about bulk enrollment →](/workflows/workflow-enrollments#bulk-enrolling-bookings) ## Contact Owner Assignment Assign contacts to specific team members for better accountability and organization. Owners appear in the contacts table and can be used as a filter to view your assigned contacts. **Key Features** * Assign contacts from the contact edit drawer * See the owner in the contact header and table * Filter contacts by owner (Plus/Pro plans only) * Internal support accounts automatically hidden from assignment lists **Plan Availability** * Plus: Assign contacts to team members * Pro: Assign contacts to team members Perfect for teams managing contacts collaboratively or tracking individual team member performance. [Learn about managing contacts →](/contacts) ## Digital Contracts Add contracts to your booking flow with electronic signatures. Customers review and sign contracts before payment, allowing you to include a formal contract on any of your quotes. **Key Features** * Rich text editor with headers, lists, and signature blocks * Dynamic shortcodes for personalized contract content * Electronic signature capture with legal acknowledgment * Signed contracts are linked to the booking for you and your client to reference * Download and print signed contracts anytime **Plan Availability** * Plus: Up to 2 contract templates * Pro: Unlimited contract templates [Learn about contracts →](/templates/contracts/overview) ## Refunded Invoice Status Invoices now display a "Refunded" status when all payments have been fully refunded. **What changed:** * Gray "Refunded" badge appears when net payments equal zero after refunds * Refunded invoices don't count toward "amount due" or "overdue" totals * Status updates automatically when refunds are processed This makes it easier to distinguish fully refunded invoices from active ones at a glance. [Learn about invoices →](/invoices) ## Redesigned Booking Experience with Native Payments The customer booking experience has been completely redesigned with a streamlined step-by-step flow and integrated payment processing. **Visual Progress Tracker** * Clear step indicator showing progress through Details, Payment and Confirmation * Clickable steps allow customers to navigate back and review their information * Brand-colored theming matches your company colors **Integrated Payment Experience** * Customers complete payment directly within Flashquotes — no redirect to Stripe checkout * Embedded Stripe Payment Element for secure card entry * Real-time order summary updates as customers fill out their booking details * Supports all payment term types: Full Payment, Deposit, Card on File, and Invoice Only ## Invoice Payment Breakdown Invoices now display a detailed breakdown of all payments and their status, giving both you and your customers complete visibility into payment history. **Payment Details** * Each payment shows the date, payment method, and amount * Card payments display the card brand and last 4 digits (e.g., Visa •••• 4242) * Pending payments are clearly distinguished from completed payments * Refunds appear in the breakdown with negative amounts **Automatic Receipt Links** * Payments processed through Stripe automatically include a receipt link * Click the payment amount to open the Stripe receipt in a new tab * Perfect for customers who need receipts for expense reports or records **Enhanced Invoice PDF** * Payment breakdown is included when you download or print the invoice * Card details and receipt links are preserved in the PDF export [Learn about invoices →](/invoices) ## Quote Templates Create multiple reusable quote designs tailored to different event types, services, or branding variations. Instead of a single global template, you can now build a library of templates and apply the right one to each quote with a single click. * **Specialized designs for every occasion**: Create templates for weddings, corporate events, coffee service, and more — each with its own gallery images, testimonials, and add-ons * **Faster quoting**: Apply templates instantly from the Quote Template tab on any quote, or set a default template for new quotes * **Consistent branding**: Maintain professional presentation across your team while still customizing for specific event types [Learn about quote templates →](/templates/quote-templates) | [Configure your quote page →](/contacts/quote-view) ## Simplified Quote Payment Terms We've streamlined how you configure payment terms on quotes. Using the new **booking flow**, you can now: * Select how you want each quote to be paid directly from the quote editor * Set default payment terms to apply to all new quotes * Easily add new payment terms without needing a separate booking form [Learn about booking flow →](/contacts/booking-flow) ## Per-Resource Pricing Set a "Price Per Resource" on services to automatically adjust quotes based on equipment or station counts. Perfect for businesses that charge per booth, per bar, per machine, or per station. The pricing formula now includes resource costs alongside base price, staff, and guest pricing. [Configure service pricing →](/services/pricing) *** ## Void Invoices Cancel invoices while keeping them in your records for accounting purposes. Voided invoices display a "Void" status and are excluded from revenue statistics, but remain visible in your invoice list for audit trail purposes. Available for invoices with no payments recorded. [Learn about voiding invoices →](/invoices/voiding) ## Improved Travel Fee Calculations Travel fees now scale with the number of core resources on your quotes. The updated formula calculates fees per resource per day, ensuring accurate pricing for multi-resource events. The minimum fee also scales accordingly - for example, a \$35 minimum with 2 resources over 2 days results in a \$140 effective minimum *(\$35 x 2 x 2)*. [Learn about travel fee settings →](/services/travel-fees) ## Lead Intake Form Editor Upgrade Your lead intake form is now fully customizable. Add custom questions, drag to reorder, move questions between pages, and remove what you don't need. The redesigned editor shows every question at a glance so you can build exactly the form your business needs. [See how it works →](/forms/lead-intake) ## First Event Start Trigger Automate customer communications around your actual event dates with two powerful new workflow triggers: **First Event Start** and **Last Event End**. These triggers allow you to send perfectly timed emails before, during, or after events based on when they actually occur. ### First Event Start Trigger Trigger workflows based on when the first event in a booking begins. Perfect for pre-event reminders, preparation instructions, or day-of communications. ### Last Event End Trigger Trigger workflows based on when the final event in a booking concludes. Ideal for post-event follow-ups, review requests, and relationship nurturing. **How It Works:** 1. Create a workflow and select First Event Start or Last Event End as the trigger 2. Add email steps with delays relative to the event time (e.g., "2 days before" or "1 day after") 3. Publish the workflow 4. When bookings are created, workflows automatically enroll and schedule based on actual event dates 5. If event times change, workflow emails automatically reschedule [Learn about workflow triggers →](/workflows/triggers) | [View all shortcodes →](/workflows/shortcodes/overview) ## Unified Email Inbox Manage all your lead communications in one place with the new Inbox feature. View and organize Gmail messages synced from your connected accounts, see associated lead information at a glance, and mark emails as done to keep your inbox clean. **Key Features:** * **Thread-Based Organization**: Emails grouped by conversation with participant lists and message counts * **Lead Integration**: Instantly see which leads are associated with each email thread via hover cards * **Multi-Account Support**: Filter by different connected Gmail accounts * **Mark as Done**: Remove emails from your inbox once handled, syncs back to Gmail * **Real-Time Sync**: Email updates and label changes sync automatically with Gmail [Learn more about the Inbox →](/inbox) ## Rich Text Editor for Special Notes Special notes on quotes and events now use a visual rich text editor instead of Markdown. Format your internal notes with bold, italic, headings, lists, links, and dividers using familiar toolbar buttons - no Markdown syntax required. **What's New:** * **Visual Formatting Toolbar**: Format text with buttons instead of typing Markdown * **Full Formatting Support**: Bold, italic, underline, strikethrough, headings (H1-H3), bullet and numbered lists, horizontal rules, and links * **Keyboard Shortcuts**: Press `Cmd+Enter` (Mac) or `Ctrl+Enter` (Windows) to save quickly * **Backwards Compatible**: Existing Markdown notes automatically convert when you edit them Perfect for creating well-organized internal notes with clear structure and formatting. Special notes remain internal-only and are not visible to customers. ## Import Bookings from CSV Save time migrating data or adding historical bookings with the new CSV import feature. Upload up to 100 bookings at once using a simple spreadsheet format, perfect for businesses transitioning from other systems or adding past events to Flashquotes. **What's New:** * **CSV Template**: Download a pre-formatted template with all required fields and example data * **Column Mapping**: Upload your CSV and map columns to Flashquotes fields with auto-matching * **Real-time Validation**: Errors are highlighted before import with specific guidance on fixes * **Background Processing**: Large imports run in the background with progress tracking and detailed results **How It Works:** 1. Download the CSV template from the Import Bookings page 2. Fill in your booking data with event details, client info, and pricing 3. Upload and map your columns to Flashquotes fields 4. Review validation, fix any errors, then import 5. Track progress and view results with success/failure breakdown Imported bookings include all event details, timeline entries, and trigger event brief tasks automatically. Email notifications are not sent during import to avoid duplicate communications. [Learn how to import bookings →](/imports-exports/import-bookings) ## Bulk Apply Admin Tasks to Upcoming Events When you update your admin task templates, apply those changes to all upcoming events with one click. Go to Settings → Tasks → Admin Default Tasks, click the menu icon, and select "Apply to events" to sync your latest task checklist across all future bookings. ## Auto-Invite Staff to Calendar Events Automatically manage Google Calendar attendees when staff is assigned to or removed from events. When enabled, assigned staff members receive calendar invitations via email, ensuring everyone knows about their scheduled events without manual invite management. **Perfect For:** * Teams that need calendar-based event notifications * Ensuring staff have event details in their personal calendars * Eliminating manual calendar invite workflows * Keeping team schedules synchronized automatically [Configure auto-invite settings →](/settings/integrations/google-calendar#auto-invite-staff-to-calendar-events) *** ## Manage Required Questions in Lead Intake Forms Control which questions are mandatory for form submission with a simple toggle. Mark custom questions as required or optional to balance conversion rates with data collection needs. **What's New:** * **Required Toggle**: Easily mark questions as required or optional in the form editor * **System vs User Required**: Some questions are required by Flashquotes and cannot be changed, while custom questions can be toggled * **Smart Validation**: Required questions must be completed before form submission [Learn how to manage required questions →](/forms/lead-intake#required-questions) ## Google Calendar Sync Timing Options Choose whether calendar events sync based on **service time** (customer-facing event hours) or **shift time** (full staff shift including setup, breakdown, and travel). This affects how events appear in your Google Calendar - either showing just the service window or your complete time commitment for each booking. [Configure calendar sync timing →](/settings/integrations/google-calendar#choose-service-time-or-shift-time) ## Shortcodes in Default Quote Email Body Personalize your default quote email body with dynamic shortcodes like `{{lead.first_name}}`, `{{company.name}}`, or `{{quote.event_date}}`. Set your template once and every quote email automatically includes personalized details. Live preview shows how your email renders with real quote data before saving. [Configure quote email settings →](/settings/quotes#quote-delivery) | [View all shortcodes →](/workflows/shortcodes/overview) ## Quote Requested Workflow Trigger Automatically engage leads the moment they submit a quote request through your lead intake forms. The new Quote Requested workflow trigger enrolls leads in customized email sequences immediately after form submission, helping you nurture interest before you even send a formal quote. **What's New:** * **Automatic Enrollment**: Leads who submit your lead intake form are automatically enrolled in Quote Requested workflows * **Customizable Sequences**: Create personalized email templates that send while you're preparing their quote * **Smart Timing**: Engage leads during the critical window between request and quote delivery * **Gmail Integration**: Choose which connected Gmail account sends workflow emails **How It Works:** When a lead submits your intake form, Flashquotes automatically enrolls them in any active Quote Requested workflows. These emails can acknowledge their submission, share your company story, provide helpful planning tips, or build excitement while you prepare their custom quote. **Perfect For:** * Immediate acknowledgment emails confirming quote request receipt * Educational content about your services while leads wait * Building trust and rapport before the first formal quote * Keeping leads engaged during your quote preparation process Quote Requested workflows complement the existing Quote Sent workflows, giving you complete automation coverage from initial inquiry through booking. [Learn about workflow triggers →](/workflows/triggers) [Track enrollments at the workflow level →](/workflows/workflow-enrollments#tracking-enrollments) ## Enhanced Quote Expiration for Last-Minute Bookings Quotes now expire at **midnight the day before the event** instead of at the event start time. This prevents your team from having a last-minute booking without first confirming that you can service the event. **What Changed:** * Event on Oct 27 at 2pm MST → Quote expires Oct 26 at 12am MST (previously expired at 2pm Oct 27) * Expired last-minute quotes now show specialized messaging encouraging customers to contact your team This change automatically applies to all new quotes and better supports last-minute event bookings. ## Workflow Management Enhancements You can now customize workflow sequences to match your sales process: * **Add Steps**: Insert additional follow-up emails at any position in your workflow with custom timing, subject and email body * **Delete Steps**: Remove steps that don't fit your strategy (immediately stops them from sending, even for active workflows) * **Resume Workflows**: Restart stopped workflows from the contact's Workflows tab when leads re-engage [Learn about workflow customization →](/workflows/templates#customizing-your-workflow) ## Sign in with Microsoft Users can now create accounts and sign in using their Microsoft work or personal accounts alongside the existing Google authentication option. ## Gmail Integration Enhancements We've improved the email composer and workflow automation for [Pro/Plus subscribers](https://app.flashquotes.com/settings/plans) with Full Gmail Integration. **What's New:** * **Easily compose new email**: Click the email icon on any contact in the list view to start composing a new message * **Workflow auto-stop on email reply**: When leads reply to emails, active quote follow-up workflows deactivate automatically. This ensures you never send automated follow-ups after a lead has already responded, maintaining a personal touch throughout the sales process. [Learn more about Gmail integration →](/settings/integrations/google-gmail-read) ## Google Calendar Selection Choose exactly which Google Calendar receives your Flashquotes events. No more cluttering your primary calendar - sync events to dedicated event calendars for better organization. **What's New:** * **Calendar Selection**: Choose specific calendars for syncing * **Smart Migration**: Events automatically move when you change calendars * **Per-Location Control**: Different locations can sync to different calendars * **Organized Schedules**: Keep personal and business events separate **Perfect For:** * Keeping Flashquotes events out of personal calendar * Better calendar sharing with team members * Taking advantage of GCal customizations like colors [Set up calendar selection →](/settings/integrations/google-calendar#choose-a-specific-calendar) ## QuickBooks Custom Line Item Mappings Fine-tune your accounting with custom QuickBooks mappings for specific services, add-ons, and service charges. This enhancement gives you granular control over how individual items sync to QuickBooks Online, allowing you to have more flexible accounting treatment for invoice line items. **What's New:** * **Item-Specific Mapping**: Override default mappings for individual services, add-ons, and service charges * **Flexible Accounting**: Map specific items to different QuickBooks items for specialized accounting treatment * **Easy Management**: Add, view, and delete custom mappings directly from QuickBooks settings * **Priority System**: Custom mappings automatically override default line item type mappings [Learn how to set up custom mappings →](/finance/quickbooks-custom-mappings) | [QuickBooks Integration →](/settings/integrations/quickbooks) ## Enhanced Google Integration Suite We've significantly expanded our Google integration capabilities to help you streamline communication and scheduling. Flashquotes now offers a comprehensive Google integration with Gmail and Google Calendar sync. **What's New:** ### Gmail Sending Send quotes directly from your Gmail account to maintain conversation history in one place. Your emails remain in your Gmail inbox and sent folder, creating more personal connections with leads while using your existing email signature and branding. [Learn about Gmail sending →](/settings/integrations/google-gmail-send) ### Full Gmail Integration Sync email activity from your leads directly into Flashquotes activity feeds. See the complete context of customer communications without switching between applications. Email threads automatically link to the correct leads and appear in activity feeds within minutes. [Enable full Gmail integration →](/settings/integrations/google-gmail-read) ### Google Calendar Sync Automatically sync booked events to Google Calendar to maintain a unified view of your schedule. Flashquotes creates calendar events with event details, shift times, location, and links back to event details. Updates in Flashquotes automatically sync to Google Calendar, and you can configure different calendars per location. [Configure calendar sync →](/settings/integrations/google-calendar) Get started by connecting your Google account in [Settings → Integrations](https://app.flashquotes.com/settings/integrations). Learn more in our [Google Integration overview →](/settings/integrations/google) ## Advanced Reporting Analytics We've added three powerful new reports to help you analyze business performance and make data-driven decisions. These visualizations provide deep insights into resource utilization, customer behavior, and revenue patterns. New reports dashboard with service utilization, gratuity analysis, and top clients charts **New Reports:** ### 1. Service Asset Utilization Track daily usage of your core service resources with a visual chart showing: * Booked vs quoted assets over time * Maximum capacity indicators * Peak utilization dates * Helps forecast busy periods and optimize resource allocation ### 2. Average Gratuity Analysis Understand customer tipping patterns with detailed metrics including: * Distribution of gratuity percentages selected * Total gratuity revenue * Average tip amounts * Participation rates * Helps optimize gratuity options and predict tip revenue ### 3. Top Clients by Revenue Identify your most valuable customers with: * Ranked list of top 10 revenue-generating clients * Individual client contribution amounts * Average revenue per client * Helps focus retention efforts and recognize VIP relationships **Business Benefits:** * **Better Forecasting**: Visualize patterns to predict demand * **Revenue Insights**: Understand income sources and concentration * **Resource Planning**: Optimize inventory based on actual usage * **Customer Intelligence**: Focus on high-value relationships [View the Reports documentation →](/reports) *** ## Block Calendar Dates You can now block specific dates to prevent new inquiries and automatically manage existing quotes. This powerful feature helps you manage capacity, holidays, and maintenance periods while keeping your calendar accurate. **Key Features:** * **Prevent New Inquiries**: Blocked dates can't be selected on lead intake forms * **Auto-Expire Quotes**: Open quotes on blocked dates expire automatically * **Bulk Selection**: Block up to 30 dates at once [Learn how to block dates →](/calendar-blocked-dates) ## Improved Quote Expiration Management Demonstration of changing quote expiration dates from the contact details page We've enhanced how expired quotes work to protect your business from outdated pricing while giving you more control over expiration dates. These updates ensure customers always receive current pricing and availability. **What's Changed:** * **Expired Quote Protection**: Customers can no longer book expired quotes, preventing issues with outdated pricing or unavailable dates * **Clear Customer Options**: When viewing expired quotes, customers see options to request a fresh quote or contact your company directly * **Flexible Expiration Control**: Admins can now modify quote expiration dates from three convenient locations: * Contact details page * Quote edit page * Quote view page **Business Benefits:** * **Pricing Protection**: Prevents bookings with outdated rates or discontinued services * **Availability Accuracy**: Ensures dates are verified before booking * **Reduced Disputes**: Eliminates confusion over old pricing * **Extended Opportunities**: Easily extend quotes for leads still in negotiation **Common Use Cases:** * **Extend Active Negotiations**: Give prospects more time while discussions continue * **Reactivate Expired Quotes**: Instantly make expired quotes bookable by setting a future date * **Remove Expiration**: For special clients, remove expiration entirely This update provides better protection for your business while maintaining flexibility to accommodate different sales scenarios. [Learn about managing expiration →](/contacts#managing-quote-expiration-dates) | [Configure quote settings →](/settings/quotes#expiration-settings) | [Handle expired quotes →](/contacts/sending-quotes#handling-expired-quotes) *** ## Enhanced Staffing Calculator Settings The Lead Intake Form Builder now includes reorganized settings and new display options for the staffing calculator, giving you more control over how customers interact with service planning on your forms. **What's New:** * **Visual Counter Toggle**: Choose between an engaging visual staff counter or a simplified text-only display * **Guest Count Increment**: Configure custom increment values (1-100) for the guest count +/- buttons * **Reorganized Settings**: Cleaner layout with sections for Service Length, Guests and Staffing, and Display Options * **Smart Collapsing**: The staff counter settings automatically collapse when the visual counter is disabled These improvements make it easier to customize the staffing calculator to match your brand and customer preferences. The visual counter helps justify pricing by showing customers exactly how many team members will serve their event, while the text-only mode provides a cleaner alternative for businesses preferring a minimalist approach. [Learn about staffing calculator configuration →](/forms/staffing-calculator) | [View lead intake form settings →](/forms/lead-intake#staffing-calculator-configuration) ## Share Links & Hosted Forms Create shareable, Flashquotes-hosted versions of your lead intake forms perfect for social media, Instagram link-in-bio, and QR codes. No website or embedding required - just share your link and start collecting leads instantly. Share Links Feature **What's New:** * **Hosted Form Pages**: Professional landing pages at short URLs (e.g., app.flashquotes.com/f/abc123) * **Instagram Ready**: Perfect for link-in-bio with mobile-optimized design * **Social Sharing**: One-click sharing to X, Facebook, Instagram, SMS, and email * **QR Code Generation**: Create QR codes for print materials and offline marketing * **Customizable Headlines**: Personalize your form's headline and subheadline * **Brand Integration**: Automatic company logo and brand color display Access these features from the new **Publish** tab in your form editor. [Learn how to create share links →](/forms/share-links) ## Quick Access to Stripe Payment Receipts Admins can now instantly access official Stripe payment receipts directly from the payments table. This quality-of-life improvement makes it easier to share receipts with clients and handle accounting tasks. **What's New:** * **Receipt Links**: A new "Receipt" link appears next to payment details in the payments table * **One-Click Access**: Opens the official Stripe receipt in a new tab for easy printing or sharing This feature streamlines payment documentation workflows, eliminating the need to log into Stripe separately to retrieve receipts. [Learn more about viewing payment receipts →](/finance/stripe-receipts) ## CSV Export for Contacts and Bookings Export your business data to CSV format for powerful integrations with marketing platforms, analytics tools, and accounting software. This new feature enables seamless data portability for both contacts and bookings. **Key Features:** * **One-Click Export**: Export up to 1,000 records instantly from the contacts or bookings page * **Comprehensive Data**: Includes all fields, custom form responses, and calculated metrics * **Marketing Ready**: Perfect for email automation platforms like Mailchimp or Klaviyo * **Ad Optimization**: Upload to Google Ads for conversion tracking and audience building * **RFC 4180 Compliant**: Industry-standard CSV format works with all major tools **Contact Export Includes:** * Contact information and source tracking * Quote history and conversion status * Event details and requirements * Activity tracking and assignments **Booking Export Includes:** * Complete client and event details * Financial data including payments and balances * Resource assignments and timelines * Custom form field responses **Common Use Cases:** * **Email Marketing**: Re-engage unconverted leads with targeted campaigns * **Google Ads**: Track conversions and create lookalike audiences * **Business Analytics**: Analyze trends in Excel or BI tools * **Accounting**: Reconcile bookings with QuickBooks * **Operations**: Plan resource allocation and staffing The export feature respects your active filters, allowing you to export specific date ranges, statuses, or segments. Files are UTF-8 encoded and compatible with Excel, Google Sheets, and all major data platforms. Access the export feature from the toolbar on your [Contacts](https://app.flashquotes.com/contacts) or [Bookings](https://app.flashquotes.com/bookings) page. ## Service Charges: Automated Fees & Gratuity Streamline your pricing with Service Charges - automatically add percentage or flat fees to quotes and invoices. Perfect for service fees, gratuity, corkage fees, and other standard charges that apply across your business. **Key Features:** * **Flexible Pricing**: Configure percentage-based (e.g., 20% gratuity) or flat amount charges * **Auto-Apply Options**: Set charges to automatically appear on all new quotes * **Tax Configuration**: Mark charges as taxable or non-taxable based on your needs * **Smart Application**: Charges apply to all line items except gratuity itself * **Full Visibility**: Displays clearly across quotes, booking forms, and invoices **How It Works:** 1. Create service charges in Settings → Service Charges 2. Auto-applied charges appear on new quotes automatically 3. Manually add or remove charges when editing quotes 4. Charges carry through to invoices when bookings are confirmed 5. Customers see transparent pricing at every step **Common Use Cases:** * **20% Gratuity**: Auto-apply to all quotes as a taxable percentage * **Service Fee**: 10% operational charge for event coordination * **Corkage Fee**: \$75 flat fee for BYOB events * **Setup Fee**: Fixed charge for equipment preparation Service charges integrate seamlessly with your existing workflow - they respect tax settings, work with discounts, sync to QuickBooks, and display beautifully in the quote template. Configure your service charges in [Settings → Service Charges](https://app.flashquotes.com/settings/service-charges). ## Personalized Quote Email Subject Lines Quote Settings page showing Email Settings tab with subject line editor containing shortcodes Transform your quote emails with personalized subject lines that automatically include your lead's information. This new feature helps you create more engaging, personalized email subjects that can significantly improve open rates and engagement. **Key Features:** * **Lead-Specific Shortcodes**: Use `{{lead.first_name}}`, `{{lead.full_name}}`, `{{lead.company_name}}`, and more * **Real-Time Preview**: See exactly how your subject line will appear with actual lead data * **Default Customization**: Set a personalized default subject line in your quote settings * **Individual Override**: Still edit subject lines when sending individual quotes **Example Subject Lines:** * `☕ {{lead.first_name}}, your quote is ready!` * `✨ {{lead.full_name}}, review your quote and book online in minutes!` The system automatically processes these shortcodes when sending quotes, replacing placeholders with actual lead information. This creates a more personal connection with your leads and can help improve email open rates. Configure your personalized subject lines in [Quote Settings → Email Settings](https://app.flashquotes.com/settings/quotes?tab=email). ## Drag & Drop Line Item Reordering Admins can now reorder quote line items with simple drag and drop functionality. Quickly reorganize services, add-ons, and custom items to present your quotes in the most logical order for your clients. ## Service Days Editor: Multi-Day Quote Management Service Days editor interface showing multiple service days with date and time inputs Create complex multi-day quotes with our new Service Days editor. Add multiple dates and times to a single quote, perfect for wedding weekends, corporate events, and festivals. **Key Features:** * **Inline Editing**: Edit dates and times directly in the quote editor * **Flexible Scheduling**: Different start/end times for each service day * **Automatic Events**: Each service day becomes a separate event when booked * **Timezone Aware**: All times handled in your location's timezone **Perfect For:** * Wedding weekends (setup, ceremony, breakdown) * Corporate events (setup, main event, teardown) * Festivals and multi-day celebrations * Installations with multiple phases When clients book quotes with service days, each day automatically becomes a separate event in your booking system, making complex scheduling simple to manage. Learn more in our [Service Days guide](/contacts/service-days). ## SMS Opt-in Collection Many CRMs and SMS automation tools require explicit consent before sending text messages. Flashquotes now helps you capture that consent during lead intake, keeping you compliant while expanding your communication channels. SMS opt-in checkbox on lead intake form Add a checkbox asking "Can we text you?" with customizable consent language. Leads who opt in display a green "SMS" badge in your dashboard. [Learn more →](/forms/sms-opt-in) ## Stripe Payouts Dashboard Monitor and manage your Stripe payouts directly from Flashquotes. The new Payouts dashboard shows exactly when customer payments will be deposited to your bank account, helping you better plan cash flow and reconcile deposits. You can also access instant payouts for immediate access to funds when needed. Learn more in our [Payouts documentation](/finance/payouts). ## Modern Quote Template for Higher Conversions Quote template customer experience showing modern e-commerce inspired design Transform your quote presentation with our modern quote template that brings e-commerce best practices to your service business. This conversion-optimized experience is designed to turn more leads into paying customers through trust-building features and strategic psychology. Key features include: * **Rich Photo Galleries**: Showcase up to 8 high-quality images to build trust and demonstrate your service quality * **Social Proof Integration**: Display customer reviews, star ratings, and testimonials prominently to increase booking confidence * **Dynamic Add-on Selection**: Enable customers to customize their packages with strategic upsells that boost average order value * **Real-time Availability Indicators**: Create urgency with live availability status to reduce cart abandonment * **Mobile-Optimized Design**: Professional, responsive layout that looks stunning on all devices * **E-commerce Style Checkout**: Modern booking flow that customers recognize and trust The template is fully customizable through an intuitive visual editor, allowing you to configure galleries, testimonials, and add-ons to match your brand and service offerings. Ready to boost your booking rates? Learn how to configure your quote template in our comprehensive [setup guide](/contacts/quote-view). ## Team Member Roles and Permissions Team member management interface showing role selection We've enhanced our team management system with flexible role-based permissions. Now you can invite team members with different access levels to help manage your business while maintaining control over sensitive financial data. Key features include: * **Admin Role**: Full access to all features including aggregate financial data, member management, and company settings * **Member Role**: Full access to all features except aggregate financial data (revenue totals, payment statistics) * **Role Selection**: Choose the appropriate role when inviting new team members * **Role Management**: Admins can promote or demote members between roles as needed * **Financial Data Protection**: Members can still see individual invoice amounts and booking details, but not aggregate financial statistics This feature helps you collaborate with team members while maintaining appropriate access controls. Members can handle day-to-day operations like managing bookings and invoices, while admins retain access to financial reporting and member management. Learn more about team roles and permissions in our [team management guide](/settings/members). ## Real-Time Availability in Lead Intake Forms Calendar showing availability indicators with green and yellow dots We're excited to introduce real-time availability indicators in your lead intake forms. This feature helps set clear expectations with potential customers from the start and saves you time by reducing inquiries for dates when you're already fully booked. Key benefits include: * **Visual date indicators:** Green and yellow dots instantly show customers your availability status * **Clear messaging:** After selecting a date, customers receive straightforward availability notifications * **Automatic updates:** Availability updates in real-time based on your blocked dates and resource capacity * **Resource optimization:** Better manage your team and equipment allocation across events The system intelligently combines your blocked dates and existing bookings to determine availability status for each date, creating a more transparent booking experience. Learn more about this feature in our [Real-Time Availability](/forms/real-time-availability) documentation. ## Instant Quoting Lead Intake Form showing the new Instant Quoting toggle Transform your lead conversion process with our powerful new Instant Quoting feature. Now you can automatically generate and present quotes to clients immediately when they submit your lead intake form, enabling them to book instantly without any back-and-forth communication. Key features include: * **Instant Quote Generation**: Automatically calculate and present quotes using your configured pricing rules * **Immediate Booking**: Clients can review and book quotes instantly upon form submission * **Seamless Experience**: Direct redirect from form submission to quote presentation * **Flexible Control**: Choose between manual review or instant quoting modes * **Pro Plan Feature**: Available exclusively for [Flashquotes Pro](https://app.flashquotes.com/settings/plans) subscribers The system uses your existing instant pricing configurations to generate accurate quotes automatically, maintaining consistency while dramatically reducing the time from inquiry to booking. Learn more about Instant Quoting in our documentation: * [Instant Pricing & Quoting Guide](/contacts/instant-pricing) * [Lead Intake Form Configuration](/forms/lead-intake) * [Quote Settings](/settings/quotes) ## Automated Invoice Reminders Invoice reminder settings showing the automated reminder schedule Never chase payments manually again! We've added automated invoice reminders that help ensure timely payments from your clients with minimal effort on your part. Key features include: * **Preset reminder schedule** with emails sent 1 day before due date, on the due date, and 2 days after * **Email preview** option to review all reminder templates before they're sent * **Toggle control** to easily enable or disable automated reminders This feature complements the existing manual reminder capabilities, giving you a comprehensive system for payment follow-up that saves time while improving cash flow. Learn more about this feature in our [Invoice Reminders](/invoices/reminders) documentation. ## Automated Lead Follow-up with Workflows Quote sending modal showing the new workflow enrollment toggle Transform your lead follow-up process with our powerful new Workflows feature. Now you can automatically nurture leads with perfectly timed, personalized email sequences that help convert more quotes into bookings. Key features include: * **Smart Email Sequences**: Pre-configured follow-up templates based on industry best practices * **Dynamic Content**: Automatically insert quote details, lead information, and company data using shortcodes * **Easy Enrollment**: One-click workflow enrollment when sending quotes * **Full Visibility**: Track active workflows, scheduled emails, and lead engagement from both quote and contact views * **Flexible Control**: Stop workflows automatically upon booking or manually when leads engage The system intelligently handles multi-quote scenarios and automatically stops follow-ups when leads book, ensuring a professional experience throughout the sales process. Learn more about Workflows in our documentation: * [Workflows Overview](/workflows/overview) * [Customizing Templates](/workflows/templates) * [Managing Enrollments](/workflows/workflow-enrollments) * [Understanding Triggers](/workflows/triggers) ## Instant Pricing Pricing Configuration UI showing automated price calculation settings Save time and ensure consistent pricing with our new Instant Pricing feature. Now you can set up automatic price calculations for your services based on: * Base service price * Hourly rates per staff member * Per-guest pricing * Minimum price thresholds When leads submit your intake forms, Flashquotes automatically generates draft quotes using your predefined pricing rules. This ensures consistent pricing across your business while still giving you the flexibility to review and adjust quotes before sending them to clients. Check out our [Instant Pricing guide](/contacts/instant-pricing) to learn how to set up automated pricing for your services. ## Team Member Invitations Bring your whole admin team onto Flashquotes with our new invitation system. You can now easily invite team members to join your company workspace directly through the platform. Head to Settings → Members to invite new users, manage pending invitations, and control user roles. Each invitation includes a secure, unique link that lets new users quickly join your workspace. Note: You only need to invite admins to your workspace. Event staff can see everything they need without a Flashquotes account. Check out our [team management guide](/settings/members) to learn more about inviting and managing team members. ## Enhanced Quote Analytics Track your lead engagement more effectively with our enhanced quote analytics. In addition to email open tracking, you can now monitor two crucial conversion metrics: * Quote page views * "Book Now" button clicks These metrics appear as colored badges on both your Pipeline and quote details pages, making it easy to identify your hottest leads at a glance. Use these insights to time your follow-ups perfectly and focus on leads showing the strongest booking intent. Check out the [quote analytics documentation](/contacts/sending-quotes#tracking-quote-performance) to learn more about using these new metrics. ## Event Reminders for Staff Reminders feature showing pink pill badges and warning banner Keep your staff informed with our new Reminders feature. Tag events with important flags that appear prominently in both event details and event briefs. Whether it's equipment requirements, safety precautions, or special client requests, reminders ensure critical information is never overlooked. Create company-wide standard reminders or add custom ones for specific events. A warning banner at the top of event briefs ensures staff members are immediately aware of important details before starting their shift. Learn more about using Reminders in our [detailed documentation](/events/reminders). ## Send Quotes from Your Gmail Account Gmail integration settings Connect your business Gmail account to send quotes directly from your own email address. This integration creates a more personal experience for your clients, as they'll receive quotes from your familiar business email. Your quotes maintain all their interactive features while appearing more personalized in your client's inbox. To get started, visit [Google Integrations](https://app.flashquotes.com/settings/integrations) in your settings to connect your Gmail account. ## Email Analytics & Engagement Tracking Email analytics dashboard showing quote engagement Track how leads interact with your quotes through our new email analytics feature. On the Pipeline, look for the eye icon next to sent quotes to instantly see how many times each quote has been viewed. For deeper insights, click into any sent quote to access a detailed activity timeline showing: * Total email opens and unique views * First and last open timestamps * Complete chronological feed of all quote interactions This visibility helps you time your follow-ups perfectly and focus on your most engaged leads. Check out the [email analytics docs](/contacts/sending-quotes#tracking-quote-performance) for more details. ## Customizable Quote Emails Customizable quote emails You can now fully edit the subject and body text of quote emails, allowing for more personalized messaging and branding. Whether you want to add a friendly touch, emphasize urgency, or tailor the language to your audience, you now have the flexibility to craft emails that resonate with your clients. You can set a permanent default for the email body text in [Quote Settings](https://app.flashquotes.com/settings/quotes). ## New Multi-Select Question Type Multi-select question type We've added a multi-select question type to Booking forms, allowing clients to choose multiple options in a single response. This is especially useful for event packages, customer flavor choices, etc. Find this under Forms → Booking Forms → Add Question. ## Copy Quotes with One Click You can now copy any existing quote with a single click, making it easier to create new quotes based on past proposals. This is perfect for businesses with repeat clients or standard pricing structures. Simply find the "Copy" option in the quote actions menu. ## In-App AI Help Chat We've integrated Mintlify's AI-powered help chat directly into the app, making it easier than ever to get real-time assistance without leaving your workflow. Whether you need guidance on features, troubleshooting help, or best practices, our AI chat assistant is available to provide quick answers. Try it out by clicking the Get Help icon in the bottom right corner of the Flashquotes dashboard. ## QuickBooks Online Integration QuickBooks integration settings [Pro plan](https://app.flashquotes.com/settings/plans) customers can now sync their financial data with QuickBooks Online. The integration automatically creates customers, invoices, payments, and deposits in QuickBooks, with configurable account mappings and tax codes. Payments are synced in real-time, including proper handling of sales tax and processing fees. The integration maintains your QuickBooks data structure while ensuring accurate financial reporting. For more details, check out the [QuickBooks integration docs](/settings/integrations/quickbooks). ## Service Area Configuration Define your service radius to automatically validate event addresses during quote submission. The system checks addresses in real-time against your specified radius. For events outside your service area, a warning banner notifies the client that additional travel fees may apply. Your service area is defaulted to 150 miles, but you can change this in **[Quote Settings](https://app.flashquotes.com/settings/quotes)**. ## Lead Intake Form Settings Enhanced form settings interface New configuration options include service duration limits, maximum staff counts, and custom redirect URLs after form submission. You can also customize the staff photos and descriptions in the lead intake form. Form questions can now be fully customized. The system automatically generates optimized default forms for new accounts based on conversion data. For more details, check out the [lead intake form docs](/forms/lead-intake). ## Zapier Integration Expansion New Zapier trigger options Three new Zapier triggers enable deeper workflow automation: * **Quote form submission trigger** Send new leads directly to your CRM to streamline lead management. * **Event timeline trigger** Keep your calendars synchronized with this new trigger which fires whenever event schedules change. * **Staff assignment trigger** Automatically notify team members when they're assigned to events. Read more about Zapier integration [here](/settings/integrations/zapier). ## Lead Intake Forms v2 New lead form interface with branding options Lead intake forms are now fully customizable while maintaining high conversion rates. Find pre-configured forms under **Forms > Lead Intake Forms**, complete with proven questions and your brand colors automatically applied. Platform-specific embed instructions make it simple to add forms to any website, whether you're using Webflow, Squarespace, WordPress, or other platforms. All leads flow directly into your Flashquotes dashboard for immediate follow-up. Read more about lead intake forms [here](/forms/lead-intake). ## Enhanced Quote Customization New quote editor interface with live preview The quote editor now features a live preview as you build, showing exactly how your quote will appear to clients. Customize the hero text at the top of your quotes using markdown formatting for **bold** statements and embedded links. For more details, check out the [quote page docs](/contacts/quote-view). Brand your quotes with custom hero images for each quote or set a default in company settings. Your brand colors now extend throughout customer-facing pages - set your signature color in **Settings > Branding** to have buttons and icons match your visual identity. Check out the [branding docs](/settings/branding) for more details. ## Quote Calendar Calendar showing both confirmed and potential bookings Your calendar now displays both confirmed bookings and potential events from quotes. Quoted events appear with dotted borders, giving you a complete view of upcoming business - both confirmed and potential. ## Sales Tax Reporting Sales tax report showing monthly breakdown Managing sales tax across multiple jurisdictions is now simpler with our new automated tax reporting. Access comprehensive tax summaries in the [Sales Tax report](/reports/sales-tax) (now found under **Reports**) to see your total sales, taxable amounts, and taxes owed. The report breaks down tax data by rate, making it easy to handle different tax jurisdictions. All payment data in Flashquotes automatically flows into these reports, ensuring your numbers are always current. Need historical data? Filter the report by different time periods, from last month to year-to-date, to get exactly the information you need for tax remittance. ## Resource Selection in Booking Forms Resource selection interface in booking form Let clients choose their preferred cart directly in your booking form with our new Resource Select question type. The form shows only carts available for the selected event date, complete with photos and descriptions you can customize in the resource settings. When a booking is confirmed, the selected cart is automatically assigned to the event, streamlining your workflow and ensuring clients get exactly the setup they want. ## Native email sending Email sending modal Now you can fire off **quote emails** directly from the quote page. Client quote emails include a link to the quote presentation page and the Book Now button. Click the new "Copy share link" button if you still want to copy/paste the quote link into a separate email. You can also send **invoice reminders** to clients with a single click. Preview the email before sending to ensure it looks great. Emails are branded with your logo and include a direct link to pay. # Contacts Source: https://docs.flashquotes.com/contacts Everyone you've quoted or booked, in one place ## Overview The Contacts page is your client directory — everyone you've quoted or booked, in one place. New contacts are created automatically when someone submits your [lead intake form](/forms/lead-intake), or you can add them yourself with **New contact**. Where the [Pipeline](/pipeline) tracks quotes, Contacts tracks people: each contact holds the client's details, every quote and booking tied to them, and your full communication history. ## Creating a contact 1. Go to the [Contacts](https://app.flashquotes.com/contacts) page 2. Click **New contact** and enter the contact's details 3. Choose how you want to continue: * Click **Create and add quote** to save the contact and start a quote for them * If you only want to add the contact, click the dropdown arrow next to **Create and add quote** and select **Create and finish** ## The contacts table The table shows each contact's name and company, email and phone (hover to copy either with one click), quote and booking counts, last activity, source, owner, and created date. It's sorted by created date by default, so your newest contacts are on top. You can sort by any column except last activity, which displays the date but isn't sortable. * **Search** by name, email, or phone number * **Filter** by created date range, source, or owner * **Export CSV** downloads your contacts honoring whatever filters and search are active Click any row to open the contact's detail page. ## Contact details Each contact page keeps the client's info in a details panel and organizes everything else into tabs: * **Activity** — a unified, chronological feed of everything that's happened: notes, emails sent and received, quote status changes, and workflow actions. Skim it to catch up before reaching out — no need to check each tab separately. * **Quotes** — create and manage quotes for this contact * **Bookings** — confirmed bookings tied to this contact * **Emails** — email threads with the contact * **Notes** — add and search notes about the contact * **Workflows** — view and manage active workflow enrollments ### Notes Use notes to log context, follow-up reminders, or anything worth remembering. 1. Open the **Notes** tab and click **Add Note** 2. Write your note using the rich text editor 3. Click **Save** Pin important notes to keep them at the top of the list, and use the search bar to filter notes by keyword. ### Contact owner assignment Assign contacts to specific team members for better accountability and follow-up tracking. Open a contact, click **Edit** in the header, and pick a team member as the owner. The owner appears in the contacts table and on [Pipeline](/pipeline) cards, and both pages can filter by owner so each teammate can work their own book. ## Managing quote expiration dates Admins can change individual quote expiration dates to extend opportunities or accommodate special circumstances. Step-by-step demonstration of changing quote expiration dates from the contact details page You can modify quote expiration from the contact's **Quotes** tab, the quote edit page, or the quote view page. * **Extend** a quote that's about to expire while a client decides * **Reactivate** an expired quote by setting a future date — it becomes bookable again immediately * **Remove** the expiration entirely for special situations Expired quotes cannot be booked. Clients see a message prompting them to request a new quote or contact you directly. ## Best practices 1. Respond to new contacts promptly — sending a quote within the first hour of inquiry dramatically improves your chance of winning the booking 2. Keep contact information current 3. Use notes and the activity feed to track communication history 4. Assign owners so follow-ups never fall through the cracks ## Next steps * [Work your open quotes in the Pipeline](/pipeline) * [Create quotes](/contacts/quotes) * [Send quotes](/contacts/sending-quotes) # Flashquotes AutoDraft Source: https://docs.flashquotes.com/contacts/autodraft Automatically pre-build draft quotes from every lead # Flashquotes AutoDraft Save time with Flashquotes AutoDraft - automatically pre-build draft quotes from your leads. Instead of starting from scratch, you'll review and send pre-built quotes in seconds. This works for manual quoting (not instant quotes). Perfect when you want consistent pricing but need to review each quote before sending. ## Set up AutoDraft ### 1. Create your default service Go to [Services](https://app.flashquotes.com/services) and create your primary service offering. Set your base pricing and service details. This becomes the foundation for every AutoDraft quote. [Learn about services →](/services) ### 2. Add your common add-ons Go to [Add-ons](https://app.flashquotes.com/services?tab=addons) (under **Services & items**) to create extras you frequently offer (delivery, setup, additional hours). Set pricing for each. [Configure add-ons →](/services/add-ons) ### 3. Configure your form's default service Open your lead intake form and click the "Instant Pricing" button. In the pricing settings modal, select your default service in the "Fallback Service" dropdown. This service will be used for all AutoDraft quotes from this form. [Set up lead intake forms →](/forms/lead-intake) ## What happens next When new leads come in through this form, AutoDraft creates a draft quote with your default service. You can add/remove services, adjust pricing, then send. ## Troubleshooting AutoDraft * **No draft quotes appearing**: Check that you selected a fallback service in your form's instant pricing settings * **Wrong pricing showing**: Verify your selected service has current pricing configured * **Missing add-ons**: Add-ons aren't auto-applied - add them to individual quotes as needed Need help with instant quotes instead? See our [instant quote setup guide](/contacts/instant-pricing). # Booking Flow Source: https://docs.flashquotes.com/contacts/booking-flow Configure how customers complete their booking after accepting your quote ## Overview The Booking Flow controls how customers complete their booking after accepting your quote. Configure which booking form collects customer information and which payment terms apply directly from the quote editor. Booking Flow section showing booking form selection and payment terms configuration ## How It Works The booking flow consists of three steps: 1. **Booking Form** - The form customers complete when booking (required) 2. **Contract** - Digital contract signing (Plus/Pro) 3. **Payment Terms** - How and when payments are collected ## Payment Terms Payment terms define your payment schedule for each quote. Select from your configured options or create new terms directly from the quote editor. ### Selecting payment terms Scroll to the **Booking Flow** section in the quote editor. Click the Payment Terms dropdown to choose from your configured options. Click **Add new payment terms** to create custom terms directly from the quote editor. ### Payment Schedule Types **Best for:** Events that require complete payment upfront **How it works:** * Clients pay 100% of the quote total when booking * No additional payments needed **Configuration options:** * No additional configuration needed * Clients will be charged the full quote amount at booking **Best for:** Events that require an upfront deposit to secure the booking **How it works:** * Clients pay a deposit amount when booking * Remaining balance is invoiced and due before the event * If the balance due date has already passed when the client books, the full amount is due at booking * Clients can choose to **pay the full balance today** instead of just the deposit **Configuration options:** * **Deposit Type:** Choose between: * **Fixed Amount:** Set a specific dollar amount (e.g., \$500) * **Percentage:** Set a percentage of the total quote (e.g., 25%) * **Deposit Amount:** Enter the fixed dollar amount or percentage value * **Balance Due:** Set when the remaining balance is due (days before/after event) **Pay full balance option:** When booking with a deposit schedule, customers see a "Pay full balance today" checkbox on the booking form. Toggling it charges the full invoice amount due in a single transaction — no later balance payment needed. **Best for:** Corporate clients or situations where payment is handled through traditional invoicing **How it works:** * No payment collected through Flashquotes at booking * Booking is confirmed without payment * Invoice is generated and sent to the client **Configuration options:** * **Invoice Due:** Set when payment is due (days before/after event) **Best for:** Events where you want to authorize a card for later charges **How it works:** * Client's card is authorized but not charged at booking * Card is charged by you when you're ready to collect payment * Invoice is generated with the payment due date **Configuration options:** * **Invoice Due:** Set when payment is due (days before/after event) ### When the balance deadline has passed The balance due setting is calculated from the event date, even when a client books close to the event. If that deadline has already passed, Flashquotes requires all currently due payments at booking. The client is therefore asked for the full amount instead of only the deposit. Collecting the balance during booking prevents the new invoice from being overdue as soon as it is created. It also means the booking is confirmed with the required payment already collected, so you do not have to chase down a remaining balance whose due date has passed. For example, suppose the payment terms require a deposit at booking and the remaining balance **7 days before the event**. If the client books **3 days before the event**, the balance deadline passed 4 days earlier, so the full amount is due when they book. This is expected for last-minute bookings. To collect only a deposit, select payment terms whose balance deadline is still in the future for that event. ### Editing Payment Terms Click the **Edit** button next to any payment terms option to modify: * Payment schedule type * Deposit amount or percentage * Invoice due timing * Set as company default Changes to payment terms apply to all quotes using those terms. ## Default Payment Terms Set a default payment terms to automatically apply to all new quotes. Click the Payment Terms dropdown in any quote's Booking Flow section. Click **Edit** next to the payment terms you want as default. Toggle **Set as company default** and save. Your default payment terms will apply to all new quotes. You can always change the payment terms on individual quotes. ## Using Multiple Payment Terms Different client types often require different payment terms: Invoice only with payment due after the event 25-50% deposit required upfront Full payment upfront ### Common Scenarios **Standard:** 25% deposit to secure date, balance due 2 weeks before event **Premium:** 50% deposit for peak season dates **Standard:** Invoice only, due 30 days after event **New Clients:** Full payment required for first booking ## Contract Add digital contracts to your booking flow. Customers review and sign contracts electronically before payment. ### Assigning a contract 1. Click the Contract dropdown in the Booking Flow section 2. Select a contract template 3. Click **Edit** to modify the contract 4. Toggle **Set as default** to auto-assign to new quotes Contracts appear after customers fill out the booking form but before payment. Customers must complete all signature blocks before proceeding to payment. Plus subscribers can create up to 2 contract templates. Pro subscribers get unlimited templates. [Learn more about contracts →](/templates/contracts/overview) ## Booking Form The booking form collects customer information when they book. Select from your configured booking forms or edit them directly from the dropdown. ### Selecting a booking form * Click the Booking Form dropdown to see available forms * Forms marked "Default" are automatically selected for new quotes * Click **Edit** to modify form questions * Click **Go to forms** to manage all forms Configure your booking forms in [Forms settings](/forms/booking). ### Event address requirement The booking form's event address question (linked to the built-in `eventAddress` field) requires a complete, dispatchable address before customers can advance. Clicking **Next** does nothing and an inline message appears under the field until the address includes: * **A street** — a street number and name (`123 Main St`). A venue name stands in for the street when the address has three or more comma-separated parts (`Fort Mason, San Francisco, CA 94109`) * **A locality** — city or town * **A state or postal code** — a state or province (US, CA, AU) or a postcode (UK, IE), based on your company's country The event address is prefilled from the quote. Because the lead intake form still accepts free text (for example, "Paris" or "France"), customers may need to complete a partial address before booking. Custom Address questions that aren't linked to `eventAddress` continue to accept free text. ## Best Practices Use descriptive names that indicate the payment schedule: * "25% Deposit - Balance Due Before Event" * "Full Payment Upfront" * "Corporate Net 30" * "Card on File - Due Day Before" * "Payment Terms 1" * "Option A" * "New Terms" Create payment terms that match your common scenarios: * Regular clients who know your payment terms * New clients who might need flexible options * Corporate clients with procurement processes * Last-minute bookings requiring immediate payment * Choose your most common payment schedule as the default * This saves time when creating quotes * You can always override on individual quotes * Use larger deposits for expensive events * Require full payment for last-minute bookings * Consider card on file for recurring clients ## Troubleshooting Yes! You can change payment terms on any unsent or sent quote. Navigate to the quote, update the payment terms in the Booking Flow section, and the quote will reflect the new terms. * For percentage deposits, verify the percentage is entered correctly (e.g., 25 not 0.25) * Check that the quote total is accurate * Check whether the balance due date has already passed. When it has, the full amount is due at booking. * Edit the payment terms to adjust the deposit amount * Make sure you have at least one payment terms configured * Check that payment terms aren't deleted * Try creating a new payment terms from the dropdown Refunds are processed based on what the client has actually paid, regardless of the original payment terms. ## Next Steps * [Create quotes](/contacts/quotes) * [Send quotes](/contacts/sending-quotes) * [Configure booking forms](/forms/booking) # Instant Pricing & Quoting Source: https://docs.flashquotes.com/contacts/instant-pricing Learn how to configure automatic price calculations and instant quoting for your services ## Overview Instant Pricing and Quoting automatically calculates service quotes based on predefined pricing rules, saving time and ensuring consistent pricing across your lead intake forms. With Instant Quoting enabled, clients can receive and book quotes immediately upon form submission. ## Video Tutorial Watch this step-by-step guide on setting up Instant Quoting: