Products
The catalog's core resource. This page is documented in full as the template every other resource's list-format reference follows.
Endpoints
GET
/api/v1/products/List products, filterable and sortable.PublicGET
/api/v1/products/{slug}/Retrieve one product. Increments its view count for non-staff requests.PublicGET
/api/v1/products/facets/Distinct "Tag" attribute values across the catalog, for filter UIs.PublicPOST
/api/v1/products/Create a product.StaffPATCH
/api/v1/products/{slug}/Update a product.StaffDELETE
/api/v1/products/{slug}/Soft-delete a product (recoverable from the recycle bin).StaffPOST
/api/v1/products/{slug}/transfer/Move stock for this product between branches.StaffList query parameters
categoryCategory slug — matches that category and everything beneath it.brandBrand slug.qFree-text search across name, description, and variation/tag attributes.tagExact match on a "Tag" attribute value (see facets endpoint above).min_price / max_pricePrice range filter.featured / on_offer / incomingtrue/false — storefront merchandising flags.dealtrue — only products with a live (not-yet-expired) deal countdown.branchBranch ID — annotates each product with its stock at that branch.low_stocktrue — only products at or below their restock threshold.sortprice_asc, price_desc, newest, most_viewed, or least_viewed.page / page_sizePagination — page_size caps at 100.Example request
GET /api/v1/products/?category=jewelry&sort=most_viewed&page_size=2
curl "https://your-domain/api/v1/products/?category=jewelry&sort=most_viewed&page_size=2" \
-H "X-Company-Slug: your-company-slug"Example response
{
"status": "success",
"message": "",
"data": {
"count": 62,
"next": "https://your-domain/api/v1/products/?category=jewelry&page=2&page_size=2&sort=most_viewed",
"previous": null,
"results": [
{
"id": 201,
"sku": "BEAD-NECKLACE-001",
"name": "Yellow African Necklace",
"slug": "yellow-african-necklace",
"category": 139,
"category_breadcrumb": [
{ "id": 122, "name": "JEWELRY", "slug": "jewelry" },
{ "id": 138, "name": "NECKLACES", "slug": "necklaces" }
],
"brand": null,
"brand_name": null,
"supplier": null,
"supplier_name": null,
"branch": null,
"branch_name": null,
"item_type": "product",
"price": "23.00",
"compare_at_price": "30.00",
"stock_quantity": 7,
"branch_stock_quantity": null,
"duration_minutes": null,
"is_active": true,
"is_published": true,
"is_featured": false,
"is_incoming": false,
"is_on_offer": true,
"deal_ends_at": null,
"views": 3,
"dimensions": null,
"primary_image": "https://your-domain/media/products/necklace.jpg",
"attributes": [{ "id": 1, "name": "Tag", "value": "Beaded", "sort_order": 0 }],
"avg_rating": 4.5,
"review_count": 2,
"units_sold": 12,
"created_at": "2026-06-01T10:00:00Z"
}
]
}
}item_type is "product" or "service" — a service carries no meaningful stock count and instead uses duration_minutes.