Skip to content
  1. Extras
  2. MiniShop3
  3. Development
  4. Web API
  5. Catalog

Catalog ​

Public endpoints. No API token is required. Resource-group visibility is shared with the catalog snippet. ProductCatalogService builds the JSON, not the snippet's pdoFetch.

Product ​

MethodPathPurpose
GET/product/get/{id}Product by ID
GET/product/getResolve: alias or uri parameter, optional context
GET/product/listList / PLP
GET/product/filtersFacets
GET/product/{id}/imagesGallery

Query parameters for get and resolve: context, include_images (0|1, default 0), include_seo (default 1).

Main query parameters for list:

ParameterMeaning
parent / categoryCategory ID (kept for backward compatibility; ignored if parents is set)
parentsCSV or array of category IDs. OR condition, and a product matches both by its primary category and by additional links (msCategoryMember)
nested0|1. Expands the tree when parents is set
price_min, price_maxPrice range
in_stock, stock_minStock
vendor_id, new, popular, favoriteFlags / vendor
optionsOptions JSON
limit, offset / pagePagination. limit defaults to 20, maximum 100
sort, dir, query, contextSort and search
include_options, include_content, include_imagesEmbeds (include_images default 0, at most 10 files per product)
include_seoSEO block. The default is 0 on list and 1 on get

list response:

json
{
  "success": true,
  "message": null,
  "data": {
    "items": [
      { "id": 12, "pagetitle": "Mug" }
    ],
    "total": 1,
    "limit": 20,
    "offset": 0
  }
}

filters takes the same filters as list, plus keys, include_price (default 1), and include_vendors (default 0).

GET /product/{id}/images and the product card return up to 50 gallery files.

Category ​

MethodPathPurpose
GET/category/get/{id}Category by ID
GET/category/getResolve by alias / uri
GET/category/listList
GET/category/treeTree

get parameters: context, include_hidden, include_content, include_breadcrumbs, include_children, include_seo (default 1).

list parameters: parent, limit, offset or page, sort, dir, context, include_hidden, include_content, include_seo (default 0).

tree parameters: parent, depth, context, include_hidden, sort, dir, include_seo (default 0).

With include_children=1 the nested categories in children also receive seo, unless include_seo is off.

SEO block ​

The block arrives in seo when include_seo is on. Assembly order:

  1. Base values from the resource fields.
  2. canonical.
  3. Overrides from the TV map.
  4. The msOnGetPublicSeo event.
KeySource
title, descriptionResource fields, overridden by the TV map where present
canonicalBuilt with MODX makeUrl. With friendly URLs off it comes out as index.php?id=N, so the link keeps working
robotsindex,follow or noindex,nofollow. See searchable
og.*From the TV map: og.title, og.description, og.image, og.type

The TV map is the ms3_public_seo_tv_map system setting: JSON that maps an SEO key to a TV name. Allowed keys are title, description, canonical, robots, og.title, og.description, og.image, og.type. Invalid JSON is ignored. The setting is empty by default: without it the SEO block is built from the resource fields alone.

The searchable field ​

Product and category responses carry searchable (the "Searchable" flag of the MODX resource). When it is off, robots in the SEO block becomes noindex,nofollow. Nothing else depends on it: the entry itself stays in the API output.

Resource group ACL ​

The filter is on only when both settings are true: MODX access_resource_group_enabled (on by default) and ms3_web_catalog_respect_resource_groups (the installer writes true).

A guest is matched against a permission that is not tied to a user. A customer also receives groups from msCustomerGroup through MODX user-group ACL.

Membership is "at least one": the document stays visible when any of its groups grants access, even if another group is closed.

Turn off ms3_web_catalog_respect_resource_groups to serve products without resource-group checks.

Example ​

bash
curl -sS 'https://shop.example/assets/components/minishop3/api.php?route=/api/v1/product/list&parents=10&limit=20'

See also Examples, Frontend: catalog.