Brooklinen Shopify Storefront JSON API

Read-only, unauthenticated JSON endpoints over the Brooklinen Shopify storefront, documented by the store itself in /agents.md for agents that only need to read store data without transacting. Covers the full product list, per-product detail, per-collection product lists, predictive search suggestions and the session cart. Every operation captured here was probed live and returned HTTP 200.

OpenAPI Specification

brooklinen-storefront-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Brooklinen Shopify Storefront JSON API
  version: '2026-08-02'
  summary: Read-only JSON endpoints over the Brooklinen Shopify storefront.
  description: >-
    Unauthenticated, read-only JSON endpoints over the Brooklinen storefront at https://www.brooklinen.com.
    Brooklinen documents this surface itself, in the "Read-Only Browsing (No Authentication Required)"
    section of https://www.brooklinen.com/agents.md (mirrored at /llms.txt), for agents that need to read
    store data without transacting.


    NOT A PROVIDER-PUBLISHED SPEC. Brooklinen publishes no OpenAPI document. This description was generated
    by the API Evangelist enrichment pipeline from (a) the endpoint list Brooklinen publishes in /agents.md
    and (b) live probes of each endpoint on 2026-08-02. Every path below returned HTTP 200 when probed and
    every schema property below was observed in a real response body — nothing here is invented. Per-operation
    `x-evidence` records the probe. For transactional operations (cart, checkout, order) see the UCP/MCP
    surface at https://www.brooklinen.com/api/ucp/mcp, described in mcp/brooklinen-mcp.yml.
  contact:
    name: Brooklinen
    url: https://www.brooklinen.com/pages/contact
  termsOfService: https://www.brooklinen.com/policies/terms-of-service
  x-generated: '2026-08-02'
  x-method: generated
  x-source: https://www.brooklinen.com/agents.md
servers:
- url: https://www.brooklinen.com
  description: Brooklinen production storefront (Shopify)
tags:
- name: Products
  description: Product catalog listing and detail.
- name: Collections
  description: Products grouped into merchandising collections.
- name: Search
  description: Predictive storefront search.
- name: Cart
  description: Read-only view of the current session cart.
- name: Discovery
  description: Sitemaps and agent discovery documents.
paths:
  /products.json:
    get:
      operationId: listProducts
      tags:
      - Products
      summary: List products
      description: >-
        Returns the store's published products with their variants, images and options. Paginated with
        `limit` and `page`.
      parameters:
      - $ref: '#/components/parameters/Limit'
      - $ref: '#/components/parameters/Page'
      responses:
        '200':
          description: A page of products.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductList'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-evidence:
        fetched: '2026-08-02'
        url: https://www.brooklinen.com/products.json?limit=1
        http_status: 200
        content_type: application/json; charset=utf-8
  /products/{handle}.json:
    get:
      operationId: getProduct
      tags:
      - Products
      summary: Get a product by handle
      description: Returns a single published product, addressed by its URL handle.
      parameters:
      - $ref: '#/components/parameters/Handle'
      responses:
        '200':
          description: The product.
          content:
            application/json:
              schema:
                type: object
                required:
                - product
                properties:
                  product:
                    $ref: '#/components/schemas/Product'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-evidence:
        fetched: '2026-08-02'
        url: https://www.brooklinen.com/products/dreamweave-waffle-robe-last-call.json
        http_status: 200
        content_type: application/json; charset=utf-8
  /collections/{handle}/products.json:
    get:
      operationId: listCollectionProducts
      tags:
      - Collections
      summary: List products in a collection
      description: >-
        Returns the published products in a merchandising collection. The `all` handle returns the full
        catalog.
      parameters:
      - $ref: '#/components/parameters/Handle'
      - $ref: '#/components/parameters/Limit'
      - $ref: '#/components/parameters/Page'
      responses:
        '200':
          description: A page of products in the collection.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductList'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-evidence:
        fetched: '2026-08-02'
        url: https://www.brooklinen.com/collections/all/products.json?limit=1&page=1
        http_status: 200
        content_type: application/json; charset=utf-8
  /search/suggest.json:
    get:
      operationId: suggestSearch
      tags:
      - Search
      summary: Predictive search suggestions
      description: >-
        Returns predictive search results for a query. Brooklinen's /agents.md documents storefront search as
        `GET /search?q={query}&type=product`, which renders HTML; this JSON variant was probed live and
        returns structured product results.
      parameters:
      - name: q
        in: query
        required: true
        description: The search query.
        schema:
          type: string
        example: sheets
      - name: resources[type]
        in: query
        required: false
        description: Comma-separated resource types to search (e.g. `product`, `collection`, `page`, `article`).
        schema:
          type: string
        example: product
      responses:
        '200':
          description: Predictive search results.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchSuggestions'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-evidence:
        fetched: '2026-08-02'
        url: https://www.brooklinen.com/search/suggest.json?q=sheets&resources%5Btype%5D=product
        http_status: 200
        content_type: application/json; charset=utf-8
  /cart.js:
    get:
      operationId: getCart
      tags:
      - Cart
      summary: Get the current session cart
      description: >-
        Returns the cart bound to the caller's session cookie. Anonymous callers receive a new, empty cart.
        Transactional cart and checkout operations are on the UCP/MCP surface, not here.
      responses:
        '200':
          description: The session cart.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Cart'
        '429':
          $ref: '#/components/responses/RateLimited'
      x-evidence:
        fetched: '2026-08-02'
        url: https://www.brooklinen.com/cart.js
        http_status: 200
        content_type: text/javascript; charset=utf-8
  /agents.md:
    get:
      operationId: getAgentInstructions
      tags:
      - Discovery
      summary: Get the store's agent instruction document
      description: >-
        The canonical agent-facing description of the store, listed in /robots.txt and in
        /sitemap_agentic_discovery.xml. Mirrored at /llms.txt.
      responses:
        '200':
          description: Agent instructions in Markdown.
          content:
            text/markdown:
              schema:
                type: string
      x-evidence:
        fetched: '2026-08-02'
        url: https://www.brooklinen.com/agents.md
        http_status: 200
        content_type: text/markdown; charset=utf-8
  /.well-known/ucp:
    get:
      operationId: getUcpProfile
      tags:
      - Discovery
      summary: Get the UCP merchant discovery profile
      description: >-
        Returns the store's Universal Commerce Protocol merchant profile — supported protocol versions,
        service endpoints (including the MCP endpoint), negotiated capabilities and payment handlers.
      responses:
        '200':
          description: The UCP merchant profile.
          content:
            application/json:
              schema:
                type: object
      x-evidence:
        fetched: '2026-08-02'
        url: https://www.brooklinen.com/.well-known/ucp
        http_status: 200
        content_type: application/json; charset=utf-8
  /sitemap.xml:
    get:
      operationId: getSitemapIndex
      tags:
      - Discovery
      summary: Get the sitemap index
      description: >-
        Parent sitemap linking to the agentic discovery, product, page, collection and blog sitemaps.
      responses:
        '200':
          description: Sitemap index XML.
          content:
            application/xml:
              schema:
                type: string
      x-evidence:
        fetched: '2026-08-02'
        url: https://www.brooklinen.com/sitemap.xml
        http_status: 200
        content_type: application/xml; charset=utf-8
