---
title: "List products with search, filter, sort, and pagination"
method: GET
path: "/products"
tags: ["Product"]
---

# List products with search, filter, sort, and pagination

`GET /products`

## Request

- Base URL: `http://localhost:8000/api/shop`
- URL: `http://localhost:8000/api/shop/products`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/bagisto/apis/bagisto-shop-api/docs/products/get.ts> (a function with typed inputs; its response is checked against the schema)

Mirrors the GraphQL products query. Any query param outside the reserved set (query, sort, order, page, per_page, locale, channel, filter, suggest) is treated as a filterable attribute — so new attributes like material, pattern, etc. work automatically without schema changes.

## Query parameters

- `query` string
- `suggest` '0' | '1'
- `sort` string
- `order` 'asc' | 'desc'
- `page` integer
- `per_page` integer
- `type` 'simple' | 'configurable' | 'virtual' | 'downloadable' | 'bundle' | 'grouped' | 'booking'
- `category_id` integer
- `price` string
- `price_from` number
- `price_to` number
- `new` boolean
- `featured` boolean
- `filter` object

## Headers

- `X-STOREFRONT-KEY` string, required
- `X-Locale` string
- `X-Channel` string
- `X-Currency` string

## Response `200`

A paginated list of products matching the search, filter, and sort criteria.

## Changes

- **2026-10-28** `b84d43839844`: 1 info
  - added the new optional `query` request parameter `suggest`

[Operation history](https://skmtc.dev/bagisto/apis/bagisto-shop-api/changes/products/get.md)

---

[API](https://skmtc.dev/bagisto/apis/bagisto-shop-api.md) - [All operations](https://skmtc.dev/bagisto/apis/bagisto-shop-api/llms.txt) - [OpenAPI document](https://skmtc.dev/bagisto/apis/bagisto-shop-api/revisions/f619df36bf29?raw)
