Also Products API
Product catalog listings and per-product detail.
Product catalog listings and per-product detail.
openapi: 3.2.0
info:
title: ALSO Storefront JSON Products API
version: '2026-08-02'
summary: Read-only JSON storefront endpoints ALSO publishes for agents at ridealso.com.
description: 'ALSO does not publish an OpenAPI document. This description was **generated by API Evangelist**
from the read-only endpoints ALSO itself enumerates for agents in its published
`/agents.md` (mirrored at `/llms.txt`), and every path below was probed live against
`https://ridealso.com` on 2026-08-02 with the observed HTTP status recorded in
`x-evidence`. Schemas were derived from the actual response bodies returned by those
probes - no field is asserted that was not observed.
This is an AE-generated contract for a real, callable surface. It is **not** a document
published or endorsed by ALSO. The provider''s own machine-readable contracts are the
Storefront GraphQL schema (`graphql/also-storefront-2026-07.graphql`, captured by open
introspection) and the UCP profile at `/.well-known/ucp`.
'
contact:
name: ALSO Media
email: media@ridealso.com
url: https://ridealso.com/pages/contact
x-generated-by: API Evangelist enrichment pipeline (local-v1)
x-provider-published: false
x-source: https://ridealso.com/agents.md
servers:
- url: https://ridealso.com
description: ALSO storefront (Shopify-hosted, primary domain)
tags:
- name: Products
description: Product catalog listings and per-product detail.
paths:
/products.json:
get:
operationId: listProducts
summary: List all published products
description: Returns every published product on the storefront. Observed 23 products on 2026-08-02.
tags:
- Products
parameters:
- name: limit
in: query
required: false
description: Maximum number of products to return per page.
schema:
type: integer
minimum: 1
maximum: 250
- name: page
in: query
required: false
description: Page number for pagination.
schema:
type: integer
minimum: 1
responses:
'200':
description: A list of published products.
content:
application/json:
schema:
type: object
properties:
products:
type: array
items:
$ref: '#/components/schemas/Product'
x-evidence:
fetched: '2026-08-02'
url: https://ridealso.com/products.json
http_status: 200
content_type: application/json; charset=utf-8
/products/{handle}.json:
get:
operationId: getProduct
summary: Get one product by handle
tags:
- Products
parameters:
- name: handle
in: path
required: true
description: The product handle, e.g. `tm-b`.
schema:
type: string
example: tm-b
responses:
'200':
description: The product.
content:
application/json:
schema:
type: object
properties:
product:
$ref: '#/components/schemas/Product'
'404':
description: No published product exists with that handle.
content:
application/json:
schema:
type: object
x-evidence:
fetched: '2026-08-02'
url: https://ridealso.com/products/tm-b.json
http_status: 200
not_found_probe:
url: https://ridealso.com/products/does-not-exist.json
http_status: 404
components:
schemas:
Option:
type: object
properties:
name:
type: string
position:
type: integer
values:
type: array
items:
type: string
Image:
type: object
properties:
id:
type: integer
product_id:
type: integer
variant_ids:
type: array
items:
type: integer
src:
type: string
format: uri
width:
type: integer
height:
type: integer
position:
type: integer
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
Product:
type: object
description: A published storefront product.
properties:
id:
type: integer
description: Numeric product identifier.
title:
type: string
handle:
type: string
description: URL slug for the product.
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
product_type:
type: string
description: 'Observed values include Vehicle, Module: Top Frame, Clothing, Hats.'
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.
properties:
id:
type: integer
product_id:
type: integer
description: The parent product id.
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: Price as a decimal string.
compare_at_price:
type:
- string
- 'null'
grams:
type: integer
position:
type: integer
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time