openapi: 3.1.0 info: title: Hyperice Storefront API version: '2026-04' description: >- The public, unauthenticated read surface of the Hyperice online store (hyperice.com), a Shopify-hosted storefront. Every path in this document is one that Hyperice itself publishes to agents in its own `/llms.txt` and `/agents.md` ("Read-Only Browsing (No Authentication Required)"), plus the store-level `/products.json` and `/collections.json` collections observed live. Schemas were derived from real responses fetched on 2026-07-31 — no field is invented. This document is an API Evangelist derivation, not a Hyperice-published contract. Hyperice publishes no OpenAPI of its own. The machine-readable contracts Hyperice DOES publish are (a) the Shopify Storefront GraphQL schema, live and introspectable at https://hyperice.com/api/2026-04/graphql.json and captured in `graphql/hyperice-storefront.graphql`, and (b) the UCP shopping service declared at https://hyperice.com/.well-known/ucp and served over MCP at https://hyperice.com/api/ucp/mcp. contact: name: Hyperice Customer Support url: https://hyperice.com/ license: name: Proprietary x-evidence: fetched: '2026-07-31' method: derived documented_by: - https://hyperice.com/llms.txt - https://hyperice.com/agents.md probed: - {url: 'https://hyperice.com/products.json', status: 200, content_type: application/json} - {url: 'https://hyperice.com/collections.json', status: 200, content_type: application/json} - {url: 'https://hyperice.com/products/open-box-hypervolt-go-3.json', status: 200, content_type: application/json} - {url: 'https://hyperice.com/collections/accessories/products.json', status: 200, content_type: application/json} - {url: 'https://hyperice.com/products/does-not-exist-xyz.json', status: 404, content_type: application/json} platform: Shopify servers: - url: https://hyperice.com description: Hyperice production storefront (US / primary domain) - url: https://hypericeprod.myshopify.com description: Canonical Shopify origin (declared in /.well-known/ucp) tags: - name: Products description: Product catalog read operations. - name: Collections description: Collection (category) read operations. - name: Discovery description: Agent- and crawler-facing discovery documents. paths: /products.json: get: operationId: listProducts summary: List published products description: >- Returns the store's published products. Paginated with `limit` (max 250) and `page`. 68 products were published at the time of derivation. tags: [Products] parameters: - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Page' responses: '200': description: A page of products. content: application/json: schema: type: object required: [products] properties: products: type: array items: {$ref: '#/components/schemas/Product'} example: products: - id: 9440344998102 title: Open Box Hypervolt Go 2 handle: open-box-hypervolt-go-3 vendor: Hyperice product_type: Recovery Device /products/{handle}.json: get: operationId: getProduct summary: Get a single product by handle description: >- Returns one published product, keyed by its URL handle. Documented by Hyperice at /agents.md as `GET /products/{handle}.json`. tags: [Products] parameters: - $ref: '#/components/parameters/Handle' responses: '200': description: The product. content: application/json: schema: type: object required: [product] properties: product: {$ref: '#/components/schemas/Product'} '404': description: >- No published product with that handle. Observed to return an empty body with `content-type: application/json`. /collections.json: get: operationId: listCollections summary: List published collections tags: [Collections] parameters: - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Page' responses: '200': description: A page of collections. content: application/json: schema: type: object required: [collections] properties: collections: type: array items: {$ref: '#/components/schemas/Collection'} /collections/{handle}/products.json: get: operationId: listCollectionProducts summary: List products in a collection description: >- Returns the published products belonging to one collection. Documented by Hyperice at /agents.md as `GET /collections/{handle}/products.json`. tags: [Collections] parameters: - $ref: '#/components/parameters/Handle' - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Page' responses: '200': description: A page of products in the collection. content: application/json: schema: type: object required: [products] properties: products: type: array items: {$ref: '#/components/schemas/Product'} '404': description: No such collection. /sitemap.xml: get: operationId: getSitemap summary: Get the sitemap index description: >- Sitemap index linking per-locale product, page, collection and blog sitemaps, plus `sitemap_agentic_discovery.xml`, which points at `/agents.md`. tags: [Discovery] responses: '200': description: Sitemap index XML. content: application/xml: schema: {type: string} /llms.txt: get: operationId: getLlmsTxt summary: Get the agent instructions (llms.txt) description: >- Hyperice's published agent instructions. Mirrors `/agents.md`. Declares UCP support, the MCP endpoint, and the read-only browsing surface. tags: [Discovery] responses: '200': description: llms.txt document. content: text/plain: schema: {type: string} /agents.md: get: operationId: getAgentsMd summary: Get the canonical agent-facing store description tags: [Discovery] responses: '200': description: agents.md document. content: text/markdown: schema: {type: string} /.well-known/ucp: get: operationId: getUcpProfile summary: Get the UCP merchant profile description: >- Universal Commerce Protocol discovery document: supported versions, service endpoints (the MCP shopping service), capabilities, and payment handlers. tags: [Discovery] responses: '200': description: UCP merchant profile. content: application/json: schema: {$ref: '#/components/schemas/UcpProfile'} components: parameters: Limit: name: limit in: query description: Number of records per page. Maximum 250. required: false schema: {type: integer, minimum: 1, maximum: 250, default: 50} Page: name: page in: query description: 1-indexed page number. required: false schema: {type: integer, minimum: 1, default: 1} Handle: name: handle in: path description: The URL handle (slug) of the resource. required: true schema: {type: string} example: open-box-hypervolt-go-3 schemas: Product: type: object description: A published storefront product. required: [id, title, handle] properties: id: {type: integer, format: int64, description: Shopify product id.} title: {type: string} handle: type: string description: URL slug; the key for the /products/{handle}.json operation. body_html: {type: string, description: HTML product description.} published_at: {type: string, format: date-time} created_at: {type: string, format: date-time} updated_at: {type: string, format: date-time} vendor: {type: string, example: Hyperice} product_type: {type: string, example: Recovery Device} tags: type: array items: {type: string} variants: type: array items: {$ref: '#/components/schemas/Variant'} images: type: array items: {$ref: '#/components/schemas/Image'} options: type: array items: {$ref: '#/components/schemas/Option'} Variant: type: object description: A purchasable variant of a product. required: [id, title, product_id] properties: id: {type: integer, format: int64} title: {type: string} option1: {type: [string, 'null']} option2: {type: [string, 'null']} option3: {type: [string, 'null']} sku: {type: [string, 'null']} requires_shipping: {type: boolean} taxable: {type: boolean} featured_image: {oneOf: [{$ref: '#/components/schemas/Image'}, {type: 'null'}]} available: {type: boolean} price: {type: string, description: Decimal string in the store currency (USD).} grams: {type: integer} compare_at_price: {type: [string, 'null']} position: {type: integer} product_id: {type: integer, format: int64, description: Reference to the parent Product.} created_at: {type: string, format: date-time} updated_at: {type: string, format: date-time} Image: type: object required: [id, src] properties: id: {type: integer, format: int64} created_at: {type: string, format: date-time} position: {type: integer} updated_at: {type: string, format: date-time} product_id: {type: integer, format: int64, description: Reference to the parent Product.} variant_ids: type: array description: Variants this image is attached to. items: {type: integer, format: int64} src: {type: string, format: uri} width: {type: integer} height: {type: integer} Option: type: object properties: name: {type: string} position: {type: integer} values: type: array items: {type: string} Collection: type: object description: A published storefront collection. required: [id, title, handle] properties: id: {type: integer, format: int64} title: {type: string} handle: {type: string} description: {type: string} published_at: {type: string, format: date-time} updated_at: {type: string, format: date-time} image: {oneOf: [{$ref: '#/components/schemas/Image'}, {type: 'null'}]} products_count: {type: integer} UcpProfile: type: object description: >- Universal Commerce Protocol merchant profile as served at /.well-known/ucp. Saved verbatim at well-known/hyperice-ucp.json. properties: ucp: type: object properties: version: {type: string, example: '2026-04-08'} supported_versions: {type: object, additionalProperties: {type: string, format: uri}} services: {type: object} capabilities: {type: object} payment_handlers: {type: object}