Skip to content

List Products

The canonical admin product listing — a paginated, filterable, and sortable product list that mirrors the Bagisto admin Catalog → Products datagrid 1:1. Same columns, same filters, and the same sort options used by the admin screen. This is the listing you want for product-management screens.

How this menu works

For the product types, the two-step create flow, status vs. visibleIndividually, and the per-product sub-resources, see the Products overview.

Not the Create-Order search

GET /api/admin/catalog/products (this endpoint) is the full product listing.

A separate slim search — GET /api/admin/products — powers the admin Create-Order "Add Product" modal only. Use this page for the actual product listing.

Endpoint

EndpointMethodAuthentication
/api/admin/catalog/productsGETAdmin Bearer token

Authentication

Every request requires:

Authorization: Bearer <token>

Obtain the Bearer token via Authentication.

Query Parameters

ParameterTypeDescriptionExample
pageintegerPage number (1-based, default 1)1
per_pageintegerItems per page (default 10, max 50)10
product_idstringFilter by product ID — single integer or comma-separated list142 or 1,2,3
skustringPartial SKU match (SQL LIKE %value%)SP-001
namestringPartial product name match (SQL LIKE %value%)Classic Watch
typestringFilter by product typesimple
statusintegerFilter by status: 0 = disabled, 1 = enabled1
attribute_familyintegerFilter by attribute family ID1
channelstringChannel code for locale/price resolution (default: current channel)default
localestringLocale code for name/category resolution (default: app locale)en
price_fromnumberMinimum price filter (inclusive)10.00
price_tonumberMaximum price filter (inclusive)500.00
pricestringPrice range shorthand — "min,max". Overridden by price_from/price_to when both are present10,500
sortstringColumn to sort by (see Sorting section below)product_id
orderstringSort direction: asc or desc (default desc)desc

Valid type values

simple, configurable, bundle, grouped, downloadable, virtual, booking

Response Shape

Responses use the standard admin { data, meta } envelope.

meta object

FieldTypeDescription
currentPageintegerCurrent page number (1-based)
perPageintegerNumber of items on this page
lastPageintegerTotal number of pages
totalintegerTotal matching products
frominteger1-based index of the first item on this page
tointeger1-based index of the last item on this page

Row fields (data[])

FieldTypeDescription
idintegerProduct ID
skustring|nullProduct SKU
namestring|nullProduct name (resolved via locale and channel)
typestring|nullProduct type (e.g. simple, configurable)
statusinteger|null1 = enabled, 0 = disabled
pricestring|nullRaw price value (decimal string, e.g. "3000.0000")
formattedPricestring|nullLocale-formatted price (e.g. "$3,000.00")
specialPricestring|nullRaw special (sale) price as a decimal string; null if none
formattedSpecialPricestring|nullLocale-formatted special price; null if none
specialPriceFromstring|nullStart of the special-price window; null unless a dated window is set
specialPriceTostring|nullEnd of the special-price window; null unless a dated window is set
quantityintegerSum of inventory qty across all inventory sources
baseImageUrlstring|nullStorage URL of the product's first image; null if no images
imagesCountintegerTotal number of images attached to the product
categoryIdinteger|nullID of the first category this product belongs to; null if uncategorized
categoryNamestring|nullTranslated name of that category (resolved via locale); null if uncategorized
channelstring|nullChannel code used for resolution
localestring|nullLocale code used for resolution
attributeFamilyIdinteger|nullAttribute family ID
attributeFamilyNamestring|nullAttribute family name
urlKeystring|nullURL slug (e.g. acme-drawstring-bag)
visibleIndividuallyboolean|nullWhether the product appears in category/search listings
shortDescriptionstring|nullShort description
metaTitlestring|nullSEO meta title (empty string when unset)
metaDescriptionstring|nullSEO meta description (empty string when unset)
metaKeywordsstring|nullSEO meta keywords (empty string when unset)
weightnumber|nullProduct weight
featuredbooleanWhether the product is flagged as featured
newbooleanWhether the product is flagged as "new"
createdAtstringCreation timestamp
updatedAtstringLast-update timestamp

