Get one event
The whole event: the scalar fields the list returns, plus description (HTML), links, imageUrls (download
URLs for attached storage), and the event’s groups with the items inside them. This is the only read that
returns an event’s contents, so it is what an integration mirrors a quote from.
The heavy parts cost real work to assemble, so fields pays here: omitting groups skips loading the lines
and the variants, products and suppliers behind them, and omitting imageUrls skips a storage lookup per
image.
Errors
404 event_not_found— unknown ID, or one belonging to another tenant.400 invalid_event_id— the ID is malformed.422 unknown_fields:<names>— afieldsentry that doesn’t exist on an event.
GET
/api/v1/events/{id}Authorization
AuthorizationBearer token (bloomcount_...) · headerrequiredPath parameters
idstringrequiredQuery parameters
fieldsstringComma-separated list of the fields to return, so a caller can ask for the parts of an object it actually uses. A dotted path reaches inside a collection, so `variants.sku` keeps the variants array with only each variant's SKU. The object's own id comes back whether or not it is listed, which keeps a trimmed response addressable. A name that the resource hasn't got returns 422 `unknown_fields:` followed by the names that did not resolve. Omit the parameter for the full object.
Responses
200OK
eventIdstringrequiredslugstring | nullnamestringrequiredstatusEventStatus | anyShow propertiesHide properties
One of:
EventStatus
stringany
anyceremonyAddressstring | nullvenueAddressstring | nullceremonyStartinteger | nullUnix ms.
ceremonyEndinteger | nullUnix ms. Null when the event has no ceremony time set.
venueStartinteger | nullUnix ms, when setup at the reception venue begins.
venueEndinteger | nullUnix ms, when the event ends at the venue.
clientName1string | nullFirst client on the event. Both names are free text.
clientName2string | nullSecond client, for a couple. Null for a single-client event.
budgetnumber | nullThe client's budget, in the tenant's currency, excluding tax. Null when none was agreed.
numberOfGuestsinteger | nullGuest count, used for planning rather than pricing.
numberOfTablesinteger | nullTable count, which table-centre quantities are usually derived from.
colourSchemestring[] | nullColour labels for the event, matched against the colour vocabulary by label rather than by ID. See GET /api/v1/colors for the labels that will line up.
descriptionstring | nullHTML (from Tiptap). May be large.
linksobject[] | nullShow propertiesHide properties
Array of
objectlabelstringrequiredurlstringrequiredimageUrlsstring<uri>[]requiredResolved download URLs for any attached storage objects. May be empty.
priceListIdstring | nullmaterialsPriceListIdstring | nullhirePriceListIdstring | nullID of the hire price list governing this event's hire-mode lines, or `null` if no hire list is set. Daily fees on `EventItem` rows where `mode: "hire"` come from this list.
markupMultipliernumber | nulltotalsobject | nullThe event's stored rollup, or `null` when the request asked for no money fields.
Show propertiesHide properties
customerPriceIncTaxnumberrequiredWhat the customer pays for the whole event: every visible line with tax and markup, plus labour, additional fees and travel. Larger than the sum of the line prices for that reason.
costIncTaxnumberrequiredWhat the units the design consumes cost, including tax, before markup. Excludes the pack leftovers.
wasteCostIncTaxnumberrequiredWhat the pack leftovers cost, including tax, before markup. Computed per line, so it can differ slightly from the event page's Waste card, which pools packs across lines sharing a variant.
costOfGoodsIncTaxnumberrequiredWhat the florist actually pays out: costIncTax plus wasteCostIncTax. A breakdown of this figure, not an extra beside it, so never add all three together.
itemsCountintegerrequiredLines on the event, hidden groups included.
groupsEventGroup[]requiredItems attached to the event, grouped as they appear in the app.
A synthetic `"Ungrouped"` group is appended if any items have
no `groupId` set (defensive — every event has at least the
auto-created default group, so this is rarely populated).
Show propertiesHide properties
Array of
EventGroupgroupIdstringrequiredThis group's ID.
namestringrequiredWhat the section is called on the quote.
orderintegerrequiredPosition among the event's groups, ascending. Ties fall back to creation order.
quantityModestring | nullControls how line-item quantities are interpreted within this group.
- `open` — each item's `quantity` stands alone. `effectiveQuantity == quantity`. Use for one-off arrangements (ceremony arch, top table).
- `group` — the group has a `groupQuantity` multiplier. Each item's `effectiveQuantity = quantity × groupQuantity`. Use for repeated builds (e.g. 10 identical centrepieces — set `groupQuantity: 10` once instead of multiplying every line by hand).
Allowed:
opengroupgroupQuantityinteger | nullMultiplier applied to every item's quantity when `quantityMode` is `group`. Ignored otherwise.
hiddenbooleanrequiredWhen true, the group is excluded from the in-app totals,
order-sheet exports, and waste calculations. The group + its
items are still returned here so partners can see what was
hidden — apply your own filter if you want to mirror the
in-app exclusion.
itemsEventItem[]requiredShow propertiesHide properties
Array of
EventItemitemIdstringrequiredThis line's ID. Pass it back to change or remove the line.
variantIdstringrequiredThe variant this line orders.
productIdstring | nullThe variant's parent product. Null if the product has since been deleted.
productNamestring | nullThe product's name, copied onto the line so it reads without a catalogue lookup.
categorystring | nullThe product's category label at the time the line was written.
productTypestring | nullWhich catalogue the variant came from, and therefore which price list prices this line.
Allowed:
flowermaterialvariantNamestring | nullThe variant's name, such as a stem length or a size.
skustring | nullThe variant's SKU. Materials carry one; flowers do not.
stemLengthinteger | nullStem length in cm, on flower lines only.
unitsPerPackinteger | nullHow many units one supplier pack holds. Packs to order are worked out from this and the quantity.
quantityintegerrequiredStored quantity on the line.
effectiveQuantityintegerrequiredQuantity after applying the parent group's quantity multiplier.
For groups in `quantityMode: "group"`, this is `quantity ×
groupQuantity`. For everything else it equals `quantity`.
supplierIdstring | nullWho this line is bought from. Always null on hire lines, which come from studio inventory.
supplierNamestring | nullThat supplier's name, copied onto the line.
modestringrequired- `consumable` — flowers and bought-in materials. Sourced from a supplier per event; priced from the flower or materials price list.
- `hire` — studio-owned inventory rented out for a date window. No `supplierId`; priced from the event's hire price list as `dailyFeeExclTax × hireDays × quantity`.
Allowed:
consumablehirehireStartinteger | nullHire window start (Unix ms, inclusive). `null` on `consumable` lines.
hireEndinteger | nullHire window end (Unix ms, inclusive). `null` on `consumable` lines.
hireDaysinteger | nullDays billed = `floor((hireEnd - hireStart) / 1d) + 1`, minimum 1. `null` on `consumable` lines.
dailyFeeExclTaxnumber | nullSnapshotted daily fee (excluding tax) from the event's hire price list at the moment the line was added or last refreshed. `null` on `consumable` lines.
pricingobject | nullWhat this line costs and what the customer pays for it, or `null` when the request asked for no money fields.
Show propertiesHide properties
unitPriceExclTaxnumberrequiredOn a consumable line the pack price excluding tax; on a hire line the daily fee excluding tax. The frozen snapshot where the line has one, the live price-list entry otherwise.
perUnitPriceExclTaxnumberrequiredPrice of a single unit excluding tax: the pack price divided by unitsPerPack. Equal to unitPriceExclTax on a hire line, which is billed per day rather than per pack.
costExclTaxnumberrequiredWhat the units this line consumes cost, excluding tax and before markup. effectiveQuantity times perUnitPriceExclTax, or fee times days times quantity on a hire line. Excludes the pack leftovers, which are wasteCostIncTax.
costIncTaxnumberrequiredcostExclTax with the tax multiplier of the price list this line is priced from. Still before markup.
customerPriceIncTaxnumberrequiredWhat the customer pays for this line: costIncTax with the event's per-unit uplift and the markup for this line's product type. Hire lines use the event's hire markup, which is set separately from the flower and materials ones.
packsNeededintegerrequiredWhole packs to order, raised to the supplier's minimum order quantity where one applies to this variant. Zero on a hire line, where the studio owns the stock.
wasteUnitsnumberrequiredUnits bought and not used: packsNeeded times unitsPerPack, less effectiveQuantity. Includes any extra forced by a supplier minimum. Zero on a hire line.
wasteCostIncTaxnumberrequiredWhat those leftover units cost, including tax and before markup. Add it to costIncTax for what this line costs to buy.
subtotalsobject | nullThis group's lines added up, or `null` when the request asked for no money fields.
Show propertiesHide properties
costExclTaxnumberrequiredSum of the group's line costExclTax.
costIncTaxnumberrequiredSum of the group's line costIncTax.
customerPriceIncTaxnumberrequiredSum of the group's line customerPriceIncTax.
wasteCostIncTaxnumberrequiredSum of the group's line wasteCostIncTax.
itemsCountintegerrequiredHow many lines are in this group.
400Malformed event ID.
errorstringrequired401Missing or invalid API key, or revoked / expired.
errorstringrequired403Authenticated, but the key lacks the required scope or the tenant has no API access.
errorstringrequired404Event not found in the caller's tenant.
errorstringrequired429Per-minute rate limit (60/min) or per-month cap exceeded.
errorstringrequired