{ "openapi": "3.2.0", "info": { "title": "Bagisto Shop API", "description": "Bagisto Shop API - Customer-facing operations for products, cart, orders, and checkout.", "contact": { "name": "", "url": "", "email": "" }, "license": { "name": "", "url": "" }, "version": "2.4.10" }, "servers": [ { "url": "{url}/api/shop", "description": "Bagisto Shop API", "variables": { "url": { "default": "http://localhost:8000", "description": "Base URL of your Bagisto installation." } } } ], "paths": { "/attribute-options": { "get": { "operationId": "api_apishopattribute-options_get_collection", "tags": [ "Attribute" ], "responses": { "200": { "description": "List of attribute options.", "content": { "application/json": { "example": [ { "id": 1, "adminName": "Red", "sortOrder": 0, "translation": { "id": 1, "attributeOptionId": 1, "locale": "en", "label": "Red" }, "translations": [ { "id": 86, "attributeOptionId": 1, "locale": "de", "label": "" }, { "id": 1, "attributeOptionId": 1, "locale": "en", "label": "Red" } ] } ] } } } }, "summary": "List attribute options", "description": "Returns attribute options with their translations, ordered by sort order. Pass `attribute_id` to list one attribute's options — a boolean attribute returns its No (id 0) and Yes (id 1) options — and `search` to match the option label in the current locale or its admin name. Public endpoint.", "parameters": [ { "name": "attribute_id", "in": "query", "description": "Only the options of this attribute. Returns 404 when the attribute does not exist.", "required": false, "deprecated": false, "schema": { "type": "integer", "example": 23 }, "style": "form", "explode": true }, { "name": "search", "in": "query", "description": "Partial match on the option label (current locale) or admin name.", "required": false, "deprecated": false, "schema": { "type": "string", "example": "red" }, "style": "form", "explode": true }, { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/attribute-options/{id}": { "get": { "operationId": "api_apishopattribute-options_id_get", "tags": [ "Attribute" ], "responses": { "200": { "description": "Attribute option detail.", "content": { "application/json": { "example": { "id": 1, "adminName": "Red", "sortOrder": 0, "translation": { "id": 1, "attributeOptionId": 1, "locale": "en", "label": "Red" }, "translations": [ { "id": 86, "attributeOptionId": 1, "locale": "de", "label": "" }, { "id": 1, "attributeOptionId": 1, "locale": "en", "label": "Red" } ] } } } }, "404": { "description": "Attribute option not found." } }, "summary": "Get a single attribute option by ID", "description": "Returns one attribute option with its translations. Public endpoint.", "parameters": [ { "name": "id", "in": "path", "description": "Attribute option ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/attributes": { "get": { "operationId": "api_apishopattributes_get_collection", "tags": [ "Attribute" ], "responses": { "200": { "description": "List of attributes.", "content": { "application/json": { "example": [ { "id": 1, "code": "sku", "adminName": "SKU", "type": "text", "position": 1, "isRequired": 1, "isUnique": 1, "isFilterable": 0, "isComparable": 0, "isConfigurable": 0, "isUserDefined": 0, "isVisibleOnFront": 0, "valuePerLocale": 0, "valuePerChannel": 0, "enableWysiwyg": 0, "createdAt": "2024-04-16T21:44:17+05:30", "updatedAt": "2024-04-16T21:44:17+05:30", "columnName": "text_value", "validations": "{ required: true }", "options": [], "translation": { "id": 1, "attributeId": 1, "locale": "en", "name": "SKU" }, "translations": [ "/api/shop/attribute_translations/1" ] } ] } } } }, "summary": "List all attributes", "description": "Returns all product attributes with their translations and options. Public endpoint.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/attributes/{id}": { "get": { "operationId": "api_apishopattributes_id_get", "tags": [ "Attribute" ], "responses": { "200": { "description": "Attribute detail.", "content": { "application/json": { "example": { "id": 1, "code": "sku", "adminName": "SKU", "type": "text", "position": 1, "isRequired": 1, "isUnique": 1, "isFilterable": 0, "isComparable": 0, "isConfigurable": 0, "isUserDefined": 0, "isVisibleOnFront": 0, "valuePerLocale": 0, "valuePerChannel": 0, "enableWysiwyg": 0, "createdAt": "2024-04-16T21:44:17+05:30", "updatedAt": "2024-04-16T21:44:17+05:30", "columnName": "text_value", "validations": "{ required: true }", "options": [], "translation": { "id": 1, "attributeId": 1, "locale": "en", "name": "SKU" }, "translations": [ "/api/shop/attribute_translations/1" ] } } } }, "404": { "description": "Attribute not found." } }, "summary": "Get a single attribute by ID", "description": "Returns one product attribute with its translations and options. Public endpoint.", "parameters": [ { "name": "id", "in": "path", "description": "Attribute ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/attribute_translations": { "get": { "operationId": "api_apishopattribute_translations_get_collection", "tags": [ "AttributeTranslation" ], "responses": { "200": { "description": "Attribute translation collection.", "content": { "application/json": { "example": [ { "id": 1, "attributeId": 1, "locale": "en", "name": "SKU" } ] } } } }, "summary": "List attribute translations", "description": "Returns the localized names of catalog attributes. Public endpoint.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/attribute_translations/{id}": { "get": { "operationId": "api_apishopattribute_translations_id_get", "tags": [ "AttributeTranslation" ], "responses": { "200": { "description": "Attribute translation.", "content": { "application/json": { "example": { "id": 1, "attributeId": 1, "locale": "en", "name": "SKU" } } } }, "404": { "description": "Translation not found." } }, "summary": "Get an attribute translation", "description": "Returns a single attribute translation by its identifier. Public endpoint.", "parameters": [ { "name": "id", "in": "path", "description": "Attribute translation ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/pages": { "get": { "operationId": "api_apishoppages_get_collection", "tags": [ "CMS Page" ], "responses": { "200": { "description": "List of CMS pages.", "content": { "application/json": { "example": [ { "id": "/api/shop/pages/152", "_id": 152, "layout": null, "createdAt": "2026-06-23T12:21:16+05:30", "updatedAt": "2026-06-23T12:21:16+05:30", "translation": { "id": "/api/shop/page_translations/297", "_id": 297, "pageTitle": "About testing (Updated)", "urlKey": "testing", "htmlContent": "

About Us

", "metaTitle": "About Us", "metaDescription": "Learn more about our company.", "metaKeywords": "about,us,company", "locale": "en", "cmsPageId": "152" } } ] } } } }, "summary": "List CMS pages", "description": "Returns CMS pages, each with its current-locale `translation` embedded. Pass `url_key` to fetch the page the storefront shows at `/page/{url_key}`: it must be assigned to the current channel, and a CMS URL rewrite for an old key is followed. The result is then a list of one page, or empty. Public endpoint.", "parameters": [ { "name": "url_key", "in": "query", "description": "URL key (slug) of the page, as in the storefront URL.", "required": false, "deprecated": false, "schema": { "type": "string", "example": "about-us" }, "style": "form", "explode": true }, { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 100 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/pages/{id}": { "get": { "operationId": "api_apishoppages_id_get", "tags": [ "CMS Page" ], "responses": { "200": { "description": "The CMS page.", "content": { "application/json": { "example": { "id": "/api/shop/pages/152", "_id": 152, "layout": null, "createdAt": "2026-06-23T12:21:16+05:30", "updatedAt": "2026-06-23T12:21:16+05:30", "translation": { "id": "/api/shop/page_translations/297", "_id": 297, "pageTitle": "About testing (Updated)", "urlKey": "testing", "htmlContent": "

About Us

", "metaTitle": "About Us", "metaDescription": "Learn more about our company.", "metaKeywords": "about,us,company", "locale": "en", "cmsPageId": "152" } } } } }, "404": { "description": "Page not found." } }, "summary": "Get a single CMS page by ID", "description": "Returns one CMS page with its current-locale `translation` embedded. Public endpoint.", "parameters": [ { "name": "id", "in": "path", "description": "Page ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/page_translations": { "get": { "operationId": "api_apishoppage_translations_get_collection", "tags": [ "CMS Page Translation" ], "responses": { "200": { "description": "List of CMS page translations.", "content": { "application/json": { "example": [ { "id": 1, "pageTitle": "About Us (Updated)", "urlKey": "about-us", "htmlContent": "

About Us

", "metaTitle": "about us", "metaDescription": "", "metaKeywords": "aboutus", "locale": "en", "cmsPageId": 1 } ] } } } }, "summary": "List CMS page translations", "description": "Returns per-locale CMS page translations. Public endpoint.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 100 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/page_translations/{id}": { "get": { "operationId": "api_apishoppage_translations_id_get", "tags": [ "CMS Page Translation" ], "responses": { "200": { "description": "The CMS page translation.", "content": { "application/json": { "example": { "id": 1, "pageTitle": "About Us (Updated)", "urlKey": "about-us", "htmlContent": "

About Us

", "metaTitle": "about us", "metaDescription": "", "metaKeywords": "aboutus", "locale": "en", "cmsPageId": 1 } } } }, "404": { "description": "Translation not found." } }, "summary": "Get a single CMS page translation by ID", "description": "Returns one CMS page translation. Public endpoint.", "parameters": [ { "name": "id", "in": "path", "description": "Page translation ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/add-product-in-cart": { "post": { "operationId": "addProduct", "tags": [ "Cart" ], "responses": { "201": { "description": "Product added to cart. Returns the full cart.", "content": { "application/json": { "example": { "id": 6888, "cartToken": "6888", "customerId": 1537, "channelId": 1, "itemsCount": 1, "items": [ { "id": 7765, "cartId": 6888, "productId": 1, "name": "Coastal Breeze Men's Blue Zipper Hoodie", "sku": "COASTALBREEZEMENSHOODIE", "quantity": 1, "price": 100, "total": 100, "type": "simple", "formattedPrice": "$100.00", "formattedTotal": "$100.00" } ], "subtotal": 100, "grandTotal": 100, "taxAmount": 0, "discountAmount": 0, "couponCode": null, "formattedSubtotal": "$100.00", "formattedGrandTotal": "$100.00" } } }, "links": [] }, "400": { "description": "Missing/invalid productId or quantity, or product not saleable.", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Add product to cart", "description": "Add a product to the shopping cart with quantity and optional product options.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "Product to add to cart", "content": { "application/json": { "schema": { "type": "object", "properties": { "productId": { "type": "integer", "example": 1, "description": "Product ID" }, "quantity": { "type": "integer", "example": 1, "description": "Quantity" }, "selectedConfigurableOption": { "type": "integer", "description": "Child variant product ID (configurable products)" }, "superAttribute": { "type": "object", "description": "Super attribute values {attributeId: optionValue} (configurable products)" }, "qty": { "type": "object", "description": "Quantities per associated product {productId: quantity} (grouped products)" }, "bundleOptions": { "type": "object", "description": "Bundle options {optionId: [productIds]} (bundle products)" }, "bundleOptionQty": { "type": "object", "description": "Bundle option quantities {optionId: quantity} (bundle products, optional)" }, "links": { "type": "array", "items": { "type": "integer" }, "description": "Download link IDs (downloadable products)" }, "booking": { "type": "object", "description": "Booking data - varies by booking type (appointment, default, table, rental, event)" }, "specialNote": { "type": "string", "description": "Special note for table bookings" }, "isBuyNow": { "type": "integer", "enum": [ 0, 1 ], "description": "Buy now flag (0 = add to cart, 1 = buy now)" } } }, "examples": { "simple_product": { "summary": "Add Simple Product", "description": "Add a simple product to cart", "value": { "productId": 1, "quantity": 1 } }, "virtual_product": { "summary": "Add Virtual Product", "description": "Add a virtual product (no shipping required)", "value": { "productId": 61, "quantity": 1 } }, "configurable_product": { "summary": "Add Configurable Product", "description": "Add a configurable product by selecting variant options", "value": { "productId": 7, "quantity": 1, "selectedConfigurableOption": 8, "superAttribute": { "23": 3, "24": 7 } } }, "grouped_product": { "summary": "Add Grouped Product", "description": "Add a grouped product by specifying quantities for each associated product", "value": { "productId": 5, "quantity": 1, "qty": { "1": 2, "3": 1, "4": 1 } } }, "bundle_product": { "summary": "Add Bundle Product", "description": "Add a bundle product with selected bundle options", "value": { "productId": 6, "quantity": 1, "bundleOptions": { "1": [ 1 ], "2": [ 2 ], "3": [ 3 ], "4": [ 4 ] } } }, "downloadable_product": { "summary": "Add Downloadable Product", "description": "Add a downloadable product with selected download links", "value": { "productId": 62, "quantity": 1, "links": [ 1, 2 ] } }, "appointment_booking": { "summary": "Add Appointment Booking", "description": "Book an appointment by selecting date and time slot", "value": { "productId": 63, "quantity": 1, "booking": { "date": "2026-04-24", "slot": "09:00 AM - 10:00 AM" } } }, "default_booking": { "summary": "Add Default Booking", "description": "Book a default booking slot by selecting date and time", "value": { "productId": 64, "quantity": 1, "booking": { "date": "2026-04-24", "slot": "12:00 PM - 01:00 PM" } } }, "table_booking": { "summary": "Add Table Booking", "description": "Reserve a restaurant table with date, time slot and special note", "value": { "productId": 65, "quantity": 1, "booking": { "date": "2026-04-24", "slot": "09:00 AM - 10:30 AM", "note": "Window seat please" } } }, "rental_daily_booking": { "summary": "Add Rental Booking (Daily)", "description": "Rent a product for a date range", "value": { "productId": 66, "quantity": 1, "booking": { "renting_type": "daily", "date_from": "2026-04-24", "date_to": "2026-04-26" } } }, "event_booking": { "summary": "Add Event Booking", "description": "Book event tickets by specifying quantities per ticket type", "value": { "productId": 67, "quantity": 1, "booking": { "qty": { "37": 2, "38": 1 } } } } } } }, "required": true } } }, "/apply-coupon": { "post": { "operationId": "apply", "tags": [ "Cart" ], "responses": { "201": { "description": "Coupon applied. Returns the full cart.", "content": { "application/json": { "example": { "id": 6888, "cartToken": "6888", "customerId": 1537, "channelId": 1, "itemsCount": 1, "items": [ { "id": 7766, "cartId": 6888, "productId": 1, "name": "Coastal Breeze Men's Blue Zipper Hoodie", "sku": "COASTALBREEZEMENSHOODIE", "quantity": 1, "price": 100, "total": 100, "type": "simple", "formattedPrice": "$100.00", "formattedTotal": "$100.00" } ], "subtotal": 100, "grandTotal": 200, "taxAmount": 0, "discountAmount": 0, "couponCode": "OLIVE99", "formattedSubtotal": "$100.00", "formattedGrandTotal": "$200.00", "success": true, "message": "Coupon applied successfully" } } }, "links": [] }, "400": { "description": "Missing couponCode, or coupon invalid/inactive/not applicable to this cart.", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Apply coupon to cart", "description": "Apply a discount coupon code to the cart.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "Coupon code to apply", "content": { "application/json": { "schema": { "type": "object", "required": [ "couponCode" ], "properties": { "couponCode": { "type": "string", "example": "DISCOUNT20", "description": "Coupon code to apply" } } } } }, "required": true } } }, "/cart": { "post": { "operationId": "api_apishopcart_post", "tags": [ "Cart" ], "responses": { "201": { "description": "The cart with items, totals, coupon, and selected shipping/payment.", "content": { "application/json": { "example": { "id": 6888, "cartToken": null, "customerId": 1537, "channelId": 1, "itemsCount": 1, "items": [ { "id": 7765, "cartId": 6888, "productId": 1, "name": "Coastal Breeze Men's Blue Zipper Hoodie", "sku": "COASTALBREEZEMENSHOODIE", "quantity": 1, "price": 100, "total": 100, "type": "simple", "formattedPrice": "$100.00", "formattedTotal": "$100.00" } ], "subtotal": 100, "grandTotal": 100, "taxAmount": 0, "discountAmount": 0, "couponCode": null, "formattedSubtotal": "$100.00", "formattedGrandTotal": "$100.00" } } }, "links": [] }, "401": { "description": "No cart found for the given token, or not authenticated." }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Get cart details (authenticated customer or guest)", "description": "Returns the active cart with items, totals, coupons, shipping/payment method, and addresses. Works for both a logged-in customer and a guest; the cart is always identified by the Bearer token (the customer token, or the guest cart token from POST /api/shop/cart-token). A cart id in the body is ignored. It is a POST (not GET) because reading the cart recalculates totals; the GraphQL equivalent is the `createReadCart` mutation for the same reason. Body may be an empty `{}` for a logged-in customer.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new ReadCart resource", "content": { "application/json": { "schema": { "type": "object", "properties": [], "example": [] } } }, "required": false } } }, "/cart-tokens": { "post": { "operationId": "createCartToken", "tags": [ "Cart" ], "responses": { "201": { "description": "Guest cart created; returns the cart token used to identify the guest for subsequent cart/checkout calls.", "content": { "application/json": { "example": { "id": 6891, "cartToken": "81975c94-4d61-4be8-b2f9-3562d58e646c", "customerId": null, "channelId": 1, "itemsCount": 0, "items": [], "subtotal": 0, "grandTotal": 0, "taxAmount": 0, "discountAmount": 0, "couponCode": null, "formattedSubtotal": "$0.00", "formattedGrandTotal": "$0.00" } } }, "links": [] }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Create cart token", "description": "Create a new guest cart with unique UUID token or get authenticated customer cart. Returns sessionToken for guests.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "Cart creation payload", "content": { "application/json": { "schema": { "type": "object", "properties": { "sessionId": { "type": "string", "example": "my-session-id", "description": "Session ID for cart creation (optional)" }, "createNew": { "type": "boolean", "example": true, "description": "Generate new cart with unique token (optional)" } } }, "examples": { "guest_cart": { "summary": "Create Guest Cart", "description": "Create a new guest cart token", "value": { "createNew": true } }, "guest_cart_with_session": { "summary": "Create Guest Cart with Session ID", "description": "Create a guest cart linked to a session", "value": { "sessionId": "my-session-id", "createNew": true } } } } }, "required": false } } }, "/cart/cross-sells": { "get": { "operationId": "api_apishopcartcross-sells_get_collection", "tags": [ "Cart" ], "responses": { "200": { "description": "Cross-sell products.", "content": { "application/json": { "example": [ { "id": 12, "sku": "COASTALBREEZEMENSHOODIE", "type": "simple", "name": "Coastal Breeze Men's Blue Zipper Hoodie", "urlKey": "coastal-breeze-mens-blue-zipper-hoodie", "price": 100, "formattedPrice": "$100.00", "baseImageUrl": "http://localhost/storage/product/12/hoodie.webp", "isSaleable": true, "isInWishlist": 0, "isInCompare": 0 } ] } } } }, "summary": "Cross-sell products for the cart", "description": "The \"you may also like\" products the storefront cart page shows: cross-sells of the products in the cart of the Bearer token, without the products already in the cart, limited by Configuration > Catalog > Products > Cart View Page. Each item has the same fields as the product list. Empty when there is no cart.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/customizable-option-files": { "post": { "operationId": "api_apishopcustomizable-option-files_post", "tags": [ "Cart" ], "responses": { "201": { "description": "File staged. Returns a token to send on add-to-cart.", "content": { "application/json": { "example": { "token": "q8f2…48chars", "fileName": "spec.pdf", "optionId": 11 } } }, "links": [] }, "403": { "description": "The file does not belong to your cart." }, "404": { "description": "Product not found." }, "422": { "description": "Option is not a file option, or the file is missing / wrong extension / too large.", "links": [] }, "400": { "description": "Invalid input", "links": [] } }, "summary": "Upload a file for a customizable option", "description": "Stages a file for a file-type customizable option and returns a token. Send the token on add-to-cart as customizableOptions: { \"\": [\"\"] }. Requires the storefront key and a cart/customer Bearer token.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new CustomizableOptionFile resource", "content": { "multipart/form-data": { "schema": { "type": "object", "required": [ "product_id", "option_id", "file" ], "properties": { "product_id": { "type": "integer", "example": 2977 }, "option_id": { "type": "integer", "example": 11 }, "file": { "type": "string", "format": "binary" } } } } }, "required": true } } }, "/estimate-shippings": { "post": { "operationId": "api_apishopestimate-shippings_post", "tags": [ "Cart" ], "responses": { "201": { "description": "Returns the full cart.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EstimateShipping.CartData-mutation" } }, "text/html": { "schema": { "$ref": "#/components/schemas/EstimateShipping.CartData.html-mutation" } } }, "links": [] }, "400": { "description": "Missing or invalid input.", "links": [] }, "404": { "description": "Cart not found for the Bearer token." }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Estimate shipping methods and tax", "description": "Estimates shipping and tax for the cart of the Bearer token from a country, state and postcode, without saving an address. Returns the cart with `shippingMethods`, the methods available for that address. Send `shippingMethod` to price one of them into the totals.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new EstimateShipping resource", "content": { "application/json": { "schema": { "type": "object", "required": [ "country", "state", "postcode" ], "properties": { "country": { "type": "string", "example": "US" }, "state": { "type": "string", "example": "CA" }, "postcode": { "type": "string", "example": "90001" }, "shippingMethod": { "type": "string", "example": "flatrate_flatrate" } } }, "example": { "country": "US", "state": "CA", "postcode": "90001" } } }, "required": true } } }, "/move-to-wishlists": { "post": { "operationId": "api_apishopmove-to-wishlists_post", "tags": [ "Cart" ], "responses": { "201": { "description": "Returns the full cart.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MoveToWishlist.CartData-mutation" } }, "text/html": { "schema": { "$ref": "#/components/schemas/MoveToWishlist.CartData.html-mutation" } } }, "links": [] }, "400": { "description": "Missing or invalid input.", "links": [] }, "404": { "description": "Cart not found for the Bearer token." }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Move cart items to the wishlist", "description": "Moves cart items of the Bearer token cart into the wishlist of the customer and removes them from the cart. Requires a customer login. `quantities` matches `itemIds` by position and defaults to 1.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new MoveToWishlist resource", "content": { "application/json": { "schema": { "type": "object", "required": [ "itemIds" ], "properties": { "itemIds": { "type": "array", "items": { "type": "integer" }, "example": [ 7766 ] }, "quantities": { "type": "array", "items": { "type": "integer" }, "example": [ 1 ] } } }, "example": { "itemIds": [ 7766 ], "quantities": [ 1 ] } } }, "required": true } } }, "/remove-cart-item": { "post": { "operationId": "removeItem", "tags": [ "Cart" ], "responses": { "201": { "description": "Updated cart with the item removed.", "content": { "application/json": { "example": { "id": 6888, "cartToken": "6888", "customerId": 1537, "channelId": 1, "itemsCount": 0, "items": [], "subtotal": 0, "grandTotal": 0, "taxAmount": 0, "discountAmount": 0, "couponCode": null, "formattedSubtotal": "$0.00", "formattedGrandTotal": "$0.00" } } }, "links": [] }, "400": { "description": "Missing cartItemId, or item not in cart.", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Remove item from cart", "description": "Remove a single item from the cart by cart item ID.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "Cart item to remove", "content": { "application/json": { "schema": { "type": "object", "required": [ "cartItemId" ], "properties": { "cartItemId": { "type": "integer", "example": 1, "description": "Cart item ID to remove" } } } } }, "required": true } } }, "/remove-cart-items": { "post": { "operationId": "removeItems", "tags": [ "Cart" ], "responses": { "201": { "description": "Updated cart with the items removed.", "content": { "application/json": { "example": { "id": 6888, "cartToken": "6888", "customerId": 1537, "channelId": 1, "itemsCount": 0, "items": [], "subtotal": 0, "grandTotal": 0, "taxAmount": 0, "discountAmount": 0, "couponCode": null, "formattedSubtotal": "$0.00", "formattedGrandTotal": "$0.00" } } }, "links": [] }, "400": { "description": "Missing/empty itemIds, or items not in cart.", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Remove multiple items from cart", "description": "Remove multiple items from cart by providing an array of cart item IDs.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "Cart items to remove", "content": { "application/json": { "schema": { "type": "object", "required": [ "itemIds" ], "properties": { "itemIds": { "type": "array", "items": { "type": "integer" }, "example": [ 1, 2 ], "description": "Array of cart item IDs to remove" } } } } }, "required": true } } }, "/remove-coupon": { "post": { "operationId": "removeCoupon", "tags": [ "Cart" ], "responses": { "201": { "description": "Coupon removed. Returns the full cart.", "content": { "application/json": { "example": { "id": 6888, "cartToken": "6888", "customerId": 1537, "channelId": 1, "itemsCount": 1, "items": [ { "id": 7766, "cartId": 6888, "productId": 1, "name": "Coastal Breeze Men's Blue Zipper Hoodie", "sku": "COASTALBREEZEMENSHOODIE", "quantity": 1, "price": 100, "total": 100, "type": "simple", "formattedPrice": "$100.00", "formattedTotal": "$100.00" } ], "subtotal": 100, "grandTotal": 100, "taxAmount": 0, "discountAmount": 0, "couponCode": null, "formattedSubtotal": "$100.00", "formattedGrandTotal": "$100.00", "success": true, "message": "Coupon removed successfully" } } }, "links": [] }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Remove coupon from cart", "description": "Remove the applied coupon code from the cart.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "Empty body", "content": { "application/json": { "schema": { "type": "object", "properties": [] }, "example": [] } }, "required": false } } }, "/update-cart-item": { "post": { "operationId": "updateItem", "tags": [ "Cart" ], "responses": { "201": { "description": "Cart item quantity updated. Returns the full cart.", "content": { "application/json": { "example": { "id": 6888, "cartToken": "6888", "customerId": 1537, "channelId": 1, "itemsCount": 1, "items": [ { "id": 7765, "cartId": 6888, "productId": 1, "name": "Coastal Breeze Men's Blue Zipper Hoodie", "sku": "COASTALBREEZEMENSHOODIE", "quantity": 2, "price": 100, "total": 200, "type": "simple", "formattedPrice": "$100.00", "formattedTotal": "$200.00" } ], "subtotal": 200, "grandTotal": 200, "taxAmount": 0, "discountAmount": 0, "couponCode": null, "formattedSubtotal": "$200.00", "formattedGrandTotal": "$200.00", "success": true, "message": "Cart item updated successfully" } } }, "links": [] }, "400": { "description": "Missing cartItemId/quantity, or item not in cart.", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Update cart item quantity", "description": "Update the quantity of an item in the cart.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "Cart item update data", "content": { "application/json": { "schema": { "type": "object", "required": [ "cartItemId", "quantity" ], "properties": { "cartItemId": { "type": "integer", "example": 1, "description": "Cart item ID to update" }, "quantity": { "type": "integer", "example": 3, "description": "New quantity" } } } } }, "required": true } } }, "/url-resolver": { "get": { "operationId": "api_apishopurl-resolver_get_collection", "tags": [ "Catalog" ], "responses": { "200": { "description": "What the path is.", "content": { "application/json": { "example": [ { "path": "old-shoes", "type": "redirect", "entityId": null, "targetPath": "nike-shoes", "redirectType": 301 } ] } } }, "404": { "description": "Nothing matches the path." } }, "summary": "Resolve a storefront URL", "description": "Tells a headless storefront what a path is, in the order the storefront checks it: a category slug, a product URL key (only a visible, enabled product), the last segment of a nested category path (a 301), then a URL rewrite. `type` is `category`, `product`, `redirect` or `home`. A path nothing matches answers 404.", "parameters": [ { "name": "path", "in": "query", "description": "The path, without the domain, e.g. `men/shirts` or `/nike-shoes`.", "required": true, "deprecated": false, "schema": { "type": "string", "example": "nike-shoes" }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/categories": { "get": { "operationId": "api_apishopcategories_get_collection", "tags": [ "Category" ], "responses": { "200": { "description": "List of active categories.", "content": { "application/json": { "example": [ { "id": 24, "position": 1, "status": 1, "displayMode": "products_and_description", "_lft": 27, "_rgt": 32, "createdAt": "2026-05-21T12:53:40+05:30", "updatedAt": "2026-05-21T12:53:40+05:30", "url": "", "filterableAttributes": [], "translations": [], "children": [ "/api/shop/categories/25", "/api/shop/categories/26" ] } ] } } } }, "summary": "List active categories with optional parent filtering", "description": "Returns a flat list of active categories only (status=1). Admin-disabled categories are never returned. Use `?parent_id=N` for direct children of a category. Each item embeds its `translation`, `children`, and `filterableAttributes`. For a hierarchical tree response use /category-trees instead. Public endpoint.", "parameters": [ { "name": "parent_id", "in": "query", "description": "Return only direct children of this category ID. Accepts `parentId` as an alias.", "required": false, "deprecated": false, "schema": { "type": "integer", "example": 2 }, "style": "form", "explode": true }, { "name": "page", "in": "query", "description": "Page number (1-based).", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "Items per page. Default 10, max 50.", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/categories/attributes": { "get": { "operationId": "api_apishopcategoriesattributes_get_collection", "tags": [ "Category" ], "responses": { "200": { "description": "Filterable attributes.", "content": { "application/json": { "example": [ { "id": 23, "code": "color", "adminName": "Color", "type": "select", "isFilterable": 1, "swatchType": "color", "minPrice": 0, "maxPrice": 120, "options": [ { "id": 1, "adminName": "Red", "sortOrder": 1, "swatchValue": "#ff0000" } ] } ] } } }, "404": { "description": "Category not found." } }, "summary": "List the filterable attributes of a category", "description": "Returns the filterable attributes for the layered navigation of a category, with their options and the price range of its products (converted to the requested currency). When the category has no filterable attributes of its own, or no category is given, every globally filterable attribute is returned. Public endpoint.", "parameters": [ { "name": "category_id", "in": "query", "description": "Category ID. Returns 404 when the category does not exist.", "required": false, "deprecated": false, "schema": { "type": "integer", "example": 2 }, "style": "form", "explode": true }, { "name": "category_slug", "in": "query", "description": "Category slug, used when `category_id` is not sent.", "required": false, "deprecated": false, "schema": { "type": "string", "example": "men" }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/categories/{id}": { "get": { "operationId": "api_apishopcategories_id_get", "tags": [ "Category" ], "responses": { "200": { "description": "Category detail.", "content": { "application/json": { "example": { "id": 24, "position": 1, "status": 1, "displayMode": "products_and_description", "_lft": 27, "_rgt": 32, "createdAt": "2026-05-21T12:53:40+05:30", "updatedAt": "2026-05-21T12:53:40+05:30", "url": "", "filterableAttributes": [], "translations": [], "children": [ "/api/shop/categories/25", "/api/shop/categories/26" ] } } } }, "404": { "description": "Category not found." } }, "summary": "Get a single active category", "description": "Returns one active category by ID. Public endpoint.", "parameters": [ { "name": "id", "in": "path", "description": "Category ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/category-trees": { "get": { "operationId": "api_apishopcategory-trees_get_collection", "tags": [ "CategoryTree" ], "responses": { "200": { "description": "Nested category tree.", "content": { "application/json": { "example": [ { "id": 24, "position": 1, "status": 1, "displayMode": "products_and_description", "_lft": 27, "_rgt": 32, "createdAt": "2026-05-21T12:53:40+05:30", "updatedAt": "2026-05-21T12:53:40+05:30", "url": "", "children": [ { "id": 25, "position": 1, "status": 1, "displayMode": "products_and_description", "_lft": 28, "_rgt": 29, "createdAt": "2026-05-21T12:53:40+05:30", "updatedAt": "2026-05-21T12:53:40+05:30", "url": "", "children": [] }, { "id": 26, "position": 2, "status": 1, "displayMode": "products_and_description", "_lft": 30, "_rgt": 31, "createdAt": "2026-05-21T12:53:40+05:30", "updatedAt": "2026-05-21T12:53:40+05:30", "url": "", "children": [] } ] } ] } } } }, "summary": "Get hierarchical category tree structure", "description": "Returns categories as a nested tree. Pass parentId to scope results to children of that category. Public endpoint.", "parameters": [ { "name": "parentId", "in": "query", "description": "Return children of this category ID. Omit to return root categories.", "required": false, "deprecated": false, "schema": { "type": "integer", "example": 1 }, "style": "form", "explode": true }, { "name": "depth", "in": "query", "description": "Maximum nesting depth (default: 4).", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 4, "example": 4 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/channel_translations": { "get": { "operationId": "api_apishopchannel_translations_get_collection", "tags": [ "Channel" ], "responses": { "200": { "description": "Translations listed.", "content": { "application/json": { "example": [ { "id": 1, "channelId": 1, "locale": "en", "name": "E2E ch 1781678253319", "description": "", "maintenanceModeText": "Maintenance Mode", "homeSeo": { "meta_title": "Demo store", "meta_keywords": "Demo store meta keyword", "meta_description": "Demo store meta description" }, "createdAt": null, "updatedAt": "2026-06-17T12:07:35+05:30" } ] } } } }, "summary": "List channel translations", "description": "Lists all channel translation rows. Public endpoint.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/channel_translations/{id}": { "get": { "operationId": "api_apishopchannel_translations_id_get", "tags": [ "Channel" ], "responses": { "200": { "description": "Translation found.", "content": { "application/json": { "example": { "id": 1, "channelId": 1, "locale": "en", "name": "E2E ch 1781678253319", "description": "", "maintenanceModeText": "Maintenance Mode", "homeSeo": { "meta_title": "Demo store", "meta_keywords": "Demo store meta keyword", "meta_description": "Demo store meta description" }, "createdAt": null, "updatedAt": "2026-06-17T12:07:35+05:30" } } } }, "404": { "description": "Translation not found." } }, "summary": "Get a channel translation by ID", "description": "Returns the locale-specific translation row for a channel (homeSeo, name, etc.). Referenced from /api/shop/channels/{id} responses via the `translation` and `translations` IRI fields. Public endpoint.", "parameters": [ { "name": "id", "in": "path", "description": "Channel translation ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/channels": { "get": { "operationId": "api_apishopchannels_get_collection", "tags": [ "Channel" ], "responses": { "200": { "description": "Channels listed.", "content": { "application/json": { "example": [ { "id": 1, "code": "default", "timezone": null, "theme": "default", "hostname": "https://api-demo.bagisto.com", "logo": null, "favicon": null, "homeSeo": { "meta_title": "Demo store", "meta_keywords": "Demo store meta keyword", "meta_description": "Demo store meta description" }, "isMaintenanceOn": 0, "allowedIps": "192.168.45.51", "createdAt": null, "updatedAt": "2026-04-08T17:23:40+05:30", "logoUrl": null, "faviconUrl": null, "locales": [ "/api/shop/locales/1", "/api/shop/locales/10" ], "currencies": [ "/api/shop/currencies/1" ], "defaultLocale": "/api/shop/locales/1", "baseCurrency": "/api/shop/currencies/1", "translation": "/api/shop/channel_translations/1", "translations": [ "/api/shop/channel_translations/1", "/api/shop/channel_translations/5" ] } ] } } } }, "summary": "List channels", "description": "Lists all storefront channels with their configuration, SEO defaults, and related locale/currency/translation references. Public endpoint.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/channels/{id}": { "get": { "operationId": "api_apishopchannels_id_get", "tags": [ "Channel" ], "responses": { "200": { "description": "Channel found.", "content": { "application/json": { "example": { "id": 1, "code": "default", "timezone": null, "theme": "default", "hostname": "https://api-demo.bagisto.com", "logo": null, "favicon": null, "homeSeo": { "meta_title": "Demo store", "meta_keywords": "Demo store meta keyword", "meta_description": "Demo store meta description" }, "isMaintenanceOn": 0, "allowedIps": "192.168.45.51", "createdAt": null, "updatedAt": "2026-04-08T17:23:40+05:30", "logoUrl": null, "faviconUrl": null, "locales": [ "/api/shop/locales/1", "/api/shop/locales/10" ], "currencies": [ "/api/shop/currencies/1" ], "defaultLocale": "/api/shop/locales/1", "baseCurrency": "/api/shop/currencies/1", "translation": "/api/shop/channel_translations/1", "translations": [ "/api/shop/channel_translations/1", "/api/shop/channel_translations/5" ] } } } }, "404": { "description": "Channel not found." } }, "summary": "Get a channel by ID", "description": "Returns a single storefront channel with its configuration, SEO defaults, and related locale/currency/translation references. Public endpoint.", "parameters": [ { "name": "id", "in": "path", "description": "Channel ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/checkout-addresses": { "get": { "operationId": "api_apishopcheckout-addresses_get_collection", "tags": [ "Checkout" ], "responses": { "200": { "description": "The current cart's saved billing and shipping addresses.", "content": { "application/json": { "example": [ { "id": 5564, "addressType": "cart_billing", "parentAddressId": null, "orderId": null, "firstName": "John", "lastName": "Doe", "gender": null, "companyName": null, "address": "123 Main St", "city": "New York", "state": "NY", "country": "US", "postcode": "10001", "email": "john@example.com", "phone": "1234567890", "vatId": null, "defaultAddress": false, "useForShipping": false, "additional": null, "createdAt": "2026-07-02T13:03:53+05:30", "updatedAt": "2026-07-02T13:03:53+05:30", "name": "John Doe" }, { "id": 5565, "addressType": "cart_shipping", "parentAddressId": null, "orderId": null, "firstName": "John", "lastName": "Doe", "gender": null, "companyName": null, "address": "123 Main St", "city": "New York", "state": "NY", "country": "US", "postcode": "10001", "email": "john@example.com", "phone": "1234567890", "vatId": null, "defaultAddress": false, "useForShipping": false, "additional": null, "createdAt": "2026-07-02T13:03:53+05:30", "updatedAt": "2026-07-02T13:03:53+05:30", "name": "John Doe" } ] } } } }, "summary": "Get billing and shipping addresses for the authenticated cart", "description": "Returns the CartAddress rows (billing + shipping) attached to the cart identified by the Bearer token. Mirrors the GraphQL `collectionGetCheckoutAddresses` query.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] }, "post": { "operationId": "api_apishopcheckout-addresses_post", "tags": [ "Checkout" ], "responses": { "201": { "description": "Addresses saved successfully.", "content": { "application/json": { "example": { "id": 5564, "cartToken": "1536", "customerId": 1536, "billingFirstName": "John", "billingLastName": "Doe", "billingEmail": "john@example.com", "billingCompanyName": "", "billingAddress": "123 Main St", "billingCountry": "US", "billingState": "NY", "billingCity": "New York", "billingPostcode": "10001", "billingPhoneNumber": "1234567890", "shippingFirstName": "John", "shippingLastName": "Doe", "shippingEmail": "john@example.com", "shippingCompanyName": "", "shippingAddress": "123 Main St", "shippingCountry": "US", "shippingState": "NY", "shippingCity": "New York", "shippingPostcode": "10001", "shippingPhoneNumber": "1234567890", "success": true, "message": "Address saved successfully" } } }, "links": [] }, "500": { "description": "Billing address missing/invalid, or no active cart." }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Save billing and shipping addresses for checkout", "description": "Saves billing and shipping addresses to the current cart. Use `useForShipping: true` to copy billing as shipping, or provide shipping fields for a different shipping address.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new CheckoutAddress resource", "content": { "application/json": { "schema": { "type": "object", "required": [ "billingFirstName", "billingLastName", "billingEmail", "billingAddress", "billingCity", "billingCountry", "billingState", "billingPostcode", "billingPhoneNumber" ], "properties": { "billingFirstName": { "type": "string", "example": "John" }, "billingLastName": { "type": "string", "example": "Doe" }, "billingEmail": { "type": "string", "example": "john@example.com" }, "billingCompanyName": { "type": "string", "example": "" }, "billingAddress": { "type": "string", "example": "123 Main St" }, "billingCity": { "type": "string", "example": "Los Angeles" }, "billingCountry": { "type": "string", "example": "US" }, "billingState": { "type": "string", "example": "CA" }, "billingPostcode": { "type": "string", "example": "90001" }, "billingPhoneNumber": { "type": "string", "example": "2125551234" }, "useForShipping": { "type": "boolean", "example": true }, "shippingFirstName": { "type": "string", "example": "Jane" }, "shippingLastName": { "type": "string", "example": "Doe" }, "shippingEmail": { "type": "string", "example": "jane@example.com" }, "shippingCompanyName": { "type": "string", "example": "" }, "shippingAddress": { "type": "string", "example": "456 Oak Ave" }, "shippingCity": { "type": "string", "example": "San Francisco" }, "shippingCountry": { "type": "string", "example": "US" }, "shippingState": { "type": "string", "example": "CA" }, "shippingPostcode": { "type": "string", "example": "94102" }, "shippingPhoneNumber": { "type": "string", "example": "4155559876" } } } } }, "required": true } } }, "/checkout-orders": { "post": { "operationId": "api_apishopcheckout-orders_post", "tags": [ "Checkout" ], "responses": { "201": { "description": "Order placed, or a payment redirect is required. Check the `redirect` flag: when it is false the order exists and `orderId` and `incrementId` (the order number to show the shopper) are set; when it is true no order has been created yet and the shopper must be sent to `redirectUrl` to pay — the order is created once the gateway returns.", "content": { "application/json": { "examples": { "Order placed (cash on delivery, money transfer)": { "value": { "id": 6887, "cartToken": "1536", "orderId": "2609", "incrementId": "2609", "redirect": false, "redirectUrl": null, "success": true, "message": "Order placed successfully" } }, "Payment redirect required (stripe, razorpay, payu, phonepe, paypal_standard)": { "value": { "id": 6887, "cartToken": "1536", "orderId": null, "incrementId": null, "redirect": true, "redirectUrl": "https://example.com/stripe/redirect", "success": true, "message": "This payment method requires the shopper to complete payment on the gateway. Send them to redirectUrl; the order is created once the gateway confirms the payment." } } } } }, "links": [] }, "500": { "description": "Cart not fully prepared (missing addresses/shipping/payment) or checkout failed." }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Create order from cart", "description": "Finalizes checkout and creates an order from the current cart. The cart is identified by the Bearer token in the Authorization header; all address, shipping, and payment data must already be saved on the cart.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new CheckoutOrder resource", "content": { "application/json": { "schema": { "type": "object", "properties": [] }, "example": [] } }, "required": false } } }, "/checkout-payment-methods": { "post": { "operationId": "api_apishopcheckout-payment-methods_post", "tags": [ "Checkout" ], "responses": { "201": { "description": "Payment method saved successfully.", "content": { "application/json": { "example": { "success": true, "message": "Payment method saved successfully", "cartToken": "1536", "paymentMethod": "moneytransfer" } } }, "links": [] }, "500": { "description": "No cart/shipping saved, or invalid payment method." }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Save selected payment method for checkout", "description": "Save selected payment method for checkout", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new CheckoutPaymentMethod resource", "content": { "application/json": { "schema": { "type": "object", "required": [ "paymentMethod" ], "properties": { "paymentMethod": { "type": "string", "example": "moneytransfer" }, "paymentSuccessUrl": { "type": "string", "example": "https://myapp.com/payment/success" }, "paymentFailureUrl": { "type": "string", "example": "https://myapp.com/payment/failure" }, "paymentCancelUrl": { "type": "string", "example": "https://myapp.com/payment/cancel" } } }, "example": { "paymentMethod": "moneytransfer" } } }, "required": true } } }, "/checkout-payments/confirm": { "post": { "operationId": "api_apishopcheckout-paymentsconfirm_post", "tags": [ "Checkout" ], "responses": { "201": { "description": "The order was placed.", "content": { "application/json": { "example": { "orderId": 42, "orderIncrementId": "42", "status": "processing", "success": true, "message": "Payment confirmed and order placed." } } }, "links": [] }, "401": { "description": "No cart token." }, "422": { "description": "The method needs no confirmation, the payment could not be verified, or the cart is not ready.", "links": [] }, "400": { "description": "Invalid input", "links": [] } }, "summary": "Confirm payment and place the order", "description": "Places the order of the cart of the Bearer token after the customer paid, for Razorpay, PayPal Standard and PayPal Smart Button (the other gateways place the order on their own return). Razorpay: send the three values the Razorpay checkout returns; the signature is verified and the Razorpay order must belong to this cart and amount. PayPal Standard: send an empty body after PayPal returns the customer; as on the storefront the order is created pending and PayPal's IPN marks it paid. PayPal Smart Button: send `paypal_order_id` once the customer approved the payment in the PayPal SDK; the PayPal order must belong to this cart and total, it is captured, and the order is placed paid and invoiced.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new CheckoutPaymentConfirmation resource", "content": { "application/json": { "schema": { "type": "object", "properties": { "razorpay_order_id": { "type": "string", "example": "order_P9xYz" }, "razorpay_payment_id": { "type": "string", "example": "pay_P9xZa" }, "razorpay_signature": { "type": "string", "example": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08" }, "paypal_order_id": { "type": "string", "example": "5O190127TN364715T" } } } } }, "required": false } } }, "/checkout-payments/initiate": { "post": { "operationId": "api_apishopcheckout-paymentsinitiate_post", "tags": [ "Checkout" ], "responses": { "201": { "description": "What the client needs to start the payment.", "content": { "application/json": { "examples": { "redirect": { "summary": "Stripe, PhonePe, PayGlocal", "value": { "method": "stripe", "type": "redirect", "redirectUrl": "https://checkout.stripe.com/c/pay/cs_test_a1b2c3", "formAction": null, "formFields": null, "sdkData": null } }, "sdk": { "summary": "Razorpay", "value": { "method": "razorpay", "type": "sdk", "redirectUrl": null, "formAction": null, "formFields": null, "sdkData": { "key": "rzp_test_xxxxx", "amount": 10900, "currency": "INR", "order_id": "order_P9xYz" } } }, "paypal_smart_button": { "summary": "PayPal Smart Button", "value": { "method": "paypal_smart_button", "type": "sdk", "redirectUrl": null, "formAction": null, "formFields": null, "sdkData": { "order_id": "5O190127TN364715T", "client_id": "AbCdEf-sandbox-client-id", "currency": "USD", "intent": "capture" } } } } } }, "links": [] }, "401": { "description": "No cart token." }, "422": { "description": "The cart is not ready, the method is not an online gateway, or the gateway rejected the request.", "links": [] }, "400": { "description": "Invalid input", "links": [] } }, "summary": "Start payment for an online payment method", "description": "Call this instead of placing the order when the selected payment method is an online gateway (the place-order response then has `redirect: true`). Uses the cart of the Bearer token; addresses, shipping and payment method must already be saved. The response says how to hand the customer to the gateway: `redirect` (open `redirectUrl`: Stripe, PhonePe, PayGlocal), `form` (POST `formFields` to `formAction`: PayPal Standard, PayU) or `sdk` (open the gateway SDK with `sdkData`: Razorpay, PayPal Smart Button). PayPal Smart Button returns the PayPal `order_id` to hand to the PayPal JS SDK `createOrder` callback, with the `client_id` and `currency` to load the SDK with. Stripe, PhonePe, PayGlocal and PayU create the order on their own return. For Razorpay, PayPal Standard and PayPal Smart Button, call `POST /api/shop/checkout-payments/confirm` after payment.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/checkout-shipping-methods": { "get": { "operationId": "api_apishopcheckout-shipping-methods_get_collection", "tags": [ "Checkout" ], "responses": { "200": { "description": "Available shipping methods.", "content": { "application/json": { "example": [ { "id": "flatrate_flatrate_flatrate", "code": "flatrate", "label": "Flat Rate", "price": 20, "formattedPrice": "$20.00", "description": "Flat Rate Shipping", "method": "flatrate_flatrate", "methodTitle": "Flat Rate", "methodDescription": "Flat Rate Shipping", "basePrice": 20, "baseFormattedPrice": "$20.00", "carrier": "flatrate", "carrierTitle": "Flat Rate" } ] } } } }, "summary": "Get available shipping methods", "description": "Returns the shipping rates available for the authenticated customer's active cart. The cart must have a shipping address set (via POST /api/shop/checkout-addresses) before rates can be computed.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] }, "post": { "operationId": "api_apishopcheckout-shipping-methods_post", "tags": [ "Checkout" ], "responses": { "201": { "description": "Shipping method saved.", "content": { "application/json": { "example": { "id": "6887", "success": true, "message": "Shipping method saved successfully", "cartToken": "1536", "shippingMethod": "flatrate_flatrate" } } }, "links": [] }, "500": { "description": "No cart/addresses saved, or invalid shipping method." }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Save selected shipping method for checkout", "description": "Save selected shipping method for checkout", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new CheckoutShippingMethod resource", "content": { "application/json": { "schema": { "type": "object", "required": [ "shippingMethod" ], "properties": { "shippingMethod": { "type": "string", "example": "flatrate_flatrate" } } }, "example": { "shippingMethod": "flatrate_flatrate" } } }, "required": true } } }, "/payment-methods": { "get": { "operationId": "api_apishoppayment-methods_get_collection", "tags": [ "Checkout" ], "responses": { "200": { "description": "Available payment methods.", "content": { "application/json": { "example": [ { "id": "moneytransfer", "method": "moneytransfer", "title": "Money Transfer", "description": "Money Transfer", "icon": "http://127.0.0.1:8000/themes/shop/default/build/assets/money-transfer-BNjtOcYo.png", "additionalData": null, "isAllowed": true } ] } } } }, "summary": "Get available payment methods", "description": "Returns the payment methods available for the authenticated customer's active cart.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/compare-attributes": { "get": { "operationId": "api_apishopcompare-attributes_get_collection", "tags": [ "CompareItem" ], "responses": { "200": { "description": "The comparable attributes.", "content": { "application/json": { "example": [ { "id": 23, "code": "color", "adminName": "Color", "name": "Color", "type": "select" }, { "id": 24, "code": "size", "adminName": "Size", "name": "Size", "type": "select" } ] } } }, "403": { "description": "Product comparison is disabled for this store." } }, "summary": "List the comparable attributes", "description": "Returns the attributes marked comparable that belong to an attribute family, excluding name and price, in the requested locale. These are the rows of the storefront compare page; read each value from the matching product field. Refused when the store has switched product comparison off.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/compare_items": { "get": { "operationId": "api_apishopcompare_items_get_collection", "tags": [ "CompareItem" ], "responses": { "200": { "description": "The compare items.", "content": { "application/json": { "example": [ { "id": 84, "createdAt": "2026-07-02T12:29:41+05:30", "updatedAt": "2026-07-02T12:29:41+05:30", "product": "/api/shop/products/1", "customer": "/api/shop/customers/1535" } ] } } } }, "summary": "List compare items", "description": "Returns the authenticated customer's compare list.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] }, "post": { "operationId": "api_apishopcompare_items_post", "tags": [ "CompareItem" ], "responses": { "201": { "description": "The product was added to the compare list.", "content": { "application/json": { "example": { "id": 84, "createdAt": "2026-07-02T12:29:41+05:30", "updatedAt": "2026-07-02T12:29:41+05:30", "product": "/api/shop/products/1", "customer": "/api/shop/customers/1535" } } }, "links": [] }, "422": { "description": "Missing/invalid product_id, or product already in compare list.", "links": [] }, "400": { "description": "Invalid input", "links": [] } }, "summary": "Add a product to compare list", "description": "Adds a product to the authenticated customer's compare list.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "Product to add to the compare list", "content": { "application/json": { "schema": { "type": "object", "required": [ "productId" ], "properties": { "productId": { "type": "integer", "format": "int64", "example": 1 } } }, "example": { "product_id": 1 } } }, "required": true } } }, "/compare_items/{id}": { "get": { "operationId": "api_apishopcompare_items_id_get", "tags": [ "CompareItem" ], "responses": { "200": { "description": "The compare item.", "content": { "application/json": { "example": { "id": 84, "createdAt": "2026-07-02T12:29:41+05:30", "updatedAt": "2026-07-02T12:29:41+05:30", "product": "/api/shop/products/1", "customer": "/api/shop/customers/1535" } } } }, "404": { "description": "Compare item not found or not owned by the caller." } }, "summary": "Get a compare item", "description": "Returns a single compare item owned by the authenticated customer.", "parameters": [ { "name": "id", "in": "path", "description": "Compare item ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] }, "delete": { "operationId": "api_apishopcompare_items_id_delete", "tags": [ "CompareItem" ], "responses": { "204": { "description": "Compare item removed. No content." }, "404": { "description": "Compare item not found or not owned by the caller." } }, "summary": "Remove a compare item", "description": "Removes a compare item owned by the authenticated customer.", "parameters": [ { "name": "id", "in": "path", "description": "Compare item ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/delete-all-compare-items": { "post": { "operationId": "api_apishopdelete-all-compare-items_post", "tags": [ "CompareItem" ], "responses": { "201": { "description": "All compare items were removed.", "content": { "application/json": { "example": { "message": "All compare items have been removed successfully", "deletedCount": 1 } } }, "links": [] }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Remove all compare items", "description": "Removes every compare item for the authenticated customer.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new DeleteAllCompareItems resource", "content": { "application/json": { "example": [] } }, "required": false } } }, "/contact-us": { "post": { "operationId": "submitContactUs", "tags": [ "ContactUs" ], "responses": { "201": { "description": "Inquiry submitted.", "content": { "application/json": { "example": { "success": true, "message": "Your inquiry has been submitted successfully. We will get back to you soon" } } }, "links": [] }, "422": { "description": "Validation failed (missing name/email/message, invalid email).", "links": [] }, "400": { "description": "Invalid input", "links": [] } }, "summary": "Submit a contact us inquiry", "description": "Submits a contact-us inquiry. Public endpoint. `name`, `email` and `message` are required; `contact` (phone) is optional.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new ContactUs resource", "content": { "application/json": { "schema": { "type": "object", "required": [ "name", "email", "message" ], "properties": { "name": { "type": "string", "example": "John Doe" }, "email": { "type": "string", "format": "email", "example": "john@example.com" }, "contact": { "type": "string", "example": "+1234567890" }, "message": { "type": "string", "example": "I have a question about your products" } } }, "example": { "name": "John Doe", "email": "john@example.com", "contact": "1234567890", "message": "Do you ship internationally?" } } }, "required": true } } }, "/countries": { "get": { "operationId": "api_apishopcountries_get_collection", "tags": [ "Country" ], "responses": { "200": { "description": "List of countries.", "content": { "application/json": { "example": [ { "id": 1, "code": "AF", "name": "Afghanistan", "states": [], "translations": [ { "id": 1, "countryId": 1, "locale": "ar", "name": "أفغانستان" }, { "id": 256, "countryId": 1, "locale": "es", "name": "Afganistán" } ] } ] } } } }, "summary": "List countries", "description": "Returns all countries with their `states` and per-locale `translations`. Public endpoint.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/countries/{id}": { "get": { "operationId": "api_apishopcountries_id_get", "tags": [ "Country" ], "responses": { "200": { "description": "The country.", "content": { "application/json": { "example": { "id": 1, "code": "AF", "name": "Afghanistan", "states": [], "translations": [ { "id": 1, "countryId": 1, "locale": "ar", "name": "أفغانستان" }, { "id": 256, "countryId": 1, "locale": "es", "name": "Afganistán" } ] } } } }, "404": { "description": "Country not found." } }, "summary": "Get a country by ID", "description": "Returns one country with its `states` and per-locale `translations`. Public endpoint.", "parameters": [ { "name": "id", "in": "path", "description": "Country ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/countries/{country_id}/states": { "get": { "operationId": "api_apishopcountries_country_idstates_get_collection", "tags": [ "CountryState" ], "responses": { "200": { "description": "List of states.", "content": { "application/json": { "example": [ { "id": 1, "countryId": 244, "countryCode": "US", "code": "AL", "defaultName": "Alabama", "translations": [ "/api/shop/country_state_translations/1", "/api/shop/country_state_translations/569" ] } ] } } } }, "summary": "List states for a country", "description": "Returns the states of the given country. Each state's `translations` are IRIs. Public endpoint.", "parameters": [ { "name": "country_id", "in": "path", "description": "Country ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/countries/{country_id}/states/{id}": { "get": { "operationId": "api_apishopcountries_country_idstates_id_get", "tags": [ "CountryState" ], "responses": { "200": { "description": "The state.", "content": { "application/json": { "example": { "id": 1, "countryId": 244, "countryCode": "US", "code": "AL", "defaultName": "Alabama", "translations": [ "/api/shop/country_state_translations/1", "/api/shop/country_state_translations/569" ] } } } }, "404": { "description": "State not found for this country." } }, "summary": "Get a state of a country by ID", "description": "Returns one state scoped to the given country. Public endpoint.", "parameters": [ { "name": "country_id", "in": "path", "description": "Country ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "id", "in": "path", "description": "Country state ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/country-states": { "get": { "operationId": "api_apishopcountry-states_get_collection", "tags": [ "CountryState" ], "responses": { "200": { "description": "List of states.", "content": { "application/json": { "example": [ { "id": 1, "countryId": 244, "countryCode": "US", "code": "AL", "defaultName": "Alabama", "translations": [ "/api/shop/country_state_translations/1", "/api/shop/country_state_translations/569" ] } ] } } } }, "summary": "List all country states", "description": "Returns all states across every country. Each state's `translations` are IRIs. Public endpoint.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/country-states/{id}": { "get": { "operationId": "api_apishopcountry-states_id_get", "tags": [ "CountryState" ], "responses": { "200": { "description": "The state.", "content": { "application/json": { "example": { "id": 1, "countryId": 244, "countryCode": "US", "code": "AL", "defaultName": "Alabama", "translations": [ "/api/shop/country_state_translations/1", "/api/shop/country_state_translations/569" ] } } } }, "404": { "description": "State not found." } }, "summary": "Get a country state by ID", "description": "Returns one state by its global ID. Public endpoint.", "parameters": [ { "name": "id", "in": "path", "description": "Country state ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/currencies": { "get": { "operationId": "api_apishopcurrencies_get_collection", "tags": [ "Currency" ], "responses": { "200": { "description": "List of currencies.", "content": { "application/json": { "example": [ { "id": 1, "code": "USD", "name": "US Dollar", "symbol": "$", "decimal": 2, "groupSeparator": ",", "decimalSeparator": "." } ] } } } }, "summary": "List currencies", "description": "Returns all store currencies. Public endpoint.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/currencies/{id}": { "get": { "operationId": "api_apishopcurrencies_id_get", "tags": [ "Currency" ], "responses": { "200": { "description": "The currency.", "content": { "application/json": { "example": { "id": 1, "code": "USD", "name": "US Dollar", "symbol": "$", "decimal": 2, "groupSeparator": ",", "decimalSeparator": "." } } } }, "404": { "description": "Currency not found." } }, "summary": "Get a currency by ID", "description": "Returns one store currency. Public endpoint.", "parameters": [ { "name": "id", "in": "path", "description": "Currency ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/customer-profile": { "get": { "operationId": "api_apishopcustomer-profile_get_collection", "tags": [ "Customer" ], "responses": { "200": { "description": "Authenticated customer profile", "content": { "application/json": { "example": [ { "id": "1529", "firstName": "Api", "lastName": "Doc", "email": "john@example.com", "phone": null, "gender": null, "dateOfBirth": null, "status": "1", "subscribedToNewsLetter": false, "isVerified": "0", "isSuspended": "0", "image": null, "password": null, "confirmPassword": null, "success": null, "message": null } ] } } } }, "summary": "Get authenticated customer profile", "description": "Returns the profile of the currently authenticated customer. Requires Bearer token via the Authorize button.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/customer-profile-deletes/{id}": { "post": { "operationId": "api_apishopcustomer-profile-deletes_id_post", "tags": [ "Customer" ], "responses": { "201": { "description": "Customer account deleted", "content": { "application/json": { "example": [] } }, "links": [] }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Delete customer profile", "description": "Delete the authenticated customer's account. Requires the Bearer token and the account password, as the storefront does. An account with a pending or processing order cannot be deleted (422).", "parameters": [ { "name": "id", "in": "path", "description": "Customer profile delete ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The account password. The account itself is identified by the Bearer token.", "content": { "application/json": { "schema": { "type": "object", "required": [ "password" ], "properties": { "password": { "type": "string" } } }, "example": { "password": "Secret@123" } } }, "required": true } } }, "/customer-profile-updates/{id}": { "put": { "operationId": "api_apishopcustomer-profile-updates_id_put", "tags": [ "Customer" ], "responses": { "200": { "description": "Customer profile updated successfully", "content": { "application/json": { "example": { "id": "1529", "_id": "1529", "firstName": "Api", "lastName": "DocUpdated", "email": "john@example.com", "phone": "9998887777", "status": "1", "subscribedToNewsLetter": false, "isVerified": "false", "isSuspended": "false", "success": true, "message": "Customer profile updated successfully" } } }, "links": [] }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] }, "404": { "description": "Not found", "links": [] } }, "summary": "Update customer profile", "description": "Update the authenticated customer's profile. Requires Bearer token. Fields isVerified, isSuspended, and status cannot be changed by the customer.", "parameters": [ { "name": "id", "in": "path", "description": "Customer profile update ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "Customer profile fields to update. Only include the fields you want to change.", "content": { "application/json": { "schema": { "type": "object", "properties": { "firstName": { "type": "string", "example": "John" }, "lastName": { "type": "string", "example": "Doe" }, "email": { "type": "string", "format": "email", "example": "john@example.com" }, "phone": { "type": "string", "example": "1234567890" }, "gender": { "type": "string", "enum": [ "Male", "Female", "Other" ], "example": "Male" }, "dateOfBirth": { "type": "string", "format": "date", "example": "1990-01-15" }, "currentPassword": { "type": "string", "format": "password", "example": "OldPassword123!", "description": "Current password — required only when changing password" }, "password": { "type": "string", "format": "password", "example": "NewPassword123!", "description": "New password (requires currentPassword and confirmPassword)" }, "confirmPassword": { "type": "string", "format": "password", "example": "NewPassword123!", "description": "Must match password" }, "subscribedToNewsLetter": { "type": "boolean", "example": true }, "image": { "type": "string", "example": "data:image/jpeg;base64,...", "description": "Profile image as base64 encoded string" }, "deleteImage": { "type": "boolean", "example": false, "description": "Set true to remove existing profile image" } } }, "example": { "first_name": "Api", "last_name": "DocUpdated", "phone": "9998887777" }, "examples": { "update_partial_profile": { "summary": "Update selected fields", "value": { "first_name": "Api", "last_name": "DocUpdated", "phone": "9998887777" } }, "update_full_profile": { "summary": "Update full profile", "value": { "firstName": "John", "lastName": "Doe", "email": "john@example.com", "phone": "1234567890", "gender": "Male", "dateOfBirth": "1990-01-15", "subscribedToNewsLetter": true, "password": "NewPassword123!", "confirmPassword": "NewPassword123!" } } } } }, "required": true } } }, "/customer/login": { "post": { "operationId": "api_apishopcustomerlogin_post", "tags": [ "Customer" ], "responses": { "201": { "description": "Authenticated. Use `token` as the Bearer token in the Authorization header for subsequent calls.", "content": { "application/json": { "example": { "id": 1529, "_id": 1529, "apiToken": "PPKI0VNiX5qehio2q1cMeMd6TCaIKofwQ4mb7y2zcy0japYwsyc", "token": "3762|wT7yGIo82N7T3r2YFc3iEcugycFjPQgG338DKnPXeaa96bad", "success": true, "message": "You have logged in successfully" } } }, "links": [] }, "401": { "description": "Invalid email or password." }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Customer login", "description": "Authenticate a customer with email and password. Returns a Bearer token for subsequent API calls.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "Customer login credentials", "content": { "application/json": { "schema": { "type": "object", "required": [ "email", "password" ], "properties": { "email": { "type": "string", "format": "email", "example": "john@example.com" }, "password": { "type": "string", "format": "password", "example": "Password123!" } } }, "example": { "email": "john@example.com", "password": "Password123!" } } }, "required": true } } }, "/customer/logout": { "post": { "operationId": "api_apishopcustomerlogout_post", "tags": [ "Customer" ], "responses": { "201": { "description": "Logged out successfully", "content": { "application/json": { "example": { "success": true, "message": "Logged out successfully" } } }, "links": [] }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Customer logout", "description": "Logout the authenticated customer and revoke the Bearer token.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "Empty body", "content": { "application/json": { "schema": { "type": "object" }, "example": [] } }, "required": false } } }, "/customers": { "post": { "operationId": "api_apishopcustomers_post", "tags": [ "Customer" ], "responses": { "201": { "description": "Customer registered. `token` is the Bearer token for subsequent calls.", "content": { "application/json": { "example": { "id": 1529, "firstName": "John", "lastName": "Doe", "gender": null, "dateOfBirth": null, "email": "john@example.com", "phone": null, "status": 1, "apiToken": "PPKI0VNiX5qehio2q1cMeMd6TCaIKofwQ4mb7y2zcy0japYwsyc", "customerGroupId": 2, "channelId": 1, "subscribedToNewsLetter": false, "isVerified": 0, "isSuspended": 0, "token": "3761|0aJpoW6dIBsKLWocWJFo0tp8gmakvQbIJe8LBZLz6847d9ab", "rememberToken": null, "deviceToken": null, "name": "John Doe" } } }, "links": [] }, "422": { "description": "Validation failed (email already taken, passwords do not match, etc.).", "links": [] }, "400": { "description": "Invalid input", "links": [] } }, "summary": "Register a new customer", "description": "Register a new customer account", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "Customer registration data", "content": { "application/json": { "schema": { "type": "object", "required": [ "firstName", "lastName", "email", "password", "confirmPassword" ], "properties": { "firstName": { "type": "string", "example": "John" }, "lastName": { "type": "string", "example": "Doe" }, "email": { "type": "string", "format": "email", "example": "john@example.com" }, "password": { "type": "string", "format": "password", "example": "Password123!" }, "confirmPassword": { "type": "string", "format": "password", "example": "Password123!" }, "phone": { "type": "string", "example": "1234567890" }, "gender": { "type": "string", "enum": [ "Male", "Female", "Other" ] }, "dateOfBirth": { "type": "string", "format": "date", "example": "1990-01-15" }, "status": { "type": "integer", "example": 1, "description": "Customer status (1 = active, 0 = inactive)" }, "isVerified": { "type": "integer", "example": 1, "description": "Whether the customer is verified (1 = verified, 0 = not verified)" }, "isSuspended": { "type": "integer", "example": 0, "description": "Whether the customer is suspended (1 = suspended, 0 = active)" }, "subscribedToNewsLetter": { "type": "boolean", "example": true }, "deviceToken": { "type": "string", "example": "your-fcm-device-token" } } }, "example": { "firstName": "John", "lastName": "Doe", "email": "john@example.com", "password": "Password123!", "confirmPassword": "Password123!" } } }, "required": false } } }, "/customers/social-login": { "post": { "operationId": "api_apishopcustomerssocial-login_post", "tags": [ "Customer" ], "responses": { "201": { "description": "Signed in. Store `token` as the Bearer token. `isNewCustomer` marks a first-time sign-up.", "content": { "application/json": { "example": { "id": 1782, "token": "1550|1LMsQ6…", "apiToken": "rjTLsuOs…", "firstName": "Nadia", "lastName": "Rahman", "email": "nadia@example.com", "phone": null, "isNewCustomer": true, "success": true, "message": "Signed in successfully.", "code": null } } }, "links": [] }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Social login", "description": "Verify a provider token the app/web already obtained (Google Identity Services or a native SDK — no redirect), then sign the customer in, creating and linking the account on first sight. Returns a Bearer `token` for subsequent calls. Providers: `google`, `facebook`, `linkedin`.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "A provider and one of idToken / accessToken.", "content": { "application/json": { "schema": { "type": "object", "required": [ "provider" ], "properties": { "provider": { "type": "string", "enum": [ "google", "facebook", "linkedin" ], "example": "google" }, "idToken": { "type": "string", "description": "Google ID token (google only).", "example": "eyJhbGciOi…" }, "accessToken": { "type": "string", "description": "OAuth access token (facebook / linkedin, or google)." }, "deviceToken": { "type": "string", "description": "Optional FCM token to register push in the same call." } } }, "example": { "provider": "google", "idToken": "eyJhbGciOi…" } } }, "required": true } } }, "/forgot-passwords": { "post": { "operationId": "api_apishopforgot-passwords_post", "tags": [ "Customer" ], "responses": { "201": { "description": "Reset link sent", "content": { "application/json": { "example": { "success": true, "message": "Reset link sent successfully to your email" } } }, "links": [] }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Request password reset link", "description": "Sends a password reset email to the given customer email if the account exists.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new ForgotPassword resource", "content": { "application/json": { "schema": { "type": "object", "required": [ "email" ], "properties": { "email": { "type": "string", "example": "john@example.com" } } }, "example": { "email": "john@example.com" } } }, "required": true } } }, "/reset-passwords": { "post": { "operationId": "api_apishopreset-passwords_post", "tags": [ "Customer" ], "responses": { "201": { "description": "Password changed.", "content": { "application/json": { "example": { "success": true, "message": "Your password has been reset. You can now sign in with the new password." } } }, "links": [] }, "422": { "description": "Missing or invalid input, or the token is invalid or expired.", "links": [] }, "400": { "description": "Invalid input", "links": [] } }, "summary": "Reset password", "description": "Sets a new password with the token from the forgot-password email. The token is the last segment of the reset link (`/customer/reset-password/{token}`). A token can be used once and expires after the time set in the auth config. No customer login is needed. The emailed link opens the storefront reset page; an app that wants its own screen should open that link as a deep link and call this endpoint.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new ResetPassword resource", "content": { "application/json": { "schema": { "type": "object", "required": [ "token", "email", "password", "passwordConfirmation" ], "properties": { "token": { "type": "string", "example": "5f2b9c…" }, "email": { "type": "string", "example": "john@example.com" }, "password": { "type": "string", "minLength": 6, "example": "NewSecret123" }, "passwordConfirmation": { "type": "string", "example": "NewSecret123" } } }, "example": { "token": "5f2b9c…", "email": "john@example.com", "password": "NewSecret123", "passwordConfirmation": "NewSecret123" } } }, "required": true } } }, "/verification-emails": { "post": { "operationId": "api_apishopverification-emails_post", "tags": [ "Customer" ], "responses": { "201": { "description": "Email sent, or no account uses that address.", "content": { "application/json": { "example": { "success": true, "message": "Verification email sent." } } }, "links": [] }, "422": { "description": "Missing or invalid email.", "links": [] }, "400": { "description": "Invalid input", "links": [] } }, "summary": "Resend verification email", "description": "Generates a new verification token and emails the verification link again. The response is the same whether or not the email belongs to an account, so it cannot be used to find accounts.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new VerificationEmail resource", "content": { "application/json": { "schema": { "type": "object", "required": [ "email" ], "properties": { "email": { "type": "string", "example": "john@example.com" } } }, "example": { "email": "john@example.com" } } }, "required": true } } }, "/verify-accounts": { "post": { "operationId": "api_apishopverify-accounts_post", "tags": [ "Customer" ], "responses": { "201": { "description": "Account verified.", "content": { "application/json": { "example": { "success": true, "message": "Your account has been verified. You can now sign in." } } }, "links": [] }, "422": { "description": "Missing token, or no account matches it.", "links": [] }, "400": { "description": "Invalid input", "links": [] } }, "summary": "Verify account", "description": "Verifies a customer account with the token from the verification email, so the customer can sign in. The token is the last segment of the link in that email (`/customer/verify-account/{token}`). Sent only when Configuration → Customer → Settings → Email Verification is on. No customer login is needed. The emailed link opens the storefront verify page; an app that wants to verify in-app should open that link as a deep link and call this endpoint.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new VerifyAccount resource", "content": { "application/json": { "schema": { "type": "object", "required": [ "token" ], "properties": { "token": { "type": "string", "example": "5d41402abc4b2a76b9719d911017c592" } } }, "example": { "token": "5d41402abc4b2a76b9719d911017c592" } } }, "required": true } } }, "/verify-tokens": { "post": { "operationId": "api_apishopverify-tokens_post", "tags": [ "Customer" ], "responses": { "201": { "description": "Token is valid", "content": { "application/json": { "example": { "id": 1529, "firstName": "Api", "lastName": "Doc", "email": "john@example.com", "isValid": true, "message": "Token is valid" } } }, "links": [] }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Verify customer bearer token", "description": "Validates the customer bearer token from the Authorization header and returns the customer details if valid.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new VerifyToken resource", "content": { "application/json": { "schema": { "type": "object", "properties": [] }, "example": [] } }, "required": false } } }, "/customer-addresses": { "get": { "operationId": "api_apishopcustomer-addresses_get_collection", "tags": [ "Customer Address" ], "responses": { "200": { "description": "List of customer addresses.", "content": { "application/json": { "example": [ { "id": 5563, "addressType": "customer", "firstName": "Api", "lastName": "Addr", "companyName": "Acme Inc.", "address": "123 Main St", "city": "New York", "state": "NY", "country": "US", "postcode": "10001", "email": "api@example.com", "phone": "1234567890", "vatId": "GB123456789", "defaultAddress": true, "useForShipping": false, "createdAt": "2026-07-02T11:16:28+05:30", "updatedAt": "2026-07-02T11:16:28+05:30", "name": "Api Addr" } ] } } } }, "summary": "Get all customer addresses", "description": "Returns all addresses of the authenticated customer. Requires Bearer token.", "parameters": [ { "name": "sort", "in": "query", "description": "Column to sort by: `id` (default) or `created_at`. Compound form also accepted, e.g. `created_at-desc`.", "required": false, "deprecated": false, "schema": { "type": "string", "enum": [ "id", "created_at", "id-asc", "id-desc", "created_at-asc", "created_at-desc" ] }, "style": "form", "explode": true }, { "name": "order", "in": "query", "description": "Sort direction: `asc` (default) or `desc`. Use `desc` to show the most recently added addresses first.", "required": false, "deprecated": false, "schema": { "type": "string", "enum": [ "asc", "desc" ] }, "style": "form", "explode": true }, { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] }, "post": { "operationId": "api_apishopcustomer-addresses_post", "tags": [ "Customer Address" ], "responses": { "201": { "description": "Address created.", "content": { "application/json": { "example": { "id": 5563, "addressId": 5563, "firstName": "Api", "lastName": "Addr", "companyName": "Acme Inc.", "vatId": "GB123456789", "email": "api@example.com", "phone": "1234567890", "address1": null, "address2": null, "country": "US", "state": "NY", "city": "New York", "postcode": "10001", "defaultAddress": true } } }, "links": [] }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Create a customer address", "description": "Create a new address for the authenticated customer. Requires Bearer token.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "Address data", "content": { "application/json": { "schema": { "type": "object", "required": [ "firstName", "lastName", "email", "phone", "address1", "city", "state", "postcode", "country" ], "properties": { "firstName": { "type": "string", "example": "John" }, "lastName": { "type": "string", "example": "Doe" }, "companyName": { "type": "string", "example": "Acme Inc." }, "vatId": { "type": "string", "example": "GB123456789" }, "email": { "type": "string", "format": "email", "example": "john@example.com" }, "phone": { "type": "string", "example": "1234567890" }, "address1": { "type": "string", "example": "123 Main St" }, "address2": { "type": "string", "example": "Apt 4B" }, "city": { "type": "string", "example": "New York" }, "state": { "type": "string", "example": "NY" }, "postcode": { "type": "string", "example": "10001" }, "country": { "type": "string", "example": "US" }, "defaultAddress": { "type": "boolean", "example": true, "description": "Set as default address" } } }, "example": { "company_name": "Acme Inc.", "first_name": "Api", "last_name": "Addr", "vat_id": "GB123456789", "address": "123 Main St", "city": "New York", "state": "NY", "country": "US", "postcode": "10001", "phone": "1234567890", "email": "api@example.com", "default_address": true } } }, "required": true } } }, "/customer-addresses/{id}": { "get": { "operationId": "api_apishopcustomer-addresses_id_get", "tags": [ "Customer Address" ], "responses": { "200": { "description": "A customer address.", "content": { "application/json": { "example": { "id": 5563, "addressType": "customer", "firstName": "Api", "lastName": "Addr", "companyName": "Acme Inc.", "address": "123 Main St", "city": "New York", "state": "NY", "country": "US", "postcode": "10001", "email": "api@example.com", "phone": "1234567890", "vatId": "GB123456789", "defaultAddress": true, "useForShipping": false, "createdAt": "2026-07-02T11:16:28+05:30", "updatedAt": "2026-07-02T11:16:28+05:30", "name": "Api Addr" } } } }, "404": { "description": "Not found", "links": [] } }, "summary": "Get a customer address", "description": "Returns a specific address by ID. Requires Bearer token.", "parameters": [ { "name": "id", "in": "path", "description": "Customer address ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] }, "put": { "operationId": "api_apishopcustomer-addresses_id_put", "tags": [ "Customer Address" ], "responses": { "200": { "description": "Address updated.", "content": { "application/json": { "example": { "id": 5563, "addressId": 5563, "firstName": "Api", "lastName": "Addr", "companyName": "Acme Inc.", "vatId": "GB123456789", "email": "api@example.com", "phone": "5551112222", "address1": null, "address2": null, "country": "US", "state": "NY", "city": "Boston", "postcode": "10001", "defaultAddress": true } } }, "links": [] }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] }, "404": { "description": "Not found", "links": [] } }, "summary": "Update a customer address", "description": "Update an existing address. Requires Bearer token. Include addressId in the body.", "parameters": [ { "name": "id", "in": "path", "description": "Customer address ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "Address fields to update", "content": { "application/json": { "schema": { "type": "object", "properties": { "firstName": { "type": "string", "example": "John" }, "lastName": { "type": "string", "example": "Doe" }, "companyName": { "type": "string", "example": "Acme Inc." }, "vatId": { "type": "string", "example": "GB123456789" }, "email": { "type": "string", "format": "email", "example": "john@example.com" }, "phone": { "type": "string", "example": "1234567890" }, "address1": { "type": "string", "example": "456 Oak Ave" }, "address2": { "type": "string", "example": "Suite 100" }, "city": { "type": "string", "example": "Los Angeles" }, "state": { "type": "string", "example": "CA" }, "postcode": { "type": "string", "example": "90001" }, "country": { "type": "string", "example": "US" }, "defaultAddress": { "type": "boolean", "example": false, "description": "Set as default address" } } }, "example": { "city": "Boston", "phone": "5551112222" } } }, "required": true } }, "delete": { "operationId": "api_apishopcustomer-addresses_id_delete", "tags": [ "Customer Address" ], "responses": { "204": { "description": "Address deleted." }, "404": { "description": "Not found", "links": [] } }, "summary": "Delete a customer address", "description": "Delete an address by ID. Requires Bearer token.", "parameters": [ { "name": "id", "in": "path", "description": "Customer address ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/cancel-order": { "post": { "operationId": "api_apishopcancel-order_post", "tags": [ "Customer Order" ], "responses": { "201": { "description": "Order canceled.", "content": { "application/json": { "example": { "id": 411, "orderId": 411, "status": "canceled", "success": true, "message": "Order canceled successfully" } } }, "links": [] }, "400": { "description": "Order not found, not owned by the caller, or not in a cancelable state.", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Cancel a customer order", "description": "Cancels the given pending order owned by the authenticated customer. Returns success/failure status.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new CancelOrder resource", "content": { "application/json": { "schema": { "type": "object", "required": [ "orderId" ], "properties": { "orderId": { "type": "integer", "description": "The ID of the order to cancel.", "example": 411 } } }, "example": { "orderId": 411 } } }, "required": true } } }, "/customer-downloadable-products": { "get": { "operationId": "api_apishopcustomer-downloadable-products_get_collection", "tags": [ "Customer Order" ], "responses": { "200": { "description": "CustomerDownloadableProduct collection", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/CustomerDownloadableProduct" } } }, "text/html": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/CustomerDownloadableProduct.html" } } } } } }, "summary": "Retrieves the collection of CustomerDownloadableProduct resources.", "description": "Retrieves the collection of CustomerDownloadableProduct resources.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/customer-downloadable-products/{id}": { "get": { "operationId": "api_apishopcustomer-downloadable-products_id_get", "tags": [ "Customer Order" ], "responses": { "200": { "description": "CustomerDownloadableProduct resource", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomerDownloadableProduct" } }, "text/html": { "schema": { "$ref": "#/components/schemas/CustomerDownloadableProduct.html" } } } }, "404": { "description": "Not found", "links": [] } }, "summary": "Retrieves a CustomerDownloadableProduct resource.", "description": "Retrieves a CustomerDownloadableProduct resource.", "parameters": [ { "name": "id", "in": "path", "description": "Customer downloadable product ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/customer-downloadable-products/{id}/download": { "get": { "operationId": "downloadCustomerDownloadableProduct", "tags": [ "Customer Order" ], "responses": { "200": { "description": "Binary file stream", "content": { "application/octet-stream": { "schema": { "type": "string", "format": "binary" } } } }, "401": { "description": "Unauthorized" }, "403": { "description": "Forbidden (pending / download limit exceeded)" }, "404": { "description": "Download not found" } }, "summary": "Download purchased downloadable product", "description": "Streams the purchased file. Increments `download_used` on each successful call. `{id}` is the `downloadable_link_purchased` row id from `GET /customer-downloadable-products`.", "parameters": [ { "name": "id", "in": "path", "description": "Identifier", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "integer" }, "style": "simple", "explode": false }, { "name": "Authorization", "in": "header", "description": "Bearer token for authenticated customer (format: `Bearer `).", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "Bearer 1234|abcdef..." }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/customer-invoices": { "get": { "operationId": "api_apishopcustomer-invoices_get_collection", "tags": [ "Customer Order" ], "responses": { "200": { "description": "CustomerInvoice collection", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/CustomerInvoice" } } }, "text/html": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/CustomerInvoice.html" } } } } } }, "summary": "List invoices for the authenticated customer", "description": "Mirrors the GraphQL `customerInvoices(orderId:)` query. Use `?order_id=N` to scope to a specific order, `?state=paid` (or pending, pending_payment, overdue, refunded) to filter by invoice state.", "parameters": [ { "name": "order_id", "in": "query", "description": "Return only invoices for this order ID. Accepts `orderId` as an alias.", "required": false, "deprecated": false, "schema": { "type": "integer", "example": 590 }, "style": "form", "explode": true }, { "name": "state", "in": "query", "description": "Filter by invoice state (pending, pending_payment, paid, overdue, refunded).", "required": false, "deprecated": false, "schema": { "type": "string" }, "style": "form", "explode": true }, { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/customer-invoices/{id}": { "get": { "operationId": "api_apishopcustomer-invoices_id_get", "tags": [ "Customer Order" ], "responses": { "200": { "description": "CustomerInvoice resource", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomerInvoice" } }, "text/html": { "schema": { "$ref": "#/components/schemas/CustomerInvoice.html" } } } }, "404": { "description": "Not found", "links": [] } }, "summary": "Retrieves a CustomerInvoice resource.", "description": "Retrieves a CustomerInvoice resource.", "parameters": [ { "name": "id", "in": "path", "description": "Customer invoice ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/customer-invoices/{id}/pdf": { "get": { "operationId": "downloadCustomerInvoicePdf", "tags": [ "Customer Order" ], "responses": { "200": { "description": "Binary file stream", "content": { "application/octet-stream": { "schema": { "type": "string", "format": "binary" } } } }, "401": { "description": "Unauthorized" }, "403": { "description": "Forbidden" }, "404": { "description": "Invoice not found" } }, "summary": "Download invoice PDF", "description": "Streams the PDF for a customer invoice. Requires Bearer token; the invoice must belong to the authenticated customer.", "parameters": [ { "name": "id", "in": "path", "description": "Identifier", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "integer" }, "style": "simple", "explode": false }, { "name": "Authorization", "in": "header", "description": "Bearer token for authenticated customer (format: `Bearer `).", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "Bearer 1234|abcdef..." }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/customer-order-shipment-items": { "get": { "operationId": "api_apishopcustomer-order-shipment-items_get_collection", "tags": [ "Customer Order" ], "responses": { "200": { "description": "CustomerOrderShipmentItem collection", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/CustomerOrderShipmentItem" } } }, "text/html": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/CustomerOrderShipmentItem.html" } } } } } }, "summary": "Retrieves the collection of CustomerOrderShipmentItem resources.", "description": "Retrieves the collection of CustomerOrderShipmentItem resources.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/customer-order-shipment-items/{id}": { "get": { "operationId": "api_apishopcustomer-order-shipment-items_id_get", "tags": [ "Customer Order" ], "responses": { "200": { "description": "CustomerOrderShipmentItem resource", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomerOrderShipmentItem" } }, "text/html": { "schema": { "$ref": "#/components/schemas/CustomerOrderShipmentItem.html" } } } }, "404": { "description": "Not found", "links": [] } }, "summary": "Retrieves a CustomerOrderShipmentItem resource.", "description": "Retrieves a CustomerOrderShipmentItem resource.", "parameters": [ { "name": "id", "in": "path", "description": "Customer order shipment item ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/customer-order-shipments": { "get": { "operationId": "api_apishopcustomer-order-shipments_get_collection", "tags": [ "Customer Order" ], "responses": { "200": { "description": "CustomerOrderShipment collection", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/CustomerOrderShipment" } } }, "text/html": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/CustomerOrderShipment.html" } } } } } }, "summary": "List shipments for the authenticated customer", "description": "Mirrors the GraphQL `customerOrderShipments(orderId:)` query. Use `?order_id=N` to scope to a specific order, `?status=X` to filter by shipment status.", "parameters": [ { "name": "order_id", "in": "query", "description": "Return only shipments for this order ID. Accepts `orderId` as an alias.", "required": false, "deprecated": false, "schema": { "type": "integer", "example": 3 }, "style": "form", "explode": true }, { "name": "status", "in": "query", "description": "Filter by shipment status (pending, shipped, canceled).", "required": false, "deprecated": false, "schema": { "type": "string" }, "style": "form", "explode": true }, { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/customer-order-shipments/{id}": { "get": { "operationId": "api_apishopcustomer-order-shipments_id_get", "tags": [ "Customer Order" ], "responses": { "200": { "description": "CustomerOrderShipment resource", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomerOrderShipment" } }, "text/html": { "schema": { "$ref": "#/components/schemas/CustomerOrderShipment.html" } } } }, "404": { "description": "Not found", "links": [] } }, "summary": "Retrieves a CustomerOrderShipment resource.", "description": "Retrieves a CustomerOrderShipment resource.", "parameters": [ { "name": "id", "in": "path", "description": "Customer order shipment ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/customer-orders": { "get": { "operationId": "api_apishopcustomer-orders_get_collection", "tags": [ "Customer Order" ], "responses": { "200": { "description": "CustomerOrder collection", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/CustomerOrder.CustomerOrderListDto" } } }, "text/html": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/CustomerOrder.CustomerOrderListDto.html" } } } } } }, "summary": "Retrieves the collection of CustomerOrder resources.", "description": "Retrieves the collection of CustomerOrder resources.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/customer-orders/{id}": { "get": { "operationId": "api_apishopcustomer-orders_id_get", "tags": [ "Customer Order" ], "responses": { "200": { "description": "CustomerOrder resource", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomerOrder.CustomerOrderDetailDto" } }, "text/html": { "schema": { "$ref": "#/components/schemas/CustomerOrder.CustomerOrderDetailDto.html" } } } }, "404": { "description": "Not found", "links": [] } }, "summary": "Retrieves a CustomerOrder resource.", "description": "Retrieves a CustomerOrder resource.", "parameters": [ { "name": "id", "in": "path", "description": "Customer order ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/customer-refunds": { "get": { "operationId": "api_apishopcustomer-refunds_get_collection", "tags": [ "Customer Order" ], "responses": { "200": { "description": "CustomerRefund collection", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/CustomerRefund.CustomerRefundDto" } } }, "text/html": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/CustomerRefund.CustomerRefundDto.html" } } } } } }, "summary": "List refunds for the authenticated customer", "description": "Returns the refund documents issued against the authenticated customer's orders, newest first, each with its refunded items and totals. Use `?order_id=N` to scope to one order.", "parameters": [ { "name": "order_id", "in": "query", "description": "Return only refunds for this order ID. Accepts `orderId` as an alias.", "required": false, "deprecated": false, "schema": { "type": "integer", "example": 5 }, "style": "form", "explode": true }, { "name": "page", "in": "query", "description": "Page number (1-based).", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "Refunds per page (default 10, maximum 50).", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/customer-refunds/{id}": { "get": { "operationId": "api_apishopcustomer-refunds_id_get", "tags": [ "Customer Order" ], "responses": { "200": { "description": "CustomerRefund resource", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomerRefund.CustomerRefundDto" } }, "text/html": { "schema": { "$ref": "#/components/schemas/CustomerRefund.CustomerRefundDto.html" } } } }, "404": { "description": "Not found", "links": [] } }, "summary": "Get one refund of the authenticated customer", "description": "Returns a single refund document with its refunded items and totals. A refund of another customer's order answers 404.", "parameters": [ { "name": "id", "in": "path", "description": "Customer refund ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/reorder": { "post": { "operationId": "api_apishopreorder_post", "tags": [ "Customer Order" ], "responses": { "201": { "description": "Items re-added to the cart.", "content": { "application/json": { "example": { "id": 6892, "orderId": 411, "itemsAddedCount": 2, "success": true, "message": "Items added to cart successfully" } } }, "links": [] }, "400": { "description": "Order not found, not owned by the caller, or items no longer purchasable.", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Reorder items from a previous customer order", "description": "Re-adds the items from the given completed/canceled order to the authenticated customer's cart. Same flow as the storefront \"Reorder\" button.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new ReorderOrder resource", "content": { "application/json": { "schema": { "type": "object", "required": [ "orderId" ], "properties": { "orderId": { "type": "integer", "description": "The ID of the previous order whose items should be added back to the cart.", "example": 411 } } }, "example": { "orderId": 411 } } }, "required": true } } }, "/return-custom-fields": { "get": { "operationId": "api_apishopreturn-custom-fields_get_collection", "tags": [ "Customer Return" ], "responses": { "200": { "description": "Active custom fields, in the order the storefront renders them.", "content": { "application/json": { "example": [ { "id": 1, "code": "invoice_number", "label": "Invoice number", "type": "text", "isRequired": true, "position": 1, "inputValidation": "numeric", "options": [] }, { "id": 2, "code": "preferred_pickup_slot", "label": "Preferred pickup slot", "type": "select", "isRequired": false, "position": 2, "inputValidation": null, "options": [ { "id": 3, "name": "Morning", "value": "morning" }, { "id": 4, "name": "Evening", "value": "evening" } ] } ] } } } }, "summary": "List the active custom fields of the return form", "description": "The additional fields the storefront return form renders. Answer them with `customAttributes` when creating a return, keyed by the field `id`. Fields with `isRequired: true` must be answered; `select`/`radio` answers must be one of the option `value`s, `multiselect`/`checkbox` answers a list of them.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/return-messages": { "get": { "operationId": "api_apishopreturn-messages_get_collection", "tags": [ "Customer Return" ], "responses": { "200": { "description": "The RMA conversation messages, newest first.", "content": { "application/json": { "example": [ { "id": 88, "rmaId": 12, "message": "We have received your request and will inspect the item.", "isAdmin": true, "attachment": null, "attachmentUrl": null, "createdAt": "2026-07-20T10:40:00+00:00" }, { "id": 87, "rmaId": 12, "message": "The hoodie zipper is broken.", "isAdmin": false, "attachment": "rma/12/messages/zipper.jpg", "attachmentUrl": "https://example.com/storage/rma/12/messages/zipper.jpg", "createdAt": "2026-07-20T10:20:00+00:00" } ] } } } }, "summary": "List the conversation messages of a return request", "description": "Messages on the RMA named by `?return_id=`, newest first. Requires the RMA to belong to the authenticated customer.", "parameters": [ { "name": "return_id", "in": "query", "description": "Return (RMA) id", "required": true, "deprecated": false, "schema": { "type": "integer" }, "style": "form", "explode": true }, { "name": "limit", "in": "query", "description": "Messages per page, as the storefront's `limit`. Omit it to get every message.", "required": false, "deprecated": false, "schema": { "type": "integer", "example": 5 }, "style": "form", "explode": true }, { "name": "page", "in": "query", "description": "Page number when `limit` is sent.", "required": false, "deprecated": false, "schema": { "type": "integer", "example": 1 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] }, "post": { "operationId": "api_apishopreturn-messages_post", "tags": [ "Customer Return" ], "responses": { "201": { "description": "The created message.", "content": { "application/json": { "example": { "id": 89, "rmaId": 12, "message": "Any update on my return?", "isAdmin": false, "attachment": null, "attachmentUrl": null, "createdAt": "2026-07-20T11:15:00+00:00" } } }, "links": [] }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Send a message on a return request", "description": "Sends a message on a return. Attach one file in `file` (multipart) or as a base64 data URI in `attachment` (JSON).", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new CustomerReturnMessage resource", "content": { "multipart/form-data": { "schema": { "type": "object", "required": [ "return_id", "message" ], "properties": { "return_id": { "type": "integer", "example": 12 }, "message": { "type": "string", "example": "Photo of the damaged zipper attached." }, "file": { "type": "string", "format": "binary", "description": "Attachment for this message." } } } }, "application/json": { "schema": { "type": "object", "required": [ "return_id", "message" ], "properties": { "return_id": { "type": "integer", "example": 12 }, "message": { "type": "string", "example": "Any update on my return?" }, "attachment": { "type": "string", "description": "Attachment as a base64 data URI, max 5 MB.", "example": "data:image/png;base64,iVBORw0KGgo..." }, "attachment_name": { "type": "string", "description": "File name shown for the attachment.", "example": "zipper.png" } } } } }, "required": true } } }, "/return-reasons": { "get": { "operationId": "api_apishopreturn-reasons_get_collection", "tags": [ "Customer Return" ], "responses": { "200": { "description": "Active reasons for the resolution type. Use an id as rmaReasonId when creating a return.", "content": { "application/json": { "example": [ { "id": 2, "title": "Damaged product", "position": 1 }, { "id": 3, "title": "Wrong item delivered", "position": 2 }, { "id": 4, "title": "No longer needed", "position": 3 } ] } } } }, "summary": "List active return reasons for a resolution type", "description": "Reasons a customer can pick when raising a return, filtered by `?resolution_type=return|cancel_items`. Use these ids as `rmaReasonId` when creating a return.", "parameters": [ { "name": "resolution_type", "in": "query", "description": "return | cancel_items", "required": true, "deprecated": false, "schema": { "type": "string", "enum": [ "return", "cancel_items" ] }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/returnable-items": { "get": { "operationId": "api_apishopreturnable-items_get_collection", "tags": [ "Customer Return" ], "responses": { "200": { "description": "The return-eligible items of the order, with server-enforced quantity caps.", "content": { "application/json": { "example": [ { "orderItemId": 78, "productId": 1, "sku": "COASTALBREEZEMENSHOODIE", "name": "Coastal Breeze Men's Blue Zipper Hoodie", "type": "simple", "urlKey": "coastal-breeze-mens-blue-zipper-hoodie", "price": 100, "baseImageUrl": "https://example.com/storage/product/1/hoodie.webp", "qtyOrdered": 2, "currentQuantity": 2, "forReturnQuantity": 2, "forCancelQuantity": 0, "rmaQuantity": 0, "rmaReturnPeriod": 30 } ] } } } }, "summary": "List the return-eligible items of one of the customer's orders", "description": "Items from the order named by `?order_id=` that are still within their return window and not already fully returned/canceled. Each row carries the trusted quantity caps (`forReturnQuantity`, `forCancelQuantity`, `currentQuantity`) the create endpoint enforces. Requires the order to belong to the authenticated customer.", "parameters": [ { "name": "order_id", "in": "query", "description": "Order id to list returnable items for", "required": true, "deprecated": false, "schema": { "type": "integer" }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/returnable-orders": { "get": { "operationId": "api_apishopreturnable-orders_get_collection", "tags": [ "Customer Return" ], "responses": { "200": { "description": "Orders eligible for a new return.", "content": { "application/json": { "example": [ { "id": 41, "incrementId": "41", "status": "completed", "statusLabel": "Completed", "grandTotal": 160, "formattedGrandTotal": "$160.00", "orderCurrencyCode": "USD", "paymentMethodTitle": "Cash On Delivery", "totalQtyOrdered": 3, "totalReturnedQty": 1, "returnableQty": 2, "createdAt": "2026-08-30T09:12:44+00:00" } ] } } } }, "summary": "List the orders a return can still be raised against", "description": "The authenticated customer's orders that can start a return — the set the storefront shows first in the New Request flow. An order appears while it holds at least one item that was placed with returns allowed, is inside its return window, and has quantity left after everything already returned. Canceled, closed, fraud and pending-payment orders never appear. Pick an order from here, then call /returnable-items?order_id= for the items and their quantity caps.", "parameters": [ { "name": "increment_id", "in": "query", "description": "Filter by order number (partial match).", "required": false, "deprecated": false, "schema": { "type": "string" }, "style": "form", "explode": true }, { "name": "status", "in": "query", "description": "Filter by order status.", "required": false, "deprecated": false, "schema": { "type": "string" }, "style": "form", "explode": true }, { "name": "sort", "in": "query", "description": "Sort column — `created_at` (default), `increment_id` or `grand_total`.", "required": false, "deprecated": false, "schema": { "type": "string" }, "style": "form", "explode": true }, { "name": "order", "in": "query", "description": "Sort direction — `desc` (default) or `asc`.", "required": false, "deprecated": false, "schema": { "type": "string" }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/returns": { "get": { "operationId": "api_apishopreturns_get_collection", "tags": [ "Customer Return" ], "responses": { "200": { "description": "The customer's return requests (detail-only fields — canClose/canReopen/isExpired/images — are null on the listing).", "content": { "application/json": { "example": [ { "id": 12, "orderId": 45, "orderIncrementId": "000000045", "statusId": 1, "statusTitle": "Pending", "statusColor": "#FDB022", "packageCondition": "opened", "information": "Item arrived damaged.", "canClose": null, "canReopen": null, "isExpired": null, "item": { "id": 30, "order_item_id": 78, "sku": "COASTALBREEZEMENSHOODIE", "name": "Coastal Breeze Men's Blue Zipper Hoodie", "product_image": "https://example.com/cache/medium/product/12/hoodie.webp", "quantity": 1, "resolution": "return", "reason_id": 2, "reason": "Damaged product", "variant_id": null }, "images": null, "messagesCount": 2, "createdAt": "2026-07-20T10:15:30+00:00", "updatedAt": "2026-07-20T10:15:30+00:00" } ] } } } }, "summary": "List the authenticated customer's return (RMA) requests", "description": "Returns the customer's own RMA requests, newest first. Optional `?status=` filter. Requires a customer Bearer token.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] }, "post": { "operationId": "api_apishopreturns_post", "tags": [ "Customer Return" ], "responses": { "201": { "description": "The created return request.", "content": { "application/json": { "example": { "id": 12, "orderId": 45, "orderIncrementId": "000000045", "statusId": 1, "statusTitle": "Pending", "statusColor": "#FDB022", "packageCondition": "opened", "information": "Item arrived damaged.", "canClose": true, "canReopen": false, "isExpired": false, "item": { "id": 30, "order_item_id": 78, "sku": "COASTALBREEZEMENSHOODIE", "name": "Coastal Breeze Men's Blue Zipper Hoodie", "product_image": "https://example.com/cache/medium/product/12/hoodie.webp", "quantity": 1, "resolution": "return", "reason_id": 2, "reason": "Damaged product", "variant_id": null }, "images": [], "messagesCount": 0, "createdAt": "2026-07-20T10:15:30+00:00", "updatedAt": "2026-07-20T10:15:30+00:00" } } }, "links": [] }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Raise a new return (RMA) request", "description": "Raises a return for one returnable order item. Send multipart/form-data to attach evidence images in `images[]`; a JSON body works without images. A JSON body, and GraphQL `createCustomerReturn`, take images as base64 data URIs in `images`, like the profile image.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new CustomerReturn resource", "content": { "multipart/form-data": { "schema": { "type": "object", "required": [ "order_id", "order_item_id", "rma_qty", "resolution_type", "rma_reason_id", "agreement" ], "properties": { "order_id": { "type": "integer", "example": 12 }, "order_item_id": { "type": "integer", "example": 45 }, "rma_qty": { "type": "integer", "example": 1 }, "resolution_type": { "type": "string", "enum": [ "return", "cancel_items" ], "example": "return" }, "rma_reason_id": { "type": "integer", "example": 2 }, "information": { "type": "string", "example": "Item arrived damaged." }, "package_condition": { "type": "string", "enum": [ "open", "packed" ], "example": "open" }, "custom_attributes": { "type": "string", "description": "JSON object keyed by custom field id.", "example": "{\"1\":\"INV-9921\"}" }, "agreement": { "type": "boolean", "example": true }, "images[]": { "type": "array", "items": { "type": "string", "format": "binary" }, "description": "Evidence images, one file per field. Allowed types come from Configuration → Sales → RMA → Allowed file extension (JPG, PNG and WEBP by default). A single `images` field also works." } } } }, "application/json": { "schema": { "type": "object", "required": [ "order_id", "order_item_id", "rma_qty", "resolution_type", "rma_reason_id", "agreement" ], "properties": { "order_id": { "type": "integer", "example": 12 }, "order_item_id": { "type": "integer", "example": 45 }, "rma_qty": { "type": "integer", "example": 1 }, "resolution_type": { "type": "string", "enum": [ "return", "cancel_items" ], "example": "return" }, "rma_reason_id": { "type": "integer", "example": 2 }, "information": { "type": "string", "example": "Item arrived damaged." }, "package_condition": { "type": "string", "enum": [ "open", "packed" ], "example": "open" }, "custom_attributes": { "type": "object", "example": { "1": "INV-9921", "2": [ "morning", "evening" ] } }, "agreement": { "type": "boolean", "example": true }, "images": { "type": "array", "items": { "type": "string", "example": "data:image/png;base64,iVBORw0KGgo..." }, "description": "Evidence images as base64 data URIs, max 5 MB each." } } } } }, "required": true } } }, "/returns/{id}": { "get": { "operationId": "api_apishopreturns_id_get", "tags": [ "Customer Return" ], "responses": { "200": { "description": "The return request detail.", "content": { "application/json": { "example": { "id": 12, "orderId": 45, "orderIncrementId": "000000045", "statusId": 1, "statusTitle": "Pending", "statusColor": "#FDB022", "packageCondition": "opened", "information": "Item arrived damaged.", "canClose": true, "canReopen": false, "isExpired": false, "item": { "id": 30, "order_item_id": 78, "sku": "COASTALBREEZEMENSHOODIE", "name": "Coastal Breeze Men's Blue Zipper Hoodie", "product_image": "https://example.com/cache/medium/product/12/hoodie.webp", "quantity": 1, "resolution": "return", "reason_id": 2, "reason": "Damaged product", "variant_id": null }, "images": [ { "id": 5, "path": "rma/12/damage-front.png", "url": "https://example.com/storage/rma/12/damage-front.png" } ], "messagesCount": 2, "createdAt": "2026-07-20T10:15:30+00:00", "updatedAt": "2026-07-20T10:15:30+00:00" } } } }, "404": { "description": "Not found", "links": [] } }, "summary": "Get one of the customer's return (RMA) requests", "description": "Full detail of a single RMA owned by the authenticated customer — the returned item, images, status, and action flags (canClose / canReopen / isExpired). `item.product_image` is the returned product's image, or the store's product placeholder when it has none; `images` are the photos the customer attached. 404 if it is not the customer's.", "parameters": [ { "name": "id", "in": "path", "description": "Customer return ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/returns/{id}/cancel": { "post": { "operationId": "api_apishopreturns_idcancel_post", "tags": [ "Customer Return" ], "responses": { "200": { "description": "The canceled return request.", "content": { "application/json": { "example": { "id": 12, "orderId": 45, "orderIncrementId": "000000045", "statusId": 4, "statusTitle": "Canceled", "statusColor": "#F04438", "canClose": false, "canReopen": true, "isExpired": false, "messagesCount": 2, "updatedAt": "2026-07-20T11:00:00+00:00" } } } }, "201": { "description": "CustomerReturn resource created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomerReturn" } }, "text/html": { "schema": { "$ref": "#/components/schemas/CustomerReturn.html" } } }, "links": [] }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Cancel a return request", "description": "Cancels the customer's own RMA (unless it is already canceled). Empty body. Returns the updated RMA.", "parameters": [ { "name": "id", "in": "path", "description": "Customer return ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new CustomerReturn resource", "content": { "application/json": { "schema": { "type": "object" }, "example": [] } }, "required": false } } }, "/returns/{id}/close": { "post": { "operationId": "api_apishopreturns_idclose_post", "tags": [ "Customer Return" ], "responses": { "200": { "description": "The closed (solved) return request.", "content": { "application/json": { "example": { "id": 12, "orderId": 45, "orderIncrementId": "000000045", "statusId": 3, "statusTitle": "Solved", "statusColor": "#12B76A", "canClose": false, "canReopen": false, "isExpired": false, "messagesCount": 3, "updatedAt": "2026-07-20T11:10:00+00:00" } } } }, "201": { "description": "CustomerReturn resource created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomerReturn" } }, "text/html": { "schema": { "$ref": "#/components/schemas/CustomerReturn.html" } } }, "links": [] }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Close (mark solved) a return request", "description": "Marks the customer's own RMA as solved and adds a conversation note. Empty body. Returns the updated RMA.", "parameters": [ { "name": "id", "in": "path", "description": "Customer return ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new CustomerReturn resource", "content": { "application/json": { "schema": { "type": "object" }, "example": [] } }, "required": false } } }, "/returns/{id}/reopen": { "post": { "operationId": "api_apishopreturns_idreopen_post", "tags": [ "Customer Return" ], "responses": { "200": { "description": "The reopened return request.", "content": { "application/json": { "example": { "id": 12, "orderId": 45, "orderIncrementId": "000000045", "statusId": 1, "statusTitle": "Pending", "statusColor": "#FDB022", "canClose": true, "canReopen": false, "isExpired": false, "messagesCount": 2, "updatedAt": "2026-07-20T11:05:00+00:00" } } } }, "201": { "description": "CustomerReturn resource created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomerReturn" } }, "text/html": { "schema": { "$ref": "#/components/schemas/CustomerReturn.html" } } }, "links": [] }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Reopen a return request", "description": "Reopens a canceled/declined RMA back to pending — only when store settings allow it (otherwise 400). Empty body. Returns the updated RMA.", "parameters": [ { "name": "id", "in": "path", "description": "Customer return ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new CustomerReturn resource", "content": { "application/json": { "schema": { "type": "object" }, "example": [] } }, "required": false } } }, "/customer-reviews": { "get": { "operationId": "api_apishopcustomer-reviews_get_collection", "tags": [ "Customer Review" ], "responses": { "200": { "description": "List of the customer's reviews.", "content": { "application/json": { "example": [ { "id": 133, "name": "", "title": "Great product", "rating": 5, "comment": "Really enjoyed using this. Highly recommended.", "status": "pending", "createdAt": "2026-07-02T11:35:27+05:30", "updatedAt": "2026-07-02T11:35:27+05:30", "product": "/api/shop/products/1", "customer": "/api/shop/customers/1532" } ] } } } }, "summary": "List reviews submitted by the authenticated customer", "description": "Returns every review written by the authenticated customer (all statuses). Each row embeds the reviewed `product` and `customer` as IRIs. Requires a customer Bearer token.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/customer-reviews/{id}": { "get": { "operationId": "api_apishopcustomer-reviews_id_get", "tags": [ "Customer Review" ], "responses": { "200": { "description": "The requested review.", "content": { "application/json": { "example": { "id": 133, "name": "", "title": "Great product", "rating": 5, "comment": "Really enjoyed using this. Highly recommended.", "status": "pending", "createdAt": "2026-07-02T11:35:27+05:30", "updatedAt": "2026-07-02T11:35:27+05:30", "product": "/api/shop/products/1", "customer": "/api/shop/customers/1532" } } } }, "404": { "description": "Review not found or not owned by the caller." } }, "summary": "Get a single review by ID (customer-scoped)", "description": "Returns one review owned by the authenticated customer. Returns 404 if the review does not belong to the caller. Requires a customer Bearer token.", "parameters": [ { "name": "id", "in": "path", "description": "Customer review ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/reviews": { "get": { "operationId": "api_apishopreviews_get_collection", "tags": [ "Product" ], "responses": { "200": { "description": "List of product reviews.", "content": { "application/json": { "example": [ { "id": 2, "name": "lxbfYeaa", "title": "Mr.", "rating": 1, "comment": "1", "status": "approved", "createdAt": "2025-05-27T23:20:27+05:30", "updatedAt": "2025-09-03T18:10:50+05:30" } ] } } } }, "summary": "List product reviews", "description": "Returns product reviews. Defaults to `approved` reviews only; pass `status` to override. Supports filtering by `product_id`, `status`, and `rating`, with `page` + `per_page` (alias `limit`, max 50) pagination. Mirrors the GraphQL `productReviews` query.", "parameters": [ { "name": "product_id", "in": "query", "description": "Filter by product ID", "required": false, "deprecated": false, "schema": { "type": "integer", "example": 1 }, "style": "form", "explode": true }, { "name": "rating", "in": "query", "description": "Filter by star rating (1-5)", "required": false, "deprecated": false, "schema": { "type": "integer", "minimum": 1, "maximum": 5, "example": 5 }, "style": "form", "explode": true }, { "name": "page", "in": "query", "description": "Page number (1-based)", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1, "example": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "Items per page (alias: `limit`). Default 30, max 50.", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 30, "maximum": 50, "example": 10 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] }, "post": { "operationId": "api_apishopreviews_post", "tags": [ "Customer Review" ], "responses": { "201": { "description": "Review created. Starts in `pending` status until an admin approves it.", "content": { "application/json": { "example": { "id": 133, "name": "", "title": "Great product", "rating": 5, "comment": "Really enjoyed using this. Highly recommended.", "status": "pending", "createdAt": "2026-07-02T11:35:27+05:30", "updatedAt": "2026-07-02T11:35:27+05:30" } } }, "links": [] }, "422": { "description": "Validation failed (missing product_id/rating, invalid rating, etc.).", "links": [] }, "400": { "description": "Invalid input", "links": [] } }, "summary": "Create a product review", "description": "Creates a review for a product on behalf of the authenticated customer. Review starts in `pending` status until approved by admin.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new ProductReview resource", "content": { "application/json": { "schema": { "type": "object", "required": [ "product_id", "title", "comment", "rating", "name" ], "properties": { "product_id": { "type": "integer", "example": 2, "description": "ID of the product being reviewed" }, "title": { "type": "string", "example": "Great product", "description": "Short review title" }, "comment": { "type": "string", "example": "Works exactly as described, highly recommended.", "description": "Full review body" }, "rating": { "type": "integer", "minimum": 1, "maximum": 5, "example": 5, "description": "Star rating (1-5)" }, "name": { "type": "string", "example": "John Doe", "description": "Reviewer display name" }, "email": { "type": "string", "format": "email", "example": "john@example.com", "description": "Optional: reviewer email (for guests)" }, "attachments": { "type": "string", "description": "Optional: JSON-encoded attachment metadata" } } }, "example": { "product_id": 1, "title": "Great product", "comment": "Really enjoyed using this. Highly recommended.", "rating": 5, "name": "John Doe" } } }, "required": true } } }, "/reviews/{id}": { "get": { "operationId": "api_apishopreviews_id_get", "tags": [ "Product" ], "responses": { "200": { "description": "The product review.", "content": { "application/json": { "example": { "id": 2, "name": "lxbfYeaa", "title": "Mr.", "rating": 1, "comment": "1", "status": "approved", "createdAt": "2025-05-27T23:20:27+05:30", "updatedAt": "2025-09-03T18:10:50+05:30" } } } }, "404": { "description": "Review not found." } }, "summary": "Get a single product review by ID", "description": "Get a single product review by ID", "parameters": [ { "name": "id", "in": "path", "description": "Product review ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] }, "delete": { "operationId": "api_apishopreviews_id_delete", "tags": [ "Customer Review" ], "responses": { "204": { "description": "Review deleted. No content." }, "404": { "description": "Review not found or not owned by the caller." } }, "summary": "Delete a product review", "description": "Deletes a customer-owned product review. Returns 204 No Content on success.", "parameters": [ { "name": "id", "in": "path", "description": "Product review ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] }, "patch": { "operationId": "api_apishopreviews_id_patch", "tags": [ "Customer Review" ], "responses": { "200": { "description": "Review updated.", "content": { "application/json": { "example": { "id": 133, "name": "", "title": "Updated title", "rating": 4, "comment": "Edited my review after more use.", "status": "pending", "createdAt": "2026-07-02T11:35:27+05:30", "updatedAt": "2026-07-02T11:37:52+05:30" } } }, "links": [] }, "404": { "description": "Review not found or not owned by the caller." }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Update an existing product review", "description": "Updates a customer-owned product review. Only the author (matched via Bearer token) can modify their review.", "parameters": [ { "name": "id", "in": "path", "description": "Product review ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The updated ProductReview resource", "content": { "application/merge-patch+json": { "schema": { "type": "object", "properties": { "title": { "type": "string", "example": "Updated title" }, "comment": { "type": "string", "example": "Edited my review after more use." }, "rating": { "type": "integer", "minimum": 1, "maximum": 5, "example": 4 }, "name": { "type": "string", "example": "John Doe" } } }, "example": { "title": "Updated title", "comment": "Edited my review after more use.", "rating": 4 } } }, "required": true } } }, "/eu-withdrawal-status": { "get": { "operationId": "api_apishopeu-withdrawal-status_get_collection", "tags": [ "EU Withdrawal" ], "responses": { "200": { "description": "The EU withdrawal setting of the current channel.", "content": { "application/json": { "example": [ { "id": "default", "channel": "default", "enabled": false } ] } } } }, "summary": "Check whether EU withdrawal is enabled", "description": "Returns whether customers can file an EU withdrawal on the current channel.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/eu-withdrawals": { "get": { "operationId": "api_apishopeu-withdrawals_get_collection", "tags": [ "EU Withdrawal" ], "responses": { "200": { "description": "The customer's withdrawal declarations.", "content": { "application/json": { "example": [ { "id": 7, "uuid": "b2f1c0de-5a2e-4d7a-9f2e-3c1a2b4d5e6f", "orderId": 12, "orderIncrementId": "000000012", "isGuest": false, "customerEmail": "jane@example.com", "status": "received", "reasonText": "Changed my mind.", "receivedAt": "2026-07-20T09:00:00+00:00", "confirmationSentAt": "2026-07-20T09:00:05+00:00", "declinedAt": null, "declinedReason": null, "refundedAt": null, "refundNote": null, "createdAt": "2026-07-20T09:00:00+00:00", "updatedAt": "2026-07-20T09:00:05+00:00" } ] } } } }, "summary": "List the authenticated customer's EU right-of-withdrawal declarations", "description": "Returns the customer's own withdrawal declarations, newest first. Requires a customer Bearer token.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] }, "post": { "operationId": "api_apishopeu-withdrawals_post", "tags": [ "EU Withdrawal" ], "responses": { "201": { "description": "The created (or existing, idempotent) withdrawal declaration.", "content": { "application/json": { "example": { "id": 7, "uuid": "b2f1c0de-5a2e-4d7a-9f2e-3c1a2b4d5e6f", "orderId": 12, "orderIncrementId": "000000012", "isGuest": false, "customerEmail": "jane@example.com", "status": "received", "reasonText": "Changed my mind.", "receivedAt": "2026-07-20T09:00:00+00:00", "confirmationSentAt": "2026-07-20T09:00:05+00:00", "declinedAt": null, "declinedReason": null, "refundedAt": null, "refundNote": null, "createdAt": "2026-07-20T09:00:00+00:00", "updatedAt": "2026-07-20T09:00:05+00:00" } } }, "links": [] }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "File an EU right-of-withdrawal declaration (authenticated customer)", "description": "Records a withdrawal for one of the customer's own orders and triggers the durable-medium confirmation email. Idempotent — a second call for the same order returns the existing declaration. 404 if the order is not the customer's or the channel does not have EU withdrawal enabled.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new EuWithdrawal resource", "content": { "application/json": { "schema": { "type": "object", "required": [ "order_id" ], "properties": { "order_id": { "type": "integer", "example": 12 }, "reason_text": { "type": "string", "example": "Changed my mind." } } } } }, "required": true } } }, "/eu-withdrawals/guest": { "post": { "operationId": "api_apishopeu-withdrawalsguest_post", "tags": [ "EU Withdrawal" ], "responses": { "201": { "description": "The created (or existing, idempotent) guest withdrawal declaration.", "content": { "application/json": { "example": { "id": 9, "uuid": "a1c2e3f4-6b7c-4d8e-9a0b-1c2d3e4f5a6b", "orderId": 34, "orderIncrementId": "1000123", "isGuest": true, "customerEmail": "guest@example.com", "status": "received", "reasonText": "Changed my mind.", "receivedAt": "2026-07-20T09:30:00+00:00", "confirmationSentAt": "2026-07-20T09:30:05+00:00", "createdAt": "2026-07-20T09:30:00+00:00" } } }, "links": [] }, "404": { "description": "The order is not a guest order, or EU withdrawal is off for its channel." }, "422": { "description": "The link is missing, invalid or expired.", "links": [] }, "429": { "description": "Too many requests from this IP." }, "400": { "description": "Invalid input", "links": [] } }, "summary": "File an EU right-of-withdrawal declaration (guest)", "description": "Step 2 of a guest withdrawal. Send the signed `link` emailed by `POST /api/shop/eu-withdrawals/guest/lookup`; it proves the guest owns the order email, as on the storefront. The link is valid for 24 hours. Idempotent: sending the same link again returns the existing declaration with its current status. Triggers the durable-medium confirmation email. Limited to 20 requests a minute per IP.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new GuestEuWithdrawal resource", "content": { "application/json": { "schema": { "type": "object", "required": [ "link" ], "properties": { "link": { "type": "string", "example": "https://shop.example.com/withdraw/34/create?expires=1784539800&signature=3f1c…" }, "reason_text": { "type": "string", "example": "Changed my mind." } } }, "example": { "link": "https://shop.example.com/withdraw/34/create?expires=1784539800&signature=3f1c…", "reason_text": "Changed my mind." } } }, "required": true } } }, "/eu-withdrawals/guest/lookup": { "post": { "operationId": "api_apishopeu-withdrawalsguestlookup_post", "tags": [ "EU Withdrawal" ], "responses": { "201": { "description": "Accepted. The same answer is returned whether or not the order matched.", "content": { "application/json": { "example": { "success": true, "message": "If the order number and email match a guest order, we have emailed a link to withdraw from it." } } }, "links": [] }, "404": { "description": "EU withdrawal is switched off for this channel." }, "422": { "description": "Missing or invalid order number or email.", "links": [] }, "429": { "description": "Too many requests from this IP." }, "400": { "description": "Invalid input", "links": [] } }, "summary": "Request a guest withdrawal link", "description": "Step 1 of a guest withdrawal. When the order number and email match a guest order on an EU-enabled channel, a signed link valid for 24 hours is emailed to that address. Pass that link to `POST /api/shop/eu-withdrawals/guest` to file the withdrawal. The response is the same whether or not the order matched, so it cannot be used to discover orders. Limited to 5 requests a minute per IP.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new GuestEuWithdrawalLink resource", "content": { "application/json": { "schema": { "type": "object", "required": [ "order_increment_id", "email" ], "properties": { "order_increment_id": { "type": "string", "example": "1000123" }, "email": { "type": "string", "example": "guest@example.com" } } }, "example": { "order_increment_id": "1000123", "email": "guest@example.com" } } }, "required": true } } }, "/eu-withdrawals/{id}": { "get": { "operationId": "api_apishopeu-withdrawals_id_get", "tags": [ "EU Withdrawal" ], "responses": { "200": { "description": "The withdrawal declaration detail.", "content": { "application/json": { "example": { "id": 7, "uuid": "b2f1c0de-5a2e-4d7a-9f2e-3c1a2b4d5e6f", "orderId": 12, "orderIncrementId": "000000012", "isGuest": false, "customerEmail": "jane@example.com", "status": "received", "reasonText": "Changed my mind.", "receivedAt": "2026-07-20T09:00:00+00:00", "confirmationSentAt": "2026-07-20T09:00:05+00:00", "declinedAt": null, "declinedReason": null, "refundedAt": null, "refundNote": null, "createdAt": "2026-07-20T09:00:00+00:00", "updatedAt": "2026-07-20T09:00:05+00:00" } } } }, "404": { "description": "Not found", "links": [] } }, "summary": "Get one of the customer's withdrawal declarations", "description": "Full detail of a single withdrawal owned by the authenticated customer (ownership via the underlying order). 404 if it is not the customer's.", "parameters": [ { "name": "id", "in": "path", "description": "Eu withdrawal ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/gdpr-data": { "get": { "operationId": "api_apishopgdpr-data_get_collection", "tags": [ "GDPR" ], "responses": { "200": { "description": "The customer data.", "content": { "application/json": { "example": [ { "id": 3, "customer": { "firstName": "Paul", "lastName": "Doe", "email": "pauldoe@example.com", "gender": "Male", "dateOfBirth": "1990-04-12", "phone": "2125551234" }, "addresses": [ { "firstName": "Paul", "lastName": "Doe", "companyName": null, "address": "123 Main St", "city": "Los Angeles", "state": "CA", "country": "US", "postcode": "90001", "phone": "2125551234", "vatId": null } ], "orders": [ { "id": 7, "incrementId": "7", "status": "completed", "shippingTitle": "Flat Rate - Flat Rate", "grandTotal": 109, "formattedGrandTotal": "$109.00", "createdAt": "2026-10-15 20:11:24" } ] } ] } } }, "400": { "description": "GDPR is switched off." }, "401": { "description": "Not signed in." } }, "summary": "Download my data", "description": "The personal data the store holds about the signed-in customer, as on the storefront GDPR page: profile, saved addresses and orders. Returned as a list of one entry. For the same data as a PDF, call `GET /api/shop/gdpr-data/pdf` with `Accept: application/pdf`. Needs Configuration > General > GDPR enabled.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/gdpr-requests": { "get": { "operationId": "api_apishopgdpr-requests_get_collection", "tags": [ "GDPR Requests" ], "responses": { "200": { "description": "List of the customer's GDPR data requests.", "content": { "application/json": { "example": [ { "id": 35, "email": "jane@example.com", "status": "pending", "type": "delete", "message": "Please delete my personal data.", "revokedAt": null, "createdAt": "2026-07-02T12:01:36+05:30", "updatedAt": "2026-07-02T12:01:36+05:30", "successMessage": null, "customer": "/api/shop/customers/1534" } ] } } } }, "summary": "List the customer's own GDPR data requests", "description": "Returns every GDPR data request raised by the authenticated customer. Requires GDPR to be enabled in admin config.", "parameters": [ { "name": "sort", "in": "query", "description": "Column to sort by: `id` (default) or `created_at`.", "required": false, "deprecated": false, "schema": { "type": "string", "enum": [ "id", "created_at", "id-asc", "id-desc", "created_at-asc", "created_at-desc" ] }, "style": "form", "explode": true }, { "name": "order", "in": "query", "description": "Sort direction: `asc` (default) or `desc`.", "required": false, "deprecated": false, "schema": { "type": "string", "enum": [ "asc", "desc" ] }, "style": "form", "explode": true }, { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] }, "post": { "operationId": "api_apishopgdpr-requests_post", "tags": [ "GDPR Requests" ], "responses": { "201": { "description": "Request raised. Starts in `pending` status.", "content": { "application/json": { "example": { "id": 35, "email": "jane@example.com", "status": "pending", "type": "delete", "message": "Please delete my personal data.", "revokedAt": null, "createdAt": "2026-07-02T12:01:36+05:30", "updatedAt": "2026-07-02T12:01:36+05:30", "successMessage": "Your GDPR data request has been raised successfully.", "customer": "/api/shop/customers/1534" } } }, "links": [] }, "400": { "description": "GDPR disabled in admin config, or invalid type/message.", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Raise a GDPR data request", "description": "Raise a GDPR data request for the authenticated customer. Type must be `delete` or `update`.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "GDPR data request details", "content": { "application/json": { "schema": { "type": "object", "required": [ "type", "message" ], "properties": { "type": { "type": "string", "enum": [ "delete", "update" ], "example": "delete" }, "message": { "type": "string", "maxLength": 500, "example": "Please delete all my personal data." } } }, "example": { "type": "delete", "message": "Please delete my personal data." } } }, "required": true } } }, "/gdpr-requests/{id}": { "get": { "operationId": "api_apishopgdpr-requests_id_get", "tags": [ "GDPR Requests" ], "responses": { "200": { "description": "The GDPR data request.", "content": { "application/json": { "example": { "id": 35, "email": "jane@example.com", "status": "pending", "type": "delete", "message": "Please delete my personal data.", "revokedAt": null, "createdAt": "2026-07-02T12:01:36+05:30", "updatedAt": "2026-07-02T12:01:36+05:30", "successMessage": null, "customer": "/api/shop/customers/1534" } } } }, "404": { "description": "Request not found or not owned by the caller." } }, "summary": "Get one of the customer's own GDPR data requests", "description": "Returns a GDPR data request owned by the authenticated customer. Returns 404 if it is not theirs. Requires GDPR to be enabled in admin config.", "parameters": [ { "name": "id", "in": "path", "description": "Gdpr request ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] }, "delete": { "operationId": "api_apishopgdpr-requests_id_delete", "tags": [ "GDPR Requests" ], "responses": { "204": { "description": "Request deleted. No content." }, "404": { "description": "Request not found or not owned by the caller." } }, "summary": "Delete a GDPR data request", "description": "Deletes one of the customer's own GDPR data requests. Returns 204 No Content on success.", "parameters": [ { "name": "id", "in": "path", "description": "Gdpr request ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/gdpr-requests/{id}/revoke": { "post": { "operationId": "revoke_post", "tags": [ "GDPR Requests" ], "responses": { "200": { "description": "Request revoked. `status` becomes `revoked` and `revokedAt` is stamped.", "content": { "application/json": { "example": { "id": 35, "email": "jane@example.com", "status": "revoked", "type": "delete", "message": "Please delete my personal data.", "revokedAt": "2026-07-02 12:01:37", "createdAt": "2026-07-02T12:01:36+05:30", "updatedAt": "2026-07-02T12:01:37+05:30", "successMessage": null, "customer": "/api/shop/customers/1534" } } }, "links": [] }, "422": { "description": "Request is not pending, so it cannot be revoked.", "links": [] }, "400": { "description": "Invalid input", "links": [] } }, "summary": "Revoke a GDPR data request", "description": "Revoke one of the customer's own GDPR data requests. Allowed only while the request is pending. Send an empty JSON body `{}`.", "parameters": [ { "name": "id", "in": "path", "description": "Gdpr request ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new GdprRequest resource", "content": { "application/json": { "schema": { "type": "object" }, "example": [] } }, "required": false } } }, "/gdpr-status": { "get": { "operationId": "api_apishopgdpr-status_get_collection", "tags": [ "GDPR Requests" ], "responses": { "200": { "description": "The GDPR setting of the current channel.", "content": { "application/json": { "example": [ { "id": "default", "channel": "default", "enabled": true } ] } } } }, "summary": "Check whether GDPR requests are enabled", "description": "Returns whether customers can raise GDPR data requests on the current channel.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/locales": { "get": { "operationId": "api_apishoplocales_get_collection", "tags": [ "Locale" ], "responses": { "200": { "description": "List of locales.", "content": { "application/json": { "example": [ { "id": 1, "code": "en", "name": "English", "direction": "ltr", "logoPath": "locales/en.png", "createdAt": null, "updatedAt": null, "logoUrl": "http://localhost:8000/storage/locales/en.png" }, { "id": 10, "code": "AR", "name": "Arabic", "direction": "rtl", "logoPath": "locales/AR.png", "createdAt": "2026-04-02T23:21:21+05:30", "updatedAt": "2026-04-02T23:21:21+05:30", "logoUrl": "http://localhost:8000/storage/locales/AR.png" } ] } } } }, "summary": "List store locales", "description": "Returns all active store locales. Public endpoint.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/locales/{id}": { "get": { "operationId": "api_apishoplocales_id_get", "tags": [ "Locale" ], "responses": { "200": { "description": "The locale.", "content": { "application/json": { "example": { "id": 1, "code": "en", "name": "English", "direction": "ltr", "logoPath": "locales/en.png", "createdAt": null, "updatedAt": null, "logoUrl": "http://localhost:8000/storage/locales/en.png" } } } }, "404": { "description": "Locale not found." } }, "summary": "Get a locale by ID", "description": "Returns a single store locale. Public endpoint.", "parameters": [ { "name": "id", "in": "path", "description": "Locale ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/merge-carts": { "post": { "operationId": "api_apishopmerge-carts_post", "tags": [ "MergeCart" ], "responses": { "201": { "description": "Guest cart merged. Returns the customer's updated cart.", "content": { "application/json": { "example": { "id": 6885, "cartToken": null, "customerId": 1533, "channelId": 1, "itemsCount": 1, "itemsQty": 1, "items": [ { "id": 7763, "cartId": 6885, "productId": 1, "name": "Coastal Breeze Men's Blue Zipper Hoodie", "sku": "COASTALBREEZEMENSHOODIE", "quantity": 1, "price": 100, "total": 100, "type": "simple", "formattedPrice": "$100.00", "formattedTotal": "$100.00" } ], "subtotal": 100, "grandTotal": 100, "taxAmount": 0, "discountAmount": 0, "couponCode": null, "formattedSubtotal": "$100.00", "formattedGrandTotal": "$100.00", "success": true, "message": "Cart merged successfully." } } }, "links": [] }, "404": { "description": "Guest cart not found, or the guest cart token is missing or does not match." }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Merge guest cart into customer cart", "description": "Merges a guest cart into the authenticated customer's cart. Requires the customer bearer token and the guest cart token (`guest_cart_token`) returned when the guest cart was created; `cart_id` is optional and must match that token.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "Guest cart details to merge", "content": { "application/json": { "schema": { "type": "object", "required": [ "guest_cart_token" ], "properties": { "guest_cart_token": { "type": "string", "description": "The guest cart token returned by POST /api/shop/cart-token", "example": "2f1c6f7e-5a0b-4c1e-9d0a-1b2c3d4e5f60" }, "cart_id": { "type": "integer", "description": "Optional. The ID of the guest cart; must match the token", "example": 6884 } } }, "example": { "guest_cart_token": "2f1c6f7e-5a0b-4c1e-9d0a-1b2c3d4e5f60" } } }, "required": true } } }, "/newsletters": { "post": { "operationId": "createNewsletterSubscription", "tags": [ "Newsletter" ], "responses": { "201": { "description": "Subscribed.", "content": { "application/json": { "example": { "success": true, "message": "You have successfully subscribed to our newsletter." } } }, "links": [] }, "400": { "description": "Missing customerEmail, or email already subscribed.", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Subscribe the authenticated customer to the newsletter", "description": "Requires Bearer token. Creates a newsletter subscription for the authenticated customer on the current channel.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new Newsletter resource", "content": { "application/json": { "schema": { "type": "object", "required": [ "customerEmail" ], "properties": { "customerEmail": { "type": "string", "format": "email", "example": "jane@example.com", "description": "Email to subscribe (must be unique in subscribers_list)." } } }, "example": { "customerEmail": "jane@example.com" } } }, "required": true } } }, "/newsletters/unsubscribe": { "post": { "operationId": "api_apishopnewslettersunsubscribe_post", "tags": [ "Newsletter" ], "responses": { "201": { "description": "Unsubscribed, or no subscription used that token.", "content": { "application/json": { "example": { "success": true, "message": "You have been unsubscribed from the newsletter." } } }, "links": [] }, "422": { "description": "The token is missing.", "links": [] }, "400": { "description": "Invalid input", "links": [] } }, "summary": "Unsubscribe from the newsletter", "description": "Removes the newsletter subscription with the token from the unsubscribe link in the newsletter email (`/subscription/{token}`), as the storefront does. The answer is the same whether or not the token matched. No login is needed.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new NewsletterUnsubscribe resource", "content": { "application/json": { "schema": { "type": "object", "required": [ "token" ], "properties": { "token": { "type": "string", "example": "6a1f0c9e2b7d4" } } }, "example": { "token": "6a1f0c9e2b7d4" } } }, "required": true } } }, "/image-searches": { "post": { "operationId": "api_apishopimage-searches_post", "tags": [ "Product" ], "responses": { "201": { "description": "The stored image and the keywords.", "content": { "application/json": { "example": { "imageUrl": "http://localhost/storage/product-search/k3Jd9sQ.jpg", "keywords": "red cotton t-shirt, casual wear, crew neck", "engine": "ai" } } }, "links": [] }, "422": { "description": "Missing image, or not an allowed image type or size.", "links": [] }, "400": { "description": "Invalid input", "links": [] } }, "summary": "Search by image", "description": "Uploads an image for product search, as the storefront camera search does (jpeg, png, jpg, gif, svg or webp, max 2 MB). Send it as a multipart `image` file, or as a base64 data URI in a JSON `image`. With Magic AI image search switched on, `keywords` holds search keywords and `engine` is `ai`; otherwise `keywords` is empty and `engine` is `tensorflow`, meaning the client derives the keywords from `imageUrl` itself, as the storefront does in the browser. Then search products with the keywords.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new ImageSearch resource", "content": { "multipart/form-data": { "schema": { "type": "object", "required": [ "image" ], "properties": { "image": { "type": "string", "format": "binary" } } } }, "application/json": { "schema": { "type": "object", "required": [ "image" ], "properties": { "image": { "type": "string", "example": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ..." } } } } }, "required": true } } }, "/product-images": { "get": { "operationId": "api_apishopproduct-images_get_collection", "tags": [ "Product" ], "responses": { "200": { "description": "Product image collection", "content": { "application/json": { "example": [ { "id": 967, "type": "images", "path": "product/1/zKcWZTLDjcawJmaNg8g1cpARqwVONgEKEflabstT.webp", "productId": 1, "position": 1, "publicPath": "http://localhost:8000/storage/product/1/zKcWZTLDjcawJmaNg8g1cpARqwVONgEKEflabstT.webp", "altText": "Blue running shoe, side view", "fileName": "zKcWZTLDjcawJmaNg8g1cpARqwVONgEKEflabstT" } ] } } } }, "summary": "List product images (root collection)", "description": "Public endpoint. Returns all product images across the store.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/product-images/{id}": { "get": { "operationId": "api_apishopproduct-images_id_get", "tags": [ "Product" ], "responses": { "200": { "description": "Product image", "content": { "application/json": { "example": { "id": 967, "type": "images", "path": "product/1/zKcWZTLDjcawJmaNg8g1cpARqwVONgEKEflabstT.webp", "productId": 1, "position": 1, "publicPath": "http://localhost:8000/storage/product/1/zKcWZTLDjcawJmaNg8g1cpARqwVONgEKEflabstT.webp", "altText": "Blue running shoe, side view", "fileName": "zKcWZTLDjcawJmaNg8g1cpARqwVONgEKEflabstT" } } } }, "404": { "description": "Product image not found." } }, "summary": "Get a single product image by ID", "description": "Public endpoint. Returns a single product image.", "parameters": [ { "name": "id", "in": "path", "description": "Product images ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/product-videos": { "get": { "operationId": "api_apishopproduct-videos_get_collection", "tags": [ "Product" ], "responses": { "200": { "description": "Product video collection", "content": { "application/json": { "example": [ { "id": 12, "type": "videos", "path": "product/5/demo-clip.mp4", "productId": 5, "position": 1, "publicPath": "http://localhost:8000/storage/product/5/demo-clip.mp4" } ] } } } }, "summary": "List product videos (root collection)", "description": "Public endpoint. Returns all product videos across the store.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/product-videos/{id}": { "get": { "operationId": "api_apishopproduct-videos_id_get", "tags": [ "Product" ], "responses": { "200": { "description": "Product video", "content": { "application/json": { "example": { "id": 12, "type": "videos", "path": "product/5/demo-clip.mp4", "productId": 5, "position": 1, "publicPath": "http://localhost:8000/storage/product/5/demo-clip.mp4" } } } }, "404": { "description": "Product video not found." } }, "summary": "Get a single product video by ID", "description": "Public endpoint. Returns a single product video.", "parameters": [ { "name": "id", "in": "path", "description": "Product videos ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/product_customizable_option_prices": { "get": { "operationId": "api_apishopproduct_customizable_option_prices_get_collection", "tags": [ "Product" ], "responses": { "200": { "description": "Customizable option price collection", "content": { "application/json": { "example": [ { "id": 1, "label": "Extra", "price": 5, "formattedPrice": "$5.00", "sortOrder": 0 } ] } } } }, "summary": "List customizable option prices", "description": "Lists all customizable option price rows. Use the parent product's `customizable-options` sub-resource to scope to one option.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/product_customizable_option_prices/{id}": { "get": { "operationId": "api_apishopproduct_customizable_option_prices_id_get", "tags": [ "Product" ], "responses": { "200": { "description": "Customizable option price", "content": { "application/json": { "example": { "id": 1, "label": "Extra", "price": 5, "formattedPrice": "$5.00", "sortOrder": 0 } } } }, "404": { "description": "Customizable option price not found." } }, "summary": "Get a customizable option price by ID", "description": "Returns a single price-bearing value for a customizable option. Referenced from `/api/shop/products/{id}/customizable-options` responses via the `customizableOptionPrices` IRI list.", "parameters": [ { "name": "id", "in": "path", "description": "Product customizable option price ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/product_customizable_option_translations": { "get": { "operationId": "api_apishopproduct_customizable_option_translations_get_collection", "tags": [ "Product" ], "responses": { "200": { "description": "List of customizable option translations.", "content": { "application/json": { "example": [ { "id": 1, "productCustomizableOptionId": 1, "locale": "en", "label": "Engraving text" } ] } } } }, "summary": "List customizable option translations", "description": "Lists all customizable option translation rows. Use the parent product's `customizable-options` sub-resource to scope to one product.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/product_customizable_option_translations/{id}": { "get": { "operationId": "api_apishopproduct_customizable_option_translations_id_get", "tags": [ "Product" ], "responses": { "200": { "description": "Customizable option translation.", "content": { "application/json": { "example": { "id": 1, "productCustomizableOptionId": 1, "locale": "en", "label": "Engraving text" } } } }, "404": { "description": "Translation not found." } }, "summary": "Get a product customizable option translation by ID", "description": "Returns a single locale-specific translation row (`label`) for a customizable option. Referenced from `/api/shop/products/{id}/customizable-options` responses via the `translations` IRI list.", "parameters": [ { "name": "id", "in": "path", "description": "Product customizable option translation ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/product_customizable_options/{id}": { "get": { "operationId": "api_apishopproduct_customizable_options_id_get", "tags": [ "Product" ], "responses": { "200": { "description": "Customizable option", "content": { "application/json": { "example": { "id": 1, "type": "textarea", "label": "Engraving text", "isRequired": false, "maxCharacters": 100, "sortOrder": 0, "supportedFileExtensions": null, "customizableOptionPrices": [ { "id": 1, "label": "Extra", "price": 5, "formattedPrice": "$5.00", "sortOrder": 0 } ], "translations": [ "/api/shop/product_customizable_option_translations/1" ] } } } }, "404": { "description": "Customizable option not found." } }, "summary": "Get a single customizable option by ID", "description": "Returns one customizable option (a free-form per-product input field — engraving text, gift wrap, etc.) including its `customizableOptionPrices`, `translation`, and `translations` IRIs. Customizable options are supported on simple and virtual product types only.", "parameters": [ { "name": "id", "in": "path", "description": "Product customizable option ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/products": { "get": { "operationId": "api_apishopproducts_get_collection", "tags": [ "Product" ], "responses": { "200": { "description": "A paginated list of products matching the search, filter, and sort criteria.", "content": { "application/json": { "example": [ { "id": 1, "sku": "COASTALBREEZEMENSHOODIE", "type": "simple", "bookingType": null, "name": "Coastal Breeze Men's Blue Zipper Hoodie", "urlKey": "coastal-breeze-mens-blue-zipper-hoodie", "status": true, "shortDescription": "Stay warm and stylish with the Coastal Breeze Men's Blue Zipper Hoodie.", "price": 100, "specialPrice": null, "new": true, "featured": true, "minimumPrice": 100, "maximumPrice": 100, "formattedPrice": "$100.00", "formattedSpecialPrice": null, "formattedMinimumPrice": "$100.00", "formattedMaximumPrice": "$100.00", "isInWishlist": 0, "isInCompare": 0, "baseImageUrl": "http://localhost:8000/storage/product/1/zKcWZTLDjcawJmaNg8g1cpARqwVONgEKEflabstT.webp" } ] } } } }, "summary": "List products with search, filter, sort, and pagination", "description": "Mirrors the GraphQL products query. Any query param outside the reserved set (query, sort, order, page, per_page, locale, channel, filter, suggest) is treated as a filterable attribute — so new attributes like material, pattern, etc. work automatically without schema changes.", "parameters": [ { "name": "query", "in": "query", "description": "Search term (matches SKU or product name).", "required": false, "deprecated": false, "schema": { "type": "string" }, "style": "form", "explode": true }, { "name": "suggest", "in": "query", "description": "Elasticsearch only: when the store searches with Elasticsearch, the query is swapped for its \"did you mean\" suggestion (see `GET /api/shop/search-redirect`). Send `0` to search the exact query instead.", "required": false, "deprecated": false, "schema": { "type": "string", "enum": [ "0", "1" ] }, "style": "form", "explode": true }, { "name": "sort", "in": "query", "description": "Compound sort token. One of: name-asc, name-desc, price-asc, price-desc, created_at-desc (newest first), created_at-asc (oldest first), updated_at-desc, updated_at-asc, id-asc, id-desc. May also be used with a separate `order` param (e.g. sort=name&order=desc).", "required": false, "deprecated": false, "schema": { "type": "string", "example": "name-asc" }, "style": "form", "explode": true }, { "name": "order", "in": "query", "description": "Sort direction when `sort` is a bare key (e.g. sort=name&order=desc). Ignored if `sort` already has a -asc/-desc suffix.", "required": false, "deprecated": false, "schema": { "type": "string", "enum": [ "asc", "desc" ] }, "style": "form", "explode": true }, { "name": "page", "in": "query", "description": "Page number (1-based).", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1, "example": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "Items per page. Default matches the GraphQL `first` default.", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 30, "example": 30 }, "style": "form", "explode": true }, { "name": "type", "in": "query", "description": "Product type.", "required": false, "deprecated": false, "schema": { "type": "string", "enum": [ "simple", "configurable", "virtual", "downloadable", "bundle", "grouped", "booking" ] }, "style": "form", "explode": true }, { "name": "category_id", "in": "query", "description": "Filter products by category ID.", "required": false, "deprecated": false, "schema": { "type": "integer", "example": 2 }, "style": "form", "explode": true }, { "name": "price", "in": "query", "description": "Compound price range — from,to (e.g. 10,200). Alternative to price_from + price_to.", "required": false, "deprecated": false, "schema": { "type": "string", "example": "10,200" }, "style": "form", "explode": true }, { "name": "price_from", "in": "query", "description": "Minimum price (inclusive).", "required": false, "deprecated": false, "schema": { "type": "number" }, "style": "form", "explode": true }, { "name": "price_to", "in": "query", "description": "Maximum price (inclusive).", "required": false, "deprecated": false, "schema": { "type": "number" }, "style": "form", "explode": true }, { "name": "new", "in": "query", "description": "Only return products flagged as new.", "required": false, "deprecated": false, "schema": { "type": "boolean" }, "style": "form", "explode": true }, { "name": "featured", "in": "query", "description": "Only return products flagged as featured.", "required": false, "deprecated": false, "schema": { "type": "boolean" }, "style": "form", "explode": true }, { "name": "filter", "in": "query", "description": "Attribute filters as a dynamic key/value map. In Swagger UI, click \"Add string item\" to add a row, enter the attribute code as the key (e.g. brand, color, size, material, any filterable attribute) and the option ID as the value. Multi-select: comma-separate option IDs (e.g. 1,2,3). Generates URLs like ?filter[brand]=38&filter[color]=3. A raw JSON filter string is also accepted for GraphQL parity, e.g. {\"color\":{\"match\":\"3\",\"match_type\":\"PARTIAL\"}}.", "required": false, "deprecated": false, "schema": { "type": "object", "additionalProperties": { "type": "string" }, "example": { "brand": "38", "color": "3" } }, "style": "deepObject", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/products/{id}": { "get": { "operationId": "api_apishopproducts_id_get", "tags": [ "Product" ], "responses": { "200": { "description": "The product with all relations embedded inline.", "content": { "application/json": { "example": { "id": 1, "sku": "COASTALBREEZEMENSHOODIE", "type": "simple", "name": "Coastal Breeze Men's Blue Zipper Hoodie", "urlKey": "coastal-breeze-mens-blue-zipper-hoodie", "status": true, "description": "The Coastal Breeze Men's Blue Zipper Hoodie is your reliable companion for staying warm, comfortable, and stylish.", "shortDescription": "Stay warm and stylish with the Coastal Breeze Men's Blue Zipper Hoodie.", "price": 100, "specialPrice": null, "new": true, "featured": true, "minimumPrice": 100, "maximumPrice": 100, "formattedPrice": "$100.00", "formattedSpecialPrice": null, "formattedMinimumPrice": "$100.00", "formattedMaximumPrice": "$100.00", "baseImageUrl": "http://localhost:8000/storage/product/1/zKcWZTLDjcawJmaNg8g1cpARqwVONgEKEflabstT.webp", "createdAt": "2024-04-16T21:44:20+05:30", "updatedAt": "2026-04-08T17:23:40+05:30", "isSaleable": true, "isInWishlist": 0, "isInCompare": 0, "color": null, "size": null, "brand": null, "categories": [ { "id": 24, "slug": "men", "name": "Men" } ], "channels": [ "/api/shop/channels/1" ], "attributeFamily": "/api/shop/attribute_families/1", "images": [ { "id": 967, "type": "images", "path": "product/1/zKcWZTLDjcawJmaNg8g1cpARqwVONgEKEflabstT.webp", "productId": 1, "position": 1, "publicPath": "http://localhost:8000/storage/product/1/zKcWZTLDjcawJmaNg8g1cpARqwVONgEKEflabstT.webp" } ], "videos": [], "superAttributes": [], "variants": [], "bookingProducts": [], "bundleOptions": [], "groupedProducts": [], "downloadableLinks": [], "downloadableSamples": [], "customizableOptions": [], "relatedProducts": [], "upSells": [], "crossSells": [] } } } }, "404": { "description": "Product not found." } }, "summary": "Get a single product by ID with all relations embedded", "description": "Returns one product with every relation (categories, channels, images, videos, variants, bundle/grouped/downloadable options, customizable options, related/up-sell/cross-sell products) embedded inline. Public endpoint.", "parameters": [ { "name": "id", "in": "path", "description": "Product ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/products/{productId}/attribute-values": { "get": { "operationId": "api_apishopproducts_productIdattribute-values_get_collection", "tags": [ "Product" ], "responses": { "200": { "description": "Attribute values for the product", "content": { "application/json": { "example": [ { "id": 1, "locale": "en", "channel": "default", "textValue": "Stay warm and stylish with the Coastal Breeze Men's Blue Zipper Hoodie.", "uniqueId": "default|en|1|9", "value": "Stay warm and stylish with the Coastal Breeze Men's Blue Zipper Hoodie." } ] } } } }, "summary": "List attribute values for a product", "description": "Returns the full set of attribute values associated with the given product ID. Each row carries the locale/channel scoping and the type-specific value column.", "parameters": [ { "name": "productId", "in": "path", "description": "Product ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/products/{productId}/customer-group-prices": { "get": { "operationId": "api_apishopproducts_productIdcustomer-group-prices_get_collection", "tags": [ "Product" ], "responses": { "200": { "description": "Tier prices for the product", "content": { "application/json": { "example": [ { "id": 7, "qty": 10, "valueType": "fixed", "value": "7.5000", "productId": 2611, "customerGroupId": null, "createdAt": "2026-05-26T12:51:19+05:30", "updatedAt": "2026-05-26T12:51:32+05:30" } ] } } } }, "summary": "List tier (customer-group) prices for a product", "description": "Returns the per-customer-group quantity-based discount rows (\"buy N for X\") for the given product. Read-only — admin endpoints under /api/admin handle creation/edits. A null customerGroupId applies to all groups; valueType is \"fixed\" or \"discount\".", "parameters": [ { "name": "productId", "in": "path", "description": "Product ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/products/{productId}/customizable-options": { "get": { "operationId": "api_apishopproducts_productIdcustomizable-options_get_collection", "tags": [ "Product" ], "responses": { "200": { "description": "Customizable option collection", "content": { "application/json": { "example": [ { "id": 1, "type": "textarea", "label": "Engraving text", "isRequired": false, "maxCharacters": 100, "sortOrder": 0, "supportedFileExtensions": null, "customizableOptionPrices": [ { "id": 1, "label": "Extra", "price": 5, "formattedPrice": "$5.00", "sortOrder": 0 } ], "translations": [ "/api/shop/product_customizable_option_translations/1" ] } ] } } } }, "summary": "List customizable options for a product", "description": "Returns the customizable option set for the given product ID. Each option has a list of price-bearing values.", "parameters": [ { "name": "productId", "in": "path", "description": "Product ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/products/{productId}/images": { "get": { "operationId": "api_apishopproducts_productIdimages_get_collection", "tags": [ "Product" ], "responses": { "200": { "description": "Product image collection", "content": { "application/json": { "example": [ { "id": 967, "type": "images", "path": "product/1/zKcWZTLDjcawJmaNg8g1cpARqwVONgEKEflabstT.webp", "productId": 1, "position": 1, "publicPath": "http://localhost:8000/storage/product/1/zKcWZTLDjcawJmaNg8g1cpARqwVONgEKEflabstT.webp", "altText": "Blue running shoe, side view", "fileName": "zKcWZTLDjcawJmaNg8g1cpARqwVONgEKEflabstT" } ] } } } }, "summary": "List images for a product", "description": "Returns the image collection for the given product ID.", "parameters": [ { "name": "productId", "in": "path", "description": "Product ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/products/{productId}/reviews": { "get": { "operationId": "api_apishopproducts_productIdreviews_get_collection", "tags": [ "Product" ], "responses": { "200": { "description": "List of reviews for the product.", "content": { "application/json": { "example": [ { "id": 2, "name": "lxbfYeaa", "title": "Mr.", "rating": 1, "comment": "1", "status": "approved", "createdAt": "2025-05-27T23:20:27+05:30", "updatedAt": "2025-09-03T18:10:50+05:30" } ] } } } }, "summary": "List reviews for a product", "description": "Returns reviews scoped to the given product ID. Defaults to `approved` reviews only; pass `status` to override. Supports filtering by `status` and `rating`, with `page` + `per_page` (alias `limit`, max 50) pagination.", "parameters": [ { "name": "rating", "in": "query", "description": "Filter by star rating (1-5)", "required": false, "deprecated": false, "schema": { "type": "integer", "minimum": 1, "maximum": 5, "example": 5 }, "style": "form", "explode": true }, { "name": "page", "in": "query", "description": "Page number (1-based)", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1, "example": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "Items per page (alias: `limit`). Default 30, max 50.", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 30, "maximum": 50, "example": 10 }, "style": "form", "explode": true }, { "name": "productId", "in": "path", "description": "Product ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/products/{productId}/videos": { "get": { "operationId": "api_apishopproducts_productIdvideos_get_collection", "tags": [ "Product" ], "responses": { "200": { "description": "Product video collection", "content": { "application/json": { "example": [ { "id": 12, "type": "videos", "path": "product/5/demo-clip.mp4", "productId": 5, "position": 1, "publicPath": "http://localhost:8000/storage/product/5/demo-clip.mp4" } ] } } } }, "summary": "List videos for a product", "description": "Returns the video collection for the given product ID.", "parameters": [ { "name": "productId", "in": "path", "description": "Product ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/search-redirect": { "get": { "operationId": "api_apishopsearch-redirect_get_collection", "tags": [ "Product" ], "responses": { "200": { "description": "The redirect for the term.", "content": { "application/json": { "example": [ { "query": "summer sale", "redirectUrl": "https://shop.example.com/summer-sale", "suggestion": null } ] } } } }, "summary": "Search-term redirect", "description": "Call before searching. When the term has a redirect URL in Marketing > Search Terms for the current channel and locale, the storefront sends the shopper there instead of showing results; `redirectUrl` is that URL, or null. `suggestion` is the \"did you mean\" term when the store searches with Elasticsearch (the product listing searches with it unless `suggest=0`), otherwise null. Returned as a list of one entry.", "parameters": [ { "name": "query", "in": "query", "description": "The search term.", "required": true, "deprecated": false, "schema": { "type": "string", "example": "summer sale" }, "style": "form", "explode": true }, { "name": "suggest", "in": "query", "description": "Send `0` to skip the \"did you mean\" lookup; `suggestion` is then null.", "required": false, "deprecated": false, "schema": { "type": "string", "enum": [ "0", "1" ] }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/booking-products/{id}": { "get": { "operationId": "api_apishopbooking-products_id_get", "tags": [ "Product Types" ], "responses": { "200": { "description": "Booking product configuration.", "content": { "application/json": { "example": { "id": 1, "type": "default", "qty": 150, "location": "Noida, Uttar Pradesh", "showLocation": 0, "availableEveryWeek": null, "availableFrom": "2026-04-06T12:00:00+05:30", "availableTo": "2026-12-31T12:00:00+05:30", "createdAt": "2026-04-03T00:24:30+05:30", "updatedAt": "2026-04-06T21:09:47+05:30", "slots": { "bookingType": "one", "sameSlotAllDays": null, "slots": [ { "id": "1", "to": "18:00", "from": "12:00", "to_day": "1", "from_day": "1" }, { "id": "2", "to": "18:00", "from": "12:00", "to_day": "2", "from_day": "2" } ] } } } } }, "404": { "description": "Booking product not found." } }, "summary": "Get booking-type product configuration", "description": "Returns the booking-specific configuration with the type-specific slot data (`slots`) embedded inline — no dangling IRIs. The shape of `slots` varies by `type`: appointment / default / rental / table return a single config block; event returns `tickets[]`. To compute availability for a specific date use `/api/shop/booking-slots?id={booking_product_id}&date=YYYY-MM-DD`.", "parameters": [ { "name": "id", "in": "path", "description": "Booking product ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/booking-slots": { "get": { "operationId": "api_apishopbooking-slots_get_collection", "tags": [ "Product Types" ], "responses": { "200": { "description": "Available booking slots for the product on the given date.", "content": { "application/json": { "example": [ { "slotId": "1785738600-1785760200", "from": "12:00 PM", "to": "06:00 PM", "timestamp": "1785738600-1785760200" } ] } } }, "400": { "description": "Missing required `id` or `date` query parameter." } }, "summary": "Get available booking slots for a product on a specific date", "description": "Mirrors the GraphQL bookingSlots query. Routes the booking product to its type-specific helper (default | appointment | rental | event | table). Flat types return [{slotId, from, to, timestamp, qty}]; rental returns [{slotId, time, slots: [{from, to, timestamp, qty}]}].", "parameters": [ { "name": "id", "in": "query", "description": "Booking product ID.", "required": true, "deprecated": false, "schema": { "type": "integer", "example": 1 }, "style": "form", "explode": true }, { "name": "date", "in": "query", "description": "Date to fetch slots for (YYYY-MM-DD).", "required": true, "deprecated": false, "schema": { "type": "string", "format": "date", "example": "2026-03-26" }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/booking_product_appointment_slots": { "get": { "operationId": "api_apishopbooking_product_appointment_slots_get_collection", "tags": [ "Product Types" ], "responses": { "200": { "description": "List of appointment-type booking slot configs", "content": { "application/json": { "example": [ { "id": 1, "bookingProductId": 3, "duration": 45, "breakTime": 15, "sameSlotAllDays": 1, "slots": "[{\"to\": \"10:45\", \"from\": \"10:00\"}, {\"to\": \"11:45\", \"from\": \"11:00\"}]" } ] } } } }, "summary": "List appointment-type booking slot configs", "description": "Public endpoint. Returns the list of appointment-type booking slot configurations.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/booking_product_appointment_slots/{id}": { "get": { "operationId": "api_apishopbooking_product_appointment_slots_id_get", "tags": [ "Product Types" ], "responses": { "200": { "description": "Appointment-type booking slot config", "content": { "application/json": { "example": { "id": 1, "bookingProductId": 3, "duration": 45, "breakTime": 15, "sameSlotAllDays": 1, "slots": "[{\"to\": \"10:45\", \"from\": \"10:00\"}, {\"to\": \"11:45\", \"from\": \"11:00\"}]" } } } }, "404": { "description": "Appointment slot not found." } }, "summary": "Get an appointment-type booking slot config by ID", "description": "Public endpoint. Returns a single appointment-type booking slot configuration by ID.", "parameters": [ { "name": "id", "in": "path", "description": "Booking product appointment slot ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/booking_product_default_slots": { "get": { "operationId": "api_apishopbooking_product_default_slots_get_collection", "tags": [ "Product Types" ], "responses": { "200": { "description": "List of default-type booking slot configs", "content": { "application/json": { "example": [ { "id": 1, "bookingType": "one", "duration": null, "breakTime": null, "slots": "[{\"id\": \"1\", \"to\": \"18:00\", \"from\": \"12:00\", \"to_day\": \"1\", \"from_day\": \"1\"}, {\"id\": \"2\", \"to\": \"18:00\", \"from\": \"12:00\", \"to_day\": \"2\", \"from_day\": \"2\"}]" } ] } } } }, "summary": "List default-type booking slot configs", "description": "Public endpoint. Returns the list of default-type booking slot configurations.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/booking_product_default_slots/{id}": { "get": { "operationId": "api_apishopbooking_product_default_slots_id_get", "tags": [ "Product Types" ], "responses": { "200": { "description": "Default-type booking slot config", "content": { "application/json": { "example": { "id": 1, "bookingType": "one", "duration": null, "breakTime": null, "slots": "[{\"id\": \"1\", \"to\": \"18:00\", \"from\": \"12:00\", \"to_day\": \"1\", \"from_day\": \"1\"}, {\"id\": \"2\", \"to\": \"18:00\", \"from\": \"12:00\", \"to_day\": \"2\", \"from_day\": \"2\"}]" } } } }, "404": { "description": "Default slot not found." } }, "summary": "Get a default-type booking slot config by ID", "description": "Public endpoint. Returns a single default-type booking slot configuration by ID.", "parameters": [ { "name": "id", "in": "path", "description": "Booking product default slot ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/booking_product_event_tickets": { "get": { "operationId": "api_apishopbooking_product_event_tickets_get_collection", "tags": [ "Product Types" ], "responses": { "200": { "description": "Event ticket list", "content": { "application/json": { "example": [ { "id": 7, "bookingProductId": 2, "price": 120, "qty": 1500, "specialPrice": 115, "specialPriceFrom": "2026-04-06 12:00:00", "specialPriceTo": "2026-04-30 12:00:00", "formattedPrice": "$120.00", "formattedSpecialPrice": "$115.00", "translations": [ "/api/booking_product_event_ticket_translations/7" ], "translation": "/api/booking_product_event_ticket_translations/7" } ] } } } }, "summary": "List event-type booking tickets", "description": "Public endpoint. Returns the list of event-type booking tickets.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/booking_product_event_tickets/{id}": { "get": { "operationId": "api_apishopbooking_product_event_tickets_id_get", "tags": [ "Product Types" ], "responses": { "200": { "description": "Event ticket", "content": { "application/json": { "example": { "id": 7, "bookingProductId": 2, "price": 120, "qty": 1500, "specialPrice": 115, "specialPriceFrom": "2026-04-06 12:00:00", "specialPriceTo": "2026-04-30 12:00:00", "formattedPrice": "$120.00", "formattedSpecialPrice": "$115.00", "translations": [ "/api/booking_product_event_ticket_translations/7" ], "translation": "/api/booking_product_event_ticket_translations/7" } } } }, "404": { "description": "Event ticket not found." } }, "summary": "Get an event-type booking ticket by ID", "description": "Public endpoint. Returns a single event-type booking ticket by its ID.", "parameters": [ { "name": "id", "in": "path", "description": "Booking product event ticket ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/booking_product_rental_slots": { "get": { "operationId": "api_apishopbooking_product_rental_slots_get_collection", "tags": [ "Product Types" ], "responses": { "200": { "description": "Rental slot config list", "content": { "application/json": { "example": [ { "id": 1, "bookingProductId": 4, "rentingType": "daily_hourly", "dailyPrice": 99, "hourlyPrice": 105, "sameSlotAllDays": 1, "slots": "[{\"to\": \"18:00\", \"from\": \"12:00\"}]", "formattedDailyPrice": "$99.00", "formattedHourlyPrice": "$105.00" } ] } } } }, "summary": "List rental-type booking slot configs", "description": "Public endpoint. Returns the list of rental-type booking slot configs.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/booking_product_rental_slots/{id}": { "get": { "operationId": "api_apishopbooking_product_rental_slots_id_get", "tags": [ "Product Types" ], "responses": { "200": { "description": "Rental slot config", "content": { "application/json": { "example": { "id": 1, "bookingProductId": 4, "rentingType": "daily_hourly", "dailyPrice": 99, "hourlyPrice": 105, "sameSlotAllDays": 1, "slots": "[{\"to\": \"18:00\", \"from\": \"12:00\"}]", "formattedDailyPrice": "$99.00", "formattedHourlyPrice": "$105.00" } } } }, "404": { "description": "Rental slot not found." } }, "summary": "Get a rental-type booking slot config by ID", "description": "Public endpoint. Returns a single rental-type booking slot config by its ID.", "parameters": [ { "name": "id", "in": "path", "description": "Booking product rental slot ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/booking_product_table_slots": { "get": { "operationId": "api_apishopbooking_product_table_slots_get_collection", "tags": [ "Product Types" ], "responses": { "200": { "description": "List of table-type booking slot configs", "content": { "application/json": { "example": [ { "id": 1, "bookingProductId": 5, "priceType": "guest", "guestLimit": 0, "duration": 45, "breakTime": 15, "preventSchedulingBefore": 2, "sameSlotAllDays": 1, "slots": "[{\"to\": \"12:45\", \"from\": \"12:00\"}, {\"to\": \"13:45\", \"from\": \"13:00\"}]" } ] } } } }, "summary": "List table-type booking slot configs", "description": "Public endpoint. Returns all table-type booking slot configurations.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/booking_product_table_slots/{id}": { "get": { "operationId": "api_apishopbooking_product_table_slots_id_get", "tags": [ "Product Types" ], "responses": { "200": { "description": "Table-type booking slot config", "content": { "application/json": { "example": { "id": 1, "bookingProductId": 5, "priceType": "guest", "guestLimit": 0, "duration": 45, "breakTime": 15, "preventSchedulingBefore": 2, "sameSlotAllDays": 1, "slots": "[{\"to\": \"12:45\", \"from\": \"12:00\"}, {\"to\": \"13:45\", \"from\": \"13:00\"}]" } } } }, "404": { "description": "Table slot not found." } }, "summary": "Get a table-type booking slot config by ID", "description": "Public endpoint. Returns the table-type booking slot configuration for the given ID.", "parameters": [ { "name": "id", "in": "path", "description": "Booking product table slot ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/product-bundle-option-products": { "get": { "operationId": "api_apishopproduct-bundle-option-products_get_collection", "tags": [ "Product Types" ], "responses": { "200": { "description": "List of bundle option products", "content": { "application/json": { "example": [ { "id": 1, "qty": 1, "isUserDefined": 1, "isDefault": 1, "sortOrder": 0, "bundleOption": "/api/shop/product_bundle_options/1", "product": "/api/shop/products/2512" } ] } } } }, "summary": "List bundle option products", "description": "Returns the selectable products inside bundle option groups. Used together with ProductBundleOption when displaying a bundle product detail page.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/product-bundle-option-products/{id}": { "get": { "operationId": "api_apishopproduct-bundle-option-products_id_get", "tags": [ "Product Types" ], "responses": { "200": { "description": "Bundle option product resource", "content": { "application/json": { "example": { "id": 1, "qty": 1, "isUserDefined": 1, "isDefault": 1, "sortOrder": 0, "bundleOption": "/api/shop/product_bundle_options/1", "product": "/api/shop/products/2512" } } } }, "404": { "description": "Bundle option product not found." } }, "summary": "Get a single bundle option product", "description": "Public endpoint. Returns one selectable product inside a bundle option group.", "parameters": [ { "name": "id", "in": "path", "description": "Product bundle option product ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/product-downloadable-links": { "get": { "operationId": "api_apishopproduct-downloadable-links_get_collection", "tags": [ "Product Types" ], "responses": { "200": { "description": "Downloadable links list", "content": { "application/json": { "example": [ { "id": 2, "url": "https://resources.saylor.org/wwwresources/archived/site/textbooks/Personal%20Finance.pdf", "type": "url", "price": 69, "sampleFile": "product_downloadable_links/2506/4aUxeYumTemSR3QwHHHGmdiHBG2qWek3KDR8fhYK.pdf", "sampleFileName": "Personal Finance.pdf", "sampleType": "file", "downloads": 10, "sortOrder": 0, "createdAt": "2026-04-03T00:14:55+05:30", "updatedAt": "2026-04-03T00:14:55+05:30", "formattedPrice": "$69.00", "fileUrl": "http://localhost:8000/storage/", "sampleFileUrl": "http://localhost:8000/api/downloadable/download-sample/link/2", "product": "/api/shop/products/2506", "translation": "/api/shop/product_downloadable_link_translations/2", "translations": [ "/api/shop/product_downloadable_link_translations/2", "/api/shop/product_downloadable_link_translations/3" ] } ] } } } }, "summary": "List downloadable links", "description": "Returns the downloadable file links for downloadable-type products. Customers receive access to these after purchase.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/product-downloadable-links/{id}": { "get": { "operationId": "api_apishopproduct-downloadable-links_id_get", "tags": [ "Product Types" ], "responses": { "200": { "description": "Downloadable link", "content": { "application/json": { "example": { "id": 2, "url": "https://resources.saylor.org/wwwresources/archived/site/textbooks/Personal%20Finance.pdf", "type": "url", "price": 69, "sampleFile": "product_downloadable_links/2506/4aUxeYumTemSR3QwHHHGmdiHBG2qWek3KDR8fhYK.pdf", "sampleFileName": "Personal Finance.pdf", "sampleType": "file", "downloads": 10, "sortOrder": 0, "createdAt": "2026-04-03T00:14:55+05:30", "updatedAt": "2026-04-03T00:14:55+05:30", "formattedPrice": "$69.00", "fileUrl": "http://localhost:8000/storage/", "sampleFileUrl": "http://localhost:8000/api/downloadable/download-sample/link/2", "product": "/api/shop/products/2506", "translation": "/api/shop/product_downloadable_link_translations/2", "translations": [ "/api/shop/product_downloadable_link_translations/2", "/api/shop/product_downloadable_link_translations/3" ] } } } }, "404": { "description": "Downloadable link not found", "content": { "application/json": { "example": { "message": "Downloadable link not found." } } } } }, "summary": "Get a single downloadable link", "description": "Get a single downloadable link", "parameters": [ { "name": "id", "in": "path", "description": "Product downloadable link ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/product-downloadable-samples": { "get": { "operationId": "api_apishopproduct-downloadable-samples_get_collection", "tags": [ "Product Types" ], "responses": { "200": { "description": "List of downloadable samples", "content": { "application/json": { "example": [ { "id": 1, "file": "product_downloadable_links/2506/1apTXUkt2ugCISKHadT5Fmp4EwU7YeWYY2wb4mNs.pdf", "fileName": "document.pdf", "type": "file", "sortOrder": 0, "createdAt": "2026-04-03T00:14:55+05:30", "updatedAt": "2026-04-03T00:14:55+05:30", "fileUrl": "http://localhost:8000/api/downloadable/download-sample/sample/1", "product": "/api/shop/products/2506", "translation": "/api/shop/product_downloadable_sample_translations/1", "translations": [ "/api/shop/product_downloadable_sample_translations/1" ] } ] } } } }, "summary": "List downloadable samples", "description": "Returns sample/preview files for downloadable-type products. Visible to all visitors before purchase.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/product-downloadable-samples/{id}": { "get": { "operationId": "api_apishopproduct-downloadable-samples_id_get", "tags": [ "Product Types" ], "responses": { "200": { "description": "The downloadable sample", "content": { "application/json": { "example": { "id": 1, "file": "product_downloadable_links/2506/1apTXUkt2ugCISKHadT5Fmp4EwU7YeWYY2wb4mNs.pdf", "fileName": "document.pdf", "type": "file", "sortOrder": 0, "createdAt": "2026-04-03T00:14:55+05:30", "updatedAt": "2026-04-03T00:14:55+05:30", "fileUrl": "http://localhost:8000/api/downloadable/download-sample/sample/1", "product": "/api/shop/products/2506", "translation": "/api/shop/product_downloadable_sample_translations/1", "translations": [ "/api/shop/product_downloadable_sample_translations/1" ] } } } }, "404": { "description": "Downloadable sample not found." } }, "summary": "Get a single downloadable sample", "description": "Returns one sample/preview file for a downloadable-type product. Visible to all visitors before purchase.", "parameters": [ { "name": "id", "in": "path", "description": "Product downloadable sample ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/product_bundle_option_translations": { "get": { "operationId": "api_apishopproduct_bundle_option_translations_get_collection", "tags": [ "Product Types" ], "responses": { "200": { "description": "A list of bundle option translations.", "content": { "application/json": { "example": [ { "id": 5, "locale": "AR", "label": "Bundle Option 1", "productBundleOptionId": 1 } ] } } } }, "summary": "List bundle option translations", "description": "Lists all bundle option translation rows. Use the parent `/product_bundle_options/{id}` resource to scope to one option (its `translations` IRI list lets you fetch each locale individually).", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/product_bundle_option_translations/{id}": { "get": { "operationId": "api_apishopproduct_bundle_option_translations_id_get", "tags": [ "Product Types" ], "responses": { "200": { "description": "The bundle option translation.", "content": { "application/json": { "example": { "id": 5, "locale": "AR", "label": "Bundle Option 1", "productBundleOptionId": 1 } } } }, "404": { "description": "Translation not found." } }, "summary": "Get a product bundle option translation by ID", "description": "Returns a single locale-specific translation row (`label`) for a bundle option. Referenced from `/api/shop/product_bundle_options/{id}` responses via the `translations` IRI list.", "parameters": [ { "name": "id", "in": "path", "description": "Product bundle option translation ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/product_bundle_options/{id}": { "get": { "operationId": "api_apishopproduct_bundle_options_id_get", "tags": [ "Product Types" ], "responses": { "200": { "description": "Bundle option resource", "content": { "application/json": { "example": { "id": 1, "type": "radio", "isRequired": 1, "sortOrder": 0, "product": "/api/shop/products/2517", "bundleOptionProducts": [ "/api/shop/product-bundle-option-products/1" ], "translation": "/api/shop/product_bundle_option_translations/1", "translations": [ "/api/shop/product_bundle_option_translations/5", "/api/shop/product_bundle_option_translations/1" ] } } } }, "404": { "description": "Bundle option not found." } }, "summary": "Get a bundle option (one decision group inside a bundle product)", "description": "A ProductBundleOption is one of the choice groups a customer must resolve when buying a bundle-type product. It groups a set of selectable ProductBundleOptionProducts.", "parameters": [ { "name": "id", "in": "path", "description": "Product bundle option ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/product_downloadable_link_translations": { "get": { "operationId": "api_apishopproduct_downloadable_link_translations_get_collection", "tags": [ "Product Types" ], "responses": { "200": { "description": "Downloadable link translations list", "content": { "application/json": { "example": [ { "id": 2, "locale": "en", "title": "Full eBook PDF", "downloadableLink": null } ] } } } }, "summary": "List downloadable link translations", "description": "Lists all downloadable link translation rows. Use the parent product's `downloadable-links` sub-resource to scope to one product.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/product_downloadable_link_translations/{id}": { "get": { "operationId": "api_apishopproduct_downloadable_link_translations_id_get", "tags": [ "Product Types" ], "responses": { "200": { "description": "Downloadable link translation", "content": { "application/json": { "example": { "id": 2, "locale": "en", "title": "Full eBook PDF", "downloadableLink": null } } } }, "404": { "description": "Translation not found", "content": { "application/json": { "example": { "message": "Translation not found." } } } } }, "summary": "Get a downloadable link translation by ID", "description": "Returns a single locale-specific translation row (`title`) for a downloadable link. Referenced from `/api/shop/products/{id}/downloadable-links` responses via the `translations` IRI list.", "parameters": [ { "name": "id", "in": "path", "description": "Product downloadable link translation ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/product_downloadable_sample_translations": { "get": { "operationId": "api_apishopproduct_downloadable_sample_translations_get_collection", "tags": [ "Product Types" ], "responses": { "200": { "description": "List of downloadable sample translations", "content": { "application/json": { "example": [ { "id": 1, "locale": "en", "title": "Sample file", "downloadableSample": null } ] } } } }, "summary": "List downloadable sample translations", "description": "Lists all downloadable sample translation rows. Use the parent product's `downloadable-samples` sub-resource to scope to one product.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/product_downloadable_sample_translations/{id}": { "get": { "operationId": "api_apishopproduct_downloadable_sample_translations_id_get", "tags": [ "Product Types" ], "responses": { "200": { "description": "The downloadable sample translation", "content": { "application/json": { "example": { "id": 1, "locale": "en", "title": "Sample file", "downloadableSample": null } } } }, "404": { "description": "Translation not found." } }, "summary": "Get a downloadable sample translation by ID", "description": "Returns a single locale-specific translation row (`title`) for a downloadable sample. Referenced from `/api/shop/products/{id}/downloadable-samples` responses via the `translations` IRI list.", "parameters": [ { "name": "id", "in": "path", "description": "Product downloadable sample translation ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/product_grouped_products/{id}": { "get": { "operationId": "api_apishopproduct_grouped_products_id_get", "tags": [ "Product Types" ], "responses": { "200": { "description": "The grouped-product member.", "content": { "application/json": { "example": { "id": 1, "qty": 1, "sortOrder": 0, "product": "/api/shop/products/2516", "associatedProduct": "/api/shop/products/2512" } } } }, "404": { "description": "Grouped product not found." } }, "summary": "Get a grouped-product member", "description": "A ProductGroupedProduct row links a child product into a grouped-type parent. Used when displaying the components of a grouped-type product.", "parameters": [ { "name": "id", "in": "path", "description": "Product grouped product ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/products/{productId}/booking-products": { "get": { "operationId": "api_apishopproducts_productIdbooking-products_get_collection", "tags": [ "Product Types" ], "responses": { "200": { "description": "Booking product configurations for the product.", "content": { "application/json": { "example": [ { "id": 1, "type": "default", "qty": 150, "location": "Noida, Uttar Pradesh", "showLocation": 0, "availableEveryWeek": null, "availableFrom": "2026-04-06T12:00:00+05:30", "availableTo": "2026-12-31T12:00:00+05:30", "createdAt": "2026-04-03T00:24:30+05:30", "updatedAt": "2026-04-06T21:09:47+05:30", "slots": { "bookingType": "one", "sameSlotAllDays": null, "slots": [ { "id": "1", "to": "18:00", "from": "12:00", "to_day": "1", "from_day": "1" }, { "id": "2", "to": "18:00", "from": "12:00", "to_day": "2", "from_day": "2" } ] } } ] } } } }, "summary": "List booking-product configurations for a product", "description": "Booking-type only. Returns the booking-specific configuration row(s) for the given product. The `type` field on each row (default/appointment/rental/event/table) indicates which slot helper governs availability — use `/api/shop/booking-slots?id={id}&date=YYYY-MM-DD` to fetch slots.", "parameters": [ { "name": "productId", "in": "path", "description": "Product ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/products/{productId}/bundle-options": { "get": { "operationId": "api_apishopproducts_productIdbundle-options_get_collection", "tags": [ "Product Types" ], "responses": { "200": { "description": "List of bundle options", "content": { "application/json": { "example": [ { "id": 1, "type": "radio", "isRequired": 1, "sortOrder": 0, "product": "/api/shop/products/2517", "bundleOptionProducts": [ "/api/shop/product-bundle-option-products/1" ], "translation": "/api/shop/product_bundle_option_translations/1", "translations": [ "/api/shop/product_bundle_option_translations/5", "/api/shop/product_bundle_option_translations/1" ] } ] } } } }, "summary": "List bundle options for a bundle-type product", "description": "Bundle-type only. Returns the choice groups (option groups) that define the bundle. Each option groups a set of selectable items via `/api/shop/product-bundle-option-products?product_bundle_option_id={id}`.", "parameters": [ { "name": "productId", "in": "path", "description": "Product ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/products/{productId}/downloadable-links": { "get": { "operationId": "api_apishopproducts_productIddownloadable-links_get_collection", "tags": [ "Product Types" ], "responses": { "200": { "description": "Downloadable links for the product", "content": { "application/json": { "example": [ { "id": 2, "url": "https://resources.saylor.org/wwwresources/archived/site/textbooks/Personal%20Finance.pdf", "type": "url", "price": 69, "sampleFile": "product_downloadable_links/2506/4aUxeYumTemSR3QwHHHGmdiHBG2qWek3KDR8fhYK.pdf", "sampleFileName": "Personal Finance.pdf", "sampleType": "file", "downloads": 10, "sortOrder": 0, "createdAt": "2026-04-03T00:14:55+05:30", "updatedAt": "2026-04-03T00:14:55+05:30", "formattedPrice": "$69.00", "fileUrl": "http://localhost:8000/storage/", "sampleFileUrl": "http://localhost:8000/api/downloadable/download-sample/link/2", "product": "/api/shop/products/2506", "translation": "/api/shop/product_downloadable_link_translations/2", "translations": [ "/api/shop/product_downloadable_link_translations/2", "/api/shop/product_downloadable_link_translations/3" ] } ] } } } }, "summary": "List downloadable links for a product", "description": "Downloadable-type only. Returns the downloadable file/URL links a customer receives after purchasing this downloadable product.", "parameters": [ { "name": "productId", "in": "path", "description": "Product ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/products/{productId}/downloadable-samples": { "get": { "operationId": "api_apishopproducts_productIddownloadable-samples_get_collection", "tags": [ "Product Types" ], "responses": { "200": { "description": "List of downloadable samples for the product", "content": { "application/json": { "example": [ { "id": 1, "file": "product_downloadable_links/2506/1apTXUkt2ugCISKHadT5Fmp4EwU7YeWYY2wb4mNs.pdf", "fileName": "document.pdf", "type": "file", "sortOrder": 0, "createdAt": "2026-04-03T00:14:55+05:30", "updatedAt": "2026-04-03T00:14:55+05:30", "fileUrl": "http://localhost:8000/api/downloadable/download-sample/sample/1", "product": "/api/shop/products/2506", "translation": "/api/shop/product_downloadable_sample_translations/1", "translations": [ "/api/shop/product_downloadable_sample_translations/1" ] } ] } } } }, "summary": "List downloadable samples for a product", "description": "Downloadable-type only. Returns sample/preview files visible to all visitors before purchase.", "parameters": [ { "name": "productId", "in": "path", "description": "Product ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/products/{productId}/grouped-products": { "get": { "operationId": "api_apishopproducts_productIdgrouped-products_get_collection", "tags": [ "Product Types" ], "responses": { "200": { "description": "A list of grouped-product members.", "content": { "application/json": { "example": [ { "id": 1, "qty": 1, "sortOrder": 0, "product": "/api/shop/products/2516", "associatedProduct": "/api/shop/products/2512" } ] } } } }, "summary": "List member products of a grouped-type product", "description": "Grouped-type only. Returns the child products bundled inside a grouped parent (each row carries qty + sortOrder + the associated child Product).", "parameters": [ { "name": "productId", "in": "path", "description": "Product ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/products/{productId}/variants": { "get": { "operationId": "api_apishopproducts_productIdvariants_get_collection", "tags": [ "Product Types" ], "responses": { "200": { "description": "List of product variants", "content": { "application/json": { "example": [ { "id": 124, "sku": "SDASDAS123123-variant-1-6", "type": "simple", "name": "Clean Pink Shirt", "urlKey": "sdasdas123123-variant-1-6", "status": true, "shortDescription": "SDASDAS123123-variant-1-6", "price": 2040, "new": true, "featured": true, "minimumPrice": 2040, "maximumPrice": 2040, "formattedPrice": "$2,040.00", "formattedMinimumPrice": "$2,040.00", "formattedMaximumPrice": "$2,040.00", "isInWishlist": 0, "isInCompare": 0, "baseImageUrl": "http://localhost:8000/storage/product/124/Ba8yoli6aFgjpiFLUcfEpuHaGzbaRCYu7wEvKR2d.webp" } ] } } } }, "summary": "List variants of a configurable product", "description": "Configurable-type only. Returns the child product variants of the given configurable product. Each variant is a Product with the same card-level fields as the list endpoint.", "parameters": [ { "name": "productId", "in": "path", "description": "Product ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/store-config": { "get": { "operationId": "api_apishopstore-config_get_collection", "tags": [ "Store Config" ], "responses": { "200": { "description": "The storefront settings.", "content": { "application/json": { "example": [ { "id": "default", "channel": "default", "locale": "en", "guestCheckoutEnabled": true, "cartCrossSellEnabled": true, "estimateShippingEnabled": true, "reorderEnabled": true, "adminReorderEnabled": true, "cartSummary": "display_number_of_items_in_cart", "cartPageEnabled": true, "miniCartEnabled": true, "miniCartOfferInfo": "Get Up To 30% OFF on your 1st order", "backordersEnabled": false, "minimumOrderEnabled": true, "minimumOrderAmount": 50, "minimumOrderIncludesDiscount": false, "minimumOrderIncludesTax": false, "minimumOrderMessage": "Orders must be at least $50.", "orderNumberPrefix": "ORD-", "orderNumberLength": 6, "orderNumberSuffix": null, "orderNumberGenerator": null, "orderMaxRetryAttempts": 3, "customerReviewEnabled": true, "guestReviewEnabled": false, "reviewerNameCensored": true, "reviewSummary": "review_counts", "compareEnabled": true, "wishlistEnabled": true, "imageSearchEnabled": true, "socialShareEnabled": false, "productsPerPage": [ 12, 24, 36, 48 ], "listingMode": "grid", "defaultSortBy": "price-desc", "buyNowButtonEnabled": true, "relatedProductsLimit": 4, "upSellProductsLimit": 4, "crossSellProductsLimit": 4, "searchMinQueryLength": 0, "searchMaxQueryLength": 1000, "socialShareProviders": [ "facebook", "whatsapp" ], "socialShareMessage": "Check out this product", "categoryView": "default", "breadcrumbsEnabled": true, "headerOfferTitle": "Get UPTO 40% OFF on your 1st order", "headerOfferLinkTitle": "SHOP NOW", "headerOfferLink": "https://example.com/sale", "footerCopyright": "© 2026 Example Store", "weightUnit": "kgs", "customCss": null, "customJavascript": null, "speculationRules": null, "sitemapEnabled": true, "contactName": "Example Store", "contactEmail": "support@example.com", "richSnippets": { "products": { "enabled": true, "showSku": true, "showWeight": false, "showCategories": true, "showImages": true, "showReviews": true, "showRatings": true, "showOffers": true }, "categories": { "enabled": true, "showSearchInputField": false } }, "aiImageSearchEnabled": false, "aiReviewTranslationEnabled": false, "aiCheckoutMessageEnabled": false, "emailVerificationRequired": false, "newsletterEnabled": true, "captchaEnabled": false, "captchaSiteKey": null, "signupNewsletterEnabled": true, "loginRedirectTo": "home", "addressCountryRequired": true, "addressStateRequired": true, "addressPostcodeRequired": true, "addressStreetLines": 1, "socialLoginProviders": [ "google", "facebook" ], "taxCartDisplayPrices": "excluding_tax", "taxCartDisplaySubtotal": "excluding_tax", "taxCartDisplayShipping": "excluding_tax", "taxCartShowBreakdown": false, "taxOrderDisplayPrices": "excluding_tax", "taxOrderDisplaySubtotal": "excluding_tax", "taxOrderDisplayShipping": "excluding_tax", "taxCalculationBasedOn": "shipping_address", "taxProductPrices": "excluding_tax", "taxShippingPrices": "excluding_tax", "taxShippingCategoryId": null, "taxProductCategoryId": 1, "taxApplyOn": "after_discount", "taxDefaultCountry": "US", "taxDefaultState": "CA", "taxDefaultPostcode": null, "storeInformation": { "storeName": "Example Store", "address": "1 Market Street", "city": "San Francisco", "state": "CA", "country": "US", "zipcode": "94105", "vatNumber": null, "contact": "+1 415 555 0100", "bankDetails": null }, "gdprEnabled": false, "gdprAgreementEnabled": false, "gdprAgreementLabel": "I agree with the terms and conditions.", "gdprAgreementContent": null, "cookieConsentEnabled": false, "cookieConsentPosition": "bottom-left", "cookieConsentDescription": "This website uses cookies to ensure you get the best experience on our website.", "cookieConsentStaticBlockIdentifier": null, "cookieConsentCategories": { "strictly_necessary": "I agree with the terms and conditions.", "basic_interaction": "These trackers enable basic interactions and functionalities.", "experience_enhancement": "These trackers help us to provide a personalized user experience.", "measurements": "These trackers help us to measure traffic and analyze your behavior.", "targeting_advertising": "These trackers help us to deliver personalized marketing content." }, "euWithdrawalEnabled": false, "returnWindowDays": 7, "returnPolicy": "7 days return policy.", "returnAllowedFileTypes": [ "image/jpeg", "image/png", "image/webp" ], "returnAllowedProductTypes": [ "simple", "configurable", "bundle", "grouped" ], "returnAfterCancelledAllowed": true, "returnAfterDeclinedAllowed": true } ] } } } }, "summary": "Get the storefront settings of the current channel", "description": "Returns the store settings a storefront needs before it renders a page: checkout and minimum order rules, the order number format and order creation retries, review rules, product listing and product page options, header and footer content, custom CSS and JavaScript, speculation rules, rich snippets, customer account, login and address rules, tax display and calculation, store information, privacy and cookie consent, returns and optional features. Secrets such as API keys, client secrets and mail credentials are never returned. Only non-secret values are returned. Send `X-Channel` or `X-Locale` to read another channel or language. Public endpoint — the storefront key is enough.", "parameters": [ { "name": "X-Channel", "in": "header", "description": "Channel code to read. Defaults to the channel of the request host.", "required": false, "deprecated": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code to read. Must be a locale of the channel.", "required": false, "deprecated": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/sections": { "get": { "operationId": "api_apishopsections_get_collection", "tags": [ "Theme" ], "responses": { "200": { "description": "List of sections.", "content": { "application/json": { "example": [ { "id": 3, "themeCode": "default", "channelId": 1, "type": "category_carousel", "name": "Categories Collections", "sortOrder": 3, "status": 1, "createdAt": "2024-04-16T21:44:15+05:30", "updatedAt": "2026-04-07T18:05:39+05:30", "translation": { "id": 3, "sectionId": 3, "locale": "en", "options": "{\"filters\": {\"sort\": \"asc\", \"limit\": \"10\", \"parent_id\": \"1\"}}" }, "translations": [ { "id": 3, "sectionId": 3, "locale": "en", "options": "{\"filters\": {\"sort\": \"asc\", \"limit\": \"10\", \"parent_id\": \"1\"}}" } ] } ] } } } }, "summary": "List storefront sections", "description": "Returns the published sections of the current channel's active theme, in render order. A channel holds one page worth of sections, so the default page size is 50 — enough to draw the storefront in a single call. Filter by `?type=` (`image_carousel`, `product_carousel`, `category_carousel`, `footer_links`, `static_content`, `services_content`). Public endpoint.", "parameters": [ { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 50, "minimum": 0, "maximum": 100 }, "style": "form", "explode": true }, { "name": "type", "in": "query", "description": "Section type", "required": false, "deprecated": false, "schema": { "type": "string" }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/sections/{id}": { "get": { "operationId": "api_apishopsections_id_get", "tags": [ "Theme" ], "responses": { "200": { "description": "The section.", "content": { "application/json": { "example": { "id": 3, "themeCode": "default", "channelId": 1, "type": "category_carousel", "name": "Categories Collections", "sortOrder": 3, "status": 1, "createdAt": "2024-04-16T21:44:15+05:30", "updatedAt": "2026-04-07T18:05:39+05:30", "translation": { "id": 3, "sectionId": 3, "locale": "en", "options": "{\"filters\": {\"sort\": \"asc\", \"limit\": \"10\", \"parent_id\": \"1\"}}" }, "translations": [ { "id": 3, "sectionId": 3, "locale": "en", "options": "{\"filters\": {\"sort\": \"asc\", \"limit\": \"10\", \"parent_id\": \"1\"}}" }, { "id": 29, "sectionId": 3, "locale": "ar", "options": "{\"filters\": {\"sort\": \"asc\", \"limit\": \"10\", \"parent_id\": \"1\"}}" } ] } } } }, "404": { "description": "Section not found, unpublished, or not part of this channel's active theme." } }, "summary": "Get a storefront section by ID", "description": "Returns one published section (carousel, static content, footer links, etc.) of the current channel's active theme, with its current-locale `translation` and all `translations`. The `options` field is a JSON-encoded string. Public endpoint.", "parameters": [ { "name": "id", "in": "path", "description": "Section ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/theme": { "get": { "operationId": "api_apishoptheme_get_collection", "tags": [ "Theme" ], "responses": { "200": { "description": "The active theme.", "content": { "application/json": { "example": [ { "code": "default", "name": "Default", "sectionTypes": [ "image_carousel", "product_carousel", "category_carousel", "footer_links", "static_content", "services_content" ] } ] } } } }, "summary": "Get the active theme of the current channel", "description": "Returns the theme this channel's storefront is drawn with, and the section types it can hold. The sections themselves are read from `/api/shop/sections`, which is already scoped to this theme. Public endpoint.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } }, "/delete-all-wishlists": { "post": { "operationId": "api_apishopdelete-all-wishlists_post", "tags": [ "Wishlist" ], "responses": { "201": { "description": "All wishlist items removed.", "content": { "application/json": { "example": { "message": "All wishlist items have been removed successfully", "deletedCount": 1 } } }, "links": [] }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Delete all wishlist items", "description": "Removes every wishlist item for the authenticated customer. Send an empty JSON body `{}`. Returns the count removed.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new DeleteAllWishlists resource", "content": { "application/json": { "schema": { "type": "object", "properties": [] }, "example": [] } }, "required": false } } }, "/move-wishlist-to-carts": { "post": { "operationId": "api_apishopmove-wishlist-to-carts_post", "tags": [ "Wishlist" ], "responses": { "201": { "description": "Item moved to cart. Returns the updated cart.", "content": { "application/json": { "example": { "id": 6885, "cartToken": "6885", "customerId": 1533, "channelId": 1, "itemsCount": 1, "items": [ { "id": 7763, "cartId": 6885, "productId": 1, "name": "Coastal Breeze Men's Blue Zipper Hoodie", "sku": "COASTALBREEZEMENSHOODIE", "quantity": 1, "price": 100, "total": 100, "type": "simple", "formattedPrice": "$100.00", "formattedTotal": "$100.00" } ], "subtotal": 100, "grandTotal": 100, "taxAmount": 0, "discountAmount": 0, "formattedSubtotal": "$100.00", "formattedGrandTotal": "$100.00" } } }, "links": [] }, "404": { "description": "Wishlist item not found or not owned by the caller." }, "400": { "description": "Invalid input", "links": [] }, "422": { "description": "Validation Error", "links": [] } }, "summary": "Move a wishlist item to the cart", "description": "Moves the given wishlist item into the authenticated customer's active cart and removes it from the wishlist. Returns the updated cart.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "The new WishlistToCart resource", "content": { "application/json": { "schema": { "type": "object", "required": [ "wishlistItemId" ], "properties": { "wishlistItemId": { "type": "integer", "example": 202, "description": "ID of the wishlist item to move" }, "quantity": { "type": "integer", "example": 1, "description": "Quantity to add to cart (defaults to 1)" } } }, "example": { "wishlistItemId": 202, "quantity": 1 } } }, "required": true } } }, "/wishlists": { "get": { "operationId": "api_apishopwishlists_get_collection", "tags": [ "Wishlist" ], "responses": { "200": { "description": "List of wishlist items.", "content": { "application/json": { "example": [ { "id": 199, "createdAt": "2026-07-02T11:54:46+05:30", "updatedAt": "2026-07-02T11:54:46+05:30", "product": "/api/shop/products/1", "customer": "/api/shop/customers/1533", "channel": "/api/shop/channels/1" } ] } } } }, "summary": "List the customer's wishlist items", "description": "Returns every wishlist item for the authenticated customer in the current channel. Each row embeds `product`, `customer` and `channel` as IRIs.", "parameters": [ { "name": "sort", "in": "query", "description": "Column to sort by: `id` (default) or `created_at`. Compound form also accepted, e.g. `created_at-desc`.", "required": false, "deprecated": false, "schema": { "type": "string", "enum": [ "id", "created_at", "id-asc", "id-desc", "created_at-asc", "created_at-desc" ] }, "style": "form", "explode": true }, { "name": "order", "in": "query", "description": "Sort direction: `asc` (default) or `desc`. Use `desc` to show the most recently added items first.", "required": false, "deprecated": false, "schema": { "type": "string", "enum": [ "asc", "desc" ] }, "style": "form", "explode": true }, { "name": "page", "in": "query", "description": "The collection page number", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 1 }, "style": "form", "explode": true }, { "name": "per_page", "in": "query", "description": "The number of items per page", "required": false, "deprecated": false, "schema": { "type": "integer", "default": 10, "minimum": 0, "maximum": 50 }, "style": "form", "explode": true }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] }, "post": { "operationId": "api_apishopwishlists_post", "tags": [ "Wishlist" ], "responses": { "201": { "description": "Product added to wishlist.", "content": { "application/json": { "example": { "id": 199, "createdAt": "2026-07-02T11:54:46+05:30", "updatedAt": "2026-07-02T11:54:46+05:30", "product": "/api/shop/products/1", "customer": "/api/shop/customers/1533", "channel": "/api/shop/channels/1" } } }, "links": [] }, "422": { "description": "Missing/invalid productId.", "links": [] }, "400": { "description": "Invalid input", "links": [] } }, "summary": "Create a wishlist item", "description": "Add a product to the customer's wishlist.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "Wishlist item details", "content": { "application/json": { "schema": { "type": "object", "required": [ "productId" ], "properties": { "productId": { "type": "integer", "format": "int64", "example": 1 } } }, "example": { "productId": 1 } } }, "required": true } } }, "/wishlists/toggle": { "post": { "operationId": "toggle_post", "tags": [ "Wishlist" ], "responses": { "201": { "description": "Product toggled. `message` states whether it was added or removed.", "content": { "application/json": { "example": { "id": 200, "createdAt": "2026-07-02T11:55:12+05:30", "updatedAt": "2026-07-02T11:55:12+05:30", "message": "Item Successfully Added To Wishlist", "product": "/api/shop/products/1", "customer": "/api/shop/customers/1533", "channel": "/api/shop/channels/1" } } }, "links": [] }, "422": { "description": "Missing/invalid productId.", "links": [] }, "400": { "description": "Invalid input", "links": [] } }, "summary": "Toggle a product in wishlist", "description": "Add product to wishlist if not present, or remove if already present.", "parameters": [ { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ], "requestBody": { "description": "Toggle wishlist item", "content": { "application/json": { "schema": { "type": "object", "required": [ "productId" ], "properties": { "productId": { "type": "integer", "format": "int64", "example": 1 } } }, "example": { "productId": 1 } } }, "required": true } } }, "/wishlists/{id}": { "get": { "operationId": "api_apishopwishlists_id_get", "tags": [ "Wishlist" ], "responses": { "200": { "description": "The wishlist item.", "content": { "application/json": { "example": { "id": 199, "createdAt": "2026-07-02T11:54:46+05:30", "updatedAt": "2026-07-02T11:54:46+05:30", "product": "/api/shop/products/1", "customer": "/api/shop/customers/1533", "channel": "/api/shop/channels/1" } } } }, "404": { "description": "Wishlist item not found or not owned by the caller." } }, "summary": "Get a wishlist item by ID", "description": "Returns one wishlist item owned by the authenticated customer, with the `product`, `customer` and `channel` embedded as IRIs.", "parameters": [ { "name": "id", "in": "path", "description": "Wishlist ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] }, "delete": { "operationId": "api_apishopwishlists_id_delete", "tags": [ "Wishlist" ], "responses": { "204": { "description": "Wishlist item removed. No content." }, "404": { "description": "Wishlist item not found or not owned by the caller." } }, "summary": "Remove a wishlist item", "description": "Removes the wishlist item by ID. Returns 204 No Content on success.", "parameters": [ { "name": "id", "in": "path", "description": "Wishlist ID", "required": true, "deprecated": false, "schema": { "type": "string" }, "style": "simple", "explode": false }, { "name": "X-STOREFRONT-KEY", "in": "header", "description": "Storefront API Key for authentication. Required for all shop/storefront API requests.", "required": true, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "" }, "style": "simple", "explode": false }, { "name": "X-Locale", "in": "header", "description": "Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "en" }, "style": "simple", "explode": false }, { "name": "X-Channel", "in": "header", "description": "Channel code (e.g. \"default\"). Defaults to the current channel.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "default" }, "style": "simple", "explode": false }, { "name": "X-Currency", "in": "header", "description": "Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.", "required": false, "deprecated": false, "allowEmptyValue": false, "schema": { "type": "string", "example": "USD" }, "style": "simple", "explode": false } ] } } }, "components": { "schemas": { "CartItemData-mutation": { "type": "object", "properties": { "id": { "type": [ "integer", "null" ] }, "cartId": { "type": [ "integer", "null" ] }, "productId": { "type": [ "integer", "null" ] }, "name": { "type": [ "string", "null" ] }, "sku": { "type": [ "string", "null" ] }, "quantity": { "type": [ "integer", "null" ] }, "price": { "type": [ "number", "null" ] }, "basePrice": { "type": [ "number", "null" ] }, "total": { "type": [ "number", "null" ] }, "baseTotal": { "type": [ "number", "null" ] }, "discountAmount": { "type": [ "number", "null" ] }, "baseDiscountAmount": { "type": [ "number", "null" ] }, "taxAmount": { "type": [ "number", "null" ] }, "baseTaxAmount": { "type": [ "number", "null" ] }, "options": { "type": [ "array", "null" ], "items": [] }, "type": { "type": [ "string", "null" ] }, "formattedPrice": { "type": [ "string", "null" ] }, "formattedTotal": { "type": [ "string", "null" ] }, "priceInclTax": { "type": [ "number", "null" ] }, "basePriceInclTax": { "type": [ "number", "null" ] }, "formattedPriceInclTax": { "type": [ "string", "null" ] }, "totalInclTax": { "type": [ "number", "null" ] }, "baseTotalInclTax": { "type": [ "number", "null" ] }, "formattedTotalInclTax": { "type": [ "string", "null" ] }, "baseImage": { "type": [ "string", "null" ] }, "productUrlKey": { "type": [ "string", "null" ] }, "canChangeQty": { "type": [ "boolean", "null" ] } } }, "CartItemData.html-mutation": { "type": "object", "properties": { "id": { "type": [ "integer", "null" ] }, "cartId": { "type": [ "integer", "null" ] }, "productId": { "type": [ "integer", "null" ] }, "name": { "type": [ "string", "null" ] }, "sku": { "type": [ "string", "null" ] }, "quantity": { "type": [ "integer", "null" ] }, "price": { "type": [ "number", "null" ] }, "basePrice": { "type": [ "number", "null" ] }, "total": { "type": [ "number", "null" ] }, "baseTotal": { "type": [ "number", "null" ] }, "discountAmount": { "type": [ "number", "null" ] }, "baseDiscountAmount": { "type": [ "number", "null" ] }, "taxAmount": { "type": [ "number", "null" ] }, "baseTaxAmount": { "type": [ "number", "null" ] }, "options": { "type": [ "array", "null" ], "items": [] }, "type": { "type": [ "string", "null" ] }, "formattedPrice": { "type": [ "string", "null" ] }, "formattedTotal": { "type": [ "string", "null" ] }, "priceInclTax": { "type": [ "number", "null" ] }, "basePriceInclTax": { "type": [ "number", "null" ] }, "formattedPriceInclTax": { "type": [ "string", "null" ] }, "totalInclTax": { "type": [ "number", "null" ] }, "baseTotalInclTax": { "type": [ "number", "null" ] }, "formattedTotalInclTax": { "type": [ "string", "null" ] }, "baseImage": { "type": [ "string", "null" ] }, "productUrlKey": { "type": [ "string", "null" ] }, "canChangeQty": { "type": [ "boolean", "null" ] } } }, "CustomerDownloadableProduct": { "type": "object", "description": "Customer Downloadable Product API Resource\n\nReturns downloadable link purchases belonging to the authenticated customer.\nThis is a read-only, customer-scoped resource.", "properties": { "id": { "readOnly": true, "type": "integer" }, "productName": { "type": [ "string", "null" ] }, "name": { "type": [ "string", "null" ] }, "url": { "type": [ "string", "null" ] }, "file": { "type": [ "string", "null" ] }, "fileName": { "type": [ "string", "null" ] }, "type": { "type": "string" }, "downloadBought": { "type": "integer" }, "downloadUsed": { "type": "integer" }, "status": { "type": [ "string", "null" ] }, "downloadCanceled": { "type": "integer" }, "createdAt": { "readOnly": true, "type": [ "string", "null" ], "format": "date-time" }, "updatedAt": { "readOnly": true, "type": [ "string", "null" ], "format": "date-time" }, "remainingDownloads": { "readOnly": true, "type": "string" }, "downloadUrl": { "readOnly": true, "type": "string" }, "customer": { "readOnly": true, "description": "Customer who purchased the downloadable product", "type": "string", "format": "iri-reference", "example": "https://example.com/" }, "order": { "readOnly": true, "description": "Associated order", "type": "string", "format": "iri-reference", "example": "https://example.com/" } } }, "CustomerDownloadableProduct.html": { "type": "object", "description": "Customer Downloadable Product API Resource\n\nReturns downloadable link purchases belonging to the authenticated customer.\nThis is a read-only, customer-scoped resource.", "properties": { "id": { "readOnly": true, "type": "integer" }, "productName": { "type": [ "string", "null" ] }, "name": { "type": [ "string", "null" ] }, "url": { "type": [ "string", "null" ] }, "file": { "type": [ "string", "null" ] }, "fileName": { "type": [ "string", "null" ] }, "type": { "type": "string" }, "downloadBought": { "type": "integer" }, "downloadUsed": { "type": "integer" }, "status": { "type": [ "string", "null" ] }, "downloadCanceled": { "type": "integer" }, "createdAt": { "readOnly": true, "type": [ "string", "null" ], "format": "date-time" }, "updatedAt": { "readOnly": true, "type": [ "string", "null" ], "format": "date-time" }, "remainingDownloads": { "readOnly": true, "type": "string" }, "downloadUrl": { "readOnly": true, "type": "string" }, "customer": { "readOnly": true, "description": "Customer who purchased the downloadable product", "type": "string", "format": "iri-reference", "example": "https://example.com/" }, "order": { "readOnly": true, "description": "Associated order", "type": "string", "format": "iri-reference", "example": "https://example.com/" } } }, "CustomerInvoice": { "type": "object", "description": "Customer Invoice API Resource\n\nReturns invoices belonging to authenticated customer's orders.\nRead-only, customer-scoped via order relationship.\nSupports PDF download via separate route.", "properties": { "id": { "type": "integer" }, "incrementId": { "type": [ "string", "null" ] }, "state": { "type": [ "string", "null" ] }, "emailSent": { "type": "boolean" }, "totalQty": { "type": [ "integer", "null" ] }, "baseCurrencyCode": { "type": [ "string", "null" ] }, "channelCurrencyCode": { "type": [ "string", "null" ] }, "orderCurrencyCode": { "type": [ "string", "null" ] }, "subTotal": { "type": [ "number", "null" ] }, "baseSubTotal": { "type": [ "number", "null" ] }, "grandTotal": { "type": [ "number", "null" ] }, "baseGrandTotal": { "type": [ "number", "null" ] }, "shippingAmount": { "type": [ "number", "null" ] }, "baseShippingAmount": { "type": [ "number", "null" ] }, "taxAmount": { "type": [ "number", "null" ] }, "baseTaxAmount": { "type": [ "number", "null" ] }, "discountAmount": { "type": [ "number", "null" ] }, "baseDiscountAmount": { "type": [ "number", "null" ] }, "shippingTaxAmount": { "type": "number" }, "baseShippingTaxAmount": { "type": "number" }, "subTotalInclTax": { "type": "number" }, "baseSubTotalInclTax": { "type": "number" }, "shippingAmountInclTax": { "type": "number" }, "baseShippingAmountInclTax": { "type": "number" }, "transactionId": { "type": [ "string", "null" ] }, "reminders": { "type": "integer" }, "nextReminderAt": { "type": [ "string", "null" ], "format": "date-time" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time" }, "downloadUrl": { "type": "string" }, "items": { "type": "array", "items": { "type": "string", "format": "iri-reference", "example": "https://example.com/" } }, "addresses": { "type": "array", "items": { "type": "string", "format": "iri-reference", "example": "https://example.com/" } } } }, "CustomerInvoice.html": { "type": "object", "description": "Customer Invoice API Resource\n\nReturns invoices belonging to authenticated customer's orders.\nRead-only, customer-scoped via order relationship.\nSupports PDF download via separate route.", "properties": { "id": { "type": "integer" }, "incrementId": { "type": [ "string", "null" ] }, "state": { "type": [ "string", "null" ] }, "emailSent": { "type": "boolean" }, "totalQty": { "type": [ "integer", "null" ] }, "baseCurrencyCode": { "type": [ "string", "null" ] }, "channelCurrencyCode": { "type": [ "string", "null" ] }, "orderCurrencyCode": { "type": [ "string", "null" ] }, "subTotal": { "type": [ "number", "null" ] }, "baseSubTotal": { "type": [ "number", "null" ] }, "grandTotal": { "type": [ "number", "null" ] }, "baseGrandTotal": { "type": [ "number", "null" ] }, "shippingAmount": { "type": [ "number", "null" ] }, "baseShippingAmount": { "type": [ "number", "null" ] }, "taxAmount": { "type": [ "number", "null" ] }, "baseTaxAmount": { "type": [ "number", "null" ] }, "discountAmount": { "type": [ "number", "null" ] }, "baseDiscountAmount": { "type": [ "number", "null" ] }, "shippingTaxAmount": { "type": "number" }, "baseShippingTaxAmount": { "type": "number" }, "subTotalInclTax": { "type": "number" }, "baseSubTotalInclTax": { "type": "number" }, "shippingAmountInclTax": { "type": "number" }, "baseShippingAmountInclTax": { "type": "number" }, "transactionId": { "type": [ "string", "null" ] }, "reminders": { "type": "integer" }, "nextReminderAt": { "type": [ "string", "null" ], "format": "date-time" }, "createdAt": { "type": [ "string", "null" ], "format": "date-time" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time" }, "downloadUrl": { "type": "string" }, "items": { "type": "array", "items": { "type": "string", "format": "iri-reference", "example": "https://example.com/" } }, "addresses": { "type": "array", "items": { "type": "string", "format": "iri-reference", "example": "https://example.com/" } } } }, "CustomerOrder.CustomerOrderDetailDto": { "type": "object", "description": "Customer Order API Resource\n\nStandalone model pointing to the `orders` table with explicit field casts\nand hand-picked relationships. Follows the same pattern as CustomerInvoice\nto avoid inheriting unwanted relationships from the base Order model\n(morphTo fields, proxy relationships) that can break API Platform serialization.\n\nThis is a read-only, customer-scoped resource.", "properties": { "id": { "type": [ "integer", "null" ] }, "incrementId": { "type": [ "string", "null" ] }, "status": { "type": [ "string", "null" ] }, "channelName": { "type": [ "string", "null" ] }, "isGuest": { "type": [ "boolean", "null" ] }, "customerEmail": { "type": [ "string", "null" ] }, "customerFirstName": { "type": [ "string", "null" ] }, "customerLastName": { "type": [ "string", "null" ] }, "customerFullName": { "type": [ "string", "null" ] }, "shippingMethod": { "type": [ "string", "null" ] }, "shippingTitle": { "type": [ "string", "null" ] }, "shippingDescription": { "type": [ "string", "null" ] }, "couponCode": { "type": [ "string", "null" ] }, "isGift": { "type": [ "boolean", "null" ] }, "totalItemCount": { "type": [ "integer", "null" ] }, "totalQtyOrdered": { "type": [ "integer", "null" ] }, "baseCurrencyCode": { "type": [ "string", "null" ] }, "channelCurrencyCode": { "type": [ "string", "null" ] }, "orderCurrencyCode": { "type": [ "string", "null" ] }, "grandTotal": { "type": [ "number", "null" ] }, "baseGrandTotal": { "type": [ "number", "null" ] }, "grandTotalInvoiced": { "type": [ "number", "null" ] }, "baseGrandTotalInvoiced": { "type": [ "number", "null" ] }, "grandTotalRefunded": { "type": [ "number", "null" ] }, "baseGrandTotalRefunded": { "type": [ "number", "null" ] }, "subTotal": { "type": [ "number", "null" ] }, "baseSubTotal": { "type": [ "number", "null" ] }, "subTotalInvoiced": { "type": [ "number", "null" ] }, "baseSubTotalInvoiced": { "type": [ "number", "null" ] }, "subTotalRefunded": { "type": [ "number", "null" ] }, "baseSubTotalRefunded": { "type": [ "number", "null" ] }, "discountPercent": { "type": [ "number", "null" ] }, "discountAmount": { "type": [ "number", "null" ] }, "baseDiscountAmount": { "type": [ "number", "null" ] }, "discountInvoiced": { "type": [ "number", "null" ] }, "baseDiscountInvoiced": { "type": [ "number", "null" ] }, "discountRefunded": { "type": [ "number", "null" ] }, "baseDiscountRefunded": { "type": [ "number", "null" ] }, "taxAmount": { "type": [ "number", "null" ] }, "baseTaxAmount": { "type": [ "number", "null" ] }, "taxAmountInvoiced": { "type": [ "number", "null" ] }, "baseTaxAmountInvoiced": { "type": [ "number", "null" ] }, "taxAmountRefunded": { "type": [ "number", "null" ] }, "baseTaxAmountRefunded": { "type": [ "number", "null" ] }, "shippingAmount": { "type": [ "number", "null" ] }, "baseShippingAmount": { "type": [ "number", "null" ] }, "shippingInvoiced": { "type": [ "number", "null" ] }, "baseShippingInvoiced": { "type": [ "number", "null" ] }, "shippingRefunded": { "type": [ "number", "null" ] }, "baseShippingRefunded": { "type": [ "number", "null" ] }, "shippingDiscountAmount": { "type": [ "number", "null" ] }, "baseShippingDiscountAmount": { "type": [ "number", "null" ] }, "shippingTaxAmount": { "type": [ "number", "null" ] }, "baseShippingTaxAmount": { "type": [ "number", "null" ] }, "shippingTaxRefunded": { "type": [ "number", "null" ] }, "baseShippingTaxRefunded": { "type": [ "number", "null" ] }, "subTotalInclTax": { "type": [ "number", "null" ] }, "baseSubTotalInclTax": { "type": [ "number", "null" ] }, "shippingAmountInclTax": { "type": [ "number", "null" ] }, "baseShippingAmountInclTax": { "type": [ "number", "null" ] }, "customerId": { "type": [ "integer", "null" ] }, "channelId": { "type": [ "integer", "null" ] }, "cartId": { "type": [ "integer", "null" ] }, "appliedCartRuleIds": { "type": [ "string", "null" ] }, "createdAt": { "type": [ "string", "null" ] }, "updatedAt": { "type": [ "string", "null" ] }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/OrderItemDto" } }, "addresses": { "type": "array", "items": { "$ref": "#/components/schemas/OrderAddressDto" } }, "payment": { "anyOf": [ { "$ref": "#/components/schemas/OrderPaymentDto" }, { "type": "null" } ] }, "shipments": { "type": "array", "items": { "$ref": "#/components/schemas/OrderShipmentDto" } }, "hasNonCancelableBooking": [] } }, "CustomerOrder.CustomerOrderDetailDto.html": { "type": "object", "description": "Customer Order API Resource\n\nStandalone model pointing to the `orders` table with explicit field casts\nand hand-picked relationships. Follows the same pattern as CustomerInvoice\nto avoid inheriting unwanted relationships from the base Order model\n(morphTo fields, proxy relationships) that can break API Platform serialization.\n\nThis is a read-only, customer-scoped resource.", "properties": { "id": { "type": [ "integer", "null" ] }, "incrementId": { "type": [ "string", "null" ] }, "status": { "type": [ "string", "null" ] }, "channelName": { "type": [ "string", "null" ] }, "isGuest": { "type": [ "boolean", "null" ] }, "customerEmail": { "type": [ "string", "null" ] }, "customerFirstName": { "type": [ "string", "null" ] }, "customerLastName": { "type": [ "string", "null" ] }, "customerFullName": { "type": [ "string", "null" ] }, "shippingMethod": { "type": [ "string", "null" ] }, "shippingTitle": { "type": [ "string", "null" ] }, "shippingDescription": { "type": [ "string", "null" ] }, "couponCode": { "type": [ "string", "null" ] }, "isGift": { "type": [ "boolean", "null" ] }, "totalItemCount": { "type": [ "integer", "null" ] }, "totalQtyOrdered": { "type": [ "integer", "null" ] }, "baseCurrencyCode": { "type": [ "string", "null" ] }, "channelCurrencyCode": { "type": [ "string", "null" ] }, "orderCurrencyCode": { "type": [ "string", "null" ] }, "grandTotal": { "type": [ "number", "null" ] }, "baseGrandTotal": { "type": [ "number", "null" ] }, "grandTotalInvoiced": { "type": [ "number", "null" ] }, "baseGrandTotalInvoiced": { "type": [ "number", "null" ] }, "grandTotalRefunded": { "type": [ "number", "null" ] }, "baseGrandTotalRefunded": { "type": [ "number", "null" ] }, "subTotal": { "type": [ "number", "null" ] }, "baseSubTotal": { "type": [ "number", "null" ] }, "subTotalInvoiced": { "type": [ "number", "null" ] }, "baseSubTotalInvoiced": { "type": [ "number", "null" ] }, "subTotalRefunded": { "type": [ "number", "null" ] }, "baseSubTotalRefunded": { "type": [ "number", "null" ] }, "discountPercent": { "type": [ "number", "null" ] }, "discountAmount": { "type": [ "number", "null" ] }, "baseDiscountAmount": { "type": [ "number", "null" ] }, "discountInvoiced": { "type": [ "number", "null" ] }, "baseDiscountInvoiced": { "type": [ "number", "null" ] }, "discountRefunded": { "type": [ "number", "null" ] }, "baseDiscountRefunded": { "type": [ "number", "null" ] }, "taxAmount": { "type": [ "number", "null" ] }, "baseTaxAmount": { "type": [ "number", "null" ] }, "taxAmountInvoiced": { "type": [ "number", "null" ] }, "baseTaxAmountInvoiced": { "type": [ "number", "null" ] }, "taxAmountRefunded": { "type": [ "number", "null" ] }, "baseTaxAmountRefunded": { "type": [ "number", "null" ] }, "shippingAmount": { "type": [ "number", "null" ] }, "baseShippingAmount": { "type": [ "number", "null" ] }, "shippingInvoiced": { "type": [ "number", "null" ] }, "baseShippingInvoiced": { "type": [ "number", "null" ] }, "shippingRefunded": { "type": [ "number", "null" ] }, "baseShippingRefunded": { "type": [ "number", "null" ] }, "shippingDiscountAmount": { "type": [ "number", "null" ] }, "baseShippingDiscountAmount": { "type": [ "number", "null" ] }, "shippingTaxAmount": { "type": [ "number", "null" ] }, "baseShippingTaxAmount": { "type": [ "number", "null" ] }, "shippingTaxRefunded": { "type": [ "number", "null" ] }, "baseShippingTaxRefunded": { "type": [ "number", "null" ] }, "subTotalInclTax": { "type": [ "number", "null" ] }, "baseSubTotalInclTax": { "type": [ "number", "null" ] }, "shippingAmountInclTax": { "type": [ "number", "null" ] }, "baseShippingAmountInclTax": { "type": [ "number", "null" ] }, "customerId": { "type": [ "integer", "null" ] }, "channelId": { "type": [ "integer", "null" ] }, "cartId": { "type": [ "integer", "null" ] }, "appliedCartRuleIds": { "type": [ "string", "null" ] }, "createdAt": { "type": [ "string", "null" ] }, "updatedAt": { "type": [ "string", "null" ] }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/OrderItemDto.html" } }, "addresses": { "type": "array", "items": { "$ref": "#/components/schemas/OrderAddressDto.html" } }, "payment": { "anyOf": [ { "$ref": "#/components/schemas/OrderPaymentDto.html" }, { "type": "null" } ] }, "shipments": { "type": "array", "items": { "$ref": "#/components/schemas/OrderShipmentDto.html" } }, "hasNonCancelableBooking": [] } }, "CustomerOrder.CustomerOrderListDto": { "type": "object", "description": "Customer Order API Resource\n\nStandalone model pointing to the `orders` table with explicit field casts\nand hand-picked relationships. Follows the same pattern as CustomerInvoice\nto avoid inheriting unwanted relationships from the base Order model\n(morphTo fields, proxy relationships) that can break API Platform serialization.\n\nThis is a read-only, customer-scoped resource.", "properties": { "id": { "type": [ "integer", "null" ] }, "incrementId": { "type": [ "string", "null" ] }, "status": { "type": [ "string", "null" ] }, "channelName": { "type": [ "string", "null" ] }, "customerEmail": { "type": [ "string", "null" ] }, "customerFirstName": { "type": [ "string", "null" ] }, "customerLastName": { "type": [ "string", "null" ] }, "shippingMethod": { "type": [ "string", "null" ] }, "shippingTitle": { "type": [ "string", "null" ] }, "couponCode": { "type": [ "string", "null" ] }, "totalItemCount": { "type": [ "integer", "null" ] }, "totalQtyOrdered": { "type": [ "integer", "null" ] }, "grandTotal": { "type": [ "number", "null" ] }, "baseGrandTotal": { "type": [ "number", "null" ] }, "subTotal": { "type": [ "number", "null" ] }, "baseSubTotal": { "type": [ "number", "null" ] }, "taxAmount": { "type": [ "number", "null" ] }, "shippingAmount": { "type": [ "number", "null" ] }, "discountAmount": { "type": [ "number", "null" ] }, "baseCurrencyCode": { "type": [ "string", "null" ] }, "orderCurrencyCode": { "type": [ "string", "null" ] }, "createdAt": { "type": [ "string", "null" ] }, "updatedAt": { "type": [ "string", "null" ] } } }, "CustomerOrder.CustomerOrderListDto.html": { "type": "object", "description": "Customer Order API Resource\n\nStandalone model pointing to the `orders` table with explicit field casts\nand hand-picked relationships. Follows the same pattern as CustomerInvoice\nto avoid inheriting unwanted relationships from the base Order model\n(morphTo fields, proxy relationships) that can break API Platform serialization.\n\nThis is a read-only, customer-scoped resource.", "properties": { "id": { "type": [ "integer", "null" ] }, "incrementId": { "type": [ "string", "null" ] }, "status": { "type": [ "string", "null" ] }, "channelName": { "type": [ "string", "null" ] }, "customerEmail": { "type": [ "string", "null" ] }, "customerFirstName": { "type": [ "string", "null" ] }, "customerLastName": { "type": [ "string", "null" ] }, "shippingMethod": { "type": [ "string", "null" ] }, "shippingTitle": { "type": [ "string", "null" ] }, "couponCode": { "type": [ "string", "null" ] }, "totalItemCount": { "type": [ "integer", "null" ] }, "totalQtyOrdered": { "type": [ "integer", "null" ] }, "grandTotal": { "type": [ "number", "null" ] }, "baseGrandTotal": { "type": [ "number", "null" ] }, "subTotal": { "type": [ "number", "null" ] }, "baseSubTotal": { "type": [ "number", "null" ] }, "taxAmount": { "type": [ "number", "null" ] }, "shippingAmount": { "type": [ "number", "null" ] }, "discountAmount": { "type": [ "number", "null" ] }, "baseCurrencyCode": { "type": [ "string", "null" ] }, "orderCurrencyCode": { "type": [ "string", "null" ] }, "createdAt": { "type": [ "string", "null" ] }, "updatedAt": { "type": [ "string", "null" ] } } }, "CustomerOrderShipment": { "type": "object", "description": "Customer Order Shipment API Resource\n\nStandalone API resource for shipments belonging to authenticated customer's orders.\nProvides shipment details including tracking numbers, items, addresses, and payment info.\nCustomer-scoped via order relationship — customers can only access their own shipments.\n\nRelationships:\n- order: The parent order\n- items: Shipment line items\n- shippingAddress: Destination address for the shipment\n- billingAddress: Billing address from the order", "properties": { "id": { "readOnly": true, "type": "integer" }, "status": { "type": [ "string", "null" ] }, "totalQty": { "type": [ "integer", "null" ] }, "totalWeight": { "type": [ "number", "null" ] }, "carrierCode": { "type": [ "string", "null" ] }, "carrierTitle": { "type": [ "string", "null" ] }, "trackNumber": { "type": [ "string", "null" ] }, "emailSent": { "type": "boolean" }, "customerId": { "type": [ "integer", "null" ] }, "customerType": { "type": [ "string", "null" ] }, "inventorySourceId": { "type": [ "integer", "null" ] }, "inventorySourceName": { "type": [ "string", "null" ] }, "createdAt": { "type": [ "string", "null" ], "format": "date-time" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time" }, "shippingNumber": { "type": "string" }, "items": { "readOnly": true, "type": "array", "items": { "type": "string", "format": "iri-reference", "example": "https://example.com/" } }, "shippingAddress": { "type": "string", "format": "iri-reference", "example": "https://example.com/" }, "billingAddress": { "type": "string", "format": "iri-reference", "example": "https://example.com/" } } }, "CustomerOrderShipment.html": { "type": "object", "description": "Customer Order Shipment API Resource\n\nStandalone API resource for shipments belonging to authenticated customer's orders.\nProvides shipment details including tracking numbers, items, addresses, and payment info.\nCustomer-scoped via order relationship — customers can only access their own shipments.\n\nRelationships:\n- order: The parent order\n- items: Shipment line items\n- shippingAddress: Destination address for the shipment\n- billingAddress: Billing address from the order", "properties": { "id": { "readOnly": true, "type": "integer" }, "status": { "type": [ "string", "null" ] }, "totalQty": { "type": [ "integer", "null" ] }, "totalWeight": { "type": [ "number", "null" ] }, "carrierCode": { "type": [ "string", "null" ] }, "carrierTitle": { "type": [ "string", "null" ] }, "trackNumber": { "type": [ "string", "null" ] }, "emailSent": { "type": "boolean" }, "customerId": { "type": [ "integer", "null" ] }, "customerType": { "type": [ "string", "null" ] }, "inventorySourceId": { "type": [ "integer", "null" ] }, "inventorySourceName": { "type": [ "string", "null" ] }, "createdAt": { "type": [ "string", "null" ], "format": "date-time" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time" }, "shippingNumber": { "type": "string" }, "items": { "readOnly": true, "type": "array", "items": { "type": "string", "format": "iri-reference", "example": "https://example.com/" } }, "shippingAddress": { "type": "string", "format": "iri-reference", "example": "https://example.com/" }, "billingAddress": { "type": "string", "format": "iri-reference", "example": "https://example.com/" } } }, "CustomerOrderShipmentItem": { "type": "object", "description": "Customer Order Shipment Item API Resource\n\nNested API resource for items in a customer's order shipment.\nContains product details and quantity shipped.", "properties": { "id": { "readOnly": true, "type": "integer" }, "name": { "readOnly": true, "type": [ "string", "null" ] }, "description": { "readOnly": true, "type": [ "string", "null" ] }, "sku": { "readOnly": true, "type": [ "string", "null" ] }, "qty": { "readOnly": true, "type": [ "integer", "null" ] }, "weight": { "readOnly": true, "type": [ "number", "null" ] }, "price": { "type": [ "number", "null" ] }, "basePrice": { "type": [ "number", "null" ] }, "total": { "type": [ "number", "null" ] }, "baseTotal": { "type": [ "number", "null" ] }, "priceInclTax": { "type": "number" }, "basePriceInclTax": { "type": "number" }, "productId": { "type": [ "string", "null" ] }, "productType": { "type": [ "string", "null" ] }, "additional": { "type": [ "array", "null" ], "items": [] }, "createdAt": { "type": [ "string", "null" ], "format": "date-time" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time" }, "shipment": { "type": "string", "format": "iri-reference", "example": "https://example.com/" } } }, "CustomerOrderShipmentItem.html": { "type": "object", "description": "Customer Order Shipment Item API Resource\n\nNested API resource for items in a customer's order shipment.\nContains product details and quantity shipped.", "properties": { "id": { "readOnly": true, "type": "integer" }, "name": { "readOnly": true, "type": [ "string", "null" ] }, "description": { "readOnly": true, "type": [ "string", "null" ] }, "sku": { "readOnly": true, "type": [ "string", "null" ] }, "qty": { "readOnly": true, "type": [ "integer", "null" ] }, "weight": { "readOnly": true, "type": [ "number", "null" ] }, "price": { "type": [ "number", "null" ] }, "basePrice": { "type": [ "number", "null" ] }, "total": { "type": [ "number", "null" ] }, "baseTotal": { "type": [ "number", "null" ] }, "priceInclTax": { "type": "number" }, "basePriceInclTax": { "type": "number" }, "productId": { "type": [ "string", "null" ] }, "productType": { "type": [ "string", "null" ] }, "additional": { "type": [ "array", "null" ], "items": [] }, "createdAt": { "type": [ "string", "null" ], "format": "date-time" }, "updatedAt": { "type": [ "string", "null" ], "format": "date-time" }, "shipment": { "type": "string", "format": "iri-reference", "example": "https://example.com/" } } }, "CustomerRefund.CustomerRefundDto": { "type": "object", "description": "Refund documents issued against the authenticated customer's orders, as shown on the\nstorefront order view's refunds tab. Read-only and scoped to the order's customer.", "properties": { "id": { "type": [ "integer", "null" ] }, "orderId": { "type": [ "integer", "null" ] }, "orderIncrementId": { "type": [ "string", "null" ] }, "incrementId": { "type": [ "string", "null" ] }, "state": { "type": [ "string", "null" ] }, "totalQty": { "type": [ "integer", "null" ] }, "baseCurrencyCode": { "type": [ "string", "null" ] }, "channelCurrencyCode": { "type": [ "string", "null" ] }, "orderCurrencyCode": { "type": [ "string", "null" ] }, "subTotal": { "type": [ "number", "null" ] }, "baseSubTotal": { "type": [ "number", "null" ] }, "subTotalInclTax": { "type": [ "number", "null" ] }, "baseSubTotalInclTax": { "type": [ "number", "null" ] }, "shippingAmount": { "type": [ "number", "null" ] }, "baseShippingAmount": { "type": [ "number", "null" ] }, "shippingAmountInclTax": { "type": [ "number", "null" ] }, "baseShippingAmountInclTax": { "type": [ "number", "null" ] }, "shippingTaxAmount": { "type": [ "number", "null" ] }, "baseShippingTaxAmount": { "type": [ "number", "null" ] }, "taxAmount": { "type": [ "number", "null" ] }, "baseTaxAmount": { "type": [ "number", "null" ] }, "discountPercent": { "type": [ "number", "null" ] }, "discountAmount": { "type": [ "number", "null" ] }, "baseDiscountAmount": { "type": [ "number", "null" ] }, "adjustmentRefund": { "type": [ "number", "null" ] }, "baseAdjustmentRefund": { "type": [ "number", "null" ] }, "adjustmentFee": { "type": [ "number", "null" ] }, "baseAdjustmentFee": { "type": [ "number", "null" ] }, "grandTotal": { "type": [ "number", "null" ] }, "baseGrandTotal": { "type": [ "number", "null" ] }, "formattedSubTotal": { "type": [ "string", "null" ] }, "formattedSubTotalInclTax": { "type": [ "string", "null" ] }, "formattedShippingAmount": { "type": [ "string", "null" ] }, "formattedShippingAmountInclTax": { "type": [ "string", "null" ] }, "formattedTaxAmount": { "type": [ "string", "null" ] }, "formattedDiscountAmount": { "type": [ "string", "null" ] }, "formattedAdjustmentRefund": { "type": [ "string", "null" ] }, "formattedAdjustmentFee": { "type": [ "string", "null" ] }, "formattedGrandTotal": { "type": [ "string", "null" ] }, "formattedBaseGrandTotal": { "type": [ "string", "null" ] }, "createdAt": { "type": [ "string", "null" ] }, "updatedAt": { "type": [ "string", "null" ] }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/RefundItemDto" } } } }, "CustomerRefund.CustomerRefundDto.html": { "type": "object", "description": "Refund documents issued against the authenticated customer's orders, as shown on the\nstorefront order view's refunds tab. Read-only and scoped to the order's customer.", "properties": { "id": { "type": [ "integer", "null" ] }, "orderId": { "type": [ "integer", "null" ] }, "orderIncrementId": { "type": [ "string", "null" ] }, "incrementId": { "type": [ "string", "null" ] }, "state": { "type": [ "string", "null" ] }, "totalQty": { "type": [ "integer", "null" ] }, "baseCurrencyCode": { "type": [ "string", "null" ] }, "channelCurrencyCode": { "type": [ "string", "null" ] }, "orderCurrencyCode": { "type": [ "string", "null" ] }, "subTotal": { "type": [ "number", "null" ] }, "baseSubTotal": { "type": [ "number", "null" ] }, "subTotalInclTax": { "type": [ "number", "null" ] }, "baseSubTotalInclTax": { "type": [ "number", "null" ] }, "shippingAmount": { "type": [ "number", "null" ] }, "baseShippingAmount": { "type": [ "number", "null" ] }, "shippingAmountInclTax": { "type": [ "number", "null" ] }, "baseShippingAmountInclTax": { "type": [ "number", "null" ] }, "shippingTaxAmount": { "type": [ "number", "null" ] }, "baseShippingTaxAmount": { "type": [ "number", "null" ] }, "taxAmount": { "type": [ "number", "null" ] }, "baseTaxAmount": { "type": [ "number", "null" ] }, "discountPercent": { "type": [ "number", "null" ] }, "discountAmount": { "type": [ "number", "null" ] }, "baseDiscountAmount": { "type": [ "number", "null" ] }, "adjustmentRefund": { "type": [ "number", "null" ] }, "baseAdjustmentRefund": { "type": [ "number", "null" ] }, "adjustmentFee": { "type": [ "number", "null" ] }, "baseAdjustmentFee": { "type": [ "number", "null" ] }, "grandTotal": { "type": [ "number", "null" ] }, "baseGrandTotal": { "type": [ "number", "null" ] }, "formattedSubTotal": { "type": [ "string", "null" ] }, "formattedSubTotalInclTax": { "type": [ "string", "null" ] }, "formattedShippingAmount": { "type": [ "string", "null" ] }, "formattedShippingAmountInclTax": { "type": [ "string", "null" ] }, "formattedTaxAmount": { "type": [ "string", "null" ] }, "formattedDiscountAmount": { "type": [ "string", "null" ] }, "formattedAdjustmentRefund": { "type": [ "string", "null" ] }, "formattedAdjustmentFee": { "type": [ "string", "null" ] }, "formattedGrandTotal": { "type": [ "string", "null" ] }, "formattedBaseGrandTotal": { "type": [ "string", "null" ] }, "createdAt": { "type": [ "string", "null" ] }, "updatedAt": { "type": [ "string", "null" ] }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/RefundItemDto.html" } } } }, "CustomerReturn": { "type": "object", "properties": { "id": { "type": [ "integer", "null" ] }, "orderId": { "type": [ "integer", "null" ] }, "orderIncrementId": { "type": [ "string", "null" ] }, "statusId": { "type": [ "integer", "null" ] }, "statusTitle": { "type": [ "string", "null" ] }, "statusColor": { "type": [ "string", "null" ] }, "packageCondition": { "type": [ "string", "null" ] }, "information": { "type": [ "string", "null" ] }, "canClose": { "type": [ "boolean", "null" ] }, "canReopen": { "type": [ "boolean", "null" ] }, "isExpired": { "type": [ "boolean", "null" ] }, "item": { "type": "object" }, "images": { "type": "array" }, "customAttributes": { "type": "array" }, "messagesCount": { "type": [ "integer", "null" ] }, "createdAt": { "type": [ "string", "null" ] }, "updatedAt": { "type": [ "string", "null" ] } } }, "CustomerReturn.html": { "type": "object", "properties": { "id": { "type": [ "integer", "null" ] }, "orderId": { "type": [ "integer", "null" ] }, "orderIncrementId": { "type": [ "string", "null" ] }, "statusId": { "type": [ "integer", "null" ] }, "statusTitle": { "type": [ "string", "null" ] }, "statusColor": { "type": [ "string", "null" ] }, "packageCondition": { "type": [ "string", "null" ] }, "information": { "type": [ "string", "null" ] }, "canClose": { "type": [ "boolean", "null" ] }, "canReopen": { "type": [ "boolean", "null" ] }, "isExpired": { "type": [ "boolean", "null" ] }, "item": { "type": "object" }, "images": { "type": "array" }, "customAttributes": { "type": "array" }, "messagesCount": { "type": [ "integer", "null" ] }, "createdAt": { "type": [ "string", "null" ] }, "updatedAt": { "type": [ "string", "null" ] } } }, "EstimateShipping.CartData-mutation": { "type": "object", "description": "EstimateShipping - GraphQL API Resource for Estimating Shipping Methods and Tax\n\nProvides mutation for estimating shipping methods and tax based on address.", "properties": { "id": { "type": [ "integer", "null" ] }, "cartToken": { "description": "Cart token for guest users", "type": [ "string", "null" ] }, "customerId": { "type": [ "integer", "null" ] }, "channelId": { "type": [ "integer", "null" ] }, "itemsCount": { "type": [ "integer", "null" ] }, "items": { "description": "Individual cart items", "type": "array", "items": { "$ref": "#/components/schemas/CartItemData-mutation" } }, "subtotal": { "description": "Subtotal before discounts and taxes", "type": [ "number", "null" ] }, "baseSubtotal": { "type": [ "number", "null" ] }, "discountAmount": { "description": "Total discount amount", "type": [ "number", "null" ] }, "baseDiscountAmount": { "type": [ "number", "null" ] }, "taxAmount": { "description": "Total tax amount", "type": [ "number", "null" ] }, "baseTaxAmount": { "type": [ "number", "null" ] }, "shippingAmount": { "description": "Shipping cost", "type": [ "number", "null" ] }, "baseShippingAmount": { "type": [ "number", "null" ] }, "grandTotal": { "description": "Grand total", "type": [ "number", "null" ] }, "baseGrandTotal": { "type": [ "number", "null" ] }, "formattedSubtotal": { "description": "Formatted subtotal price", "type": [ "string", "null" ] }, "formattedDiscountAmount": { "description": "Formatted discount amount", "type": [ "string", "null" ] }, "formattedTaxAmount": { "description": "Formatted tax amount", "type": [ "string", "null" ] }, "formattedShippingAmount": { "description": "Formatted shipping amount", "type": [ "string", "null" ] }, "formattedGrandTotal": { "description": "Formatted grand total price", "type": [ "string", "null" ] }, "couponCode": { "description": "Applied coupon code", "type": [ "string", "null" ] }, "miniCartOfferInfoEnabled": { "description": "Whether to show the mini cart offer: the mini cart is switched on and an offer text is set (Sales > Checkout > Mini Cart)", "type": [ "boolean", "null" ] }, "miniCartOfferInfo": { "description": "The mini cart offer text for the requested channel and locale (Sales > Checkout > Mini Cart > Offer Info)", "type": [ "string", "null" ] }, "shippingMethods": { "description": "Shipping methods available for the estimate address. Returned by estimate shipping only.", "type": [ "array", "null" ], "items": { "type": "object", "additionalProperties": { "anyOf": [ { "type": "number" }, { "type": "string" } ] } } }, "success": { "type": [ "boolean", "null" ] }, "message": { "type": [ "string", "null" ] }, "carts": { "type": [ "array", "null" ], "items": [] }, "sessionToken": { "description": "Unique session token for guest cart", "type": [ "string", "null" ] }, "isGuest": { "description": "Is this a guest cart", "type": "boolean" }, "itemsQty": { "description": "Total quantity of all items", "type": [ "integer", "null" ] }, "subTotalInclTax": { "description": "Subtotal including tax", "type": [ "number", "null" ] }, "baseSubTotalInclTax": { "description": "Base subtotal including tax", "type": [ "number", "null" ] }, "formattedSubTotalInclTax": { "description": "Formatted subtotal including tax", "type": [ "string", "null" ] }, "taxTotal": { "description": "Tax total", "type": [ "number", "null" ] }, "formattedTaxTotal": { "description": "Formatted tax total", "type": [ "string", "null" ] }, "shippingAmountInclTax": { "description": "Shipping amount including tax", "type": [ "number", "null" ] }, "baseShippingAmountInclTax": { "description": "Base shipping amount including tax", "type": [ "number", "null" ] }, "formattedShippingAmountInclTax": { "description": "Formatted shipping amount including tax", "type": [ "string", "null" ] }, "billingAddress": { "description": "Billing address", "type": [ "array", "null" ], "items": [] }, "shippingAddress": { "description": "Shipping address", "type": [ "array", "null" ], "items": [] }, "appliedTaxes": { "description": "Applied taxes", "type": [ "array", "null" ], "items": [] }, "haveStockableItems": { "description": "Has stockable items", "type": [ "boolean", "null" ] }, "paymentMethod": { "description": "Payment method code", "type": [ "string", "null" ] }, "paymentMethodTitle": { "description": "Payment method title", "type": [ "string", "null" ] }, "selectedShippingRate": { "readOnly": true, "description": "Selected shipping rate", "type": [ "string", "null" ] }, "selectedShippingRateTitle": { "readOnly": true, "description": "Selected shipping rate title", "type": [ "string", "null" ] }, "paymentRedirectUrl": { "description": "Payment redirect URL (if payment gateway redirect needed)", "type": [ "string", "null" ] }, "orderId": { "description": "Order ID after order creation", "type": [ "string", "null" ] }, "redirectUri": { "description": "Redirect URL for buy now checkout", "type": [ "string", "null" ] }, "redirect": { "description": "True when the selected payment method requires the shopper to be sent to a payment page before the order is created", "type": [ "boolean", "null" ] }, "redirectUrl": { "description": "Redirect URL for payment gateway", "type": [ "string", "null" ] }, "orderIncrementId": { "description": "Order ID after successful order creation", "type": [ "string", "null" ] } } }, "EstimateShipping.CartData.html-mutation": { "type": "object", "description": "EstimateShipping - GraphQL API Resource for Estimating Shipping Methods and Tax\n\nProvides mutation for estimating shipping methods and tax based on address.", "properties": { "id": { "type": [ "integer", "null" ] }, "cartToken": { "description": "Cart token for guest users", "type": [ "string", "null" ] }, "customerId": { "type": [ "integer", "null" ] }, "channelId": { "type": [ "integer", "null" ] }, "itemsCount": { "type": [ "integer", "null" ] }, "items": { "description": "Individual cart items", "type": "array", "items": { "$ref": "#/components/schemas/CartItemData.html-mutation" } }, "subtotal": { "description": "Subtotal before discounts and taxes", "type": [ "number", "null" ] }, "baseSubtotal": { "type": [ "number", "null" ] }, "discountAmount": { "description": "Total discount amount", "type": [ "number", "null" ] }, "baseDiscountAmount": { "type": [ "number", "null" ] }, "taxAmount": { "description": "Total tax amount", "type": [ "number", "null" ] }, "baseTaxAmount": { "type": [ "number", "null" ] }, "shippingAmount": { "description": "Shipping cost", "type": [ "number", "null" ] }, "baseShippingAmount": { "type": [ "number", "null" ] }, "grandTotal": { "description": "Grand total", "type": [ "number", "null" ] }, "baseGrandTotal": { "type": [ "number", "null" ] }, "formattedSubtotal": { "description": "Formatted subtotal price", "type": [ "string", "null" ] }, "formattedDiscountAmount": { "description": "Formatted discount amount", "type": [ "string", "null" ] }, "formattedTaxAmount": { "description": "Formatted tax amount", "type": [ "string", "null" ] }, "formattedShippingAmount": { "description": "Formatted shipping amount", "type": [ "string", "null" ] }, "formattedGrandTotal": { "description": "Formatted grand total price", "type": [ "string", "null" ] }, "couponCode": { "description": "Applied coupon code", "type": [ "string", "null" ] }, "miniCartOfferInfoEnabled": { "description": "Whether to show the mini cart offer: the mini cart is switched on and an offer text is set (Sales > Checkout > Mini Cart)", "type": [ "boolean", "null" ] }, "miniCartOfferInfo": { "description": "The mini cart offer text for the requested channel and locale (Sales > Checkout > Mini Cart > Offer Info)", "type": [ "string", "null" ] }, "shippingMethods": { "description": "Shipping methods available for the estimate address. Returned by estimate shipping only.", "type": [ "array", "null" ], "items": { "type": "object", "additionalProperties": { "anyOf": [ { "type": "number" }, { "type": "string" } ] } } }, "success": { "type": [ "boolean", "null" ] }, "message": { "type": [ "string", "null" ] }, "carts": { "type": [ "array", "null" ], "items": [] }, "sessionToken": { "description": "Unique session token for guest cart", "type": [ "string", "null" ] }, "isGuest": { "description": "Is this a guest cart", "type": "boolean" }, "itemsQty": { "description": "Total quantity of all items", "type": [ "integer", "null" ] }, "subTotalInclTax": { "description": "Subtotal including tax", "type": [ "number", "null" ] }, "baseSubTotalInclTax": { "description": "Base subtotal including tax", "type": [ "number", "null" ] }, "formattedSubTotalInclTax": { "description": "Formatted subtotal including tax", "type": [ "string", "null" ] }, "taxTotal": { "description": "Tax total", "type": [ "number", "null" ] }, "formattedTaxTotal": { "description": "Formatted tax total", "type": [ "string", "null" ] }, "shippingAmountInclTax": { "description": "Shipping amount including tax", "type": [ "number", "null" ] }, "baseShippingAmountInclTax": { "description": "Base shipping amount including tax", "type": [ "number", "null" ] }, "formattedShippingAmountInclTax": { "description": "Formatted shipping amount including tax", "type": [ "string", "null" ] }, "billingAddress": { "description": "Billing address", "type": [ "array", "null" ], "items": [] }, "shippingAddress": { "description": "Shipping address", "type": [ "array", "null" ], "items": [] }, "appliedTaxes": { "description": "Applied taxes", "type": [ "array", "null" ], "items": [] }, "haveStockableItems": { "description": "Has stockable items", "type": [ "boolean", "null" ] }, "paymentMethod": { "description": "Payment method code", "type": [ "string", "null" ] }, "paymentMethodTitle": { "description": "Payment method title", "type": [ "string", "null" ] }, "selectedShippingRate": { "readOnly": true, "description": "Selected shipping rate", "type": [ "string", "null" ] }, "selectedShippingRateTitle": { "readOnly": true, "description": "Selected shipping rate title", "type": [ "string", "null" ] }, "paymentRedirectUrl": { "description": "Payment redirect URL (if payment gateway redirect needed)", "type": [ "string", "null" ] }, "orderId": { "description": "Order ID after order creation", "type": [ "string", "null" ] }, "redirectUri": { "description": "Redirect URL for buy now checkout", "type": [ "string", "null" ] }, "redirect": { "description": "True when the selected payment method requires the shopper to be sent to a payment page before the order is created", "type": [ "boolean", "null" ] }, "redirectUrl": { "description": "Redirect URL for payment gateway", "type": [ "string", "null" ] }, "orderIncrementId": { "description": "Order ID after successful order creation", "type": [ "string", "null" ] } } }, "MoveToWishlist.CartData-mutation": { "type": "object", "description": "MoveToWishlist - GraphQL API Resource for Moving Items to Wishlist\n\nProvides mutation for moving multiple items from cart to wishlist.", "properties": { "id": { "type": [ "integer", "null" ] }, "cartToken": { "description": "Cart token for guest users", "type": [ "string", "null" ] }, "customerId": { "type": [ "integer", "null" ] }, "channelId": { "type": [ "integer", "null" ] }, "itemsCount": { "type": [ "integer", "null" ] }, "items": { "description": "Individual cart items", "type": "array", "items": { "$ref": "#/components/schemas/CartItemData-mutation" } }, "subtotal": { "description": "Subtotal before discounts and taxes", "type": [ "number", "null" ] }, "baseSubtotal": { "type": [ "number", "null" ] }, "discountAmount": { "description": "Total discount amount", "type": [ "number", "null" ] }, "baseDiscountAmount": { "type": [ "number", "null" ] }, "taxAmount": { "description": "Total tax amount", "type": [ "number", "null" ] }, "baseTaxAmount": { "type": [ "number", "null" ] }, "shippingAmount": { "description": "Shipping cost", "type": [ "number", "null" ] }, "baseShippingAmount": { "type": [ "number", "null" ] }, "grandTotal": { "description": "Grand total", "type": [ "number", "null" ] }, "baseGrandTotal": { "type": [ "number", "null" ] }, "formattedSubtotal": { "description": "Formatted subtotal price", "type": [ "string", "null" ] }, "formattedDiscountAmount": { "description": "Formatted discount amount", "type": [ "string", "null" ] }, "formattedTaxAmount": { "description": "Formatted tax amount", "type": [ "string", "null" ] }, "formattedShippingAmount": { "description": "Formatted shipping amount", "type": [ "string", "null" ] }, "formattedGrandTotal": { "description": "Formatted grand total price", "type": [ "string", "null" ] }, "couponCode": { "description": "Applied coupon code", "type": [ "string", "null" ] }, "miniCartOfferInfoEnabled": { "description": "Whether to show the mini cart offer: the mini cart is switched on and an offer text is set (Sales > Checkout > Mini Cart)", "type": [ "boolean", "null" ] }, "miniCartOfferInfo": { "description": "The mini cart offer text for the requested channel and locale (Sales > Checkout > Mini Cart > Offer Info)", "type": [ "string", "null" ] }, "shippingMethods": { "description": "Shipping methods available for the estimate address. Returned by estimate shipping only.", "type": [ "array", "null" ], "items": { "type": "object", "additionalProperties": { "anyOf": [ { "type": "number" }, { "type": "string" } ] } } }, "success": { "type": [ "boolean", "null" ] }, "message": { "type": [ "string", "null" ] }, "carts": { "type": [ "array", "null" ], "items": [] }, "sessionToken": { "description": "Unique session token for guest cart", "type": [ "string", "null" ] }, "isGuest": { "description": "Is this a guest cart", "type": "boolean" }, "itemsQty": { "description": "Total quantity of all items", "type": [ "integer", "null" ] }, "subTotalInclTax": { "description": "Subtotal including tax", "type": [ "number", "null" ] }, "baseSubTotalInclTax": { "description": "Base subtotal including tax", "type": [ "number", "null" ] }, "formattedSubTotalInclTax": { "description": "Formatted subtotal including tax", "type": [ "string", "null" ] }, "taxTotal": { "description": "Tax total", "type": [ "number", "null" ] }, "formattedTaxTotal": { "description": "Formatted tax total", "type": [ "string", "null" ] }, "shippingAmountInclTax": { "description": "Shipping amount including tax", "type": [ "number", "null" ] }, "baseShippingAmountInclTax": { "description": "Base shipping amount including tax", "type": [ "number", "null" ] }, "formattedShippingAmountInclTax": { "description": "Formatted shipping amount including tax", "type": [ "string", "null" ] }, "billingAddress": { "description": "Billing address", "type": [ "array", "null" ], "items": [] }, "shippingAddress": { "description": "Shipping address", "type": [ "array", "null" ], "items": [] }, "appliedTaxes": { "description": "Applied taxes", "type": [ "array", "null" ], "items": [] }, "haveStockableItems": { "description": "Has stockable items", "type": [ "boolean", "null" ] }, "paymentMethod": { "description": "Payment method code", "type": [ "string", "null" ] }, "paymentMethodTitle": { "description": "Payment method title", "type": [ "string", "null" ] }, "selectedShippingRate": { "readOnly": true, "description": "Selected shipping rate", "type": [ "string", "null" ] }, "selectedShippingRateTitle": { "readOnly": true, "description": "Selected shipping rate title", "type": [ "string", "null" ] }, "paymentRedirectUrl": { "description": "Payment redirect URL (if payment gateway redirect needed)", "type": [ "string", "null" ] }, "orderId": { "description": "Order ID after order creation", "type": [ "string", "null" ] }, "redirectUri": { "description": "Redirect URL for buy now checkout", "type": [ "string", "null" ] }, "redirect": { "description": "True when the selected payment method requires the shopper to be sent to a payment page before the order is created", "type": [ "boolean", "null" ] }, "redirectUrl": { "description": "Redirect URL for payment gateway", "type": [ "string", "null" ] }, "orderIncrementId": { "description": "Order ID after successful order creation", "type": [ "string", "null" ] } } }, "MoveToWishlist.CartData.html-mutation": { "type": "object", "description": "MoveToWishlist - GraphQL API Resource for Moving Items to Wishlist\n\nProvides mutation for moving multiple items from cart to wishlist.", "properties": { "id": { "type": [ "integer", "null" ] }, "cartToken": { "description": "Cart token for guest users", "type": [ "string", "null" ] }, "customerId": { "type": [ "integer", "null" ] }, "channelId": { "type": [ "integer", "null" ] }, "itemsCount": { "type": [ "integer", "null" ] }, "items": { "description": "Individual cart items", "type": "array", "items": { "$ref": "#/components/schemas/CartItemData.html-mutation" } }, "subtotal": { "description": "Subtotal before discounts and taxes", "type": [ "number", "null" ] }, "baseSubtotal": { "type": [ "number", "null" ] }, "discountAmount": { "description": "Total discount amount", "type": [ "number", "null" ] }, "baseDiscountAmount": { "type": [ "number", "null" ] }, "taxAmount": { "description": "Total tax amount", "type": [ "number", "null" ] }, "baseTaxAmount": { "type": [ "number", "null" ] }, "shippingAmount": { "description": "Shipping cost", "type": [ "number", "null" ] }, "baseShippingAmount": { "type": [ "number", "null" ] }, "grandTotal": { "description": "Grand total", "type": [ "number", "null" ] }, "baseGrandTotal": { "type": [ "number", "null" ] }, "formattedSubtotal": { "description": "Formatted subtotal price", "type": [ "string", "null" ] }, "formattedDiscountAmount": { "description": "Formatted discount amount", "type": [ "string", "null" ] }, "formattedTaxAmount": { "description": "Formatted tax amount", "type": [ "string", "null" ] }, "formattedShippingAmount": { "description": "Formatted shipping amount", "type": [ "string", "null" ] }, "formattedGrandTotal": { "description": "Formatted grand total price", "type": [ "string", "null" ] }, "couponCode": { "description": "Applied coupon code", "type": [ "string", "null" ] }, "miniCartOfferInfoEnabled": { "description": "Whether to show the mini cart offer: the mini cart is switched on and an offer text is set (Sales > Checkout > Mini Cart)", "type": [ "boolean", "null" ] }, "miniCartOfferInfo": { "description": "The mini cart offer text for the requested channel and locale (Sales > Checkout > Mini Cart > Offer Info)", "type": [ "string", "null" ] }, "shippingMethods": { "description": "Shipping methods available for the estimate address. Returned by estimate shipping only.", "type": [ "array", "null" ], "items": { "type": "object", "additionalProperties": { "anyOf": [ { "type": "number" }, { "type": "string" } ] } } }, "success": { "type": [ "boolean", "null" ] }, "message": { "type": [ "string", "null" ] }, "carts": { "type": [ "array", "null" ], "items": [] }, "sessionToken": { "description": "Unique session token for guest cart", "type": [ "string", "null" ] }, "isGuest": { "description": "Is this a guest cart", "type": "boolean" }, "itemsQty": { "description": "Total quantity of all items", "type": [ "integer", "null" ] }, "subTotalInclTax": { "description": "Subtotal including tax", "type": [ "number", "null" ] }, "baseSubTotalInclTax": { "description": "Base subtotal including tax", "type": [ "number", "null" ] }, "formattedSubTotalInclTax": { "description": "Formatted subtotal including tax", "type": [ "string", "null" ] }, "taxTotal": { "description": "Tax total", "type": [ "number", "null" ] }, "formattedTaxTotal": { "description": "Formatted tax total", "type": [ "string", "null" ] }, "shippingAmountInclTax": { "description": "Shipping amount including tax", "type": [ "number", "null" ] }, "baseShippingAmountInclTax": { "description": "Base shipping amount including tax", "type": [ "number", "null" ] }, "formattedShippingAmountInclTax": { "description": "Formatted shipping amount including tax", "type": [ "string", "null" ] }, "billingAddress": { "description": "Billing address", "type": [ "array", "null" ], "items": [] }, "shippingAddress": { "description": "Shipping address", "type": [ "array", "null" ], "items": [] }, "appliedTaxes": { "description": "Applied taxes", "type": [ "array", "null" ], "items": [] }, "haveStockableItems": { "description": "Has stockable items", "type": [ "boolean", "null" ] }, "paymentMethod": { "description": "Payment method code", "type": [ "string", "null" ] }, "paymentMethodTitle": { "description": "Payment method title", "type": [ "string", "null" ] }, "selectedShippingRate": { "readOnly": true, "description": "Selected shipping rate", "type": [ "string", "null" ] }, "selectedShippingRateTitle": { "readOnly": true, "description": "Selected shipping rate title", "type": [ "string", "null" ] }, "paymentRedirectUrl": { "description": "Payment redirect URL (if payment gateway redirect needed)", "type": [ "string", "null" ] }, "orderId": { "description": "Order ID after order creation", "type": [ "string", "null" ] }, "redirectUri": { "description": "Redirect URL for buy now checkout", "type": [ "string", "null" ] }, "redirect": { "description": "True when the selected payment method requires the shopper to be sent to a payment page before the order is created", "type": [ "boolean", "null" ] }, "redirectUrl": { "description": "Redirect URL for payment gateway", "type": [ "string", "null" ] }, "orderIncrementId": { "description": "Order ID after successful order creation", "type": [ "string", "null" ] } } }, "OrderAddressDto": { "type": "object", "properties": { "id": { "type": [ "integer", "null" ] }, "addressType": { "type": [ "string", "null" ] }, "firstName": { "type": [ "string", "null" ] }, "lastName": { "type": [ "string", "null" ] }, "gender": { "type": [ "string", "null" ] }, "companyName": { "type": [ "string", "null" ] }, "address": { "type": [ "string", "null" ] }, "city": { "type": [ "string", "null" ] }, "state": { "type": [ "string", "null" ] }, "country": { "type": [ "string", "null" ] }, "postcode": { "type": [ "string", "null" ] }, "email": { "type": [ "string", "null" ] }, "phone": { "type": [ "string", "null" ] }, "vatId": { "type": [ "string", "null" ] } } }, "OrderAddressDto.html": { "type": "object", "properties": { "id": { "type": [ "integer", "null" ] }, "addressType": { "type": [ "string", "null" ] }, "firstName": { "type": [ "string", "null" ] }, "lastName": { "type": [ "string", "null" ] }, "gender": { "type": [ "string", "null" ] }, "companyName": { "type": [ "string", "null" ] }, "address": { "type": [ "string", "null" ] }, "city": { "type": [ "string", "null" ] }, "state": { "type": [ "string", "null" ] }, "country": { "type": [ "string", "null" ] }, "postcode": { "type": [ "string", "null" ] }, "email": { "type": [ "string", "null" ] }, "phone": { "type": [ "string", "null" ] }, "vatId": { "type": [ "string", "null" ] } } }, "OrderItemDto": { "type": "object", "properties": { "id": { "type": [ "integer", "null" ] }, "sku": { "type": [ "string", "null" ] }, "type": { "type": [ "string", "null" ] }, "name": { "type": [ "string", "null" ] }, "productId": { "type": [ "integer", "null" ] }, "productType": { "type": [ "string", "null" ] }, "qtyOrdered": { "type": [ "integer", "null" ] }, "qtyShipped": { "type": [ "integer", "null" ] }, "qtyInvoiced": { "type": [ "integer", "null" ] }, "qtyCanceled": { "type": [ "integer", "null" ] }, "qtyRefunded": { "type": [ "integer", "null" ] }, "price": { "type": [ "number", "null" ] }, "basePrice": { "type": [ "number", "null" ] }, "total": { "type": [ "number", "null" ] }, "baseTotal": { "type": [ "number", "null" ] }, "discountPercent": { "type": [ "number", "null" ] }, "discountAmount": { "type": [ "number", "null" ] }, "taxPercent": { "type": [ "number", "null" ] }, "taxAmount": { "type": [ "number", "null" ] }, "priceInclTax": { "type": [ "number", "null" ] }, "totalInclTax": { "type": [ "number", "null" ] } } }, "OrderItemDto.html": { "type": "object", "properties": { "id": { "type": [ "integer", "null" ] }, "sku": { "type": [ "string", "null" ] }, "type": { "type": [ "string", "null" ] }, "name": { "type": [ "string", "null" ] }, "productId": { "type": [ "integer", "null" ] }, "productType": { "type": [ "string", "null" ] }, "qtyOrdered": { "type": [ "integer", "null" ] }, "qtyShipped": { "type": [ "integer", "null" ] }, "qtyInvoiced": { "type": [ "integer", "null" ] }, "qtyCanceled": { "type": [ "integer", "null" ] }, "qtyRefunded": { "type": [ "integer", "null" ] }, "price": { "type": [ "number", "null" ] }, "basePrice": { "type": [ "number", "null" ] }, "total": { "type": [ "number", "null" ] }, "baseTotal": { "type": [ "number", "null" ] }, "discountPercent": { "type": [ "number", "null" ] }, "discountAmount": { "type": [ "number", "null" ] }, "taxPercent": { "type": [ "number", "null" ] }, "taxAmount": { "type": [ "number", "null" ] }, "priceInclTax": { "type": [ "number", "null" ] }, "totalInclTax": { "type": [ "number", "null" ] } } }, "OrderPaymentDto": { "type": "object", "properties": { "id": { "type": [ "integer", "null" ] }, "method": { "type": [ "string", "null" ] }, "methodTitle": { "type": [ "string", "null" ] } } }, "OrderPaymentDto.html": { "type": "object", "properties": { "id": { "type": [ "integer", "null" ] }, "method": { "type": [ "string", "null" ] }, "methodTitle": { "type": [ "string", "null" ] } } }, "OrderShipmentDto": { "type": "object", "properties": { "id": { "type": [ "integer", "null" ] }, "shippingNumber": { "type": [ "string", "null" ] }, "carrierTitle": { "type": [ "string", "null" ] }, "carrierCode": { "type": [ "string", "null" ] }, "trackNumber": { "type": [ "string", "null" ] }, "totalQty": { "type": [ "integer", "null" ] }, "totalWeight": { "type": [ "number", "null" ] }, "emailSent": { "type": [ "boolean", "null" ] }, "createdAt": { "type": [ "string", "null" ] }, "updatedAt": { "type": [ "string", "null" ] }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/OrderShipmentItemDto" } } } }, "OrderShipmentDto.html": { "type": "object", "properties": { "id": { "type": [ "integer", "null" ] }, "shippingNumber": { "type": [ "string", "null" ] }, "carrierTitle": { "type": [ "string", "null" ] }, "carrierCode": { "type": [ "string", "null" ] }, "trackNumber": { "type": [ "string", "null" ] }, "totalQty": { "type": [ "integer", "null" ] }, "totalWeight": { "type": [ "number", "null" ] }, "emailSent": { "type": [ "boolean", "null" ] }, "createdAt": { "type": [ "string", "null" ] }, "updatedAt": { "type": [ "string", "null" ] }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/OrderShipmentItemDto.html" } } } }, "OrderShipmentItemDto": { "type": "object", "properties": { "id": { "type": [ "integer", "null" ] }, "orderItemId": { "type": [ "integer", "null" ] }, "qty": { "type": [ "integer", "null" ] }, "weight": { "type": [ "number", "null" ] } } }, "OrderShipmentItemDto.html": { "type": "object", "properties": { "id": { "type": [ "integer", "null" ] }, "orderItemId": { "type": [ "integer", "null" ] }, "qty": { "type": [ "integer", "null" ] }, "weight": { "type": [ "number", "null" ] } } }, "RefundItemDto": { "type": "object", "properties": { "id": { "type": [ "integer", "null" ] }, "orderItemId": { "type": [ "integer", "null" ] }, "productId": { "type": [ "integer", "null" ] }, "sku": { "type": [ "string", "null" ] }, "name": { "type": [ "string", "null" ] }, "qty": { "type": [ "integer", "null" ] }, "price": { "type": [ "number", "null" ] }, "basePrice": { "type": [ "number", "null" ] }, "priceInclTax": { "type": [ "number", "null" ] }, "basePriceInclTax": { "type": [ "number", "null" ] }, "total": { "type": [ "number", "null" ] }, "baseTotal": { "type": [ "number", "null" ] }, "totalInclTax": { "type": [ "number", "null" ] }, "baseTotalInclTax": { "type": [ "number", "null" ] }, "taxAmount": { "type": [ "number", "null" ] }, "baseTaxAmount": { "type": [ "number", "null" ] }, "discountPercent": { "type": [ "number", "null" ] }, "discountAmount": { "type": [ "number", "null" ] }, "baseDiscountAmount": { "type": [ "number", "null" ] }, "formattedPrice": { "type": [ "string", "null" ] }, "formattedPriceInclTax": { "type": [ "string", "null" ] }, "formattedTotal": { "type": [ "string", "null" ] }, "formattedTotalInclTax": { "type": [ "string", "null" ] }, "formattedTaxAmount": { "type": [ "string", "null" ] }, "formattedDiscountAmount": { "type": [ "string", "null" ] }, "additional": { "type": [ "array", "null" ], "items": [] } } }, "RefundItemDto.html": { "type": "object", "properties": { "id": { "type": [ "integer", "null" ] }, "orderItemId": { "type": [ "integer", "null" ] }, "productId": { "type": [ "integer", "null" ] }, "sku": { "type": [ "string", "null" ] }, "name": { "type": [ "string", "null" ] }, "qty": { "type": [ "integer", "null" ] }, "price": { "type": [ "number", "null" ] }, "basePrice": { "type": [ "number", "null" ] }, "priceInclTax": { "type": [ "number", "null" ] }, "basePriceInclTax": { "type": [ "number", "null" ] }, "total": { "type": [ "number", "null" ] }, "baseTotal": { "type": [ "number", "null" ] }, "totalInclTax": { "type": [ "number", "null" ] }, "baseTotalInclTax": { "type": [ "number", "null" ] }, "taxAmount": { "type": [ "number", "null" ] }, "baseTaxAmount": { "type": [ "number", "null" ] }, "discountPercent": { "type": [ "number", "null" ] }, "discountAmount": { "type": [ "number", "null" ] }, "baseDiscountAmount": { "type": [ "number", "null" ] }, "formattedPrice": { "type": [ "string", "null" ] }, "formattedPriceInclTax": { "type": [ "string", "null" ] }, "formattedTotal": { "type": [ "string", "null" ] }, "formattedTotalInclTax": { "type": [ "string", "null" ] }, "formattedTaxAmount": { "type": [ "string", "null" ] }, "formattedDiscountAmount": { "type": [ "string", "null" ] }, "additional": { "type": [ "array", "null" ], "items": [] } } } }, "responses": [], "parameters": [], "examples": [], "requestBodies": [], "headers": [], "securitySchemes": { "bearerAuth": { "type": "http", "description": "Value for the http bearer parameter.", "scheme": "bearer", "bearerFormat": "UUID" } } }, "security": [ { "bearerAuth": [] } ], "tags": [ { "name": "Cart" }, { "name": "Attribute" }, { "name": "AttributeTranslation" }, { "name": "Product" }, { "name": "Product Types" }, { "name": "Customer Order" }, { "name": "Category" }, { "name": "CategoryTree" }, { "name": "Channel" }, { "name": "Checkout" }, { "name": "CompareItem" }, { "name": "ContactUs" }, { "name": "Country" }, { "name": "CountryState" }, { "name": "Currency" }, { "name": "Customer" }, { "name": "Customer Address" }, { "name": "Customer Return" }, { "name": "Customer Review" }, { "name": "Wishlist" }, { "name": "EU Withdrawal" }, { "name": "GDPR" }, { "name": "GDPR Requests" }, { "name": "Locale" }, { "name": "MergeCart" }, { "name": "Newsletter" }, { "name": "CMS Page" }, { "name": "CMS Page Translation" }, { "name": "Theme" }, { "name": "Store Config" }, { "name": "Catalog" } ], "webhooks": [] }