Axion Biz Solutions

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.Public
GET/api/v1/products/{slug}/Retrieve one product. Increments its view count for non-staff requests.Public
GET/api/v1/products/facets/Distinct "Tag" attribute values across the catalog, for filter UIs.Public
POST/api/v1/products/Create a product.Staff
PATCH/api/v1/products/{slug}/Update a product.Staff
DELETE/api/v1/products/{slug}/Soft-delete a product (recoverable from the recycle bin).Staff
POST/api/v1/products/{slug}/transfer/Move stock for this product between branches.Staff

List 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.