> For the complete documentation index, see [llms.txt](https://docs.spurtcommerce.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.spurtcommerce.com/api-reference/store/product-discovery/products.md).

# Products

Browse product listings and retrieve product details.

## Fetch a product detail page by its product slug.

> Fetch a product detail page by its product slug.\
> \
> \*\*Authentication:\*\* Public storefront request; tenant and translation middleware apply.\
> \
> \*\*Feature area:\*\* Product discovery\
> \
> \*\*Implementation source:\*\* \`src/api/store/controllers/ProductController.ts\`\
> \
> \*\*Request example provenance:\*\* Field names come from the controller success example; some values have been populated for readability.\
> \
> \*\*Response example provenance:\*\* Field names come from the controller success example; some values have been populated for readability.\
> \
> \> Example is based on the linked repository source. Replace example identifiers and credentials with values from your tenant.

```json
{"openapi":"3.0.3","info":{"title":"SpurtCommerce Store API","version":"6.0.0"},"tags":[{"name":"Products","description":"Browse product listings and retrieve product details."}],"servers":[{"url":"https://api.example.com","description":"Replace with your SpurtCommerce API host. Paths include the /api prefix."}],"paths":{"/api/product-store/productdetail/{productslug}":{"get":{"operationId":"getApiProductStoreProductdetailProductslug","summary":"Fetch a product detail page by its product slug.","description":"Fetch a product detail page by its product slug.\n\n**Authentication:** Public storefront request; tenant and translation middleware apply.\n\n**Feature area:** Product discovery\n\n**Implementation source:** `src/api/store/controllers/ProductController.ts`\n\n**Request example provenance:** Field names come from the controller success example; some values have been populated for readability.\n\n**Response example provenance:** Field names come from the controller success example; some values have been populated for readability.\n\n> Example is based on the linked repository source. Replace example identifiers and credentials with values from your tenant.","tags":["Products"],"parameters":[{"name":"productslug","in":"path","required":true,"schema":{"type":"string"},"description":"Value for productslug."}],"responses":{"200":{"description":"Successful response. Field names come from the controller success example; some values have been populated for readability.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"message":{"type":"string"},"data":{"type":"object","properties":{"productId":{"type":"integer"},"sku":{"type":"string"},"quantity":{"type":"integer"},"price":{"type":"string"},"name":{"type":"string"},"productSlug":{"type":"string"},"isActive":{"type":"integer"},"hasStock":{"type":"integer"}},"additionalProperties":true}},"additionalProperties":true}}}}}}}}}
```

## Get products mapped to a keyword ID.

> Get products mapped to a keyword ID.\
> \
> \*\*Authentication:\*\* Public storefront request.\
> \
> \*\*Feature area:\*\* Product discovery\
> \
> \*\*Implementation source:\*\* \`src/api/store/controllers/StoreKeywordController.ts\`\
> \
> \*\*Request example provenance:\*\* Handler returns the exact envelope; array contents vary by mapped products.\
> \
> \*\*Response example provenance:\*\* Handler returns the exact envelope; array contents vary by mapped products.\
> \
> \> Example is based on the linked repository source. Replace example identifiers and credentials with values from your tenant.

```json
{"openapi":"3.0.3","info":{"title":"SpurtCommerce Store API","version":"6.0.0"},"tags":[{"name":"Products","description":"Browse product listings and retrieve product details."}],"servers":[{"url":"https://api.example.com","description":"Replace with your SpurtCommerce API host. Paths include the /api prefix."}],"paths":{"/api/products-by-keyword/{keywordId}":{"get":{"operationId":"getApiProductsByKeywordKeywordid","summary":"Get products mapped to a keyword ID.","description":"Get products mapped to a keyword ID.\n\n**Authentication:** Public storefront request.\n\n**Feature area:** Product discovery\n\n**Implementation source:** `src/api/store/controllers/StoreKeywordController.ts`\n\n**Request example provenance:** Handler returns the exact envelope; array contents vary by mapped products.\n\n**Response example provenance:** Handler returns the exact envelope; array contents vary by mapped products.\n\n> Example is based on the linked repository source. Replace example identifiers and credentials with values from your tenant.","tags":["Products"],"parameters":[{"name":"keywordId","in":"path","required":true,"schema":{"type":"string"},"description":"Value for keywordId."}],"responses":{"200":{"description":"Successful response. Handler returns the exact envelope; array contents vary by mapped products.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer"},"message":{"type":"string"},"data":{"type":"array","items":{}}},"additionalProperties":true}}}}}}}}}
```

## Get the count of matching products.

> Get the count of matching products.\
> \
> \*\*Authentication:\*\* Public storefront request.\
> \
> \*\*Feature area:\*\* Store content\
> \
> \*\*Implementation source:\*\* \`src/api/store/controllers/CommonListController.ts\`\
> \
> \*\*Request example provenance:\*\* Query fields exposed by source comment include limit, offset, keyword, categoryslug and priceFrom.\
> \
> \*\*Response example provenance:\*\* Query fields exposed by source comment include limit, offset, keyword, categoryslug and priceFrom.\
> \
> \> Example is based on the linked repository source. Replace example identifiers and credentials with values from your tenant.

```json
{"openapi":"3.0.3","info":{"title":"SpurtCommerce Store API","version":"6.0.0"},"tags":[{"name":"Products","description":"Browse product listings and retrieve product details."}],"servers":[{"url":"https://api.example.com","description":"Replace with your SpurtCommerce API host. Paths include the /api prefix."}],"paths":{"/api/store-list/product-count":{"get":{"operationId":"getApiStoreListProductCount","summary":"Get the count of matching products.","description":"Get the count of matching products.\n\n**Authentication:** Public storefront request.\n\n**Feature area:** Store content\n\n**Implementation source:** `src/api/store/controllers/CommonListController.ts`\n\n**Request example provenance:** Query fields exposed by source comment include limit, offset, keyword, categoryslug and priceFrom.\n\n**Response example provenance:** Query fields exposed by source comment include limit, offset, keyword, categoryslug and priceFrom.\n\n> Example is based on the linked repository source. Replace example identifiers and credentials with values from your tenant.","tags":["Products"],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer"},"description":"Query parameter limit."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"},"description":"Query parameter offset."},{"name":"keyword","in":"query","required":false,"schema":{"type":"string"},"description":"Query parameter keyword."},{"name":"categoryslug","in":"query","required":false,"schema":{"type":"string"},"description":"Query parameter categoryslug."},{"name":"priceFrom","in":"query","required":false,"schema":{"type":"integer"},"description":"Query parameter priceFrom."}],"responses":{"200":{"description":"Successful response. Query fields exposed by source comment include limit, offset, keyword, categoryslug and priceFrom.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"message":{"type":"string"},"data":{"type":"object","properties":{"count":{"type":"integer"}},"additionalProperties":true}},"additionalProperties":true}}}}}}}}}
```
