Skip to content
Bloomcount API
Esc
navigateopen⌘Jpreview

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/products
Authorization
AuthorizationBearer token (bloomcount_...) · headerrequired
Query parameters
fieldsstring
Comma-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.
limitinteger
min 1 · max 100 · default: 25
cursorstring
qstring
Full-text search across product names.
categorystring
Exact match on `category`.
productTypestring
Restrict to one product type.
Allowed:flowermaterial
supplierIdstring
Prefixed supplier ID (`sup_…`). Returns products with at least one variant sourcing from this supplier.
Responses
200OK
itemsListedProduct[]required
Show properties
Array of ListedProduct
productIdstringrequired
namestringrequired
categorystringrequired
productTypestring | null
- `flower` — fresh stems, no SKU. - `material` — sundries (foam, ribbon, vases) with SKU.
Allowed:flowermaterial
seasonalityobject | null
Show properties
startMonthinteger
endMonthinteger
variantsobject[]required
Show properties
Array of object
variantIdstringrequired
namestringrequired
skustring | null
stemLengthinteger | null
unitsPerPackinteger | null
gradestring | null
brandstring | null
materialstring | null
supplierIdsstring[]
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 properties
Array of object
supplierIdstringrequired
minPacksintegerrequired
hireablebooleanrequired
Always `false` for flower variants and for material variants that aren't rentable. `true` when this is a studio-owned hire item.
inventoryQtyinteger | nullrequired
Number of units owned, when `hireable: true`. `null` for non-hireable variants.
isDonebooleanrequired
cursorstring | nullrequired
401Missing or invalid API key, or revoked / expired.
errorstringrequired
403Authenticated, but the key lacks the required scope or the tenant has no API access.
errorstringrequired
422Request body or arguments failed validation.
errorstringrequired
429Per-minute rate limit (60/min) or per-month cap exceeded.
errorstringrequired
Try it
Server
Authorization
Parameters
Request
curl -X GET "https://app.bloomcount.com/api/v1/products" \
  -H "Authorization: Bearer YOUR_TOKEN"
Response
{
  "items": [
    {
      "productId": "prod_h71eaa8d4mr3vk2qz9pn5wf",
      "name": "Pink Mondial",
      "category": "Roses",
      "productType": "flower",
      "seasonality": {
        "startMonth": 5,
        "endMonth": 10
      },
      "variants": [
        {
          "variantId": "var_h299x7tcqe8rnv4mz12k6yp",
          "name": "50cm",
          "sku": "string",
          "stemLength": 50,
          "unitsPerPack": 10,
          "grade": "string",
          "brand": "string",
          "material": "string",
          "supplierIds": [
            "string"
          ],
          "supplierMinPacks": [
            {
              "supplierId": "sup_77p3v2k6m4t1r5z9c8w0y7b3",
              "minPacks": 5
            }
          ],
          "hireable": false,
          "inventoryQty": 24
        }
      ]
    }
  ],
  "isDone": true,
  "cursor": "string"
}