Skip to main content
GET
List Quotes
Return a paginated list of quotes for your company. Each quote includes the same base fields and live totalPriceCents as Get Quote. Use your x-api-key with public API access. These endpoints require Scale or an eligible Grandfathered Pro plan.
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

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.
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:

Equality filters

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

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.
Use the Get Quote expansion paths, prefixed with data. on every path:
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. 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

For example, limit=101 returns:

Authorizations

x-api-key
string
header
required

API key for authentication

Query Parameters

limit
integer
default:10

Page size, from 1 to 100. Defaults to 10.

Required range: 1 <= x <= 100
starting_after
string

ID of the last quote in the previous page. The cursor must be accessible and match all supplied filters; otherwise the response is an empty page with hasMore false. Keep filters unchanged between pages.

lead_id
string

Filter by exact contact ID.

location_id
string

Filter by exact location ID.

booking_id
string

Filter by exact booking ID.

event_type_id
string

Filter by exact event type ID.

created_at[gt]
string<date-time>

Filter quote creation time: strictly after this ISO 8601 datetime. Include a timezone (Z or ±HH:MM); bare dates are rejected.

created_at[gte]
string<date-time>

Filter quote creation time: at or after this ISO 8601 datetime. Include a timezone (Z or ±HH:MM); bare dates are rejected.

created_at[lt]
string<date-time>

Filter quote creation time: strictly before this ISO 8601 datetime. Include a timezone (Z or ±HH:MM); bare dates are rejected.

created_at[lte]
string<date-time>

Filter quote creation time: at or before this ISO 8601 datetime. Include a timezone (Z or ±HH:MM); bare dates are rejected.

updated_at[gt]
string<date-time>

Filter quote row update time (not a complete financial change feed): strictly after this ISO 8601 datetime. Include a timezone (Z or ±HH:MM); bare dates are rejected.

updated_at[gte]
string<date-time>

Filter quote row update time (not a complete financial change feed): at or after this ISO 8601 datetime. Include a timezone (Z or ±HH:MM); bare dates are rejected.

updated_at[lt]
string<date-time>

Filter quote row update time (not a complete financial change feed): strictly before this ISO 8601 datetime. Include a timezone (Z or ±HH:MM); bare dates are rejected.

updated_at[lte]
string<date-time>

Filter quote row update time (not a complete financial change feed): at or before this ISO 8601 datetime. Include a timezone (Z or ±HH:MM); bare dates are rejected.

service_start_time[gt]
string<date-time>

Filter service-day start time; at least one day must satisfy all supplied bounds: strictly after this ISO 8601 datetime. Include a timezone (Z or ±HH:MM); bare dates are rejected.

service_start_time[gte]
string<date-time>

Filter service-day start time; at least one day must satisfy all supplied bounds: at or after this ISO 8601 datetime. Include a timezone (Z or ±HH:MM); bare dates are rejected.

service_start_time[lt]
string<date-time>

Filter service-day start time; at least one day must satisfy all supplied bounds: strictly before this ISO 8601 datetime. Include a timezone (Z or ±HH:MM); bare dates are rejected.

service_start_time[lte]
string<date-time>

Filter service-day start time; at least one day must satisfy all supplied bounds: at or before this ISO 8601 datetime. Include a timezone (Z or ±HH:MM); bare dates are rejected.

expand[]
string[]

Every path must start with data. Repeat expand[] or use comma-separated paths. A nested path includes its parents; unrequested siblings stay absent. Maximum 20 distinct paths per request and four segments, excluding data. Unknown or malformed paths return 400. Allowed paths: data.lead, data.location, data.eventType, data.services, data.addons, data.discounts, data.taxRate, data.paymentTerms, data.serviceCharges, data.serviceDays, data.contract, data.booking, data.booking.lead, data.booking.eventType, data.booking.invoices, data.booking.events, data.booking.events.location, data.booking.events.services, data.booking.events.staff, data.booking.events.addons, data.booking.events.resources, data.booking.events.booking, data.booking.events.booking.lead, data.booking.events.booking.eventType, data.booking.events.booking.invoices, data.booking.events.booking.events.

Response

Paginated quotes. No matches or an unusable cursor returns data: [] and hasMore: false.

object
enum<string>
required
Available options:
list
url
enum<string>
required
Available options:
/api/quotes
hasMore
boolean
required

Whether more pages exist. Pass the last returned quote ID as starting_after to retrieve the next page.

data
object[]
required