{"openapi":"3.1.0","info":{"description":"Bagisto Shop API - Customer-facing operations for products, cart, orders, and checkout.","contact":[],"license":[],"version":"1.0.4"},"servers":[{"url":"/api/shop","description":"Shop API - Customer-facing endpoints"}],"paths":{"/add-product-in-cart":{"post":{"tags":["Cart"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"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"}}}},"400":{"description":"Missing/invalid productId or quantity, or product not saleable."},"422":{"description":"Validation Error"}},"operationId":"addProduct"}},"/apply-coupon":{"post":{"tags":["Cart"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"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"}}}},"400":{"description":"Missing couponCode, or coupon invalid/inactive/not applicable to this cart."},"422":{"description":"Validation Error"}},"operationId":"apply"}},"/attributes":{"get":{"tags":["Attribute"],"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","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"]}]}}}},"operationId":"api_apishopattributes_get_collection"}},"/attributes/{id}":{"get":{"tags":["Attribute"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopattributes_id_get"}},"/attribute-options":{"get":{"tags":["Attribute"],"summary":"List all attribute options","description":"Returns all attribute options with their translations. Public endpoint.","parameters":[{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}]}}}},"operationId":"api_apishopattribute-options_get_collection"}},"/attribute-options/{id}":{"get":{"tags":["Attribute"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopattribute-options_id_get"}},"/attribute_translations":{"get":{"tags":["AttributeTranslation"],"summary":"List attribute translations","description":"Returns the localized names of catalog attributes. Public endpoint.","parameters":[{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"Attribute translation collection.","content":{"application/json":{"example":[{"id":1,"attributeId":1,"locale":"en","name":"SKU"}]}}}},"operationId":"api_apishopattribute_translations_get_collection"}},"/attribute_translations/{id}":{"get":{"tags":["AttributeTranslation"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"Attribute translation.","content":{"application/json":{"example":{"id":1,"attributeId":1,"locale":"en","name":"SKU"}}}},"404":{"description":"Translation not found."}},"operationId":"api_apishopattribute_translations_id_get"}},"/products/{productId}/attribute-values":{"get":{"tags":["Product"],"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,"schema":{"type":"string"}},{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}]}}}},"operationId":"api_apishopproducts_productIdattribute-values_get_collection"}},"/booking-products/{id}":{"get":{"tags":["Product Types"],"summary":"Get booking-type product configuration","description":"Returns the booking-specific configuration with the type-specific slot data (`slots`) embedded inline \u2014 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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopbooking-products_id_get"}},"/products/{productId}/booking-products":{"get":{"tags":["Product Types"],"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 \u2014 use `/api/shop/booking-slots?id={id}&date=YYYY-MM-DD` to fetch slots.","parameters":[{"name":"productId","in":"path","description":"Product ID","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}]}}}},"operationId":"api_apishopproducts_productIdbooking-products_get_collection"}},"/booking_product_appointment_slots/{id}":{"get":{"tags":["Product Types"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopbooking_product_appointment_slots_id_get"}},"/booking_product_appointment_slots":{"get":{"tags":["Product Types"],"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","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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\"}]"}]}}}},"operationId":"api_apishopbooking_product_appointment_slots_get_collection"}},"/booking_product_default_slots/{id}":{"get":{"tags":["Product Types"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopbooking_product_default_slots_id_get"}},"/booking_product_default_slots":{"get":{"tags":["Product Types"],"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","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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\"}]"}]}}}},"operationId":"api_apishopbooking_product_default_slots_get_collection"}},"/booking_product_event_tickets/{id}":{"get":{"tags":["Product Types"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopbooking_product_event_tickets_id_get"}},"/booking_product_event_tickets":{"get":{"tags":["Product Types"],"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","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopbooking_product_event_tickets_get_collection"}},"/booking_product_rental_slots/{id}":{"get":{"tags":["Product Types"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopbooking_product_rental_slots_id_get"}},"/booking_product_rental_slots":{"get":{"tags":["Product Types"],"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","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopbooking_product_rental_slots_get_collection"}},"/booking_product_table_slots/{id}":{"get":{"tags":["Product Types"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopbooking_product_table_slots_id_get"}},"/booking_product_table_slots":{"get":{"tags":["Product Types"],"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","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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\"}]"}]}}}},"operationId":"api_apishopbooking_product_table_slots_get_collection"}},"/booking-slots":{"get":{"tags":["Product Types"],"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,"schema":{"type":"integer","example":1}},{"name":"date","in":"query","description":"Date to fetch slots for (YYYY-MM-DD).","required":true,"schema":{"type":"string","format":"date","example":"2026-03-26"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopbooking-slots_get_collection"}},"/cancel-order":{"post":{"tags":["Customer Order"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"responses":{"201":{"description":"Order canceled.","content":{"application/json":{"example":{"id":411,"orderId":411,"status":"canceled","success":true,"message":"Order canceled successfully"}}}},"400":{"description":"Order not found, not owned by the caller, or not in a cancelable state."},"422":{"description":"Validation Error"}},"operationId":"api_apishopcancel-order_post"}},"/cart-tokens":{"post":{"tags":["Cart"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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}}}}}},"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"}}}},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"createCartToken"}},"/categories/{id}":{"get":{"tags":["Category"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopcategories_id_get"}},"/categories":{"get":{"tags":["Category"],"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.","schema":{"type":"integer","example":2}},{"name":"page","in":"query","description":"Page number (1-based).","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"Items per page. Default 10, max 50.","schema":{"type":"integer","default":10}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"]}]}}}},"operationId":"api_apishopcategories_get_collection"}},"/category-trees":{"get":{"tags":["CategoryTree"],"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.","schema":{"type":"integer","example":1}},{"name":"depth","in":"query","description":"Maximum nesting depth (default: 4).","schema":{"type":"integer","default":4,"example":4}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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":[]}]}]}}}},"operationId":"api_apishopcategory-trees_get_collection"}},"/channels/{id}":{"get":{"tags":["Channel"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopchannels_id_get"}},"/channels":{"get":{"tags":["Channel"],"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","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"]}]}}}},"operationId":"api_apishopchannels_get_collection"}},"/channel_translations/{id}":{"get":{"tags":["Channel"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopchannel_translations_id_get"}},"/channel_translations":{"get":{"tags":["Channel"],"summary":"List channel translations","description":"Lists all channel translation rows. Public endpoint.","parameters":[{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopchannel_translations_get_collection"}},"/checkout-addresses":{"get":{"tags":["Checkout"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopcheckout-addresses_get_collection"},"post":{"tags":["Checkout"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"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"}}}},"500":{"description":"Billing address missing/invalid, or no active cart."},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopcheckout-addresses_post"}},"/checkout-orders":{"post":{"tags":["Checkout"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"requestBody":{"description":"The new CheckoutOrder resource","content":{"application/json":{"schema":{"type":"object","properties":{}},"example":{}}}},"responses":{"201":{"description":"Order placed, or a payment redirect is required. Check the `redirect` flag: when it is false the order exists and `orderId` is set; when it is true no order has been created yet and the shopper must be sent to `redirectUrl` to pay \u2014 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","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,"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."}}}}}},"500":{"description":"Cart not fully prepared (missing addresses/shipping/payment) or checkout failed."},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopcheckout-orders_post"}},"/checkout-payment-methods":{"post":{"tags":["Checkout"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"responses":{"201":{"description":"Payment method saved successfully.","content":{"application/json":{"example":{"success":true,"message":"Payment method saved successfully","cartToken":"1536","paymentMethod":"moneytransfer"}}}},"500":{"description":"No cart/shipping saved, or invalid payment method."},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopcheckout-payment-methods_post"}},"/checkout-shipping-methods":{"get":{"tags":["Checkout"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopcheckout-shipping-methods_get_collection"},"post":{"tags":["Checkout"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"responses":{"201":{"description":"Shipping method saved.","content":{"application/json":{"example":{"id":"6887","success":true,"message":"Shipping method saved successfully","cartToken":"1536","shippingMethod":"flatrate_flatrate"}}}},"500":{"description":"No cart/addresses saved, or invalid shipping method."},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopcheckout-shipping-methods_post"}},"/compare_items/{id}":{"get":{"tags":["CompareItem"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopcompare_items_id_get"},"delete":{"tags":["CompareItem"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"204":{"description":"Compare item removed. No content."},"404":{"description":"Compare item not found or not owned by the caller."}},"operationId":"api_apishopcompare_items_id_delete"}},"/compare_items":{"get":{"tags":["CompareItem"],"summary":"List compare items","description":"Returns the authenticated customer's compare list.","parameters":[{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopcompare_items_get_collection"},"post":{"tags":["CompareItem"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"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"}}}},"422":{"description":"Missing/invalid product_id, or product already in compare list."},"400":{"description":"Invalid input"}},"operationId":"api_apishopcompare_items_post"}},"/contact-us":{"post":{"tags":["ContactUs"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"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"}}}},"422":{"description":"Validation failed (missing name/email/message, invalid email)."},"400":{"description":"Invalid input"}},"operationId":"submitContactUs"}},"/countries":{"get":{"tags":["Country"],"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","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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":"\u0623\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646"},{"id":256,"countryId":1,"locale":"es","name":"Afganist\u00e1n"}]}]}}}},"operationId":"api_apishopcountries_get_collection"}},"/countries/{id}":{"get":{"tags":["Country"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"The country.","content":{"application/json":{"example":{"id":1,"code":"AF","name":"Afghanistan","states":[],"translations":[{"id":1,"countryId":1,"locale":"ar","name":"\u0623\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646"},{"id":256,"countryId":1,"locale":"es","name":"Afganist\u00e1n"}]}}}},"404":{"description":"Country not found."}},"operationId":"api_apishopcountries_id_get"}},"/countries/{country_id}/states":{"get":{"tags":["CountryState"],"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,"schema":{"type":"string"}},{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"]}]}}}},"operationId":"api_apishopcountries_country_idstates_get_collection"}},"/countries/{country_id}/states/{id}":{"get":{"tags":["CountryState"],"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,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Country state ID","required":true,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopcountries_country_idstates_id_get"}},"/country-states":{"get":{"tags":["CountryState"],"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","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"]}]}}}},"operationId":"api_apishopcountry-states_get_collection"}},"/country-states/{id}":{"get":{"tags":["CountryState"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopcountry-states_id_get"}},"/currencies/{id}":{"get":{"tags":["Currency"],"summary":"Get a currency by ID","description":"Returns one store currency. Public endpoint.","parameters":[{"name":"id","in":"path","description":"Currency ID","required":true,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopcurrencies_id_get"}},"/currencies":{"get":{"tags":["Currency"],"summary":"List currencies","description":"Returns all store currencies. Public endpoint.","parameters":[{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"List of currencies.","content":{"application/json":{"example":[{"id":1,"code":"USD","name":"US Dollar","symbol":"$","decimal":2,"groupSeparator":",","decimalSeparator":"."}]}}}},"operationId":"api_apishopcurrencies_get_collection"}},"/customers":{"post":{"tags":["Customer"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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!"}}}},"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"}}}},"422":{"description":"Validation failed (email already taken, passwords do not match, etc.)."},"400":{"description":"Invalid input"}},"operationId":"api_apishopcustomers_post"}},"/customer-addresses":{"get":{"tags":["Customer Address"],"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`.","schema":{"type":"string","enum":["id","created_at","id-asc","id-desc","created_at-asc","created_at-desc"]}},{"name":"order","in":"query","description":"Sort direction: `asc` (default) or `desc`. Use `desc` to show the most recently added addresses first.","schema":{"type":"string","enum":["asc","desc"]}},{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopcustomer-addresses_get_collection"},"post":{"tags":["Customer Address"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"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}}}},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopcustomer-addresses_post"}},"/customer-addresses/{id}":{"get":{"tags":["Customer Address"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}},"operationId":"api_apishopcustomer-addresses_id_get"},"put":{"tags":["Customer Address"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"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}}}},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"},"404":{"description":"Not found"}},"operationId":"api_apishopcustomer-addresses_id_put"},"delete":{"tags":["Customer Address"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"204":{"description":"Address deleted."},"404":{"description":"Not found"}},"operationId":"api_apishopcustomer-addresses_id_delete"}},"/customer-downloadable-products":{"get":{"tags":["Customer Order"],"summary":"Retrieves the collection of CustomerDownloadableProduct resources.","description":"Retrieves the collection of CustomerDownloadableProduct resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"CustomerDownloadableProduct collection","content":{"application/json":{"schema":[]},"text/html":{"schema":[]}}}},"operationId":"api_apishopcustomer-downloadable-products_get_collection"}},"/customer-downloadable-products/{id}":{"get":{"tags":["Customer Order"],"summary":"Retrieves a CustomerDownloadableProduct resource.","description":"Retrieves a CustomerDownloadableProduct resource.","parameters":[{"name":"id","in":"path","description":"Customer downloadable product ID","required":true,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"CustomerDownloadableProduct resource","content":{"application/json":{"schema":[]},"text/html":{"schema":[]}}},"404":{"description":"Not found"}},"operationId":"api_apishopcustomer-downloadable-products_id_get"}},"/customer-invoices":{"get":{"tags":["Customer Order"],"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.","schema":{"type":"integer","example":590}},{"name":"state","in":"query","description":"Filter by invoice state (pending, pending_payment, paid, overdue, refunded).","schema":{"type":"string"}},{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"CustomerInvoice collection","content":{"application/json":{"schema":[]},"text/html":{"schema":[]}}}},"operationId":"api_apishopcustomer-invoices_get_collection"}},"/customer-invoices/{id}":{"get":{"tags":["Customer Order"],"summary":"Retrieves a CustomerInvoice resource.","description":"Retrieves a CustomerInvoice resource.","parameters":[{"name":"id","in":"path","description":"Customer invoice ID","required":true,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"CustomerInvoice resource","content":{"application/json":{"schema":[]},"text/html":{"schema":[]}}},"404":{"description":"Not found"}},"operationId":"api_apishopcustomer-invoices_id_get"}},"/customer/login":{"post":{"tags":["Customer"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"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"}}}},"401":{"description":"Invalid email or password."},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopcustomerlogin_post"}},"/customer/logout":{"post":{"tags":["Customer"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"requestBody":{"description":"Empty body","content":{"application/json":{"schema":{"type":"object"},"example":{}}}},"responses":{"201":{"description":"Logged out successfully","content":{"application/json":{"example":{"success":true,"message":"Logged out successfully"}}}},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopcustomerlogout_post"}},"/customer-orders":{"get":{"tags":["Customer Order"],"summary":"Retrieves the collection of CustomerOrder resources.","description":"Retrieves the collection of CustomerOrder resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"CustomerOrder collection","content":{"application/json":{"schema":[]},"text/html":{"schema":[]}}}},"operationId":"api_apishopcustomer-orders_get_collection"}},"/customer-orders/{id}":{"get":{"tags":["Customer Order"],"summary":"Retrieves a CustomerOrder resource.","description":"Retrieves a CustomerOrder resource.","parameters":[{"name":"id","in":"path","description":"Customer order ID","required":true,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"CustomerOrder resource","content":{"application/json":{"schema":[]},"text/html":{"schema":[]}}},"404":{"description":"Not found"}},"operationId":"api_apishopcustomer-orders_id_get"}},"/customer-order-shipments":{"get":{"tags":["Customer Order"],"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.","schema":{"type":"integer","example":3}},{"name":"status","in":"query","description":"Filter by shipment status (pending, shipped, canceled).","schema":{"type":"string"}},{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"CustomerOrderShipment collection","content":{"application/json":{"schema":[]},"text/html":{"schema":[]}}}},"operationId":"api_apishopcustomer-order-shipments_get_collection"}},"/customer-order-shipments/{id}":{"get":{"tags":["Customer Order"],"summary":"Retrieves a CustomerOrderShipment resource.","description":"Retrieves a CustomerOrderShipment resource.","parameters":[{"name":"id","in":"path","description":"Customer order shipment ID","required":true,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"CustomerOrderShipment resource","content":{"application/json":{"schema":[]},"text/html":{"schema":[]}}},"404":{"description":"Not found"}},"operationId":"api_apishopcustomer-order-shipments_id_get"}},"/customer-order-shipment-items/{id}":{"get":{"tags":["Customer Order"],"summary":"Retrieves a CustomerOrderShipmentItem resource.","description":"Retrieves a CustomerOrderShipmentItem resource.","parameters":[{"name":"id","in":"path","description":"Customer order shipment item ID","required":true,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"CustomerOrderShipmentItem resource","content":{"application/json":{"schema":[]},"text/html":{"schema":[]}}},"404":{"description":"Not found"}},"operationId":"api_apishopcustomer-order-shipment-items_id_get"}},"/customer-order-shipment-items":{"get":{"tags":["Customer Order"],"summary":"Retrieves the collection of CustomerOrderShipmentItem resources.","description":"Retrieves the collection of CustomerOrderShipmentItem resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"CustomerOrderShipmentItem collection","content":{"application/json":{"schema":[]},"text/html":{"schema":[]}}}},"operationId":"api_apishopcustomer-order-shipment-items_get_collection"}},"/customer-profile":{"get":{"tags":["Customer"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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}]}}}},"operationId":"api_apishopcustomer-profile_get_collection"}},"/customer-profile-deletes/{id}":{"post":{"tags":["Customer"],"summary":"Delete customer profile","description":"Delete the authenticated customer's account. Requires Bearer token.","parameters":[{"name":"id","in":"path","description":"Customer profile delete ID","required":true,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"requestBody":{"description":"No fields are required. The account is identified by the Bearer token.","content":{"application/json":{"schema":{"type":"object","properties":{}},"example":{}}}},"responses":{"201":{"description":"Customer account deleted","content":{"application/json":{"example":[]}}},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopcustomer-profile-deletes_id_post"}},"/customer-profile-updates/{id}":{"put":{"tags":["Customer"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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 \u2014 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},"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"}}}},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"},"404":{"description":"Not found"}},"operationId":"api_apishopcustomer-profile-updates_id_put"}},"/returns":{"get":{"tags":["Customer Return"],"summary":"List the authenticated customer's return (RMA) requests","description":"Returns the customer's own RMA requests, newest first. Optional `?status=<id>` filter. Requires a customer Bearer token.","parameters":[{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"The customer's return requests (detail-only fields \u2014 canClose/canReopen/isExpired/images \u2014 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","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"}]}}}},"operationId":"api_apishopreturns_get_collection"},"post":{"tags":["Customer Return"],"summary":"Raise a new return (RMA) request","description":"Creates a return for one item of one of the customer's orders. The item must be return-eligible (see /returnable-items/{orderId}); `rmaQty` is capped server-side by the returnable quantity. Send `agreement=true`. Optional image files can be attached via multipart `images[]` (REST only). Returns the created RMA.","parameters":[{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"requestBody":{"description":"The new CustomerReturn resource","content":{"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","example":"opened"},"agreement":{"type":"boolean","example":true}}}}},"required":true},"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","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"}}}},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopreturns_post"}},"/returns/{id}":{"get":{"tags":["Customer Return"],"summary":"Get one of the customer's return (RMA) requests","description":"Full detail of a single RMA owned by the authenticated customer \u2014 the returned item, images, status, and action flags (canClose / canReopen / isExpired). 404 if it is not the customer's.","parameters":[{"name":"id","in":"path","description":"Customer return ID","required":true,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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","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"}},"operationId":"api_apishopreturns_id_get"}},"/returns/{id}/cancel":{"post":{"tags":["Customer Return"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"requestBody":{"description":"The new CustomerReturn resource","content":{"application/json":{"schema":{"type":"object"},"example":{}}}},"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":[]},"text/html":{"schema":[]}}},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopreturns_idcancel_post"}},"/returns/{id}/reopen":{"post":{"tags":["Customer Return"],"summary":"Reopen a return request","description":"Reopens a canceled/declined RMA back to pending \u2014 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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"requestBody":{"description":"The new CustomerReturn resource","content":{"application/json":{"schema":{"type":"object"},"example":{}}}},"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":[]},"text/html":{"schema":[]}}},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopreturns_idreopen_post"}},"/returns/{id}/close":{"post":{"tags":["Customer Return"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"requestBody":{"description":"The new CustomerReturn resource","content":{"application/json":{"schema":{"type":"object"},"example":{}}}},"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":[]},"text/html":{"schema":[]}}},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopreturns_idclose_post"}},"/return-messages":{"get":{"tags":["Customer Return"],"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,"schema":{"type":"integer"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopreturn-messages_get_collection"},"post":{"tags":["Customer Return"],"summary":"Send a message on a return request","description":"Adds a customer message to the RMA conversation. Body `{ return_id, message }`; an optional file can be attached via multipart `file` (REST only). Returns the created message.","parameters":[{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"requestBody":{"description":"The new CustomerReturnMessage resource","content":{"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?"}}}}},"required":true},"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"}}}},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopreturn-messages_post"}},"/customer-reviews":{"get":{"tags":["Customer Review"],"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","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopcustomer-reviews_get_collection"}},"/customer-reviews/{id}":{"get":{"tags":["Customer Review"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopcustomer-reviews_id_get"}},"/customizable-option-files":{"post":{"tags":["Cart"],"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: { \"<optionId>\": [\"<token>\"] }. 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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"responses":{"201":{"description":"File staged. Returns a token to send on add-to-cart.","content":{"application/json":{"example":{"token":"q8f2\u202648chars","fileName":"spec.pdf","optionId":11}}}},"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."},"400":{"description":"Invalid input"}},"operationId":"api_apishopcustomizable-option-files_post"}},"/delete-all-compare-items":{"post":{"tags":["CompareItem"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"requestBody":{"description":"The new DeleteAllCompareItems resource","content":{"application/json":{"example":{}}}},"responses":{"201":{"description":"All compare items were removed.","content":{"application/json":{"example":{"message":"All compare items have been removed successfully","deletedCount":1}}}},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopdelete-all-compare-items_post"}},"/delete-all-wishlists":{"post":{"tags":["Wishlist"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"requestBody":{"description":"The new DeleteAllWishlists resource","content":{"application/json":{"schema":{"type":"object","properties":{}},"example":{}}}},"responses":{"201":{"description":"All wishlist items removed.","content":{"application/json":{"example":{"message":"All wishlist items have been removed successfully","deletedCount":1}}}},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopdelete-all-wishlists_post"}},"/eu-withdrawals":{"get":{"tags":["EU Withdrawal"],"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","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopeu-withdrawals_get_collection"},"post":{"tags":["EU Withdrawal"],"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 \u2014 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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"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"}}}},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopeu-withdrawals_post"}},"/eu-withdrawals/{id}":{"get":{"tags":["EU Withdrawal"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}},"operationId":"api_apishopeu-withdrawals_id_get"}},"/forgot-passwords":{"post":{"tags":["Customer"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"responses":{"201":{"description":"Reset link sent","content":{"application/json":{"example":{"success":true,"message":"Reset link sent successfully to your email"}}}},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopforgot-passwords_post"}},"/gdpr-requests/{id}":{"get":{"tags":["GDPR Requests"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopgdpr-requests_id_get"},"delete":{"tags":["GDPR Requests"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"204":{"description":"Request deleted. No content."},"404":{"description":"Request not found or not owned by the caller."}},"operationId":"api_apishopgdpr-requests_id_delete"}},"/gdpr-requests":{"get":{"tags":["GDPR Requests"],"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`.","schema":{"type":"string","enum":["id","created_at","id-asc","id-desc","created_at-asc","created_at-desc"]}},{"name":"order","in":"query","description":"Sort direction: `asc` (default) or `desc`.","schema":{"type":"string","enum":["asc","desc"]}},{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopgdpr-requests_get_collection"},"post":{"tags":["GDPR Requests"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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","example":"Please delete all my personal data."}}},"example":{"type":"delete","message":"Please delete my personal data."}}},"required":true},"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"}}}},"400":{"description":"GDPR disabled in admin config, or invalid type/message."},"422":{"description":"Validation Error"}},"operationId":"api_apishopgdpr-requests_post"}},"/gdpr-requests/{id}/revoke":{"post":{"tags":["GDPR Requests"],"summary":"Revoke a GDPR data request","description":"Revoke one of the customer's own GDPR data requests. Allowed only while the request is pending or processing. Send an empty JSON body `{}`.","parameters":[{"name":"id","in":"path","description":"Gdpr request ID","required":true,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"requestBody":{"description":"The new GdprRequest resource","content":{"application/json":{"schema":{"type":"object"},"example":{}}}},"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"}}}},"422":{"description":"Request is not pending/processing, so it cannot be revoked."},"400":{"description":"Invalid input"}},"operationId":"revoke_post"}},"/eu-withdrawals/guest":{"post":{"tags":["EU Withdrawal"],"summary":"File an EU right-of-withdrawal declaration (guest)","description":"Records a withdrawal for a guest order, proving ownership with the order increment id + email. Idempotent. Triggers the durable-medium confirmation email. 404 (constant response) when the order/email do not match a guest order on an EU-enabled channel.","parameters":[{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"requestBody":{"description":"The new GuestEuWithdrawal 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"},"reason_text":{"type":"string","example":"Changed my mind."}}}}},"required":true},"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"}}}},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopeu-withdrawalsguest_post"}},"/locales/{id}":{"get":{"tags":["Locale"],"summary":"Get a locale by ID","description":"Returns a single store locale. Public endpoint.","parameters":[{"name":"id","in":"path","description":"Locale ID","required":true,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishoplocales_id_get"}},"/locales":{"get":{"tags":["Locale"],"summary":"List store locales","description":"Returns all active store locales. Public endpoint.","parameters":[{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishoplocales_get_collection"}},"/merge-carts":{"post":{"tags":["MergeCart"],"summary":"Merge guest cart into customer cart","description":"Merges a guest cart into the authenticated customer's cart. Requires a valid bearer token and the guest cart ID.","parameters":[{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"requestBody":{"description":"Guest cart details to merge","content":{"application/json":{"schema":{"type":"object","required":["cart_id"],"properties":{"cart_id":{"type":"integer","description":"The ID of the guest cart to merge into the customer cart","example":6884}}},"example":{"cart_id":6884}}},"required":true},"responses":{"201":{"description":"Guest cart merged. Returns the customer's updated cart.","content":{"application/json":{"example":{"id":6885,"cartToken":"6885","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."}}}},"404":{"description":"Guest cart not found."},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopmerge-carts_post"}},"/move-wishlist-to-carts":{"post":{"tags":["Wishlist"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"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"}}}},"404":{"description":"Wishlist item not found or not owned by the caller."},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopmove-wishlist-to-carts_post"}},"/newsletters":{"post":{"tags":["Newsletter"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"responses":{"201":{"description":"Subscribed.","content":{"application/json":{"example":{"success":true,"message":"You have successfully subscribed to our newsletter."}}}},"400":{"description":"Missing customerEmail, or email already subscribed."},"422":{"description":"Validation Error"}},"operationId":"createNewsletterSubscription"}},"/pages/{id}":{"get":{"tags":["CMS Page"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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":"<h1>About Us</h1>","metaTitle":"About Us","metaDescription":"Learn more about our company.","metaKeywords":"about,us,company","locale":"en","cmsPageId":"152"}}}}},"404":{"description":"Page not found."}},"operationId":"api_apishoppages_id_get"}},"/pages":{"get":{"tags":["CMS Page"],"summary":"List CMS pages","description":"Returns CMS pages, each with its current-locale `translation` embedded. Public endpoint.","parameters":[{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":100}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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":"<h1>About Us</h1>","metaTitle":"About Us","metaDescription":"Learn more about our company.","metaKeywords":"about,us,company","locale":"en","cmsPageId":"152"}}]}}}},"operationId":"api_apishoppages_get_collection"}},"/page_translations":{"get":{"tags":["CMS Page Translation"],"summary":"List CMS page translations","description":"Returns per-locale CMS page translations. Public endpoint.","parameters":[{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":100}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"List of CMS page translations.","content":{"application/json":{"example":[{"id":1,"pageTitle":"About Us (Updated)","urlKey":"about-us","htmlContent":"<h1>About Us</h1>","metaTitle":"about us","metaDescription":"","metaKeywords":"aboutus","locale":"en","cmsPageId":1}]}}}},"operationId":"api_apishoppage_translations_get_collection"}},"/page_translations/{id}":{"get":{"tags":["CMS Page Translation"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"The CMS page translation.","content":{"application/json":{"example":{"id":1,"pageTitle":"About Us (Updated)","urlKey":"about-us","htmlContent":"<h1>About Us</h1>","metaTitle":"about us","metaDescription":"","metaKeywords":"aboutus","locale":"en","cmsPageId":1}}}},"404":{"description":"Translation not found."}},"operationId":"api_apishoppage_translations_id_get"}},"/payment-methods":{"get":{"tags":["Checkout"],"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","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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}]}}}},"operationId":"api_apishoppayment-methods_get_collection"}},"/products/{id}":{"get":{"tags":["Product"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopproducts_id_get"}},"/products":{"get":{"tags":["Product"],"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) is treated as a filterable attribute \u2014 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).","schema":{"type":"string"}},{"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).","schema":{"type":"string","example":"name-asc"}},{"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.","schema":{"type":"string","enum":["asc","desc"]}},{"name":"page","in":"query","description":"Page number (1-based).","schema":{"type":"integer","default":1,"example":1}},{"name":"per_page","in":"query","description":"Items per page. Default matches the GraphQL `first` default.","schema":{"type":"integer","default":30,"example":30}},{"name":"type","in":"query","description":"Product type.","schema":{"type":"string","enum":["simple","configurable","virtual","downloadable","bundle","grouped","booking"]}},{"name":"category_id","in":"query","description":"Filter products by category ID.","schema":{"type":"integer","example":2}},{"name":"price","in":"query","description":"Compound price range \u2014 from,to (e.g. 10,200). Alternative to price_from + price_to.","schema":{"type":"string","example":"10,200"}},{"name":"price_from","in":"query","description":"Minimum price (inclusive).","schema":{"type":"number"}},{"name":"price_to","in":"query","description":"Maximum price (inclusive).","schema":{"type":"number"}},{"name":"new","in":"query","description":"Only return products flagged as new.","schema":{"type":"boolean"}},{"name":"featured","in":"query","description":"Only return products flagged as featured.","schema":{"type":"boolean"}},{"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\"}}.","schema":{"type":"object","additionalProperties":{"type":"string"},"example":{"brand":"38","color":"3"}}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopproducts_get_collection"}},"/products/{productId}/variants":{"get":{"tags":["Product Types"],"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,"schema":{"type":"string"}},{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopproducts_productIdvariants_get_collection"}},"/product_bundle_options/{id}":{"get":{"tags":["Product Types"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopproduct_bundle_options_id_get"}},"/products/{productId}/bundle-options":{"get":{"tags":["Product Types"],"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,"schema":{"type":"string"}},{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"]}]}}}},"operationId":"api_apishopproducts_productIdbundle-options_get_collection"}},"/product-bundle-option-products":{"get":{"tags":["Product Types"],"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","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopproduct-bundle-option-products_get_collection"}},"/product-bundle-option-products/{id}":{"get":{"tags":["Product Types"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopproduct-bundle-option-products_id_get"}},"/product_bundle_option_translations/{id}":{"get":{"tags":["Product Types"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopproduct_bundle_option_translations_id_get"}},"/product_bundle_option_translations":{"get":{"tags":["Product Types"],"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","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"A list of bundle option translations.","content":{"application/json":{"example":[{"id":5,"locale":"AR","label":"Bundle Option 1","productBundleOptionId":1}]}}}},"operationId":"api_apishopproduct_bundle_option_translations_get_collection"}},"/products/{productId}/customer-group-prices":{"get":{"tags":["Product"],"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 \u2014 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,"schema":{"type":"string"}},{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopproducts_productIdcustomer-group-prices_get_collection"}},"/product_customizable_options/{id}":{"get":{"tags":["Product"],"summary":"Get a single customizable option by ID","description":"Returns one customizable option (a free-form per-product input field \u2014 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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopproduct_customizable_options_id_get"}},"/products/{productId}/customizable-options":{"get":{"tags":["Product"],"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,"schema":{"type":"string"}},{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"]}]}}}},"operationId":"api_apishopproducts_productIdcustomizable-options_get_collection"}},"/product_customizable_option_prices/{id}":{"get":{"tags":["Product"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopproduct_customizable_option_prices_id_get"}},"/product_customizable_option_prices":{"get":{"tags":["Product"],"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","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"Customizable option price collection","content":{"application/json":{"example":[{"id":1,"label":"Extra","price":5,"formattedPrice":"$5.00","sortOrder":0}]}}}},"operationId":"api_apishopproduct_customizable_option_prices_get_collection"}},"/product_customizable_option_translations/{id}":{"get":{"tags":["Product"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"Customizable option translation.","content":{"application/json":{"example":{"id":1,"productCustomizableOptionId":1,"locale":"en","label":"Engraving text"}}}},"404":{"description":"Translation not found."}},"operationId":"api_apishopproduct_customizable_option_translations_id_get"}},"/product_customizable_option_translations":{"get":{"tags":["Product"],"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","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"List of customizable option translations.","content":{"application/json":{"example":[{"id":1,"productCustomizableOptionId":1,"locale":"en","label":"Engraving text"}]}}}},"operationId":"api_apishopproduct_customizable_option_translations_get_collection"}},"/product-downloadable-links":{"get":{"tags":["Product Types"],"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","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"]}]}}}},"operationId":"api_apishopproduct-downloadable-links_get_collection"}},"/product-downloadable-links/{id}":{"get":{"tags":["Product Types"],"summary":"Get a single downloadable link","description":"Get a single downloadable link","parameters":[{"name":"id","in":"path","description":"Product downloadable link ID","required":true,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}}}}},"operationId":"api_apishopproduct-downloadable-links_id_get"}},"/products/{productId}/downloadable-links":{"get":{"tags":["Product Types"],"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,"schema":{"type":"string"}},{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"]}]}}}},"operationId":"api_apishopproducts_productIddownloadable-links_get_collection"}},"/product_downloadable_link_translations/{id}":{"get":{"tags":["Product Types"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}}}}},"operationId":"api_apishopproduct_downloadable_link_translations_id_get"}},"/product_downloadable_link_translations":{"get":{"tags":["Product Types"],"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","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"Downloadable link translations list","content":{"application/json":{"example":[{"id":2,"locale":"en","title":"Full eBook PDF","downloadableLink":null}]}}}},"operationId":"api_apishopproduct_downloadable_link_translations_get_collection"}},"/product-downloadable-samples":{"get":{"tags":["Product Types"],"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","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"]}]}}}},"operationId":"api_apishopproduct-downloadable-samples_get_collection"}},"/product-downloadable-samples/{id}":{"get":{"tags":["Product Types"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopproduct-downloadable-samples_id_get"}},"/products/{productId}/downloadable-samples":{"get":{"tags":["Product Types"],"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,"schema":{"type":"string"}},{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"]}]}}}},"operationId":"api_apishopproducts_productIddownloadable-samples_get_collection"}},"/product_downloadable_sample_translations/{id}":{"get":{"tags":["Product Types"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopproduct_downloadable_sample_translations_id_get"}},"/product_downloadable_sample_translations":{"get":{"tags":["Product Types"],"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","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"List of downloadable sample translations","content":{"application/json":{"example":[{"id":1,"locale":"en","title":"Sample file","downloadableSample":null}]}}}},"operationId":"api_apishopproduct_downloadable_sample_translations_get_collection"}},"/product_grouped_products/{id}":{"get":{"tags":["Product Types"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopproduct_grouped_products_id_get"}},"/products/{productId}/grouped-products":{"get":{"tags":["Product Types"],"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,"schema":{"type":"string"}},{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopproducts_productIdgrouped-products_get_collection"}},"/product-images":{"get":{"tags":["Product"],"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","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopproduct-images_get_collection"}},"/product-images/{id}":{"get":{"tags":["Product"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}}}},"404":{"description":"Product image not found."}},"operationId":"api_apishopproduct-images_id_get"}},"/products/{productId}/images":{"get":{"tags":["Product"],"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,"schema":{"type":"string"}},{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopproducts_productIdimages_get_collection"}},"/reviews":{"get":{"tags":["Product"],"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","schema":{"type":"integer","example":1}},{"name":"status","in":"query","description":"Filter by status. Defaults to `approved` when omitted.","schema":{"type":"string","enum":["approved","pending"],"example":"approved"}},{"name":"rating","in":"query","description":"Filter by star rating (1-5)","schema":{"type":"integer","minimum":1,"maximum":5,"example":5}},{"name":"page","in":"query","description":"Page number (1-based)","schema":{"type":"integer","default":1,"example":1}},{"name":"per_page","in":"query","description":"Items per page (alias: `limit`). Default 30, max 50.","schema":{"type":"integer","default":30,"maximum":50,"example":10}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopreviews_get_collection"},"post":{"tags":["Customer Review"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"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"}}}},"422":{"description":"Validation failed (missing product_id/rating, invalid rating, etc.)."},"400":{"description":"Invalid input"}},"operationId":"api_apishopreviews_post"}},"/reviews/{id}":{"get":{"tags":["Product"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopreviews_id_get"},"patch":{"tags":["Customer Review"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"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"}}}},"404":{"description":"Review not found or not owned by the caller."},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopreviews_id_patch"},"delete":{"tags":["Customer Review"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"204":{"description":"Review deleted. No content."},"404":{"description":"Review not found or not owned by the caller."}},"operationId":"api_apishopreviews_id_delete"}},"/products/{productId}/reviews":{"get":{"tags":["Product"],"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":"status","in":"query","description":"Filter by status. Defaults to `approved` when omitted.","schema":{"type":"string","enum":["approved","pending"],"example":"approved"}},{"name":"rating","in":"query","description":"Filter by star rating (1-5)","schema":{"type":"integer","minimum":1,"maximum":5,"example":5}},{"name":"page","in":"query","description":"Page number (1-based)","schema":{"type":"integer","default":1,"example":1}},{"name":"per_page","in":"query","description":"Items per page (alias: `limit`). Default 30, max 50.","schema":{"type":"integer","default":30,"maximum":50,"example":10}},{"name":"productId","in":"path","description":"Product ID","required":true,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopproducts_productIdreviews_get_collection"}},"/product-videos":{"get":{"tags":["Product"],"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","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopproduct-videos_get_collection"}},"/product-videos/{id}":{"get":{"tags":["Product"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopproduct-videos_id_get"}},"/products/{productId}/videos":{"get":{"tags":["Product"],"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,"schema":{"type":"string"}},{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopproducts_productIdvideos_get_collection"}},"/cart":{"post":{"tags":["Cart"],"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 (identified by the Bearer token) and a guest (pass the guest cart `token` \u2014 from POST /api/shop/cart-token \u2014 in the request body). It is a POST (not GET) because the cart is identified by a token/id carried in the body and reading it 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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"requestBody":{"description":"The new ReadCart resource","content":{"application/json":{"schema":{"type":"object","properties":{},"example":{}}}}},"responses":{"201":{"description":"The cart with items, totals, coupon, and selected shipping/payment.","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"}}}},"401":{"description":"No cart found for the given token, or not authenticated."},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopcart_post"}},"/remove-cart-item":{"post":{"tags":["Cart"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"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"}}}},"400":{"description":"Missing cartItemId, or item not in cart."},"422":{"description":"Validation Error"}},"operationId":"removeItem"}},"/remove-cart-items":{"post":{"tags":["Cart"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"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"}}}},"400":{"description":"Missing/empty itemIds, or items not in cart."},"422":{"description":"Validation Error"}},"operationId":"removeItems"}},"/remove-coupon":{"post":{"tags":["Cart"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"requestBody":{"description":"Empty body","content":{"application/json":{"schema":{"type":"object","properties":{}},"example":{}}}},"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"}}}},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"removeCoupon"}},"/reorder":{"post":{"tags":["Customer Order"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"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"}}}},"400":{"description":"Order not found, not owned by the caller, or items no longer purchasable."},"422":{"description":"Validation Error"}},"operationId":"api_apishopreorder_post"}},"/return-reasons":{"get":{"tags":["Customer Return"],"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,"schema":{"type":"string","enum":["return","cancel_items"]}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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}]}}}},"operationId":"api_apishopreturn-reasons_get_collection"}},"/returnable-items":{"get":{"tags":["Customer Return"],"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,"schema":{"type":"integer"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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}]}}}},"operationId":"api_apishopreturnable-items_get_collection"}},"/theme-customizations/{id}":{"get":{"tags":["ThemeCustomization"],"summary":"Get a theme customization block by ID","description":"Returns one storefront theme customization block (carousel, static content, etc.) with its current-locale `translation` and all `translations`. The `options` field is a JSON-encoded string. Public endpoint.","parameters":[{"name":"id","in":"path","description":"Theme customization ID","required":true,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"The theme customization block.","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,"themeCustomizationId":3,"locale":"en","options":"{\"filters\": {\"sort\": \"asc\", \"limit\": \"10\", \"parent_id\": \"1\"}}"},"translations":[{"id":3,"themeCustomizationId":3,"locale":"en","options":"{\"filters\": {\"sort\": \"asc\", \"limit\": \"10\", \"parent_id\": \"1\"}}"},{"id":29,"themeCustomizationId":3,"locale":"AR","options":"{\"filters\": {\"sort\": \"asc\", \"limit\": \"10\", \"parent_id\": \"1\"}}"}]}}}},"404":{"description":"Theme customization not found."}},"operationId":"api_apishoptheme-customizations_id_get"}},"/theme-customizations":{"get":{"tags":["ThemeCustomization"],"summary":"List theme customization blocks","description":"Returns the storefront theme customization blocks for the current channel. Filter by `?type=` (e.g. `category_carousel`, `product_carousel`, `static_content`). Public endpoint.","parameters":[{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":100}},{"name":"type","in":"query","description":"ThemeCustomization type","schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"200":{"description":"List of theme customization blocks.","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,"themeCustomizationId":3,"locale":"en","options":"{\"filters\": {\"sort\": \"asc\", \"limit\": \"10\", \"parent_id\": \"1\"}}"},"translations":[{"id":3,"themeCustomizationId":3,"locale":"en","options":"{\"filters\": {\"sort\": \"asc\", \"limit\": \"10\", \"parent_id\": \"1\"}}"}]}]}}}},"operationId":"api_apishoptheme-customizations_get_collection"}},"/update-cart-item":{"post":{"tags":["Cart"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"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"}}}},"400":{"description":"Missing cartItemId/quantity, or item not in cart."},"422":{"description":"Validation Error"}},"operationId":"updateItem"}},"/verify-tokens":{"post":{"tags":["Customer"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"requestBody":{"description":"The new VerifyToken resource","content":{"application/json":{"schema":{"type":"object","properties":{}},"example":{}}}},"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"}}}},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopverify-tokens_post"}},"/wishlists/{id}":{"get":{"tags":["Wishlist"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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."}},"operationId":"api_apishopwishlists_id_get"},"delete":{"tags":["Wishlist"],"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,"schema":{"type":"string"}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"responses":{"204":{"description":"Wishlist item removed. No content."},"404":{"description":"Wishlist item not found or not owned by the caller."}},"operationId":"api_apishopwishlists_id_delete"}},"/wishlists":{"get":{"tags":["Wishlist"],"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`.","schema":{"type":"string","enum":["id","created_at","id-asc","id-desc","created_at-asc","created_at-desc"]}},{"name":"order","in":"query","description":"Sort direction: `asc` (default) or `desc`. Use `desc` to show the most recently added items first.","schema":{"type":"string","enum":["asc","desc"]}},{"name":"page","in":"query","description":"The collection page number","schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","description":"The number of items per page","schema":{"type":"integer","default":10,"minimum":0,"maximum":50}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}]}}}},"operationId":"api_apishopwishlists_get_collection"},"post":{"tags":["Wishlist"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"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"}}}},"422":{"description":"Missing/invalid productId."},"400":{"description":"Invalid input"}},"operationId":"api_apishopwishlists_post"}},"/wishlists/toggle":{"post":{"tags":["Wishlist"],"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,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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},"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"}}}},"422":{"description":"Missing/invalid productId."},"400":{"description":"Invalid input"}},"operationId":"toggle_post"}},"/customer-invoices/{id}/pdf":{"get":{"tags":["Customer Order"],"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,"schema":{"type":"integer"}},{"name":"Authorization","in":"header","description":"Bearer token for authenticated customer (format: `Bearer <token>`).","required":true,"schema":{"type":"string","example":"Bearer 1234|abcdef..."}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}},"operationId":"downloadCustomerInvoicePdf"}},"/customer-downloadable-products/{id}/download":{"get":{"tags":["Customer Order"],"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,"schema":{"type":"integer"}},{"name":"Authorization","in":"header","description":"Bearer token for authenticated customer (format: `Bearer <token>`).","required":true,"schema":{"type":"string","example":"Bearer 1234|abcdef..."}},{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"schema":{"type":"string","example":"pk_storefront_jtLs43D8EHRyMoD77z4NzTYuRJXDqGLB"}},{"name":"X-Locale","in":"header","description":"Locale code for localized data (e.g. \"en\", \"fr\", \"ar\"). Defaults to channel's default locale.","schema":{"type":"string","example":"en"}},{"name":"X-Channel","in":"header","description":"Channel code (e.g. \"default\"). Defaults to the current channel.","schema":{"type":"string","example":"default"}},{"name":"X-Currency","in":"header","description":"Currency code (e.g. \"USD\", \"EUR\", \"INR\"). Defaults to channel's base currency.","schema":{"type":"string","example":"USD"}}],"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"}},"operationId":"downloadCustomerDownloadableProduct"}}},"components":{"schemas":{"CustomerDownloadableProduct":[],"CustomerDownloadableProduct.html":[],"CustomerInvoice":[],"CustomerInvoice.html":[],"CustomerOrder.CustomerOrderDetailDto":[],"CustomerOrder.CustomerOrderDetailDto.html":[],"CustomerOrder.CustomerOrderListDto":[],"CustomerOrder.CustomerOrderListDto.html":[],"CustomerOrderShipment":[],"CustomerOrderShipment.html":[],"CustomerOrderShipmentItem":[],"CustomerOrderShipmentItem.html":[],"CustomerReturn":[],"CustomerReturn.html":[],"OrderPaymentDto":[],"OrderPaymentDto.html":[]},"responses":[],"parameters":[],"requestBodies":[],"securitySchemes":{"bearerAuth":{"type":"http","description":"Value for the http bearer parameter.","scheme":"bearer","bearerFormat":"UUID"}}},"security":[{"bearerAuth":[]}]}