Also Products API

Product catalog listings and per-product detail.

OpenAPI Specification

also-products-api-openapi.yml Raw ↑
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