Rendered products by comma-separated handles (capped at 20; each product run through mapOutput with ?currency=).
GET /search/product/{handles}
GET https://mercury.plutocracy.io/search/product/{handles}
Served from Redis in all four regions (Sydney, N. Virginia, N. California, Frankfurt); DNS latency routing picks the nearest.
Rendered products by comma-separated handles (capped at 20; each product
run through mapOutput with ?currency=). Missing handles yield null
entries in the array (redis JSON.GET misses are passed through).
Auth: Origin+bypass redis strategy.
Authentication
Send the storefront's Origin (browsers do this for you) or ?bypassToken=. A request with neither gets 401. See authentication.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
handles required | path | string | |
currency | query | string |
Responses
200 OK application/json
Type: (null | RenderedProduct)[]
Example response (illustrative)
[
{
"id": "7712345678901",
"title": "Linen shirt",
"implode": 1,
"handle": "linen-shirt",
"min_price": 89,
"compare_at_min_price": 89,
"vendor": "Mercury Apparel",
"type": "Shirts",
"on_sale": false,
"total_stock": 12,
"variants": [
{
"title": "Linen shirt",
"id": 7712345678901,
"inventory": 12,
"price": "89.00",
"compare_at_price": "89.00"
}
],
"prices": {
"AUD": {
"price": 89
}
},
"created_date": "2026-11-01T00:00:00.000Z",
"options": null,
"normalised_stock": 12,
"tags": [
"summer"
],
"image": "https://cdn.shopify.com/s/files/1/0000/0001/files/linen-shirt.jpg",
"images": [
"https://cdn.shopify.com/s/files/1/0000/0001/files/linen-shirt.jpg"
],
"related": "string",
"imploded": [
{
"id": "7712345678901",
"title": "Linen shirt",
"implode": 1,
"handle": "linen-shirt",
"min_price": 89,
"max_price": 89,
"compare_at_min_price": 89,
"compare_at_max_price": 89,
"vendor": "Mercury Apparel",
"type": "Shirts",
"on_sale": false,
"total_stock": 12,
"variants": [
{
"title": "Linen shirt",
"id": 7712345678901,
"inventory": 12,
"price": "89.00",
"compare_at_price": "89.00"
}
],
"prices": {
"AUD": {
"price": null
}
},
"created_date": "2026-11-01T00:00:00.000Z",
"tags": [
"summer"
]
}
],
"meta": {
"key": null
}
}
]401 No valid credential. application/json
Type: ApiErrorResponse
default An error, in the standard envelope. application/json
Type: ApiErrorResponse
Errors use the standard envelope; see errors and status codes.
Example request
curl "https://mercury.plutocracy.io/search/product/linen-shirt?bypassToken=$MERCURY_BYPASS_TOKEN"
Where this comes from
- Contract
SearchProductsByHandlesRouteinapi-types/src/storefront/search.ts- Route
GET /search/product/:handleson the view app