components:
  parameters:
    Limit:
      name: limit
      in: query
      required: false
      description: Number of products to return per page.
      schema:
        type: integer
        minimum: 1
      example: 1
    Page:
      name: page
      in: query
      required: false
      description: 1-indexed page number.
      schema:
        type: integer
        minimum: 1
      example: 1
    Handle:
      name: handle
      in: path
      required: true
      description: The URL handle of the resource.
      schema:
        type: string
      example: dreamweave-waffle-robe-last-call
  responses:
    NotFound:
      description: The requested resource does not exist.
    RateLimited:
      description: >-
        Too many requests. Brooklinen's /agents.md instructs agents to back off on 429 responses.
  schemas:
    ProductList:
      type: object
      required:
      - products
      properties:
        products:
          type: array
          items:
            $ref: '#/components/schemas/Product'
    Product:
      type: object
      description: A published storefront product. Properties observed in a live /products.json response.
      properties:
        id:
          type: integer
          description: Shopify product identifier.
        title:
          type: string
        handle:
          type: string
          description: URL slug used to address the product.
        body_html:
          type: string
          description: Product description as HTML.
        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
        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: Identifier of the parent product.
        title:
          type: string
        option1:
          type:
          - string
          - 'null'
        option2:
          type:
          - string
          - 'null'
        option3:
          type:
          - string
          - 'null'
        sku:
          type:
          - string
          - 'null'
        price:
          type: string
        compare_at_price:
          type:
          - string
          - 'null'
        available:
          type: boolean
        requires_shipping:
          type: boolean
        taxable:
          type: boolean
        grams:
          type: integer
        position:
          type: integer
        featured_image:
          anyOf:
          - $ref: '#/components/schemas/Image'
          - type: 'null'
        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
    SearchSuggestions:
      type: object
      description: Predictive search envelope observed on /search/suggest.json.
      properties:
        resources:
          type: object
          properties:
            results:
              type: object
              properties:
                products:
                  type: array
                  items:
                    type: object
                    properties:
                      title:
                        type: string
                      handle:
                        type: string
                      url:
                        type: string
                      body:
                        type: string
                      available:
                        type: boolean
                      price:
                        type: string
    Cart:
      type: object
      description: The session cart, as observed on /cart.js.
      properties:
        token:
          type: string
        note:
          type:
          - string
          - 'null'
        attributes:
          type: object
        original_total_price:
          type: integer
        total_price:
          type: integer
        total_discount:
          type: integer
        total_weight:
          type: number
        item_count:
          type: integer
        requires_shipping:
          type: boolean
        currency:
          type: string
        items:
          type: array
          items:
            type: object