ALSO Storefront JSON API

The read-only JSON storefront endpoints ALSO documents for agents in its own agents.md - product and collection listings, per-product and per-collection JSON, storefront search, and the live cart resource. Every path in the captured OpenAPI was probed live against ridealso.com.

OpenAPI Specification

also-storefront-json-openapi.yml Raw ↑
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.