Skip to content
Bloomcount API
Esc
navigateopen⌘Jpreview

Get a single product with its variants

One product with every variant on it — the same shape as one entry from the list endpoint, so a caller can use the same parsing for both. Reach for this when you already hold a prod_… and want its current state, rather than paging the list to find it.

Errors

  • 404 product_not_found — unknown ID, or one belonging to another tenant.
  • 422 wrong_id_type:expected_products_got_<table> — the prefix isn’t prod_.
  • 422 unknown_fields:<names> — a fields entry that doesn’t exist on a product.
GET/api/v1/products/{id}
Authorization
AuthorizationBearer token (bloomcount_...) · headerrequired
Path parameters
idstringrequired
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.
Responses
200OK
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.
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
404The requested resource doesn't exist or belongs to a different tenant.
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/prod_h71eaa8d4mr3vk2qz9pn5wf" \
  -H "Authorization: Bearer YOUR_TOKEN"
Response
{
  "productId": "prod_h71eaa8d4mr3vk2qz9pn5wf",
  "name": "Pink Mondial",
  "category": "Roses",
  "productType": "flower",
  "seasonality": {
    "startMonth": 5,
    "endMonth": 10
  },
  "variants": [
    {
      "variantId": "var_h299x7tcqe8rnv4mz12k6yp",
      "name": "50cm",
      "stemLength": 50,
      "unitsPerPack": 10,
      "colors": [
        "pink"
      ],
      "supplierIds": [
        "sup_77p3v2k6m4t1r5z9c8w0y7b3"
      ],
      "supplierMinPacks": [
        {
          "supplierId": "sup_77p3v2k6m4t1r5z9c8w0y7b3",
          "minPacks": 5
        }
      ]
    }
  ]
}