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}