{"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":"Raises a return for one returnable order item. Attach evidence images in `images[]`.","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":{"multipart/form-data":{"schema":{"type":"object","required":["order_id","order_item_id","rma_qty","resolution_type","rma_reason_id","agreement"],"properties":{"order_id":{"type":"integer","example":12},"order_item_id":{"type":"integer","example":45},"rma_qty":{"type":"integer","example":1},"resolution_type":{"type":"string","enum":["return","cancel_items"],"example":"return"},"rma_reason_id":{"type":"integer","example":2},"information":{"type":"string","example":"Item arrived damaged."},"package_condition":{"type":"string","enum":["open","packed"],"example":"open"},"custom_attributes":{"type":"string","description":"JSON object keyed by custom field id.","example":"{\"1\":\"INV-9921\"}"},"agreement":{"type":"boolean","example":true},"images[]":{"type":"array","items":{"type":"string","format":"binary"},"description":"Evidence images."}}}},"application/json":{"schema":{"type":"object","required":["order_id","order_item_id","rma_qty","resolution_type","rma_reason_id","agreement"],"properties":{"order_id":{"type":"integer","example":12},"order_item_id":{"type":"integer","example":45},"rma_qty":{"type":"integer","example":1},"resolution_type":{"type":"string","enum":["return","cancel_items"],"example":"return"},"rma_reason_id":{"type":"integer","example":2},"information":{"type":"string","example":"Item arrived damaged."},"package_condition":{"type":"string","enum":["open","packed"],"example":"open"},"custom_attributes":{"type":"object","example":{"1":"INV-9921","2":["morning","evening"]}},"agreement":{"type":"boolean","example":true}}}}},"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":"Sends a message on a return. Attach a file in `file`.","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":{"multipart/form-data":{"schema":{"type":"object","required":["return_id","message"],"properties":{"return_id":{"type":"integer","example":12},"message":{"type":"string","example":"Photo of the damaged zipper attached."},"file":{"type":"string","format":"binary","description":"Attachment for this message."}}}},"application/json":{"schema":{"type":"object","required":["return_id","message"],"properties":{"return_id":{"type":"integer","example":12},"message":{"type":"string","example":"Any update on my return?"}}}}},"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"}},"/eu-withdrawal-status":{"get":{"tags":["EU Withdrawal"],"summary":"Check whether EU withdrawal is enabled","description":"Returns whether customers can file an EU withdrawal on the current channel.","parameters":[{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"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 EU withdrawal setting of the current channel.","content":{"application/json":{"example":[{"id":"default","channel":"default","enabled":false}]}}}},"operationId":"api_apishopeu-withdrawal-status_get_collection"}},"/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"}},"/gdpr-status":{"get":{"tags":["GDPR Requests"],"summary":"Check whether GDPR requests are enabled","description":"Returns whether customers can raise GDPR data requests on the current channel.","parameters":[{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"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 setting of the current channel.","content":{"application/json":{"example":[{"id":"default","channel":"default","enabled":true}]}}}},"operationId":"api_apishopgdpr-status_get_collection"}},"/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","altText":"Blue running shoe, side view","fileName":"zKcWZTLDjcawJmaNg8g1cpARqwVONgEKEflabstT"}]}}}},"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","altText":"Blue running shoe, side view","fileName":"zKcWZTLDjcawJmaNg8g1cpARqwVONgEKEflabstT"}}}},"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","altText":"Blue running shoe, side view","fileName":"zKcWZTLDjcawJmaNg8g1cpARqwVONgEKEflabstT"}]}}}},"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-custom-fields":{"get":{"tags":["Customer Return"],"summary":"List the active custom fields of the return form","description":"The additional fields the storefront return form renders. Answer them with `customAttributes` when creating a return, keyed by the field `id`. Fields with `isRequired: true` must be answered; `select`/`radio` answers must be one of the option `value`s, `multiselect`/`checkbox` answers a list of them.","parameters":[{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"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 custom fields, in the order the storefront renders them.","content":{"application/json":{"example":[{"id":1,"code":"invoice_number","label":"Invoice number","type":"text","isRequired":true,"position":1,"inputValidation":"numeric","options":[]},{"id":2,"code":"preferred_pickup_slot","label":"Preferred pickup slot","type":"select","isRequired":false,"position":2,"inputValidation":null,"options":[{"id":3,"name":"Morning","value":"morning"},{"id":4,"name":"Evening","value":"evening"}]}]}}}},"operationId":"api_apishopreturn-custom-fields_get_collection"}},"/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"}},"/returnable-orders":{"get":{"tags":["Customer Return"],"summary":"List the orders a return can still be raised against","description":"The authenticated customer's orders that can start a return \u2014 the set the storefront shows first in the New Request flow. An order appears while it holds at least one item that was placed with returns allowed, is inside its return window, and has quantity left after everything already returned. Canceled, closed, fraud and pending-payment orders never appear. Pick an order from here, then call /returnable-items?order_id= for the items and their quantity caps.","parameters":[{"name":"increment_id","in":"query","description":"Filter by order number (partial match).","schema":{"type":"string"}},{"name":"status","in":"query","description":"Filter by order status.","schema":{"type":"string"}},{"name":"sort","in":"query","description":"Sort column \u2014 `created_at` (default), `increment_id` or `grand_total`.","schema":{"type":"string"}},{"name":"order","in":"query","description":"Sort direction \u2014 `desc` (default) or `asc`.","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":"Orders eligible for a new return.","content":{"application/json":{"example":[{"id":41,"incrementId":"41","status":"completed","statusLabel":"Completed","grandTotal":160,"formattedGrandTotal":"$160.00","orderCurrencyCode":"USD","paymentMethodTitle":"Cash On Delivery","totalQtyOrdered":3,"totalReturnedQty":1,"returnableQty":2,"createdAt":"2026-08-30T09:12:44+00:00"}]}}}},"operationId":"api_apishopreturnable-orders_get_collection"}},"/customers/social-login":{"post":{"tags":["Customer"],"summary":"Social login","description":"Verify a provider token the app/web already obtained (Google Identity Services or a native SDK \u2014 no redirect), then sign the customer in, creating and linking the account on first sight. Returns a Bearer `token` for subsequent calls. Providers: `google`, `facebook`, `linkedin`.","parameters":[{"name":"X-STOREFRONT-KEY","in":"header","description":"Storefront API Key for authentication. Required for all shop/storefront API requests.","required":true,"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":"A provider and one of idToken / accessToken.","content":{"application/json":{"schema":{"type":"object","required":["provider"],"properties":{"provider":{"type":"string","enum":["google","facebook","linkedin"],"example":"google"},"idToken":{"type":"string","description":"Google ID token (google only).","example":"eyJhbGciOi\u2026"},"accessToken":{"type":"string","description":"OAuth access token (facebook / linkedin, or google)."},"deviceToken":{"type":"string","description":"Optional FCM token to register push in the same call."}}},"example":{"provider":"google","idToken":"eyJhbGciOi\u2026"}}},"required":true},"responses":{"201":{"description":"Signed in. Store `token` as the Bearer token. `isNewCustomer` marks a first-time sign-up.","content":{"application/json":{"example":{"id":1782,"token":"1550|1LMsQ6\u2026","apiToken":"rjTLsuOs\u2026","firstName":"Nadia","lastName":"Rahman","email":"nadia@example.com","phone":null,"isNewCustomer":true,"success":true,"message":"Signed in successfully.","code":null}}}},"400":{"description":"Invalid input"},"422":{"description":"Validation Error"}},"operationId":"api_apishopcustomerssocial-login_post"}},"/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":[]}],"tags":[{"name":"Cart"},{"name":"Attribute"},{"name":"AttributeTranslation"},{"name":"Product"},{"name":"Product Types"},{"name":"Customer Order"},{"name":"Category"},{"name":"CategoryTree"},{"name":"Channel"},{"name":"Checkout"},{"name":"CompareItem"},{"name":"ContactUs"},{"name":"Country"},{"name":"CountryState"},{"name":"Currency"},{"name":"Customer"},{"name":"Customer Address"},{"name":"Customer Return"},{"name":"Customer Review"},{"name":"Wishlist"},{"name":"EU Withdrawal"},{"name":"GDPR Requests"},{"name":"Locale"},{"name":"MergeCart"},{"name":"Newsletter"},{"name":"CMS Page"},{"name":"CMS Page Translation"},{"name":"ThemeCustomization"}]}