Cometeer Storefront (read-only)

The public, unauthenticated JSON browsing surface of the Cometeer online store — products, collections, search and sitemap. Cometeer documents these endpoints for agents itself, under "Read-Only Browsing (No Authentication Required)" in its /llms.txt. No credential is required and no rate-limit headers are published.

OpenAPI Specification

cometeer-storefront-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Cometeer Storefront (read-only agent surface)
  version: '2026-08-01'
  summary: Public, unauthenticated JSON endpoints of the Cometeer online store.
  description: |
    Cometeer publishes a read-only browsing surface for agents in its own
    `/llms.txt` under the heading "Read-Only Browsing (No Authentication
    Required)". This document is a faithful OpenAPI rendering of exactly the
    endpoints Cometeer names there, with schemas derived from live observed
    responses on 2026-08-01. It is NOT a Cometeer-authored specification, and
    it is NOT the transactional surface — carts, checkouts and orders are only
    reachable through the UCP MCP endpoint catalogued in
    `mcp/cometeer-mcp.yml`.

    Provenance: generated from https://cometeer.com/llms.txt; every path below
    was probed and returned HTTP 200. No endpoint has been invented.
  contact:
    name: Cometeer Support
    url: https://help.cometeer.com/
  license:
    name: Terms of Service
    url: https://cometeer.com/policies/terms-of-service
  x-provenance:
    generated: '2026-08-01'
    method: generated
    source: https://cometeer.com/llms.txt
    authored_by: API Evangelist enrichment pipeline
    platform: Shopify
servers:
- url: https://cometeer.com
  description: Cometeer production storefront
tags:
- name: Products
  description: Product catalog browsing
- name: Collections
  description: Collection (category) browsing
- name: Search
  description: Storefront search
paths:
  /products.json:
    get:
      operationId: listProducts
      tags: [Products]
      summary: List all products
      description: >-
        Returns the store's published products as JSON. Paginated with `page`
        and `limit`. Documented in Cometeer's /llms.txt as "Browse all
        products".
      parameters:
      - name: limit
        in: query
        description: Number of products per page (Shopify caps this at 250).
        required: false
        schema: {type: integer, minimum: 1, maximum: 250, default: 30}
      - name: page
        in: query
        description: 1-indexed page number.
        required: false
        schema: {type: integer, minimum: 1, default: 1}
      responses:
        '200':
          description: A page of products.
          content:
            application/json:
              schema:
                type: object
                properties:
                  products:
                    type: array
                    items: {$ref: '#/components/schemas/Product'}
        '404': {$ref: '#/components/responses/NotFound'}
        '429': {$ref: '#/components/responses/TooManyRequests'}
  /products/{handle}.json:
    get:
      operationId: getProduct
      tags: [Products]
      summary: Get a single product by handle
      description: Documented in Cometeer's /llms.txt as "Product JSON".
      parameters:
      - name: handle
        in: path
        required: true
        description: The product's URL handle, e.g. `frozen-gold-ember-espresso`.
        schema: {type: string}
      responses:
        '200':
          description: The product.
          content:
            application/json:
              schema:
                type: object
                properties:
                  product: {$ref: '#/components/schemas/Product'}
        '404': {$ref: '#/components/responses/NotFound'}
        '429': {$ref: '#/components/responses/TooManyRequests'}
  /collections/{handle}/products.json:
    get:
      operationId: listCollectionProducts
      tags: [Collections]
      summary: List products in a collection
      description: >-
        Documented in Cometeer's /llms.txt as "Collection JSON". The `all`
        handle returns every product in the store.
      parameters:
      - name: handle
        in: path
        required: true
        description: The collection's URL handle, e.g. `all`.
        schema: {type: string}
      - name: limit
        in: query
        required: false
        schema: {type: integer, minimum: 1, maximum: 250, default: 30}
      - name: page
        in: query
        required: false
        schema: {type: integer, minimum: 1, default: 1}
      responses:
        '200':
          description: A page of products in the collection.
          content:
            application/json:
              schema:
                type: object
                properties:
                  products:
                    type: array
                    items: {$ref: '#/components/schemas/Product'}
        '404': {$ref: '#/components/responses/NotFound'}
        '429': {$ref: '#/components/responses/TooManyRequests'}
  /search:
    get:
      operationId: searchProducts
      tags: [Search]
      summary: Search the storefront
      description: >-
        Documented in Cometeer's /llms.txt as "Search". Returns an HTML results
        page; there is no JSON representation of this endpoint on the
        storefront. Agents needing structured search should use the UCP MCP
        `search_catalog` tool instead (see mcp/cometeer-mcp.yml).
      parameters:
      - name: q
        in: query
        required: true
        description: The search query.
        schema: {type: string}
      - name: type
        in: query
        required: false
        description: Restrict results to a resource type.
        schema: {type: string, enum: [product, article, page]}
      responses:
        '200':
          description: HTML search results page.
          content:
            text/html:
              schema: {type: string}
        '429': {$ref: '#/components/responses/TooManyRequests'}
  /sitemap.xml:
    get:
      operationId: getSitemap
      tags: [Products]
      summary: Store sitemap index
      description: Documented in Cometeer's /llms.txt under "Store Metadata".
      responses:
        '200':
          description: XML sitemap index.
          content:
            application/xml:
              schema: {type: string}
