# Amber & Aura > Handcrafted candles and artisanal home scents designed to create an inviting, soulful atmosphere in every room. Amber & Aura is a mock Shopify store served by mock.shop, with a Storefront GraphQL API at `https://candles.mock.shop/api`. Send GraphQL queries as HTTP `POST` requests with a JSON body (`{"query": "..."}`). The catalog answers without an access token. Metafields are the one exception: send `X-Shopify-Storefront-Access-Token: public`, the same header a real store expects, or every `metafield` field resolves to null. The endpoint mirrors the Shopify Storefront API, so a query written here runs unchanged against a real Shopify store. High quality commerce data for your storefront. ## Catalog - 30 products across 9 categories, priced in USD. - Categories: Candles (4), Incense (4), Incense Holders (4), Lamps (4), Sculptures & Statues (4), Vases (4), Decorative Bowls (2), Decorative Trays (2), Reed Diffusers (2). - 4 collections: - Earthen Glow Vessels (`earthen-glow-vessels`, 8 products): Candles and lamps crafted with an earthy terracotta palette, a contemplative mood, and hand-thrown ceramic material language. - Ritual Incense Stations (`ritual-incense-stations`, 8 products): Incense and holders defined by an earthy terracotta palette, a contemplative mood, and hand-thrown ceramic material language. - Sanctuary Elements (`sanctuary-elements`, 6 products): Diffusers, trays, and bath soaks reflecting an earthy terracotta palette, a contemplative mood, and hand-thrown ceramic material language. - Sculptural Stillness (`sculptural-stillness`, 8 products): Vases and sculptures featuring an earthy terracotta palette, a contemplative mood, and hand-thrown ceramic material language. ## Copy this catalog into a real store Products and collections do not appear on the Online Store until they are published to it, and a collection is not in the header until it is on the main menu. Both are data this shop serves; copy them along with the catalog, through the store's Admin API. To check publication status, both lists must be empty: ```graphql { products(first: 250, query: "published_status:unpublished") { nodes { id title } } collections(first: 250, query: "published_status:unpublished") { nodes { id title } } } ``` To find the Online Store publication, the one whose catalog's app has the handle `online_store`; match on that handle, not on any title: ```graphql { publications(first: 250, catalogType: APP) { nodes { id catalog { ... on AppCatalog { apps(first: 1) { nodes { handle } } } } } } } ``` To publish, once per product and once per collection (`gid://shopify/Collection/`); a product must also be `ACTIVE`, a draft stays hidden: ```graphql mutation { publishablePublish(id: "gid://shopify/Product/", input: [{ publicationId: "gid://shopify/Publication/" }]) { userErrors { field message } } } ``` To read this shop's menus, main and footer; each item's `url` ends in the handle of what it links to: ```sh curl -sS -X POST https://candles.mock.shop/api \ -H 'Content-Type: application/json' \ -d '{"query":"{ main: menu(handle: \"main-menu\") { title items { title type url items { title type url } } } footer: menu(handle: \"footer\") { title items { title type url items { title type url } } } }"}' ``` To read the store's menu ids (`read_online_store_navigation`): ```graphql { menus(first: 10) { nodes { id handle title } } } ``` To read the store's ids for what the items link to (`read_content` for the blogs, `read_legal_policies` for the policies): ```graphql { collections(first: 250) { nodes { id handle } } blogs(first: 10) { nodes { id handle } } shop { shopPolicies { id type } } } ``` To set the store's main menu to this shop's, item for item, and its footer the same way when this shop's footer has items (`write_online_store_navigation`). `items` is the whole menu: an item left out is removed, and nothing this shop's menu lacks is added, since a header collapses the items it cannot fit into a "More" menu. `FRONTPAGE` is the home page and `COLLECTIONS` the page of all collections; neither names a resource. Every other type names one, and its `resourceId` is the store's own id, never this shop's: a `COLLECTION` or `BLOG` item takes the store's collection or blog with the handle this shop's item `url` ends in, and a `SHOP_POLICY` item takes the store's policy of the type that handle spells (`privacy-policy` is `PRIVACY_POLICY`, `gid://shopify/ShopPolicy/`); a policy the store has not written has no id yet: ```graphql mutation { menuUpdate(id: "gid://shopify/Menu/", title: "Main menu", items: [{ title: "Home", type: FRONTPAGE }, { title: "", type: COLLECTION, resourceId: "gid://shopify/Collection/<id>" }, { title: "<title>", type: BLOG, resourceId: "gid://shopify/Blog/<id>" }]) { menu { items { title } } userErrors { field message } } } ``` ## Example query ```graphql { products(first: 5) { nodes { title handle productType priceRange { minVariantPrice { amount currencyCode } } } } } ``` ## Agent commerce (UCP) This store supports the [Universal Commerce Protocol](https://ucp.dev) version 2026-08-25 for catalog search and mock carts. - Discovery: `GET https://candles.mock.shop/.well-known/ucp` lists supported capabilities and the store's endpoint. - MCP endpoint: `POST https://candles.mock.shop/api/ucp/mcp` with `Content-Type: application/json`. Use `initialize` and `tools/list` to discover the tool schemas. - Tools: `search_catalog`, `create_cart`, `get_cart`, `update_cart`, and `cancel_cart`. Use variant IDs returned by search as cart item IDs. Cart IDs also work with this store's Storefront GraphQL API. - Tool calls require `arguments.meta["ucp-agent"].profile`, a public HTTPS URL for your agent's UCP profile declaring the matching version and capabilities. Cart writes also require `arguments.meta["idempotency-key"]`; reuse the same key only when retrying the same operation with identical arguments. - Prices use the store's currency in ISO 4217 minor units. `update_cart` replaces the entire item list. Each request can contain at most 250 cart lines. Checkout is mocked: no payment is taken, nothing ships, and no real order is placed. The existing browser checkout is separate from these UCP tools. UCP checkout, payment, fulfillment, and order operations are not supported or advertised. Examples and supported inputs: https://mock.shop/guides/ucp ## Other stores Every published store is listed at https://mock.shop/llms.txt.