List products with their variants
Cursor-paginated. Default page size 25, max 100. Use the returned cursor + isDone to walk through pages.
Optional filters narrow the result set. They compose — passing both productType=flower and q=mondial returns flowers whose name matches “mondial”.
Every product carries its variants, so a catalogue sync needs one pass rather than a call per product. A
variant is what prices, event lines and minimum order quantities point at; the product is the grouping above
it. Use fields to trim the payload when you only need part of it, for example fields=name,variants.sku.
GET
/api/v1/productsAuthorization
AuthorizationBearer token (bloomcount_...) · headerrequiredQuery 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.
limitintegermin 1 · max 100 · default: 25
cursorstringqstringFull-text search across product names.
categorystringExact match on `category`.
productTypestringRestrict to one product type.
Allowed:
flowermaterialsupplierIdstringPrefixed supplier ID (`sup_…`). Returns products with at least one variant sourcing from this supplier.
Responses
200OK
itemsListedProduct[]requiredShow propertiesHide properties
Array of
ListedProductproductIdstringrequirednamestringrequiredcategorystringrequiredproductTypestring | null- `flower` — fresh stems, no SKU.
- `material` — sundries (foam, ribbon, vases) with SKU.
Allowed:
flowermaterialseasonalityobject | nullShow propertiesHide properties
startMonthintegerendMonthintegervariantsobject[]requiredShow propertiesHide properties
Array of
objectvariantIdstringrequirednamestringrequiredskustring | nullstemLengthinteger | nullunitsPerPackinteger | nullgradestring | nullbrandstring | nullmaterialstring | nullsupplierIdsstring[]Visible suppliers that sell this variant. The hidden Default supplier is filtered out — when a variant is only attached to Default this is `[]`, meaning "no specific supplier required".
supplierMinPacksobject[]Per-supplier minimum order quantity (in packs). Only entries that enforce a minimum (`minPacks > 1`) are returned.
Show propertiesHide properties
Array of
objectsupplierIdstringrequiredminPacksintegerrequiredhireablebooleanrequiredAlways `false` for flower variants and for material variants that aren't rentable. `true` when this is a studio-owned hire item.
inventoryQtyinteger | nullrequiredNumber of units owned, when `hireable: true`. `null` for non-hireable variants.
isDonebooleanrequiredcursorstring | nullrequired401Missing or invalid API key, or revoked / expired.
errorstringrequired403Authenticated, but the key lacks the required scope or the tenant has no API access.
errorstringrequired422Request body or arguments failed validation.
errorstringrequired429Per-minute rate limit (60/min) or per-month cap exceeded.
errorstringrequired