openapi: 3.1.0
info:
title: ALSO Storefront JSON 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.
- name: Collections
description: Collection listings and the products within a collection.
- name: Search
description: Storefront search.
- name: Cart
description: The current session cart.
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}
/collections.json:
get:
operationId: listCollections
summary: List all published collections
tags: [Collections]
responses:
'200':
description: A list of published collections.
content:
application/json:
schema:
type: object
properties:
collections:
type: array
items: {$ref: '#/components/schemas/Collection'}
x-evidence:
fetched: '2026-08-02'
url: https://ridealso.com/collections.json
http_status: 200
/collections/{handle}/products.json:
get:
operationId: listCollectionProducts
summary: List the products in a collection
description: Returns the published products in a collection. Note - an unknown
collection handle was observed returning HTTP 200 with an empty product list
rather than 404.
tags: [Collections]
parameters:
- name: handle
in: path
required: true
description: The collection handle, e.g. `gear`.
schema: {type: string}
example: gear
- name: limit
in: query
required: false
schema: {type: integer, minimum: 1, maximum: 250}
- name: page
in: query
required: false
schema: {type: integer, minimum: 1}
responses:
'200':
description: The products in the collection.
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/collections/does-not-exist/products.json
http_status: 200
/cart.js:
get:
operationId: getCart
summary: Get the current session cart
description: Returns the cart bound to the caller's session cookie. An anonymous
caller receives an empty cart.
tags: [Cart]
responses:
'200':
description: The current cart.
content:
application/json:
schema: {$ref: '#/components/schemas/Cart'}
x-evidence:
fetched: '2026-08-02'
url: https://ridealso.com/cart.js
http_status: 200
content_type: text/javascript; charset=utf-8
/search:
get:
operationId: searchStorefront
summary: Search the storefront
description: Storefront search. Returns an HTML results page, not JSON - listed
here because ALSO advertises it to agents in agents.md.
tags: [Search]
parameters:
- name: q
in: query
required: true
description: The search query.
schema: {type: string}
- name: type
in: query
required: false
description: Resource type to search.
schema: {type: string, enum: [product, article, page]}
responses:
'200':
description: An HTML search results page.
content:
text/html:
schema: {type: string}
x-evidence:
fetched: '2026-08-02'
url: https://ridealso.com/agents.md
http_status: 200
note: advertised in the provider's own agents.md
components:
schemas:
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}
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}
Option:
type: object
properties:
name: {type: string}
position: {type: integer}
values:
type: array
items: {type: string}
Collection:
type: object
properties:
id: {type: integer}
title: {type: string}
handle: {type: string}
description: {type: string}
image: {oneOf: [{$ref: '#/components/schemas/Image'}, {type: 'null'}]}
products_count: {type: integer}
published_at: {type: string, format: date-time}
updated_at: {type: string, format: date-time}
Cart:
type: object
description: The session cart as returned by /cart.js.
properties:
token: {type: string}
note: {type: [string, 'null']}
attributes: {type: object}
currency: {type: string}
item_count: {type: integer}
items:
type: array
items: {type: object}
items_subtotal_price: {type: integer}
original_total_price: {type: integer}
total_price: {type: integer}
total_discount: {type: integer}
total_weight: {type: number}
requires_shipping: {type: boolean}
cart_level_discount_applications:
type: array
items: {type: object}
discount_codes:
type: array
items: {type: object}
ⓘ
Where this information came from
This is an independent, third-party profile of ALSO Storefront JSON API, published by
API Evangelist. We do not operate, host, resell, or
support these APIs, and we are not affiliated with or endorsed by the company unless stated above.
Everything here is built from publicly available information — the company's own site,
developer portal, documentation, public repositories, and the specifications it publishes for public use.
Nothing is obtained by breaching a system, defeating an access control, or using credentials.
The Kin Score and Agent Readiness rating are independently calculated assessments of a company's
public API artifacts, scored against a published rubric. They are not certifications,
endorsements, security assessments, or audits.
Corrections, re-scores, and removal are free — no partnership or purchase required, and
you do not need to justify the request. A removed company is recorded as unrated, never scored
zero for having asked. Acknowledgement within one business day; removal within two.
info@apievangelist.com
·
Read the full data-sourcing policy →
On a security or compliance team? Put security in the subject line and
you will get a person, not a form — we will tell you exactly which public URLs this profile was built from.