PlutocracyMercury developer docs

Rendered collection by handle: products, facets and merchandising for a collection page.

GET /search/collection/{handle}

GET https://mercury.plutocracy.io/search/collection/{handle}

Served from Redis in all four regions (Sydney, N. Virginia, N. California, Frankfurt); DNS latency routing picks the nearest.

Alias of CollectionByHandleRoute (identical behaviour).

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

NameInTypeDescription
handle requiredpathstring
takequerystring
skipquerystring
pagequerystring
pageNumberquerystring
queryquerystring

JSON-stringified FilterOperator array of additional filters.

sortquery"manual" | "az" | "za" | "oldest" | "newest" | "priceLow" | "priceHigh" | "random"

Sort override; random shuffles the returned page. Defaults to the collection's Shopify sort order.

currencyquerystring
trackingquerystring

none disables analytics tracking for this request.

userIdquerystring
grid_configquerystring

See SearchQueryParams.grid_config — same truthy-string trap.

Responses

200 OK application/json

Type: RenderedCollection

Response of GET collection/:handle (rendered collection): the stored Shopify collection body spread at the top level, plus campaign/config, facets/products, sort_order and the echoed query.

FieldTypeDescription
idnumber
rules optionalShopifyCollectionRule[]
titlestring
handlestring
body_htmlstring
metafields optional{ [key]: { [key]: any } }

Namespace -> key -> value (save-collection.service mapMetafieldsIntoCorrectFormat).

Fields
FieldTypeDescription
[key: string]{ [key]: any }

Any further keys.

updated_at optionalstring
disjunctive optionalboolean
published_at optionalstring
collection_type optionalstring
published_scope optionalstring
template_suffix optionalstring | null
admin_graphql_api_id optionalstring
campaign optionalany

Campaign attached to the collection, if any.

configobject

Collection config plus the collection's implode flag.

Fields
FieldTypeDescription
implodeboolean
[key: string]any

Any further keys.

facetsSearchFacets
productsRenderedProduct[]
sort_orderMercurySortOrder

Resolved sort order actually applied.

queryFilterOperator[]

Echo of the parsed query filter operators ([] when unparsable).

grid_config optionalGridConfig

Present when grid_config was requested (any non-empty string).

[key: string]any

Any further keys.

Example response (illustrative)
{
  "id": 7712345678901,
  "rules": [
    {
      "column": "string",
      "relation": "string",
      "condition": "string"
    }
  ],
  "title": "Linen shirt",
  "handle": "linen-shirt",
  "body_html": "<p>Breathable linen.</p>",
  "metafields": {
    "custom": {
      "custom": null
    }
  },
  "updated_at": "2026-11-01T00:00:00.000Z",
  "disjunctive": false,
  "published_at": "2026-11-01T00:00:00.000Z",
  "collection_type": "Shirts",
  "published_scope": "string",
  "template_suffix": "string",
  "admin_graphql_api_id": "7712345678901",
  "campaign": null,
  "config": {
    "implode": false
  },
  "facets": {
    "vendors": [
      {
        "vendor": "Mercury Apparel",
        "count": 12
      }
    ],
    "types": [
      {
        "type": "Shirts",
        "count": 12
      }
    ],
    "tags": [
      {
        "value": "string",
        "count": 12
      }
    ],
    "count": 12
  },
  "products": [
    {
      "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
      }
    }
  ],
  "sort_order": "manual",
  "query": [
    {
      "type": "Shirts",
      "condition": "string",
      "value": null
    }
  ],
  "grid_config": {
    "grid": {
      "elements": {
        "key": null
      },
      "core": {
        "key": null
      },
      "breakpoints": [
        {
          "index": 1,
          "label": "string",
          "minwidth": 1,
          "columns": 1,
          "format": "string"
        }
      ],
      "currentBreakpoint": {
        "key": null
      },
      "styles": "string"
    },
    "currency": "AUD",
    "locale": "string",
    "delimiter": "string",
    "sizeMapping": null,
    "colourMapping": {
      "key": "#1f6feb"
    },
    "imageMapping": {
      "key": "string"
    },
    "facetMapping": null,
    "integrations": null,
    "skuSearch": 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/collection/linen-shirt?bypassToken=$MERCURY_BYPASS_TOKEN"
Where this comes from
Contract
SearchCollectionAliasRoute in api-types/src/storefront/search.ts
Route
GET /search/collection/:handle on the view app