{
  "openapi": "3.1.0",
  "info": {
    "title": "AXA Group Store Storefront API",
    "version": "1.0.0",
    "summary": "Public, keyless read and cart API for the AXA Group / MAXIMA catalogue: CarPlay screens for motorcycles, auxiliary LED driving lights and truck lighting.",
    "description": "AXA Group SAS (brands: MAXIMA / MAXIM Accessories, Medellin, Colombia). Three product lines carry the business, in order of sales volume:\n\n1. **CarPlay / Android Auto screens for motorcycles** ('Moto Display'). Most users    search for these as `CarPlay para moto` rather than by product name.\n2. **Auxiliary LED driving lights** (`exploradoras`), MAXIMA XP line, plus light    bars and brackets.\n3. **MAXIMA Truck LED lights** for cargo fleets: marker, signalling and tail lamps    and stainless accessories.\n\nAlso stocked but secondary: headlight bulbs (LED, halogen, HID, H.O.D.), GPS trackers and pneumatic tools.\n\n**When an agent should use this API**\n\n- Look up whether a specific screen, driving light or truck lamp is in stock and at what price in COP.\n- Check fitment for a motorcycle or truck by searching the catalogue by model,   cylinder capacity (`cilindraje`) or product type.\n- Build a cart on the shopper's behalf and hand them a checkout URL.\n- Answer questions about shipping, warranty and returns policy. Warranty is 1, 2 or 3   years depending on the product line - read the individual listing, do not quote   one figure for the whole catalogue.\n\n**Do not use this API for**: placing or paying for an order (checkout is completed by the shopper in the browser), stock reservations, or wholesale/distributor pricing — those go through the distributor contact form.\n\n**CLI**: `npx axagroup <command>` wraps every operation below - see https://www.npmjs.com/package/axagroup\n\n**Authentication**: every endpoint below is public and requires no credentials. Optional schemes are declared under `components.securitySchemes` for the cross-origin Storefront API and for signed-in customer accounts.\n\n**Errors**: failures return JSON shaped as `{status, message, description}`. See the `Error` schema.\n\n**Rate limits**: the JSON endpoints are edge-cached and rate limited per IP; the GraphQL endpoint is limited by query cost, reported in `extensions.cost`. Back off on 429.",
    "termsOfService": "https://axagroup.shop/pages/terminos-y-condiciones",
    "contact": {
      "name": "AXA Group SAS",
      "url": "https://axagroup.shop/pages/developers",
      "email": "info@axa-group.co"
    },
    "license": {
      "name": "Proprietary - catalogue data provided for agent and integrator use",
      "url": "https://axagroup.shop/pages/terminos-y-condiciones"
    }
  },
  "externalDocs": {
    "description": "Developer & agent documentation",
    "url": "https://axagroup.shop/pages/developers"
  },
  "x-cli": {
    "name": "axagroup",
    "registry": "npm",
    "url": "https://www.npmjs.com/package/axagroup",
    "install": "npm install -g axagroup",
    "runWithoutInstalling": "npx axagroup search \"carplay para moto\"",
    "runtime": "node>=18",
    "authentication": "none",
    "description": "Official CLI over this API. Every command maps to an operationId below."
  },
  "servers": [
    {
      "url": "https://axagroup.shop",
      "description": "Production storefront"
    }
  ],
  "security": [
    {}
  ],
  "tags": [
    {
      "name": "Catalog",
      "description": "Read products, collections and search. No auth."
    },
    {
      "name": "Cart",
      "description": "Build a cart and get a checkout URL. Cookie-scoped, no auth."
    },
    {
      "name": "GraphQL",
      "description": "Typed Storefront GraphQL access."
    },
    {
      "name": "MCP",
      "description": "Model Context Protocol server for LLM agents."
    }
  ],
  "paths": {
    "/products.json": {
      "get": {
        "operationId": "listProducts",
        "summary": "List all published products",
        "description": "Returns every product published to the online store, paginated. This is the fastest way for an agent to build a full catalogue snapshot: iterate `page` with `limit=250` until `products` comes back empty. No authentication.",
        "tags": [
          "Catalog"
        ],
        "security": [
          {}
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Page"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of products.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductListResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/products/{handle}.json": {
      "get": {
        "operationId": "getProductByHandle",
        "summary": "Get a single product by handle",
        "description": "Returns one product, including all variants, images and options. `handle` is the slug from `listProducts`.",
        "tags": [
          "Catalog"
        ],
        "security": [
          {}
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "path",
            "required": true,
            "description": "Product slug, e.g. `exploradoras-maxima-xp-4`.",
            "schema": {
              "type": "string"
            },
            "example": "exploradoras-maxima-xp-4"
          }
        ],
        "responses": {
          "200": {
            "description": "The product.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductResponse"
                }
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/collections.json": {
      "get": {
        "operationId": "listCollections",
        "summary": "List all published collections",
        "description": "Returns the store's product categories. Use a collection `handle` with `listCollectionProducts` to browse a category.",
        "tags": [
          "Catalog"
        ],
        "security": [
          {}
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Page"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of collections.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CollectionListResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/collections/{handle}/products.json": {
      "get": {
        "operationId": "listCollectionProducts",
        "summary": "List products inside one collection",
        "description": "Returns the products in a single collection. Use `handle=all` for the full catalogue.",
        "tags": [
          "Catalog"
        ],
        "security": [
          {}
        ],
        "parameters": [
          {
            "name": "handle",
            "in": "path",
            "required": true,
            "description": "Collection slug, e.g. `exploradoras-led`, or `all`.",
            "schema": {
              "type": "string"
            },
            "example": "all"
          },
          {
            "$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/ProductListResponse"
                }
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/search/suggest.json": {
      "get": {
        "operationId": "searchSuggest",
        "summary": "Predictive search across products, collections, pages and articles",
        "description": "Keyword search. Prefer this over scraping listing pages when the user names a product, a motorcycle model or a use case.",
        "tags": [
          "Catalog"
        ],
        "security": [
          {}
        ],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "description": "Search terms.",
            "schema": {
              "type": "string"
            },
            "example": "carplay para moto"
          },
          {
            "name": "resources[type]",
            "in": "query",
            "required": false,
            "description": "Comma-separated resource types to search.",
            "schema": {
              "type": "string",
              "default": "product"
            },
            "example": "product,collection,page,article"
          },
          {
            "name": "resources[limit]",
            "in": "query",
            "required": false,
            "description": "Max results per resource type (1-10).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10,
              "default": 10
            },
            "example": 5
          }
        ],
        "responses": {
          "200": {
            "description": "Search results grouped by resource type.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchSuggestResponse"
                }
              }
            }
          }
        }
      }
    },
    "/recommendations/products.json": {
      "get": {
        "operationId": "getProductRecommendations",
        "summary": "Get products related to a given product",
        "description": "Returns complementary/related products for cross-sell (for example the right bulb for a given headlight).",
        "tags": [
          "Catalog"
        ],
        "security": [
          {}
        ],
        "parameters": [
          {
            "name": "product_id",
            "in": "query",
            "required": true,
            "description": "Product id to base recommendations on.",
            "schema": {
              "type": "integer",
              "format": "int64"
            },
            "example": 8267583979742
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10,
              "default": 4
            },
            "example": 4
          },
          {
            "name": "intent",
            "in": "query",
            "required": false,
            "description": "Recommendation intent.",
            "schema": {
              "type": "string",
              "enum": [
                "related",
                "complementary"
              ],
              "default": "related"
            },
            "example": "related"
          }
        ],
        "responses": {
          "200": {
            "description": "Recommended products.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductListResponse"
                }
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/cart.js": {
      "get": {
        "operationId": "getCart",
        "summary": "Get the current cart",
        "description": "Returns the cart tied to the `cart` cookie. Send and persist cookies across cart calls.",
        "tags": [
          "Cart"
        ],
        "security": [
          {}
        ],
        "responses": {
          "200": {
            "description": "The current cart.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Cart"
                }
              }
            }
          }
        }
      }
    },
    "/cart/add.js": {
      "post": {
        "operationId": "addCartItems",
        "summary": "Add one or more variants to the cart",
        "description": "Adds line items. `id` is a **variant** id from `listProducts` / `getProductByHandle`, not a product id. Returns 422 with a JSON error when the variant is unknown or unavailable.",
        "tags": [
          "Cart"
        ],
        "security": [
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CartAddRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The lines that were added.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CartAddResponse"
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          }
        }
      }
    },
    "/cart/change.js": {
      "post": {
        "operationId": "changeCartItem",
        "summary": "Change the quantity of one cart line",
        "description": "Sets a line's quantity. Quantity 0 removes the line. Returns the whole updated cart.",
        "tags": [
          "Cart"
        ],
        "security": [
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CartChangeRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The updated cart.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Cart"
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          }
        }
      }
    },
    "/cart/update.js": {
      "post": {
        "operationId": "updateCart",
        "summary": "Bulk-update cart quantities, note and attributes",
        "description": "Updates several lines at once and/or sets the cart note and attributes. Returns the whole updated cart.",
        "tags": [
          "Cart"
        ],
        "security": [
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CartUpdateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The updated cart.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Cart"
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          }
        }
      }
    },
    "/cart/clear.js": {
      "post": {
        "operationId": "clearCart",
        "summary": "Remove every line from the cart",
        "description": "Empties the cart. Send an empty JSON object `{}` as the body; a bodiless POST is rejected with 411.",
        "tags": [
          "Cart"
        ],
        "security": [
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false
              },
              "example": {}
            }
          }
        },
        "responses": {
          "200": {
            "description": "The now-empty cart.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Cart"
                }
              }
            }
          }
        }
      }
    },
    "/api/{version}/graphql.json": {
      "post": {
        "operationId": "storefrontGraphql",
        "summary": "Shopify Storefront GraphQL API",
        "description": "Full typed access to the catalogue, cart and checkout via the Shopify Storefront API schema. Reachable from this domain without a token; supplying a Storefront access token is also accepted and is required from other origins. Field errors are returned in the `errors` array with HTTP 200. `extensions.cost` reports the query cost used for rate limiting.",
        "tags": [
          "GraphQL"
        ],
        "security": [
          {},
          {
            "storefrontAccessToken": []
          }
        ],
        "parameters": [
          {
            "name": "version",
            "in": "path",
            "required": true,
            "description": "Shopify API version (`YYYY-MM`). Verified working: 2024-10 through 2025-10.",
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}$"
            },
            "example": "2025-07"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GraphQLRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "GraphQL envelope. Check `errors` even on 200.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GraphQLResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/mcp": {
      "post": {
        "operationId": "mcpJsonRpc",
        "summary": "Model Context Protocol endpoint (Streamable HTTP)",
        "description": "MCP server for this store, protocol revision 2025-06-18. Connect an MCP client directly to https://axagroup.shop/api/mcp. Tools available: `search_catalog`, `get_product_details`, `get_cart`, `update_cart`, `search_shop_policies_and_faqs`. Prefer this over the REST endpoints when you are an LLM agent with MCP support: it returns product cards and handles cart state for you.",
        "tags": [
          "MCP"
        ],
        "security": [
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JsonRpcRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "JSON-RPC 2.0 response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JsonRpcResponse"
                }
              },
              "text/event-stream": {
                "schema": {
                  "$ref": "#/components/schemas/JsonRpcResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Error": {
        "type": "object",
        "description": "Structured JSON error returned by the storefront JSON/AJAX endpoints. `message` is the short machine-stable reason; `description` is the human/agent-readable resolution hint.",
        "required": [
          "status",
          "message"
        ],
        "properties": {
          "status": {
            "type": "integer",
            "description": "HTTP status code, repeated in the body.",
            "examples": [
              404,
              422
            ]
          },
          "message": {
            "type": "string",
            "description": "Short error code/title.",
            "examples": [
              "Product not found",
              "Cart Error"
            ]
          },
          "description": {
            "type": "string",
            "description": "How to resolve the error.",
            "examples": [
              "No product with id 1 is published in the online store"
            ]
          }
        },
        "examples": [
          {
            "status": 422,
            "message": "Cart Error",
            "description": "Cannot find variant"
          }
        ]
      },
      "ProductImage": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "product_id": {
            "type": "integer",
            "format": "int64"
          },
          "position": {
            "type": "integer"
          },
          "src": {
            "type": "string",
            "format": "uri"
          },
          "width": {
            "type": "integer"
          },
          "height": {
            "type": "integer"
          },
          "alt": {
            "type": [
              "string",
              "null"
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "variant_ids": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          }
        }
      },
      "ProductOption": {
        "type": "object",
        "description": "A configurable option (e.g. Talla, Color, Modelo de moto).",
        "properties": {
          "name": {
            "type": "string",
            "examples": [
              "Modelo"
            ]
          },
          "position": {
            "type": "integer"
          },
          "values": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "ProductVariant": {
        "type": "object",
        "description": "A purchasable variant. `id` is the value to send to /cart/add.js.",
        "required": [
          "id",
          "title",
          "price",
          "available"
        ],
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "description": "Variant id. Use this as `items[].id` when adding to cart.",
            "examples": [
              48193877311646
            ]
          },
          "product_id": {
            "type": "integer",
            "format": "int64"
          },
          "title": {
            "type": "string"
          },
          "option1": {
            "type": [
              "string",
              "null"
            ]
          },
          "option2": {
            "type": [
              "string",
              "null"
            ]
          },
          "option3": {
            "type": [
              "string",
              "null"
            ]
          },
          "sku": {
            "type": [
              "string",
              "null"
            ]
          },
          "price": {
            "type": "string",
            "description": "Price as a decimal string in the shop currency (COP).",
            "examples": [
              "599000.00"
            ]
          },
          "compare_at_price": {
            "type": [
              "string",
              "null"
            ]
          },
          "available": {
            "type": "boolean",
            "description": "True when the variant can be purchased right now."
          },
          "requires_shipping": {
            "type": "boolean"
          },
          "taxable": {
            "type": "boolean"
          },
          "grams": {
            "type": "integer",
            "description": "Shipping weight in grams."
          },
          "position": {
            "type": "integer"
          },
          "featured_image": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProductImage"
              },
              {
                "type": "null"
              }
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "Product": {
        "type": "object",
        "description": "A product published to the online store.",
        "required": [
          "id",
          "title",
          "handle",
          "variants"
        ],
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "title": {
            "type": "string",
            "examples": [
              "Exploradoras MAXIMA XP-4 - 2026"
            ]
          },
          "handle": {
            "type": "string",
            "description": "URL slug. Product page is /products/{handle}.",
            "examples": [
              "exploradoras-maxima-xp-4"
            ]
          },
          "body_html": {
            "type": "string",
            "description": "Product description as HTML."
          },
          "vendor": {
            "type": "string",
            "examples": [
              "MAXIMA"
            ]
          },
          "product_type": {
            "type": "string",
            "examples": [
              "Exploradoras"
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "published_at": {
            "type": "string",
            "format": "date-time"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "variants": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductVariant"
            }
          },
          "images": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductImage"
            }
          },
          "options": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductOption"
            }
          }
        }
      },
      "ProductListResponse": {
        "type": "object",
        "required": [
          "products"
        ],
        "properties": {
          "products": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Product"
            }
          }
        }
      },
      "ProductResponse": {
        "type": "object",
        "required": [
          "product"
        ],
        "properties": {
          "product": {
            "$ref": "#/components/schemas/Product"
          }
        }
      },
      "Collection": {
        "type": "object",
        "description": "A product collection (category).",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "title": {
            "type": "string",
            "examples": [
              "Exploradoras LED"
            ]
          },
          "handle": {
            "type": "string",
            "description": "URL slug. Collection page is /collections/{handle}.",
            "examples": [
              "exploradoras-led"
            ]
          },
          "description": {
            "type": "string"
          },
          "published_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "products_count": {
            "type": "integer"
          }
        }
      },
      "CollectionListResponse": {
        "type": "object",
        "required": [
          "collections"
        ],
        "properties": {
          "collections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Collection"
            }
          }
        }
      },
      "CartItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "description": "Variant id."
          },
          "key": {
            "type": "string",
            "description": "Line item key, used by /cart/change.js."
          },
          "title": {
            "type": "string"
          },
          "product_title": {
            "type": "string"
          },
          "variant_title": {
            "type": [
              "string",
              "null"
            ]
          },
          "quantity": {
            "type": "integer"
          },
          "price": {
            "type": "integer",
            "description": "Unit price in the shop's minor-unit integer form."
          },
          "line_price": {
            "type": "integer"
          },
          "final_line_price": {
            "type": "integer"
          },
          "sku": {
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "type": "string"
          },
          "image": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "properties": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "Cart": {
        "type": "object",
        "description": "The visitor's cart, keyed by the `cart` cookie returned on first call.",
        "properties": {
          "token": {
            "type": "string",
            "description": "Cart token."
          },
          "note": {
            "type": [
              "string",
              "null"
            ]
          },
          "attributes": {
            "type": "object",
            "additionalProperties": true
          },
          "original_total_price": {
            "type": "integer"
          },
          "total_price": {
            "type": "integer"
          },
          "total_discount": {
            "type": "integer"
          },
          "total_weight": {
            "type": "number"
          },
          "item_count": {
            "type": "integer"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CartItem"
            }
          },
          "requires_shipping": {
            "type": "boolean"
          },
          "currency": {
            "type": "string",
            "examples": [
              "COP"
            ]
          },
          "items_subtotal_price": {
            "type": "integer"
          },
          "cart_level_discount_applications": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "discount_codes": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "CartAddRequest": {
        "type": "object",
        "required": [
          "items"
        ],
        "properties": {
          "items": {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "object",
              "required": [
                "id",
                "quantity"
              ],
              "properties": {
                "id": {
                  "type": "integer",
                  "format": "int64",
                  "description": "Variant id from /products.json."
                },
                "quantity": {
                  "type": "integer",
                  "minimum": 1
                },
                "properties": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Free-form line item properties (e.g. moto model for fitment)."
                }
              }
            }
          }
        },
        "examples": [
          {
            "items": [
              {
                "id": 48193877311646,
                "quantity": 1
              }
            ]
          }
        ]
      },
      "CartAddResponse": {
        "type": "object",
        "required": [
          "items"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CartItem"
            }
          }
        }
      },
      "CartChangeRequest": {
        "type": "object",
        "description": "Change the quantity of one existing line. Supply either `id` (line key or variant id) or `line` (1-based index).",
        "required": [
          "quantity"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Line item `key` (preferred) or variant id as a string."
          },
          "line": {
            "type": "integer",
            "minimum": 1,
            "description": "1-based line index."
          },
          "quantity": {
            "type": "integer",
            "minimum": 0,
            "description": "New quantity. 0 removes the line."
          }
        },
        "examples": [
          {
            "id": "48193877311646:abc123",
            "quantity": 2
          }
        ]
      },
      "CartUpdateRequest": {
        "type": "object",
        "description": "Bulk-update quantities, the cart note, or cart attributes.",
        "properties": {
          "updates": {
            "type": "object",
            "additionalProperties": {
              "type": "integer",
              "minimum": 0
            },
            "description": "Map of variant id -> new quantity."
          },
          "note": {
            "type": "string"
          },
          "attributes": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        },
        "examples": [
          {
            "updates": {
              "48193877311646": 2
            },
            "note": "Entrega en Medellin"
          }
        ]
      },
      "SearchSuggestResponse": {
        "type": "object",
        "description": "Predictive search results.",
        "properties": {
          "resources": {
            "type": "object",
            "properties": {
              "results": {
                "type": "object",
                "properties": {
                  "products": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    }
                  },
                  "collections": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    }
                  },
                  "pages": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    }
                  },
                  "articles": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    }
                  },
                  "queries": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    }
                  }
                }
              }
            }
          }
        }
      },
      "GraphQLRequest": {
        "type": "object",
        "required": [
          "query"
        ],
        "properties": {
          "query": {
            "type": "string",
            "description": "GraphQL document (Shopify Storefront API schema)."
          },
          "variables": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": true
          },
          "operationName": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "examples": [
          {
            "query": "{ products(first: 5) { edges { node { title handle } } } }"
          }
        ]
      },
      "GraphQLResponse": {
        "type": "object",
        "description": "Standard GraphQL envelope. Field-level problems arrive in `errors` with HTTP 200.",
        "properties": {
          "data": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": true
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string"
                },
                "locations": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "line": {
                        "type": "integer"
                      },
                      "column": {
                        "type": "integer"
                      }
                    }
                  }
                },
                "path": {
                  "type": "array",
                  "items": {
                    "type": [
                      "string",
                      "integer"
                    ]
                  }
                },
                "extensions": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "extensions": {
            "type": "object",
            "additionalProperties": true,
            "description": "Includes `cost` for query-cost based rate limiting."
          }
        }
      },
      "JsonRpcRequest": {
        "type": "object",
        "required": [
          "jsonrpc",
          "method"
        ],
        "properties": {
          "jsonrpc": {
            "type": "string",
            "const": "2.0"
          },
          "id": {
            "type": [
              "string",
              "integer",
              "null"
            ]
          },
          "method": {
            "type": "string",
            "examples": [
              "initialize",
              "tools/list",
              "tools/call"
            ]
          },
          "params": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "examples": [
          {
            "jsonrpc": "2.0",
            "id": 1,
            "method": "tools/list",
            "params": {}
          }
        ]
      },
      "JsonRpcResponse": {
        "type": "object",
        "required": [
          "jsonrpc"
        ],
        "properties": {
          "jsonrpc": {
            "type": "string",
            "const": "2.0"
          },
          "id": {
            "type": [
              "string",
              "integer",
              "null"
            ]
          },
          "result": {
            "type": "object",
            "additionalProperties": true
          },
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "integer"
              },
              "message": {
                "type": "string"
              },
              "data": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      }
    },
    "parameters": {
      "Limit": {
        "name": "limit",
        "in": "query",
        "required": false,
        "description": "Number of records to return per page.",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "maximum": 250,
          "default": 30
        },
        "example": 50
      },
      "Page": {
        "name": "page",
        "in": "query",
        "required": false,
        "description": "1-based page number. Iterate until an empty array is returned.",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "default": 1
        },
        "example": 1
      }
    },
    "responses": {
      "NotFound": {
        "description": "The requested resource is not published in the online store.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "status": 404,
              "message": "Product not found",
              "description": "No product with id 1 is published in the online store"
            }
          }
        }
      },
      "UnprocessableEntity": {
        "description": "The request was well formed but could not be applied (for example an unknown or sold-out variant).",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "status": 422,
              "message": "Cart Error",
              "description": "Cannot find variant"
            }
          }
        }
      },
      "TooManyRequests": {
        "description": "Rate limited. Back off and retry.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      }
    },
    "securitySchemes": {
      "storefrontAccessToken": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Shopify-Storefront-Access-Token",
        "description": "Shopify Storefront API public access token. Not required when calling https://axagroup.shop/api/{version}/graphql.json from this domain. Tokens are issued with these named Shopify scopes, and integrators should request the narrowest set they need:\n- `unauthenticated_read_product_listings` - read products and collections\n- `unauthenticated_read_product_inventory` - read availability\n- `unauthenticated_read_content` - read pages, blogs and policies\n- `unauthenticated_write_checkouts` - create and update carts/checkouts\n- `unauthenticated_read_checkouts` - read carts/checkouts\nRequest a token at https://axagroup.shop/pages/developers.",
        "x-scopes": [
          "unauthenticated_read_product_listings",
          "unauthenticated_read_product_inventory",
          "unauthenticated_read_content",
          "unauthenticated_write_checkouts",
          "unauthenticated_read_checkouts"
        ]
      },
      "customerAccountOAuth": {
        "type": "oauth2",
        "description": "OAuth 2.0 / OpenID Connect for signed-in shoppers (order history, addresses). Only needed for customer-specific data; the catalogue and cart endpoints above need no credentials. Protected-resource metadata (RFC 9728) is published at https://axagroup.shop/.well-known/oauth-protected-resource.",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://shopify.com/authentication/71924220062/oauth/authorize",
            "tokenUrl": "https://shopify.com/authentication/71924220062/oauth/token",
            "refreshUrl": "https://shopify.com/authentication/71924220062/oauth/token",
            "scopes": {
              "openid": "Authenticate the shopper and read their subject identifier.",
              "email": "Read the shopper's email address.",
              "customer-account-api:full": "Read and manage the signed-in shopper's orders, addresses and profile.",
              "customer-account-mcp-api:full": "Access the signed-in shopper's account through the Customer Account MCP server."
            }
          }
        }
      }
    }
  },
  "x-mcp": {
    "endpoint": "https://axagroup.shop/api/mcp",
    "transport": "streamable-http",
    "protocolVersion": "2025-06-18",
    "tools": [
      "search_catalog",
      "get_product_details",
      "get_cart",
      "update_cart",
      "search_shop_policies_and_faqs"
    ]
  },
  "x-agent-instructions": "https://axagroup.shop/agents.md"
}
