{
  "openapi": "3.1.0",
  "info": {
    "title": "Cloud Store CBD - public Shopify AJAX endpoints",
    "version": "1.0.0",
    "summary": "Read-only catalog, predictive search and anonymous cart endpoints of cloud-store-cbd.com.",
    "description": "Public, unauthenticated Shopify AJAX (storefront) endpoints of Cloud Store CBD, a legal CBD shop in France (hemp products with THC below 0.3 %, for adults 18+ only).\n\nThese are the standard Shopify AJAX API endpoints served on the store domain; this shop has no custom API of its own. Only endpoints that were called against the live store are described here (status codes, Content-Type and response shapes as observed on 2026-10-24); responses may contain more fields than listed. No authentication, OAuth or scopes are involved: every endpoint is public.\n\nFor search, cart and checkout by AI agents, prefer UCP (Universal Commerce Protocol), discoverable at https://www.cloud-store-cbd.com/.well-known/ucp. Plain-text guidance for LLMs: https://www.cloud-store-cbd.com/llms.txt (and https://www.cloud-store-cbd.com/agents.md).\n\nNotes: /products/{handle}.js, /cart.js and /cart/add.js send JSON bodies with Content-Type text/javascript. Every response carries a Link header pointing to /.well-known/ucp.",
    "contact": {
      "name": "Cloud Store CBD",
      "url": "https://www.cloud-store-cbd.com"
    }
  },
  "servers": [
    {
      "url": "https://www.cloud-store-cbd.com",
      "description": "Production storefront"
    }
  ],
  "externalDocs": {
    "description": "Shopify AJAX API reference",
    "url": "https://shopify.dev/docs/api/ajax"
  },
  "security": [],
  "tags": [
    {
      "name": "Catalog",
      "description": "Products and collections."
    },
    {
      "name": "Search",
      "description": "Predictive search."
    },
    {
      "name": "Cart",
      "description": "Anonymous cart tied to the visitor session cookie."
    }
  ],
  "paths": {
    "/products.json": {
      "get": {
        "operationId": "listProducts",
        "tags": [
          "Catalog"
        ],
        "security": [],
        "summary": "List published products",
        "description": "Paginated list of the products published on the online store, with variants (prices as decimal strings), images and options.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Number of items per page. Default 30 when omitted (0 or a non-numeric value also gives 30)."
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Page number (1-based). A page past the end returns an empty array; page x limit above 25000 returns 400."
          }
        ],
        "responses": {
          "200": {
            "description": "Product list.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductsList"
                }
              }
            }
          },
          "400": {
            "description": "Page x limit exceeds 25000 (observed with a very high `page`). JSON body {\"errors\": \"...\"}.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PagingError"
                }
              }
            }
          }
        }
      }
    },
    "/collections.json": {
      "get": {
        "operationId": "listCollections",
        "tags": [
          "Catalog"
        ],
        "security": [],
        "summary": "List published collections",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Number of items per page."
          }
        ],
        "responses": {
          "200": {
            "description": "Collection list.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CollectionsList"
                }
              }
            }
          }
        }
      }
    },
    "/collections/{handle}.json": {
      "get": {
        "operationId": "getCollection",
        "tags": [
          "Catalog"
        ],
        "security": [],
        "summary": "Get one collection",
        "parameters": [
          {
            "name": "handle",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Collection handle (URL slug), e.g. toutes-nos-fleurs."
          }
        ],
        "responses": {
          "200": {
            "description": "The collection.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CollectionEnvelope"
                }
              }
            }
          },
          "404": {
            "description": "Unknown handle. Empty body (no JSON), Content-Type application/json."
          }
        }
      }
    },
    "/collections/{handle}/products.json": {
      "get": {
        "operationId": "listCollectionProducts",
        "tags": [
          "Catalog"
        ],
        "security": [],
        "summary": "List the products of a collection",
        "description": "Same product shape as /products.json. An unknown collection handle does NOT return 404: it returns 200 with {\"products\": []}.",
        "parameters": [
          {
            "name": "handle",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Collection handle (URL slug), e.g. toutes-nos-fleurs."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Number of items per page."
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Page number (1-based). A page past the end returns an empty array; page x limit above 25000 returns 400."
          }
        ],
        "responses": {
          "200": {
            "description": "Products of the collection (empty array for an unknown handle).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductsList"
                }
              }
            }
          },
          "400": {
            "description": "Page x limit exceeds 25000 (observed with a very high `page`). JSON body {\"errors\": \"...\"}.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PagingError"
                }
              }
            }
          }
        }
      }
    },
    "/products/{handle}.js": {
      "get": {
        "operationId": "getProductJs",
        "tags": [
          "Catalog"
        ],
        "security": [],
        "summary": "Get one product (AJAX product object)",
        "description": "Prices are integers in cents. The body is JSON even though the Content-Type is text/javascript.",
        "parameters": [
          {
            "name": "handle",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Product handle (URL slug), e.g. mousseux-cbn."
          }
        ],
        "responses": {
          "200": {
            "description": "The product.",
            "content": {
              "text/javascript": {
                "schema": {
                  "$ref": "#/components/schemas/ProductJs"
                }
              }
            }
          },
          "404": {
            "description": "Unknown handle. Empty body (no JSON). The Content-Type follows the request Accept header (text/javascript with Accept: */*, application/json with Accept: application/json)."
          }
        }
      }
    },
    "/products/{handle}.json": {
      "get": {
        "operationId": "getProductJson",
        "tags": [
          "Catalog"
        ],
        "security": [],
        "summary": "Get one product (REST-style envelope)",
        "description": "Prices are decimal strings; tags is a comma-separated string.",
        "parameters": [
          {
            "name": "handle",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Product handle (URL slug), e.g. mousseux-cbn."
          }
        ],
        "responses": {
          "200": {
            "description": "The product.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductJsonEnvelope"
                }
              }
            }
          },
          "404": {
            "description": "Unknown handle. Empty body (no JSON), Content-Type application/json."
          }
        }
      }
    },
    "/search/suggest.json": {
      "get": {
        "operationId": "searchSuggest",
        "tags": [
          "Search"
        ],
        "security": [],
        "summary": "Predictive search",
        "description": "Predictive search over products, collections, pages and articles. Returned URLs carry tracking query parameters.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Search terms. Missing or empty: 422 (\"param is missing or the value is empty: q\")."
          },
          {
            "name": "resources[type]",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated groups to return. Values observed to work: product, collection, page, article, query (e.g. \"product,collection\"). Without it: collections, pages, products and queries. Any other value: 422 \"Type `x` is not supported.\""
          },
          {
            "name": "resources[limit]",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Maximum results per group. Observed: 50 still returned only 10 products; 0 returned 1."
          }
        ],
        "responses": {
          "200": {
            "description": "Search results (empty arrays when nothing matches).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuggestResponse"
                }
              }
            }
          },
          "422": {
            "description": "Missing/empty q, or unsupported resources[type].",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/cart.js": {
      "get": {
        "operationId": "getCart",
        "tags": [
          "Cart"
        ],
        "security": [],
        "summary": "Read the current cart",
        "description": "The cart is tied to the visitor session (cookie). Prices are integers in cents. The body is JSON even though the Content-Type is text/javascript.",
        "responses": {
          "200": {
            "description": "The cart (empty without a session cookie).",
            "content": {
              "text/javascript": {
                "schema": {
                  "$ref": "#/components/schemas/Cart"
                }
              }
            }
          }
        }
      }
    },
    "/cart/add.js": {
      "post": {
        "operationId": "addToCart",
        "tags": [
          "Cart"
        ],
        "security": [],
        "summary": "Add variants to the cart",
        "description": "Adds to the cart tied to the session cookie. Send {\"items\": [{\"id\": <variant id>, \"quantity\": n}]}; the flat form {\"id\": <variant id>, \"quantity\": n} is also accepted and then returns the line item itself instead of {\"items\": [...]}.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/CartAddItemsRequest"
                  },
                  {
                    "$ref": "#/components/schemas/CartAddItem"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Items added. {\"items\": [...]} for the items form, the line item itself for the flat form.",
            "content": {
              "text/javascript": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/CartAddItemsResponse"
                    },
                    {
                      "$ref": "#/components/schemas/CartLineItem"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Body without \"items\" (e.g. {}). Content-Type text/javascript, JSON body.",
            "content": {
              "text/javascript": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestError"
                }
              }
            }
          },
          "422": {
            "description": "Variant not found (Content-Type application/json, message \"Cart Error\", description \"Cannot find variant\"), or requested quantity above availability (Content-Type text/javascript, localized message).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "status": 422,
                  "message": "Cart Error",
                  "description": "Cannot find variant"
                }
              },
              "text/javascript": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Image": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "product_id": {
            "type": "integer"
          },
          "position": {
            "type": "integer"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "alt": {
            "type": [
              "string",
              "null"
            ]
          },
          "width": {
            "type": "integer"
          },
          "height": {
            "type": "integer"
          },
          "src": {
            "type": "string",
            "format": "uri"
          },
          "variant_ids": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          }
        },
        "required": [
          "id",
          "src"
        ]
      },
      "ProductOption": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "position": {
            "type": "integer"
          },
          "values": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "name",
          "position",
          "values"
        ]
      },
      "ProductsJsonVariant": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "product_id": {
            "type": "integer"
          },
          "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"
          },
          "available": {
            "type": "boolean"
          },
          "featured_image": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/Image"
              }
            ]
          },
          "price": {
            "type": "string",
            "description": "Decimal price as a string, e.g. \"8.25\" (EUR)."
          },
          "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"
          }
        },
        "required": [
          "id",
          "product_id",
          "title",
          "available",
          "price"
        ]
      },
      "ProductsJsonProduct": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "handle": {
            "type": "string"
          },
          "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/ProductsJsonVariant"
            }
          },
          "images": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Image"
            }
          },
          "options": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductOption"
            }
          }
        },
        "required": [
          "id",
          "title",
          "handle",
          "variants"
        ]
      },
      "ProductsList": {
        "type": "object",
        "properties": {
          "products": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductsJsonProduct"
            }
          }
        },
        "required": [
          "products"
        ]
      },
      "CollectionImage": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "src": {
            "type": "string",
            "format": "uri"
          },
          "alt": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "src"
        ]
      },
      "Collection": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "handle": {
            "type": "string"
          },
          "description": {
            "type": "string",
            "description": "Collection description as HTML."
          },
          "published_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "image": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/CollectionImage"
              }
            ]
          },
          "products_count": {
            "type": "integer"
          }
        },
        "required": [
          "id",
          "title",
          "handle",
          "products_count"
        ]
      },
      "CollectionsList": {
        "type": "object",
        "properties": {
          "collections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Collection"
            }
          }
        },
        "required": [
          "collections"
        ]
      },
      "CollectionEnvelope": {
        "type": "object",
        "properties": {
          "collection": {
            "$ref": "#/components/schemas/Collection"
          }
        },
        "required": [
          "collection"
        ]
      },
      "JsonProductVariant": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "product_id": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "price": {
            "type": "string",
            "description": "Decimal price as a string, e.g. \"8.25\" (EUR)."
          },
          "sku": {
            "type": [
              "string",
              "null"
            ]
          },
          "position": {
            "type": "integer"
          },
          "compare_at_price": {
            "type": [
              "string",
              "null"
            ]
          },
          "option1": {
            "type": [
              "string",
              "null"
            ]
          },
          "option2": {
            "type": [
              "string",
              "null"
            ]
          },
          "option3": {
            "type": [
              "string",
              "null"
            ]
          },
          "taxable": {
            "type": "boolean"
          },
          "requires_shipping": {
            "type": "boolean"
          },
          "grams": {
            "type": "integer"
          },
          "price_currency": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "product_id",
          "title",
          "price"
        ]
      },
      "ProductJson": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "handle": {
            "type": "string"
          },
          "body_html": {
            "type": "string",
            "description": "Product description as HTML."
          },
          "vendor": {
            "type": "string"
          },
          "product_type": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "published_at": {
            "type": "string",
            "format": "date-time"
          },
          "template_suffix": {
            "type": [
              "string",
              "null"
            ]
          },
          "published_scope": {
            "type": "string"
          },
          "tags": {
            "type": "string",
            "description": "Comma-separated list of tags (a string, unlike /products.json and /products/{handle}.js where it is an array)."
          },
          "variants": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JsonProductVariant"
            }
          },
          "options": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductOption"
            }
          },
          "images": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Image"
            }
          },
          "image": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/Image"
              }
            ]
          }
        },
        "required": [
          "id",
          "title",
          "handle",
          "variants"
        ]
      },
      "ProductJsonEnvelope": {
        "type": "object",
        "properties": {
          "product": {
            "$ref": "#/components/schemas/ProductJson"
          }
        },
        "required": [
          "product"
        ]
      },
      "FeaturedImage": {
        "type": "object",
        "properties": {
          "alt": {
            "type": [
              "string",
              "null"
            ]
          },
          "aspect_ratio": {
            "type": [
              "number",
              "null"
            ]
          },
          "height": {
            "type": [
              "integer",
              "null"
            ]
          },
          "width": {
            "type": [
              "integer",
              "null"
            ]
          },
          "url": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "ProductJsVariant": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "public_title": {
            "type": [
              "string",
              "null"
            ]
          },
          "option1": {
            "type": [
              "string",
              "null"
            ]
          },
          "option2": {
            "type": [
              "string",
              "null"
            ]
          },
          "option3": {
            "type": [
              "string",
              "null"
            ]
          },
          "options": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sku": {
            "type": [
              "string",
              "null"
            ]
          },
          "requires_shipping": {
            "type": "boolean"
          },
          "taxable": {
            "type": "boolean"
          },
          "available": {
            "type": "boolean"
          },
          "price": {
            "type": "integer",
            "description": "Price in cents (EUR)."
          },
          "compare_at_price": {
            "type": [
              "integer",
              "null"
            ],
            "description": "In cents; null when there is no compare-at price."
          },
          "weight": {
            "type": "integer"
          },
          "barcode": {
            "type": [
              "string",
              "null"
            ]
          },
          "inventory_management": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "title",
          "available",
          "price"
        ]
      },
      "ProductJs": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "handle": {
            "type": "string"
          },
          "description": {
            "type": "string",
            "description": "Product description as HTML."
          },
          "published_at": {
            "type": "string",
            "format": "date-time"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "vendor": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "price": {
            "type": "integer",
            "description": "Lowest variant price in cents (EUR)."
          },
          "price_min": {
            "type": "integer"
          },
          "price_max": {
            "type": "integer"
          },
          "available": {
            "type": "boolean"
          },
          "price_varies": {
            "type": "boolean"
          },
          "compare_at_price": {
            "type": [
              "integer",
              "null"
            ]
          },
          "compare_at_price_min": {
            "type": "integer"
          },
          "compare_at_price_max": {
            "type": "integer"
          },
          "compare_at_price_varies": {
            "type": "boolean"
          },
          "variants": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductJsVariant"
            }
          },
          "images": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Protocol-relative image URL (starts with //cdn.shopify.com/)."
            }
          },
          "featured_image": {
            "type": [
              "string",
              "null"
            ],
            "description": "Protocol-relative image URL."
          },
          "options": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductOption"
            }
          },
          "url": {
            "type": "string",
            "description": "Storefront path of the product page."
          }
        },
        "required": [
          "id",
          "title",
          "handle",
          "variants",
          "url"
        ]
      },
      "SuggestProduct": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "handle": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "description": "Storefront path with tracking query parameters (_pos, _psq, ...)."
          },
          "body": {
            "type": "string",
            "description": "HTML."
          },
          "available": {
            "type": "boolean"
          },
          "vendor": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "price": {
            "type": "string",
            "description": "Decimal string, e.g. \"57.49\" (EUR)."
          },
          "price_min": {
            "type": "string"
          },
          "price_max": {
            "type": "string"
          },
          "compare_at_price_min": {
            "type": "string"
          },
          "compare_at_price_max": {
            "type": "string"
          },
          "image": {
            "type": "string",
            "format": "uri"
          },
          "featured_image": {
            "$ref": "#/components/schemas/FeaturedImage"
          },
          "variants": {
            "type": "array",
            "items": {}
          }
        },
        "required": [
          "id",
          "title",
          "handle",
          "url",
          "price"
        ]
      },
      "SuggestCollection": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "handle": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "description": "Storefront path with tracking query parameters (_pos, _psq, ...)."
          },
          "body": {
            "type": "string",
            "description": "HTML."
          },
          "published_at": {
            "type": "string",
            "format": "date-time"
          },
          "featured_image": {
            "$ref": "#/components/schemas/FeaturedImage"
          }
        },
        "required": [
          "id",
          "title",
          "handle",
          "url"
        ]
      },
      "SuggestPage": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "handle": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "description": "Storefront path with tracking query parameters (_pos, _psq, ...)."
          },
          "body": {
            "type": "string",
            "description": "HTML."
          },
          "published_at": {
            "type": "string",
            "format": "date-time"
          },
          "author": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "title",
          "handle",
          "url"
        ]
      },
      "SuggestArticle": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "handle": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "description": "Storefront path with tracking query parameters (_pos, _psq, ...)."
          },
          "body": {
            "type": "string",
            "description": "HTML."
          },
          "published_at": {
            "type": "string",
            "format": "date-time"
          },
          "author": {
            "type": "string"
          },
          "summary_html": {
            "type": "string"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "image": {
            "type": "string"
          },
          "featured_image": {
            "$ref": "#/components/schemas/FeaturedImage"
          }
        },
        "required": [
          "id",
          "title",
          "handle",
          "url"
        ]
      },
      "SuggestResponse": {
        "type": "object",
        "properties": {
          "resources": {
            "type": "object",
            "properties": {
              "results": {
                "type": "object",
                "properties": {
                  "products": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/SuggestProduct"
                    }
                  },
                  "collections": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/SuggestCollection"
                    }
                  },
                  "pages": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/SuggestPage"
                    }
                  },
                  "articles": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/SuggestArticle"
                    }
                  },
                  "queries": {
                    "type": "array",
                    "description": "Always empty in our observations; item shape not documented.",
                    "items": {}
                  }
                },
                "description": "Only the groups that were requested (resources[type]) are present. Without resources[type]: collections, pages, products and queries."
              }
            },
            "required": [
              "results"
            ]
          }
        },
        "required": [
          "resources"
        ]
      },
      "Error": {
        "type": "object",
        "properties": {
          "status": {
            "type": "integer",
            "description": "Same value as the HTTP status."
          },
          "message": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        },
        "required": [
          "status",
          "message",
          "description"
        ]
      },
      "BadRequestError": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "A string, e.g. \"bad_request\" (unlike Error.status)."
          },
          "message": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        },
        "required": [
          "status",
          "message",
          "description"
        ]
      },
      "PagingError": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "string"
          }
        },
        "required": [
          "errors"
        ]
      },
      "CartLineItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "variant_id": {
            "type": "integer"
          },
          "product_id": {
            "type": "integer"
          },
          "key": {
            "type": "string"
          },
          "handle": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "product_title": {
            "type": "string"
          },
          "variant_title": {
            "type": [
              "string",
              "null"
            ]
          },
          "quantity": {
            "type": "integer"
          },
          "properties": {
            "type": [
              "object",
              "null"
            ]
          },
          "sku": {
            "type": [
              "string",
              "null"
            ]
          },
          "vendor": {
            "type": "string"
          },
          "product_type": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "price": {
            "type": "integer",
            "description": "Unit price in cents (EUR)."
          },
          "original_price": {
            "type": "integer"
          },
          "discounted_price": {
            "type": "integer"
          },
          "final_price": {
            "type": "integer"
          },
          "line_price": {
            "type": "integer",
            "description": "Line total in cents."
          },
          "original_line_price": {
            "type": "integer"
          },
          "final_line_price": {
            "type": "integer"
          },
          "presentment_price": {
            "type": "number",
            "description": "Unit price in euros."
          },
          "total_discount": {
            "type": "integer"
          },
          "discounts": {
            "type": "array",
            "items": {}
          },
          "grams": {
            "type": "integer"
          },
          "taxable": {
            "type": "boolean"
          },
          "requires_shipping": {
            "type": "boolean"
          },
          "gift_card": {
            "type": "boolean"
          },
          "image": {
            "type": [
              "string",
              "null"
            ]
          },
          "featured_image": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/FeaturedImage"
              }
            ]
          }
        },
        "required": [
          "id",
          "variant_id",
          "product_id",
          "key",
          "title",
          "quantity",
          "price",
          "line_price",
          "url"
        ]
      },
      "Cart": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string"
          },
          "note": {
            "type": [
              "string",
              "null"
            ]
          },
          "attributes": {
            "type": "object"
          },
          "currency": {
            "type": "string",
            "description": "ISO 4217 code, \"EUR\" observed."
          },
          "item_count": {
            "type": "integer"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CartLineItem"
            }
          },
          "original_total_price": {
            "type": "integer",
            "description": "Cents."
          },
          "total_price": {
            "type": "integer",
            "description": "Cents."
          },
          "total_discount": {
            "type": "integer"
          },
          "total_weight": {
            "type": "number"
          },
          "items_subtotal_price": {
            "type": "integer"
          },
          "requires_shipping": {
            "type": "boolean"
          },
          "cart_level_discount_applications": {
            "type": "array",
            "items": {}
          },
          "discount_codes": {
            "type": "array",
            "items": {}
          }
        },
        "required": [
          "token",
          "currency",
          "item_count",
          "items",
          "total_price"
        ]
      },
      "CartAddItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Variant id (variants[].id from the product endpoints)."
          },
          "quantity": {
            "type": "integer",
            "description": "Quantity to add. 0 adds nothing and returns {\"items\": []}; above availability: 422."
          }
        },
        "required": [
          "id"
        ]
      },
      "CartAddItemsRequest": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CartAddItem"
            }
          }
        },
        "required": [
          "items"
        ]
      },
      "CartAddItemsResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CartLineItem"
            }
          }
        },
        "required": [
          "items"
        ]
      }
    }
  },
  "x-agent-discovery": {
    "ucp": "https://www.cloud-store-cbd.com/.well-known/ucp",
    "llms_txt": "https://www.cloud-store-cbd.com/llms.txt",
    "agents_md": "https://www.cloud-store-cbd.com/agents.md"
  }
}
