openapi: 3.2.0 info: title: Cometeer Storefront (read-only agent surface) Products API 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 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' /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: schemas: 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 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 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