components:
  responses:
    NotFound:
      description: The requested resource does not exist.
      content:
        text/html:
          schema: {type: string}
    TooManyRequests:
      description: >-
        Rate limited. Cometeer's /llms.txt instructs agents to back off on 429
        responses.
      content:
        text/html:
          schema: {type: string}
  schemas:
    Product:
      type: object
      description: A storefront product, as observed in live responses.
      properties:
        id: {type: integer, format: int64}
        title: {type: string}
        handle: {type: string}
        body_html: {type: string}
        published_at: {type: string, format: date-time}
        created_at: {type: string, format: date-time}
        updated_at: {type: string, format: date-time}
        vendor: {type: string, examples: [Cometeer]}
        product_type: {type: string, examples: [Coffee Sleeve, Merchandise]}
        template_suffix: {type: [string, 'null']}
        published_scope: {type: string}
        tags:
          type: array
          items: {type: string}
        variants:
          type: array
          items: {$ref: '#/components/schemas/Variant'}
        images:
          type: array
          items: {$ref: '#/components/schemas/Image'}
        image: {$ref: '#/components/schemas/Image'}
        options:
          type: array
          items: {$ref: '#/components/schemas/Option'}
    Variant:
      type: object
      description: A purchasable variant of a product.
      properties:
        id: {type: integer, format: int64}
        product_id: {type: integer, format: int64}
        title: {type: string}
        sku: {type: [string, 'null']}
        barcode: {type: [string, 'null']}
        position: {type: integer}
        price: {type: string}
        price_currency: {type: string, examples: [USD]}
        compare_at_price: {type: [string, 'null']}
        compare_at_price_currency: {type: [string, 'null']}
        option1: {type: [string, 'null']}
        option2: {type: [string, 'null']}
        option3: {type: [string, 'null']}
        grams: {type: integer}
        weight: {type: number}
        weight_unit: {type: string}
        taxable: {type: boolean}
        tax_code: {type: [string, 'null']}
        requires_shipping: {type: boolean}
        fulfillment_service: {type: [string, 'null']}
        inventory_management: {type: [string, 'null']}
        image_id: {type: [integer, 'null'], format: int64}
        quantity_rule: {type: object}
        quantity_price_breaks: {type: array, items: {type: object}}
        created_at: {type: string, format: date-time}
        updated_at: {type: string, format: date-time}
    Image:
      type: object
      properties:
        id: {type: integer, format: int64}
        product_id: {type: integer, format: int64}
        src: {type: string, format: uri}
        alt: {type: [string, 'null']}
        width: {type: integer}
        height: {type: integer}
        position: {type: integer}
        variant_ids:
          type: array
          items: {type: integer, format: int64}
        created_at: {type: string, format: date-time}
        updated_at: {type: string, format: date-time}
    Option:
      type: object
      properties:
        id: {type: integer, format: int64}
        product_id: {type: integer, format: int64}
        name: {type: string}
        position: {type: integer}
        values:
          type: array
          items: {type: string}