Hyperice Storefront JSON API

The unauthenticated read-only product and collection JSON surface Hyperice documents to agents in /agents.md under "Read-Only Browsing (No Authentication Required)" — /products.json, /products/{handle}.json, /collections.json and /collections/{handle}/products.json, plus the discovery documents.

OpenAPI Specification

hyperice-storefront-openapi.yml Raw ↑
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}