Notes on the listing values:

  • price, specialPrice are decimal strings, not numbers.
  • specialPriceFrom / specialPriceTo are null unless a dated special-price window is configured.
  • quantity is the summed inventory across all sources.

The following fields are detail-only and always come back null on the listing — fetch them from the single-product endpoint GET /api/admin/catalog/products/{id}:

  • taxCategoryId, manageStock, inStock
  • the relation blocks: translations, images, categories, inventories, customerGroupPrices, superAttributes, variants, bundleOptions, linkedProducts, downloadableLinks, downloadableSamples, videos, channels, relatedProducts, upSells, crossSells.

Example Request

bash
curl -X GET "https://your-domain.com/api/admin/catalog/products?per_page=10&page=1&type=simple&status=1" \
  -H "Authorization: Bearer <token>" \
  -H "Accept: application/json"

Example Response

json
{
  "data": [
    {
      "id": 22,
      "sku": "bagistoNGRY3424234KJCKJK",
      "name": "Acme Drawstring Bag",
      "type": "simple",
      "status": 1,
      "price": "3000.0000",
      "formattedPrice": "$3,000.00",
      "specialPrice": "2700.0000",
      "formattedSpecialPrice": "$2,700.00",
      "specialPriceFrom": null,
      "specialPriceTo": null,
      "quantity": 98,
      "baseImageUrl": "http://localhost:8000/storage/product/22/1qfyoglc5BP46kofrxYrkJ2MXRxu9lAVG3BDFlTZ.webp",
      "imagesCount": 1,
      "categoryId": null,
      "categoryName": null,
      "channel": "default",
      "locale": "en",
      "attributeFamilyId": 1,
      "attributeFamilyName": "Default",
      "urlKey": "acme-drawstring-bag",
      "visibleIndividually": true,
      "shortDescription": "Many desktop publishing packages and web page editors now use",
      "metaTitle": "",
      "metaDescription": "",
      "metaKeywords": "",
      "weight": 32,
      "featured": true,
      "new": true,
      "createdAt": "2024-04-19 11:56:43",
      "updatedAt": "2026-04-23 16:36:14"
    }
  ],
  "meta": {
    "currentPage": 1,
    "perPage": 10,
    "lastPage": 27,
    "total": 265,
    "from": 1,
    "to": 10
  }
}

Sorting

Two forms are accepted — choose whichever suits your client:

FormExample
Compound sort param?sort=name-asc
Separate sort + order params?sort=name&order=asc

When both order and a compound sort value are present, the explicit order param takes precedence.

Sortable columns:

sort valueSorts by
product_idProduct ID (default)
nameProduct name
skuSKU
pricePrice
quantityInventory quantity (SUM across sources)
statusEnabled/disabled status
typeProduct type
attribute_familyAttribute family ID
channelChannel code

Pagination

  • Default page size: 10 items
  • Maximum page size: 50 items
  • Use ?page=N for page navigation and ?per_page=N to control page size

Errors

HTTP StatusCause
401 UnauthorizedMissing, expired, or revoked admin Bearer token
401 UnauthorizedMissing or invalid admin Bearer token

Unknown filter parameters (e.g. a misspelled ?tpye=simple) are silently ignored — no error is returned. Invalid status or type values outside their documented ranges are also silently dropped (the filter is not applied).

Notes

  • Elasticsearch is not yet supported. Even when the Bagisto admin panel is configured to use Elasticsearch for catalog search, this endpoint always uses the database query path.
  • No automatic status filter. Unlike GET /api/shop/products which only returns status = 1 products, this endpoint returns all statuses by default. Admin operators need to see disabled and draft products. Pass ?status=1 to restrict to enabled products.
  • Multi-category products — only the first associated category's categoryId and categoryName are included in the row (matching the datagrid display).
  • Products with no inventory return quantity: 0.
  • Products with no images return baseImageUrl: null and imagesCount: 0.

Released under the MIT License.