Skip to Content

Simulators

Catalog and search

The catalog is what a storefront reads before a buyer opens a cart: products with their variants and options, plus collections in the store’s order and the content and navigation around them. Read a tag filter, a search, a recommendation, a variant picked by its options and a page of results:

SF=("$RYSTIC_URL/api/2026-10/graphql.json" -H 'X-Shopify-Storefront-Access-Token: placeholder' -H 'Content-Type: application/json')
curl -s "${SF[@]}" -d '{"query":"{ products(first: 10, query: \"tag:summer\") { nodes { handle } } }"}' | jq -c '.data.products.nodes'
# -> [{"handle":"classic-tee"}]
curl -s "${SF[@]}" -d '{"query":"{ search(query: \"tee\", first: 5) { totalCount nodes { ... on Product { handle } } } }"}' | jq -c '.data.search'
# -> {"nodes":[{"handle":"classic-tee"}],"totalCount":1}
curl -s "${SF[@]}" -d '{"query":"{ productRecommendations(productHandle: \"classic-tee\") { handle } }"}' | jq -c '.data.productRecommendations'
# -> [{"handle":"trail-cap"},{"handle":"canvas-tote"},{"handle":"gift-card"}]
curl -s "${SF[@]}" -d '{"query":"{ product(handle: \"classic-tee\") { variantBySelectedOptions(selectedOptions: [{name: \"Size\", value: \"M\"}, {name: \"Color\", value: \"Natural\"}]) { id title } } }"}' | jq -c '.data.product.variantBySelectedOptions'
# -> {"id":"gid://shopify/ProductVariant/9002","title":"M / Natural"}
curl -s "${SF[@]}" -d '{"query":"{ products(first: 2) { nodes { handle } pageInfo { hasNextPage endCursor } } }"}' | jq -c '.data.products.pageInfo'
# -> {"endCursor":"Y3Vyc29yOjI=","hasNextPage":true}

Products and collections

The reads below return each product with its variants and each collection’s products in the store’s order.

ReadWhat it returns
product by id or handle, productByHandle, productseach product with its variants and its options with their values
collection, collectionByHandle, collectionseach collection’s products, in the store’s order

A variant returns these fields, through node and nodes too:

  • price and compareAtPrice
  • sku, quantityAvailable and availableForSale
  • selectedOptions and product

Every field that returns a product, such as search or collection.products, also returns these:

  • priceRange and compareAtPriceRange
  • each option’s optionValues
  • variantBySelectedOptions: the variant whose options equal the pairs you send, or null
  • selectedOrFirstAvailableVariant: that same match, else the first available variant

Search and recommendations

products(query:) filters by tag:. search, predictiveSearch, productRecommendations and productTags return results from the store’s products.

Differs from Shopify: the simulator doesn’t honor all of Shopify’s query syntax, so send plain terms. Limitations lists what it ignores or misreads.

Content and navigation

The simulator serves the store’s content and navigation through these fields:

RecordsFields
pagespage, pageByHandle, pages
blogs and articlesblog, blogByHandle, blogs, article, articles
menusmenu, with its nested items
metaobjectsmetaobject, metaobjects by type
redirectsurlRedirects
the shopshop, paymentSettings, localization, publicApiVersions
Last updated on