Skip to main content

Products API

Required scope: products:read (read) · products:write (write)


List Products

GET /api/v1/products

Returns a paginated list of active products.

Query Parameters

ParameterTypeDescription
pageintegerPage number (default: 1)
per_pageintegerResults per page (default: 25, max: 100)
searchstringSearch by name, SKU, or barcode
categorystringFilter by category slug
brandstringFilter by brand name
updated_sinceISO 8601Only return products updated after this timestamp

Example

curl -H "X-API-Key: bpos_..." \
"https://yourstore.brotherpos.ca/api/v1/products?category=edibles&per_page=50"

Response

{
"data": [
{
"id": 1,
"name": "Blue Dream 3.5g",
"sku": "BD-35",
"barcode": "628123456789",
"description": "Sativa-dominant hybrid",
"product_type": "simple",
"price": 35.00,
"effective_price": 31.50,
"on_sale": true,
"unit_type": "unit",
"current_stock": 24.0,
"in_stock": true,
"low_stock_threshold": 5.0,
"brand": "Broken Coast",
"categories": [
{ "id": 3, "name": "Flower", "slug": "flower" }
],
"strain_type": "sativa",
"thc_content": 22.5,
"cbd_content": 0.1,
"package_size": "3.5g",
"equivalent_grams": 3.5,
"has_variations": false,
"variations": [],
"primary_image_url": "https://yourstore.brotherpos.ca/...",
"active": true,
"created_at": "2026-01-15T10:00:00Z",
"updated_at": "2026-03-20T14:30:00Z"
}
],
"pagination": { "current_page": 1, "per_page": 50, "total_count": 142, "total_pages": 3 },
"meta": { "request_id": "...", "timestamp": "2026-03-22T12:00:00Z" }
}

Get a Product

GET /api/v1/products/:id

Returns a single product with its variations.


List Categories

GET /api/v1/categories

Required scope: products:read

Returns all categories with parent/child hierarchy.


List Brands

GET /api/v1/brands

Required scope: products:read

Returns all brands.


Bulk Update Products

PATCH /api/v1/products/bulk_update

Required scope: products:write

Update price or stock for multiple products at once.

Request Body

{
"product_ids": [1, 2, 3],
"updates": {
"price": 29.99
}
}