List product groups
Returns aggregated product groups (collections, product types, vendors, tags) — a cross-collection discovery search, not CRUD on a real “product group” table.
Filtering:
shop_id— scopes to that shop’s seller.seller_id— scopes to that seller.- Neither given — account-scoped, across all of the token’s sellers.
q (substring match on name/slug) and id + group_type (direct lookup of a single
group; group_type is one of collection, product_type, vendor, tag) work the same
way under all three filters. Tags are only included in the q and id/group_type
results — the unfiltered/default listing (most-recently-updated) never includes tags.
Not paginated — only per_page applies (default 10, max 25); there is no page param.
GET
/product_groupsAuthorization
AuthorizationBearer token (JWT) · headerrequiredQuery parameters
shop_idintegerFilter by shop ID.
seller_idintegerFilter by seller ID. Ignored if `shop_id` is present.
qstringSubstring search on name/slug (includes tags).
idintegerLook up a single group by id. Requires `group_type` (includes tags).
group_typestringRequired together with `id`.
Allowed:
collectionproduct_typevendortagper_pageintegermax 25 · default: 10
Responses
200Product groups list
Request
curl -X GET "https://api.onbolder.com/v2/product_groups" \
-H "Authorization: Bearer YOUR_TOKEN"const response = await fetch("https://api.onbolder.com/v2/product_groups", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_TOKEN"
}
});import requests
response = requests.get(
"https://api.onbolder.com/v2/product_groups",
headers={
"Authorization": "Bearer YOUR_TOKEN"
},
)Response
{
"_class": [
"results",
"product_groups"
],
"total_items": 3,
"per_page": 10,
"page": 1,
"_embedded": {
"items": [
{
"type": "collection",
"id": 1,
"name": "Summer",
"slug": "summer",
"products_count": 12,
"updated_at": "2026-07-01T10:00:00Z"
},
{
"type": "product_type",
"id": 2,
"name": "Clothing",
"slug": "clothing",
"products_count": 45,
"updated_at": "2026-06-15T09:30:00Z"
}
]
}
}