# Bundle Product

Bundle product with chapter-based configuration

## Retrieve bundle product detail

> Returns detail information for a bundle product with chapter-based configuration.\
> \
> \*\*Bundle Products:\*\*\
> Bundle products allow customers to build custom combinations by selecting items from different chapters (categories). Examples:\
> \* Build-your-own computer (CPU chapter, RAM chapter, Storage chapter)\
> \* Custom gift box (main item, accessories, packaging)\
> \* Personalized product with custom attributes\
> \
> \*\*Chapters:\*\*\
> Each chapter represents a selection category with:\
> \* Required or optional status\
> \* Form schema for additional inputs (e.g., engraving text)\
> \* Available product variants within the chapter\
> \
> \*\*Navigation:\*\*\
> \* Use \`current\_chapter\` parameter to navigate between chapters\
> \* Use \`current\_page\` for pagination within chapters\
> \* Selected attributes are tracked across chapters

```json
{"openapi":"3.1.0","info":{"title":"Product API - Product Catalog & Detail Information","version":"1.0.0"},"tags":[{"name":"Bundle Product","description":"Bundle product with chapter-based configuration"}],"servers":[{"description":"Commerce API Server","url":"https://{commerce_url}","variables":{"commerce_url":{"default":"sandbox.akinon.com","description":"Commerce server URL (e.g., your-store.akinon.com)"}}}],"paths":{"/bundle-product/{product_id}/":{"get":{"tags":["Bundle Product"],"operationId":"getBundleProductDetail","summary":"Retrieve bundle product detail","description":"Returns detail information for a bundle product with chapter-based configuration.\n\n**Bundle Products:**\nBundle products allow customers to build custom combinations by selecting items from different chapters (categories). Examples:\n* Build-your-own computer (CPU chapter, RAM chapter, Storage chapter)\n* Custom gift box (main item, accessories, packaging)\n* Personalized product with custom attributes\n\n**Chapters:**\nEach chapter represents a selection category with:\n* Required or optional status\n* Form schema for additional inputs (e.g., engraving text)\n* Available product variants within the chapter\n\n**Navigation:**\n* Use `current_chapter` parameter to navigate between chapters\n* Use `current_page` for pagination within chapters\n* Selected attributes are tracked across chapters","parameters":[{"name":"product_id","in":"path","required":true,"description":"Unique identifier of the bundle product.\n\nMust be a product with type \"bundle\".","schema":{"type":"integer"}},{"name":"current_chapter","in":"query","required":false,"description":"Slug or identifier of the chapter to display.\n\nIf not provided, defaults to the first chapter.","schema":{"type":"string"}},{"name":"current_page","in":"query","required":false,"description":"Page number within the current chapter for pagination.\n\nDefaults to \"1\" if not specified.","schema":{"type":"string","default":"1"}}],"responses":{"200":{"description":"Bundle product detail retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BundleProductDetailResponse"}}}},"404":{"description":"Bundle product not found.\n\nOccurs when:\n* No product exists with the specified ID\n* Product exists but is not of type \"bundle\""}}}}},"components":{"schemas":{"BundleProductDetailResponse":{"type":"object","description":"Response for bundle product detail page with chapter navigation.","required":["in_stock","bundle_product","chapters","current_chapter"],"properties":{"in_stock":{"type":"boolean","description":"Aggregate stock status for the bundle."},"bundle_product":{"$ref":"#/components/schemas/Product"},"chapters":{"type":"array","description":"All available chapters for this bundle.\n\nEach chapter represents a selection category.","items":{"$ref":"#/components/schemas/BundleChapter"}},"current_chapter":{"$ref":"#/components/schemas/BundleChapterDetail"},"current_page":{"type":"string","description":"Current page number within the chapter.","default":"1"},"selected_attributes":{"type":"object","description":"Currently selected attributes across all chapters.\n\nTracks user selections as they navigate through the bundle configuration.","additionalProperties":true}}},"Product":{"type":"object","description":"Core product information including pricing, stock, and attributes.","required":["pk","name","sku","base_code","price","in_stock","product_type"],"properties":{"pk":{"type":"integer","description":"Unique product identifier"},"name":{"type":"string","description":"Display name of the product.\n\nMay be translated based on active language settings."},"sku":{"type":"string","description":"Stock Keeping Unit - unique product code for inventory management."},"base_code":{"type":"string","description":"Base product code shared across variants.\n\nAll size/color variants of the same product share this code."},"attributes":{"type":"object","description":"Product attributes as key-value pairs.\n\nContains both variant-defining attributes (size, color) and descriptive attributes (material, weight).","additionalProperties":true},"attribute_set":{"type":"integer","description":"ID of the attribute set that defines this product's attribute schema."},"attributes_kwargs":{"type":"object","description":"Extended attribute metadata including labels and display values.\n\nProvides translated attribute names and formatted values for display.","additionalProperties":true},"extra_attributes":{"type":["object","null"],"description":"Additional custom attributes not part of the standard attribute set.","additionalProperties":true},"productimage_set":{"type":"array","description":"Product images in multiple sizes and formats.","items":{"$ref":"#/components/schemas/ProductImage"}},"productvideo_set":{"type":"array","description":"Product videos for enhanced product presentation.","items":{"$ref":"#/components/schemas/ProductVideo"}},"price":{"type":"string","description":"Current selling price as a decimal string.\n\nFormat: \"123.45\" (two decimal places)"},"retail_price":{"type":"string","description":"Original retail/list price before discounts.\n\nCompare with `price` to calculate discount percentage."},"currency_type":{"type":"string","description":"Currency code for price values.\n\nCommon values: \"try\" (Turkish Lira), \"usd\", \"eur\""},"price_type":{"type":"string","description":"Price category or tier identifier."},"tax_rate":{"type":"string","description":"Applicable tax rate as a decimal percentage.\n\nExample: \"18.00\" represents 18% tax"},"in_stock":{"type":"boolean","description":"Stock availability status for this specific product/variant."},"stock":{"type":"integer","description":"Available stock quantity.\n\nMay be from default stock or inventory-specific stock list."},"unit_type":{"type":"string","description":"Unit of measurement for stock.\n\nCommon values: \"quantity\", \"kg\", \"meter\""},"product_type":{"type":"string","description":"Product classification type.\n\n| Value | Code | Description |\n|-------|------|-------------|\n| 0 | simple | Standard product with optional variants |\n| 1 | product_meta | Parent product that groups variants |\n| 2 | bundle | Configurable product with chapters |\n| 3 | grouped | Collection of related products sold together |\n| 4 | miscellaneous | Special product (services, fees) |\n| 5 | offer | Seller-specific product offer |","enum":["0","1","2","3","4","5"]},"absolute_url":{"type":"string","format":"uri","description":"Canonical URL for this product.\n\nUse this for SEO-friendly product links."},"form_schema":{"type":"array","description":"Form field definitions for products requiring additional input.\n\nUsed for personalized products, custom engravings, etc.","items":{"$ref":"#/components/schemas/AttributeConfigForm"}},"is_ready_to_basket":{"type":"boolean","description":"Indicates if the product can be directly added to basket.\n\nFalse when variant selection or additional input is required."},"data_source":{"oneOf":[{"$ref":"#/components/schemas/DataSource"},{"type":"null"}],"description":"Seller/data source information for marketplace products."},"basket_offers":{"type":"array","description":"Promotional offers applicable when this product is in the basket.","items":{"type":"object"}},"is_listable":{"type":"boolean","description":"Indicates if the product should appear in product listings.\n\nNon-listable products may only be accessible via direct URL."},"listing_code":{"type":"string","description":"Code used for product listing grouping."}}},"ProductImage":{"type":"object","description":"Product image with multiple size variants","properties":{"pk":{"type":"integer","description":"Image identifier"},"status":{"type":"string","description":"Image processing status"},"image":{"type":"string","format":"uri","description":"Original image URL"},"order":{"type":"integer","description":"Display order (lower numbers appear first)"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail size image URL"},"mid_thumbnail":{"type":"string","format":"uri","description":"Medium thumbnail URL"},"detailed_thumbnail":{"type":"string","format":"uri","description":"Detailed/larger thumbnail URL"}}},"ProductVideo":{"type":"object","description":"Product video information","properties":{"pk":{"type":"integer","description":"Video identifier"},"video_type":{"type":"string","description":"Video hosting platform type.\n\nCommon values: \"youtube\", \"vimeo\", \"self_hosted\""},"video":{"type":"string","format":"uri","description":"Video URL or embed code"}}},"AttributeConfigForm":{"type":"object","description":"Form field configuration for product customization inputs.","properties":{"key":{"type":"string","description":"Field identifier"},"label":{"type":"string","description":"Field display label"},"type":{"type":"string","description":"Input type.\n\nCommon values: \"text\", \"textarea\", \"select\", \"file\""},"required":{"type":"boolean","description":"Whether the field is required"},"options":{"type":"array","items":{"type":"object"},"description":"Available options for select fields"}}},"DataSource":{"type":"object","description":"Seller or data source information.","properties":{"pk":{"type":"integer","description":"Data source identifier"},"name":{"type":"string","description":"Internal name"},"title":{"type":"string","description":"Display title"},"slug":{"type":"string","description":"URL-friendly identifier"}}},"BundleChapter":{"type":"object","description":"Chapter information with available variants.","properties":{"chapter":{"$ref":"#/components/schemas/BundleChapterDetail"},"variants":{"type":"array","description":"Variant selection groups within this chapter.","items":{"$ref":"#/components/schemas/VariantGroup"}}}},"BundleChapterDetail":{"type":"object","description":"Detailed chapter configuration.","required":["pk","name","slug","order","is_required"],"properties":{"pk":{"type":"integer","description":"Chapter identifier"},"name":{"type":"string","description":"Display name of the chapter"},"slug":{"type":"string","description":"URL-friendly chapter identifier"},"order":{"type":"integer","description":"Display order (lower numbers appear first)"},"is_required":{"type":"boolean","description":"Whether selection in this chapter is mandatory.\n\nBundle cannot be added to basket without completing required chapters."},"form_schema":{"type":"array","description":"Additional form fields for this chapter (e.g., customization options).","items":{"$ref":"#/components/schemas/AttributeConfigForm"}},"attributes":{"type":"object","description":"Chapter-level attributes","additionalProperties":true},"attributes_kwargs":{"type":"object","description":"Extended attribute metadata","additionalProperties":true}}},"VariantGroup":{"type":"object","description":"A group of variant options for a single attribute dimension.\n\nEach variant group represents one selectable attribute (e.g., all available sizes).","required":["attribute_key","attribute_name","options"],"properties":{"attribute_key":{"type":"string","description":"Internal key for this attribute.\n\nUsed as query parameter name for variant selection."},"attribute_name":{"type":"string","description":"Human-readable attribute name for display.\n\nMay be translated based on language settings."},"options":{"type":"array","description":"Available options within this attribute group.","items":{"$ref":"#/components/schemas/VariantOption"}}}},"VariantOption":{"type":"object","description":"A single selectable variant option within an attribute group.","required":["label","value","is_selected","is_selectable"],"properties":{"is_selected":{"type":"boolean","description":"Indicates if this option is currently selected.\n\nBased on query parameters or default selection logic."},"is_selectable":{"type":"boolean","description":"Indicates if this option can be selected given current selections.\n\nFalse when the combination with other selected attributes is unavailable."},"is_selectable_without_stock":{"type":["boolean","null"],"description":"Indicates if this option would be selectable ignoring stock status.\n\nUseful for showing \"out of stock\" vs. \"invalid combination\" states."},"in_stock":{"type":["boolean","null"],"description":"Stock status for this specific option combination."},"order":{"type":"string","description":"Display order for this option."},"label":{"type":"string","description":"Display label for this option."},"value":{"type":"string","description":"Internal value for this option.\n\nUsed as query parameter value for variant selection."},"product":{"allOf":[{"$ref":"#/components/schemas/Product"}],"description":"Full product details for this variant option.\n\nOnly populated when this specific option is selected or needed."}}}}}}
```

## Upload custom image for bundle product

> Uploads a custom image for personalized bundle products.\
> \
> \*\*Use Case:\*\*\
> Some bundle products allow customers to upload custom images for personalization (e.g., photo printing, custom engravings). This endpoint handles the image upload process.\
> \
> \*\*Response:\*\*\
> Returns the uploaded file information including:\
> \* Generated UUID for tracking\
> \* Original filename\
> \* Storage path for the uploaded image

```json
{"openapi":"3.1.0","info":{"title":"Product API - Product Catalog & Detail Information","version":"1.0.0"},"tags":[{"name":"Bundle Product","description":"Bundle product with chapter-based configuration"}],"servers":[{"description":"Commerce API Server","url":"https://{commerce_url}","variables":{"commerce_url":{"default":"sandbox.akinon.com","description":"Commerce server URL (e.g., your-store.akinon.com)"}}}],"paths":{"/bundle-product/{product_id}/":{"post":{"tags":["Bundle Product"],"operationId":"uploadBundleProductImage","summary":"Upload custom image for bundle product","description":"Uploads a custom image for personalized bundle products.\n\n**Use Case:**\nSome bundle products allow customers to upload custom images for personalization (e.g., photo printing, custom engravings). This endpoint handles the image upload process.\n\n**Response:**\nReturns the uploaded file information including:\n* Generated UUID for tracking\n* Original filename\n* Storage path for the uploaded image","parameters":[{"name":"product_id","in":"path","required":true,"description":"Unique identifier of the bundle product","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"image":{"type":"string","format":"binary","description":"Image file to upload (Base64 encoded)"},"chapter":{"type":"string","description":"Chapter slug for which the image is being uploaded"}},"required":["image","chapter"]}}}},"responses":{"200":{"description":"Image uploaded successfully","content":{"application/json":{"schema":{"type":"object","properties":{"uuid":{"type":"string","description":"Unique identifier for the uploaded file"},"filename":{"type":"string","description":"Original filename of the uploaded image"},"file_path":{"type":"string","description":"Storage path where the image was saved"}}}}}},"404":{"description":"Bundle product not found"}}}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://apidocs.akinon.com/commerce-openapis/products/bundle-product.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
