Skip to content
Bloomcount API
Esc
navigateopen⌘Jpreview
On this page

Quickstart

Create a key, make your first call, and read the response.

Everything lives under https://app.bloomcount.com/api/v1, speaks JSON, and authenticates with a bearer token.

Create an API key

In the app, open Settings → API and create a key. Tick only the scopes the integration needs: a key without products:write cannot create products, and a key with no scope for a resource cannot read it either.

The key is shown once, at creation. It looks like bloomcount_ followed by 48 hex characters. Store it where your server can read it and nobody else can.

Make a call

List a few products, asking for two fields so the response is easy to read:

curl "https://app.bloomcount.com/api/v1/products?limit=3&fields=name,category" \
  -H "Authorization: Bearer bloomcount_..."
const res = await fetch(
  "https://app.bloomcount.com/api/v1/products?limit=3&fields=name,category",
  { headers: { Authorization: `Bearer ${process.env.BLOOMCOUNT_API_KEY}` } },
);
const { items } = await res.json();
import os, requests

res = requests.get(
    "https://app.bloomcount.com/api/v1/products",
    params={"limit": 3, "fields": "name,category"},
    headers={"Authorization": f"Bearer {os.environ['BLOOMCOUNT_API_KEY']}"},
)
items = res.json()["items"]

Read the response

Every list endpoint returns the same envelope: the rows in items, plus isDone and cursor for paging.

{
  "items": [
    {
      "productId": "prod_h71eaa8d4mr3vk2qz9pn5wf",
      "name": "Rose",
      "category": "Roses"
    }
  ],
  "isDone": false,
  "cursor": "..."
}

The id came back even though it was not asked for, because it always does. Pass cursor back as a query parameter for the next page, and stop when isDone is true.

Was this page helpful?