A growing share of shoppers ask an AI assistant before they ever open a search engine. Solidshop makes sure those assistants can actually find your products: every store exposes a read-only catalog API in two flavours — conventional REST endpoints, and an MCP server that agent runtimes such as Claude can call directly as tools. Both are part of the free core, enabled on install, and require no setup.
The design principle behind both surfaces: every response carries the canonical URL of the page it describes. When an assistant recommends one of your products, the shopper lands on your storefront — your product page, your cart, your checkout. The API is a discovery layer, not a sales channel of its own.
What is (and is not) exposed
The catalog API is a guest. It serves exactly the data an anonymous visitor sees in your storefront HTML — published products, categories and brands on public access levels, in your store’s enabled languages and display currencies. Nothing more:
- Stock is a yes/no answer. The API says whether a product or variant is in stock — never how many units you hold.
- No cost prices. Your margins are yours.
- No customer or order data. The API has no orders, no carts, no accounts — it is read-only catalog discovery, nothing else.
- Hidden stays hidden. Unpublished or access-restricted products answer exactly like products that don’t exist.
The REST endpoints
All endpoints are GET, served by Joomla’s API application
under your site’s /api path:
GET /api/index.php/v1/solidshop/products
GET /api/index.php/v1/solidshop/products/{id}
GET /api/index.php/v1/solidshop/products/{id}/variants
GET /api/index.php/v1/solidshop/categories
GET /api/index.php/v1/solidshop/categories/{id}
GET /api/index.php/v1/solidshop/brands
GET /api/index.php/v1/solidshop/brands/{id}
The products list accepts filter[search],
filter[category], filter[brand],
filter[min_price] / filter[max_price],
filter[in_stock], sort and JSON:API paging
(page[limit], capped at 50). Add lang=de-DE on a
multilingual site to get translated content, and currency=USD to
get prices converted into any display currency you have enabled — the
same conversion your storefront’s currency switcher uses.
The MCP server
MCP (Model Context Protocol) is the standard AI agents use to call external tools. Your store’s MCP endpoint lives at:
https://www.example.com/api/index.php/v1/solidshop/mcp
It serves five read-only tools:
solidshop_search_products— free-text search with category, brand, price and availability filterssolidshop_get_product— one product in full detail: description, images, options, per-variant price and availability, specificationssolidshop_list_categories— the category tree with product countssolidshop_list_brands— brands with product countssolidshop_get_store_info— store profile: contact details, currencies, languages, policy pages
To try it yourself with Claude Code, connect your store as an MCP server:
claude mcp add --transport http my-store \
https://www.example.com/api/index.php/v1/solidshop/mcp
…then ask something like “what does my store sell under
€50?”. Any MCP-capable client works the same way — the
server speaks the standard Streamable HTTP transport, stateless, one JSON-RPC
request per call. For a quick protocol-level check without an AI client, the
official inspector works too:
npx @modelcontextprotocol/inspector@latest.
For a walkthrough with a worked example — connecting a store, a full assistant conversation showing the tool calls, and why the endpoint is open by default — see How to connect your Joomla store to an AI assistant with MCP.
SEF URLs — if your server rewrites URLs, the
shorter /api/v1/solidshop/… form works as well. The
/api/index.php/ form works on every install, so the examples
use it.
Turning it off, or requiring a token
Everything the API serves is already public on your storefront, so public access is the default and the right choice for almost every store — an AI assistant that cannot read your catalog anonymously simply moves on to a competitor’s.
If you still want to close it: System → Plugins → Web
Services - Solidshop has a single Public catalog access
switch. Set it to No and every catalog route — the MCP endpoint
included — requires a
Joomla
API token; anonymous requests get a 401. Disabling the plugin
removes the routes entirely.
Crawl load and rate limiting
Catalog responses are served with Cache-Control: public headers,
so a reverse proxy or CDN in front of your site (LiteSpeed cache, Cloudflare,
Varnish) absorbs repeat reads without touching PHP. Rate limiting is
deliberately left to the server layer, where it belongs — use your
host’s tools (fail2ban, LiteSpeed per-IP limits, Cloudflare rules) if an
aggressive crawler ever needs reining in. The API itself does nothing a guest
browsing your storefront couldn’t do.