# Create Product Endpoint

#### Structure

##### Product

<table border="1" id="bkmrk-name-type-descriptio" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col></colgroup><tbody><tr><td>**Name**  
</td><td>**Type**  
</td><td>**Description**  
</td><td>**Required**  
</td></tr><tr><td>`id`</td><td>int</td><td>The id for the product</td><td>No</td></tr><tr><td>`model`</td><td>string</td><td>The **unique** model identifier for the product</td><td>Yes</td></tr><tr><td>`name`</td><td>string</td><td>The display name of the product</td><td>Yes</td></tr><tr><td>`manufacturer`</td><td>string</td><td>The manufacturer/brand of the product</td><td>No</td></tr><tr><td>`summary`</td><td>string</td><td>A short summary of the product</td><td>No</td></tr><tr><td>`description`</td><td>string</td><td>A detailed description of the product</td><td>No</td></tr><tr><td>`active`</td><td>boolean</td><td>Whether the product is active (available for purchase)</td><td>No</td></tr><tr><td>`visible`</td><td>boolean</td><td>Whether the product is visible in the storefront</td><td>No</td></tr><tr><td>`attribute_groups_to_split_by`</td><td>array</td><td>An array of attribute group names to split listings by (e.g., \["Size"\])</td><td>No</td></tr><tr><td>`published_at`</td><td>timestamp</td><td>When the product was published</td><td>No</td></tr><tr><td>`images`</td><td>array</td><td>An array of [Image](https://support.aerocommerce.com/books/api/page/create-product-endpoint#bkmrk-image) objects</td><td>No</td></tr><tr><td>`categories`</td><td>array</td><td>An array of [Category](https://support.aerocommerce.com/books/api/page/create-product-endpoint#bkmrk-category) objects</td><td>No</td></tr><tr><td>`tags`</td><td>array</td><td>An array of [Tag](https://support.aerocommerce.com/books/api/page/create-product-endpoint#bkmrk-tag) objects</td><td>No</td></tr><tr><td>`variants`</td><td>array</td><td>An array of [Variant](https://support.aerocommerce.com/books/api/page/create-product-endpoint#bkmrk-variant) objects</td><td>Yes</td></tr><tr><td>`seo`</td><td>object</td><td>A [SEO](https://support.aerocommerce.com/books/api/page/create-product-endpoint#bkmrk-seo) object</td><td>No</td></tr><tr><td>`settings`</td><td>object</td><td>A [Settings](https://support.aerocommerce.com/books/api/page/create-product-endpoint#bkmrk-settings) object with grouped key-value pairs</td><td>No</td></tr><tr><td>`additional_attributes`</td><td>array</td><td>An array of [Additional Attribute](https://support.aerocommerce.com/books/api/page/create-product-endpoint#bkmrk-additional-attribute) objects</td><td>No</td></tr><tr><td>`specifications` `*`</td><td>array</td><td>An array of [Specification](https://support.aerocommerce.com/books/api/page/create-product-endpoint#bkmrk-specification) objects</td><td>No</td></tr><tr><td>`specification_groups` `*`</td><td>array</td><td>An array of [Specification Group](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-specification-group) objects</td><td>No</td></tr><tr><td>`upsells`</td><td>array</td><td>An array of [Upsell](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-upsell) objects</td><td>No</td></tr><tr><td>`related_listings`</td><td>array</td><td>An array of[ Related Listing](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-related-listing) objects</td><td>No</td></tr></tbody></table>

`*` `specifications` is if using `<1.0.0` version of `aerocargo/specifications`, otherwise use `specification_groups`.

##### Category

<table border="1" id="bkmrk-name-type-descriptio-1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col></colgroup><tbody><tr><td>**Name**  
</td><td>**Type**  
</td><td>**Description**  
</td><td>**Required**  
</td></tr><tr><td>`name`</td><td>string</td><td>The category name or breadcrumb (e.g., "Coats" or "Mens &gt; "Coats")</td><td>Yes</td></tr></tbody></table>

##### Variant

<table border="1" id="bkmrk-name-type-descriptio-2" style="border-collapse: collapse; width: 100%; height: 1395.63px;"><colgroup><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px;">**Name**  
</td><td style="height: 29.7969px;">**Type**  
</td><td style="height: 29.7969px;">**Description**  
</td><td style="height: 29.7969px;">**Required**  
</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`id`</td><td style="height: 29.7969px;">int</td><td style="height: 29.7969px;">The id for the variant</td><td style="height: 29.7969px;">No</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`sku`</td><td style="height: 46.5938px;">string</td><td style="height: 46.5938px;">The **unique** SKU for the variant</td><td style="height: 46.5938px;">Yes</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`reference`</td><td style="height: 46.5938px;">string</td><td style="height: 46.5938px;">The **unique** reference for the variant</td><td style="height: 46.5938px;">No</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`name`</td><td style="height: 29.7969px;">string</td><td style="height: 29.7969px;">Display name of the variant</td><td style="height: 29.7969px;">No</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`summary`</td><td style="height: 46.5938px;">string</td><td style="height: 46.5938px;">A short summary of the variant</td><td style="height: 46.5938px;">No</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`description`</td><td style="height: 46.5938px;">string</td><td style="height: 46.5938px;">A detailed description of the variant</td><td style="height: 46.5938px;">No</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`barcode`</td><td style="height: 46.5938px;">string</td><td style="height: 46.5938px;">The barcode/UPC/EAN of the variant</td><td style="height: 46.5938px;">No</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`buyable`</td><td style="height: 46.5938px;">boolean</td><td style="height: 46.5938px;">Whether the variant can be purchased</td><td style="height: 46.5938px;">No</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`visible`</td><td style="height: 46.5938px;">boolean</td><td style="height: 46.5938px;">Whether the variant is visible in listings</td><td style="height: 46.5938px;">No</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`shippable`</td><td style="height: 46.5938px;">boolean</td><td style="height: 46.5938px;">Whether the variant is shippable</td><td style="height: 46.5938px;">No</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`discountable`</td><td style="height: 46.5938px;">boolean</td><td style="height: 46.5938px;">Whether discounts can be applied to this variant</td><td style="height: 46.5938px;">No</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`hide_when_no_stock`</td><td style="height: 46.5938px;">boolean</td><td style="height: 46.5938px;">Whether the variant should be hidden when out of stock</td><td style="height: 46.5938px;">No</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`infinite_stock`</td><td style="height: 46.5938px;">boolean</td><td style="height: 46.5938px;">Whether the variant has unlimited stock</td><td style="height: 46.5938px;">No</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`stock_level`</td><td style="height: 29.7969px;">int</td><td style="height: 29.7969px;">Current stock level</td><td style="height: 29.7969px;">No</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`stock_buffer`</td><td style="height: 29.7969px;">int</td><td style="height: 29.7969px;">The stock buffer</td><td style="height: 29.7969px;">No</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`tax_group`</td><td style="height: 46.5938px;">string</td><td style="height: 46.5938px;">The tax group applied to the variant</td><td style="height: 46.5938px;">No</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`minimum_quantity`</td><td style="height: 46.5938px;">int</td><td style="height: 46.5938px;">Minimum quantity per purchase</td><td style="height: 46.5938px;">No</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`maximum_quantity`</td><td style="height: 46.5938px;">int</td><td style="height: 46.5938px;">Maximum quantity per purchase</td><td style="height: 46.5938px;">No</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`multiples_of`</td><td style="height: 46.5938px;">int</td><td style="height: 46.5938px;">Purchasable only in multiples of this number</td><td style="height: 46.5938px;">No</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`weight`</td><td style="height: 29.7969px;">float</td><td style="height: 29.7969px;">Weight of the variant</td><td style="height: 29.7969px;">No</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`weight_unit`</td><td style="height: 29.7969px;">string</td><td style="height: 29.7969px;">Unit of weight (e.g., `kg`, `lb`)</td><td style="height: 29.7969px;">No</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`volume`</td><td style="height: 29.7969px;">float</td><td style="height: 29.7969px;">Volume of the variant</td><td style="height: 29.7969px;">No</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`volume_unit`</td><td style="height: 46.5938px;">string</td><td style="height: 46.5938px;">Unit of volume (e.g., `m^3`, `cm^3`)</td><td style="height: 46.5938px;">No</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`hs`</td><td style="height: 46.5938px;">string</td><td style="height: 46.5938px;">HS (Harmonized System) code for customs</td><td style="height: 46.5938px;">No</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`origin_country`</td><td style="height: 46.5938px;">string</td><td style="height: 46.5938px;">ISO country code of origin (e.g., `US`, `GB`)</td><td style="height: 46.5938px;">No</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`goods_description`</td><td style="height: 46.5938px;">string</td><td style="height: 46.5938px;">Description of goods for customs</td><td style="height: 46.5938px;">No</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`attributes`</td><td style="height: 29.7969px;">array</td><td style="height: 29.7969px;">An array of [Attribute](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-attribute) objects</td><td style="height: 29.7969px;">If product has variants</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`tags`</td><td style="height: 29.7969px;">array</td><td style="height: 29.7969px;">An array of [Tag](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-tag) objects</td><td style="height: 29.7969px;">No</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`cost`</td><td style="height: 29.7969px;">object</td><td style="height: 29.7969px;">The [Cost Price](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-cost-price) of the variant</td><td style="height: 29.7969px;">No</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`prices`</td><td style="height: 29.7969px;">array</td><td style="height: 29.7969px;">An array of [Price](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-price) objects</td><td style="height: 29.7969px;">Yes</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`additional_attributes`</td><td style="height: 46.5938px;">array</td><td style="height: 46.5938px;">An array of [Additional Attribute](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-additional-attribute) objects</td><td style="height: 46.5938px;">No</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`specifications` `*`</td><td style="height: 46.5938px;">array</td><td style="height: 46.5938px;">An array of [Specification](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-specification) objects</td><td style="height: 46.5938px;">No</td></tr><tr style="height: 29.7969px;"><td>`specification_groups` `*`</td><td>array</td><td>An array of [Specification Group](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-specification-group) objects</td><td>No</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`upsells`</td><td style="height: 29.7969px;">array</td><td style="height: 29.7969px;">An array of [Upsell](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-upsell) objects</td><td style="height: 29.7969px;">No</td></tr></tbody></table>

`*` `specifications` is if using `<1.0.0` version of `aerocargo/specifications`, otherwise use `specification_groups`.

##### Attribute

<table border="1" id="bkmrk-name-type-descriptio-3" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col></colgroup><tbody><tr><td>**Name**  
</td><td>**Type**  
</td><td>**Description**  
</td><td>**Required**  
</td></tr><tr><td>`name`</td><td>string</td><td>The name of the attribute (e.g., "Small" or "Red")</td><td>Yes</td></tr><tr><td>`tags`</td><td>array</td><td>An array of [Tag](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-tag) objects linked to the attribute</td><td>No</td></tr><tr><td>`group`</td><td>object</td><td>The [Attribute Group](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-attribute-group) of the attribute</td><td>Yes</td></tr></tbody></table>

##### Attribute Group

<table border="1" id="bkmrk-name-type-descriptio-4" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col></colgroup><tbody><tr><td>**Name**  
</td><td>**Type**  
</td><td>**Description**  
</td><td>**Required**  
</td></tr><tr><td>`name`</td><td>string</td><td>The name of the attribute group (e.g., "Size", "Colour")</td><td>Yes</td></tr></tbody></table>

##### Tag

<table border="1" id="bkmrk-name-type-descriptio-5" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col></colgroup><tbody><tr><td>**Name**  
</td><td>**Type**  
</td><td>**Description**  
</td><td>**Required**  
</td></tr><tr><td>`name`</td><td>string</td><td>The name of the tag (e.g., "Small" or "Red")</td><td>Yes</td></tr><tr><td>`group`</td><td>object</td><td>The [Tag Group](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-tag-group) of the tag</td><td>Yes</td></tr></tbody></table>

##### Tag Group

<table border="1" id="bkmrk-name-type-descriptio-6" style="border-collapse: collapse; width: 100%; height: 29.7969px;"><colgroup><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px;">**Name**  
</td><td style="height: 29.7969px;">**Type**  
</td><td style="height: 29.7969px;">**Description**  
</td><td style="height: 29.7969px;">**Required**  
</td></tr><tr><td>`name`</td><td>string</td><td>The name of the tag group (e.g., "Size" or "Colour"</td><td>Yes</td></tr></tbody></table>

##### Image

<table border="1" id="bkmrk-name-type-descriptio-7" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col></colgroup><tbody><tr><td>**Name**  
</td><td>**Type**  
</td><td>**Description**  
</td><td>**Required**  
</td></tr><tr><td>`src`</td><td>string</td><td>The source url of the image</td><td>Yes</td></tr><tr><td>`alt`</td><td>string</td><td>Alt text for accessibility and SEO</td><td>No</td></tr><tr><td>`is_default`</td><td>boolean</td><td>Whether this is a default image</td><td>No</td></tr><tr><td>`position`</td><td>int</td><td>Sort order position of the image</td><td>No</td></tr><tr><td>`attributes`</td><td>array</td><td>An array of [Attribute](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-attribute) objects that apply to this image</td><td>No</td></tr></tbody></table>

##### Cost Price

<table border="1" id="bkmrk-name-type-descriptio-8" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col></colgroup><tbody><tr><td>**Name**  
</td><td>**Type**  
</td><td>**Description**  
</td><td>**Required**  
</td></tr><tr><td>`amount`</td><td>float</td><td>The cost price **including tax**</td><td>Yes</td></tr><tr><td>`currency`</td><td>string</td><td>Currency code (defaults to store default if not provided)</td><td>No</td></tr></tbody></table>

##### Price

<table border="1" id="bkmrk-name-type-descriptio-9" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col></colgroup><tbody><tr><td>**Name**  
</td><td>**Type**  
</td><td>**Description**  
</td><td>**Required**  
</td></tr><tr><td>`price`</td><td>float</td><td>The base price **including tax**</td><td>Yes</td></tr><tr><td>`sale_price`</td><td>float</td><td>The sale price **including tax**</td><td>No</td></tr><tr><td>`retail_price`</td><td>float</td><td>The retail price **including tax**</td><td>No</td></tr><tr><td>`quantity`</td><td>int</td><td>Quantity required for this price tier (default: 1)</td><td>No</td></tr><tr><td>`currency`</td><td>string</td><td>Currency code (defaults to store default)</td><td>No</td></tr><tr><td>`start_at`</td><td>timestamp</td><td>When this price becomes active (e.g., 2023-09-01 09:29:41)</td><td>No</td></tr><tr><td>`end_at`</td><td>timestamp</td><td>When this price expires</td><td>No</td></tr><tr><td>`reference`</td><td>string</td><td>The **unique** reference for the price</td><td>No</td></tr></tbody></table>

##### SEO

<table border="1" id="bkmrk-name-type-descriptio-10" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col></colgroup><tbody><tr><td>**Name**  
</td><td>**Type**  
</td><td>**Description**  
</td><td>**Required**  
</td></tr><tr><td>`heading`</td><td>string</td><td>The SEO Heading</td><td>No</td></tr><tr><td>`page_title`</td><td>string</td><td>The SEO Page Title</td><td>No</td></tr><tr><td>`meta_description`</td><td>string</td><td>The SEO Meta Description</td><td>No</td></tr><tr><td>`canonical`</td><td>string</td><td>The SEO Canonical</td><td>No</td></tr><tr><td>`noindex`</td><td>boolean</td><td>The SEO No Index</td><td>No</td></tr><tr><td>`nofollow`</td><td>boolean</td><td>The SEO No Follow</td><td>No</td></tr></tbody></table>

##### Settings

Settings are grouped as key-value pairs.

- Use "\_" for ungrouped settings.
- Each group contains its own object of key-value pairs.

```json
{
    "settings": {
        "_": {
            "no_group": "value"
        },
        "group": {
            "key": "value"
        }
    }
}
```

##### Additional Attribute

<table border="1" id="bkmrk-name-type-descriptio-11" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col></colgroup><tbody><tr><td>**Name**  
</td><td>**Type**  
</td><td>**Description**  
</td><td>**Required**  
</td></tr><tr><td>`key`</td><td>string</td><td>The key of the additional attribute</td><td>Yes</td></tr><tr><td>`value`</td><td>string</td><td>The value of the additional attribute</td><td>Yes</td></tr></tbody></table>

##### Specification

<table border="1" id="bkmrk-name-type-descriptio-12" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col></colgroup><tbody><tr><td>**Name**  
</td><td>**Type**  
</td><td>**Description**  
</td><td>**Required**  
</td></tr><tr><td>`group.name`</td><td>string</td><td>The name of the specification group</td><td>Yes</td></tr><tr><td>`name`</td><td>string</td><td>The name of the specification</td><td>`*`</td></tr><tr><td>`value`</td><td>string</td><td>The value of the specification</td><td>No</td></tr><tr><td>`media`</td><td>array</td><td>An array of [Media](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-media) objects</td><td>`*`</td></tr></tbody></table>

`*` At least one must be present, futhermore if the group doesn't exist and is to be created you must provide at least one field for it.

<p class="callout info">This is only for `<1.0.0` version of `aerocargo/specifications`. See [Specification Group](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-specification-group) for `1.x` structure.</p>

##### Specification Group

<table border="1" id="bkmrk-name-type-descriptio-13" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col></colgroup><tbody><tr><td>**Name**  
</td><td>**Type**  
</td><td>**Description**  
</td><td>**Required**</td></tr><tr><td>`id`</td><td>int</td><td>The id of the specification group</td><td>`*`</td></tr><tr><td>`name`</td><td>string</td><td>The name of the specification group</td><td>`*`</td></tr><tr><td>`fields`</td><td>array</td><td>An array of [Field](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-specification-group-) objects</td><td>Yes</td></tr><tr><td>`media`</td><td>array</td><td>An array of [Media](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-media) objects</td><td>No</td></tr><tr><td>`settings`</td><td>object</td><td>A [Settings](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-settings) object with grouped key-value pairs</td><td>No</td></tr></tbody></table>

`*` At least one must be present.

<p class="callout info">This is only for `>=1.0.0` version of `aerocargo/specifications`. See [Specification](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-specification) for `0.x` structure.</p>

##### Specification Group Field

<table border="1" id="bkmrk-name-type-descriptio-14" style="border-collapse: collapse; width: 100%; height: 257.172px;"><colgroup><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px;">**Name**  
</td><td style="height: 29.7969px;">**Type**  
</td><td style="height: 29.7969px;">**Description**  
</td><td style="height: 29.7969px;">**Required**  
</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`id`</td><td style="height: 46.5938px;">int</td><td style="height: 46.5938px;">The id of the specification group field</td><td style="height: 46.5938px;">`*`</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`name`</td><td style="height: 46.5938px;">string</td><td style="height: 46.5938px;">The name of the specification group field</td><td style="height: 46.5938px;">`*`</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`value`</td><td style="height: 46.5938px;">string</td><td style="height: 46.5938px;">The value of the specification group field</td><td style="height: 46.5938px;">Yes</td></tr><tr style="height: 35.3984px;"><td style="height: 35.3984px;">`media`</td><td style="height: 35.3984px;">array</td><td style="height: 35.3984px;">An array of [Media](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-media) objects</td><td style="height: 35.3984px;">No</td></tr><tr style="height: 52.1953px;"><td style="height: 52.1953px;">`settings`</td><td style="height: 52.1953px;">object</td><td style="height: 52.1953px;">A [Settings](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-settings) object with grouped key-value pairs</td><td style="height: 52.1953px;">No</td></tr></tbody></table>

`*` At least one must be present.

##### Media

<table border="1" id="bkmrk-name-type-descriptio-15" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col></colgroup><tbody><tr><td>**Name**  
</td><td>**Type**  
</td><td>**Description**  
</td><td>**Required**  
</td></tr><tr><td>`id`</td><td>int</td><td>The id of the media</td><td>`*`</td></tr><tr><td>`source`</td><td>string</td><td>The source of the media, e.g. test.png</td><td>`*`</td></tr></tbody></table>

`*` At least one must be present.

##### Upsell

<table border="1" id="bkmrk-name-type-descriptio-16" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col></colgroup><tbody><tr><td>**Name**  
</td><td>**Type**  
</td><td>**Description**  
</td><td>**Required**  
</td></tr><tr><td>`group.key`</td><td>string</td><td>The upsell group key</td><td>Yes</td></tr><tr><td>`attributes`</td><td>array</td><td>An array of [Attribute](https://support.aerocommerce.com/books/api/page/view-product-endpoint#bkmrk-attribute) objects that the upsell shows for</td><td>No</td></tr><tr><td>`models`</td><td>array</td><td>And array of models for the upsell</td><td>No</td></tr><tr><td>`skus`</td><td>array</td><td>And array of SKUs for the upsell</td><td>No</td></tr></tbody></table>

##### Related Listing

<table border="1" id="bkmrk-name-type-descriptio-17" style="border-collapse: collapse; width: 100%; height: 245.969px;"><colgroup><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col><col style="width: 25.0298%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px;">**Name**  
</td><td style="height: 29.7969px;">**Type**  
</td><td style="height: 29.7969px;">**Description**  
</td><td style="height: 29.7969px;">**Required**  
</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">`id`</td><td style="height: 29.7969px;">int</td><td style="height: 29.7969px;">The id of the listing</td><td style="height: 29.7969px;">Conditional `*`</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`variant_id`</td><td style="height: 46.5938px;">int</td><td style="height: 46.5938px;">The id of the variant (of the listing)</td><td style="height: 46.5938px;">Conditional `*`</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`sku`</td><td style="height: 46.5938px;">string</td><td style="height: 46.5938px;">The SKU of the variant (of the listing)</td><td style="height: 46.5938px;">Conditional `*`</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`product_id`</td><td style="height: 46.5938px;">int</td><td style="height: 46.5938px;">The id of the product (of the listing)</td><td style="height: 46.5938px;">Conditional `*`</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">`model`</td><td style="height: 46.5938px;">string</td><td style="height: 46.5938px;">The model of the product (of the listing)</td><td style="height: 46.5938px;">Conditional `*`</td></tr></tbody></table>

`*` At least one must be present, resolved in the order they are listed top-down.

#### Example Requests

<details id="bkmrk-simple-product-%28one-"><summary>Simple Product (One variant without any attributes)</summary>

```
POST /api/products
```

```json
{
    "model": "9021182",
    "name": "Detachable Sleeve Puffer Jacket",
    "manufacturer": "Burberry",
    "categories": [
        { 
            "name": "Mens > Coats > Padded Coats"
        }
    ],
    "summary": "Summary",
    "description": "Description",
    "active": true,
    "visible": true,
    "images": [
        {
            "src": "https://picsum.photos/seed/first/600/400",
            "is_default": true
        }
    ],
    "variants": [
        {
            "sku": "9021182",
            "barcode": "abc123",
            "stock_level": 5,
            "prices": [
                {
                    "currency": "GBP",
                    "price": 790,
                    "quantity": 1
                }
            ],
            "tax_group": "Taxable Product"
        }
    ],
    "tags": [
        {
            "group": { 
                "name": "Colour"
            },
            "name": "Blue"
        }
    ],
    "seo": {
        "heading": "test heading",
        "page_title": "test page title",
        "meta_description": "test meta description",
        "noindex": 0,
        "nofollow": 0
    },
    "additional_attributes": [
        {
            "key": "test_name",
            "value": "test_value"
        }
    ]
}
```

</details><details id="bkmrk-variant-product-%28mul"><summary>Variant Product (Multiple variants with shared attribute matrix structure)</summary>

```
POST /api/products
```

```json
{
    "model": "9021182",
    "name": "Detachable Sleeve Puffer Jacket",
    "manufacturer": "Burberry",
    "categories": [
        {
            "name": "Mens > Coats > Padded Coats"
        }
    ],
    "summary": "Outer: Leather 100%, Polyamide 100%\nLining: Polyester 100%, Goose Down 90%, Wool 70%, Polyamide 20%, Cashmere 10%, Feather 10%",
    "description": "A quintessentially British brand, Burberry creates iconic designs that seamlessly infuse their rich heritage with a contemporary aesthetic. This deep blue wool and cashmere blend detachable sleeve puffer jacket from Burberry features a hood, a high standing collar, a zip and press stud fastening, detachable long sleeves, a contrast logo patch to one side, zipped side slit pockets and a puffer style.",
    "images": [
        {
            "src": "https://picsum.photos/seed/first/600/400",
            "is_default": "1"
        },
        {
            "src": "https://picsum.photos/seed/second/600/400",
            "is_default": "1"
        },
        {
            "src": "https://picsum.photos/seed/third/600/400",
            "is_default": "1"
        },
        {
            "src": "https://picsum.photos/seed/fourth/600/400",
            "is_default": "1",
            "attributes": [
                {
                    "group": {
                        "name": "Size"
                    },
                    "name": "Small"
                }
            ]
        }
    ],
    "variants": [
        {
            "sku": "9021182-S",
            "stock_level": "5",
            "prices": [
                {
                    "currency": "GBP",
                    "price": "790",
                    "quantity": 1
                }
            ],
            "tax_group": "Taxable Product",
            "attributes": [
                {
                    "group": {
                        "name": "Size"
                    },
                    "name": "Small",
                    "tags": [
                        {
                            "group": {
                                "name": "Size"
                            },
                            "name": "Small"
                        }
                    ]
                }
            ],
            "stock_buffer": 0,
            "minimum_quantity": 1,
            "multiples_of": 1
        },
        {
            "sku": "9021182-M",
            "stock_level": "5",
            "prices": [
                {
                    "currency": "GBP",
                    "price": "790",
                    "quantity": 1
                }
            ],
            "tax_group": "Taxable Product",
            "attributes": [
                {
                    "group": {
                        "name": "Size"
                    },
                    "name": "Medium",
                    "tags": [
                        {
                            "group": {
                                "name": "Size"
                            },
                            "name": "Medium"
                        }
                    ]
                }
            ],
            "stock_buffer": 0,
            "minimum_quantity": 1,
            "multiples_of": 1
        },
        {
            "sku": "9021182-L",
            "stock_level": "5",
            "prices": [
                {
                    "currency": "GBP",
                    "price": "790",
                    "quantity": 1
                }
            ],
            "tax_group": "Taxable Product",
            "attributes": [
                {
                    "group": {
                        "name": "Size"
                    },
                    "name": "Large",
                    "tags": [
                        {
                            "group": {
                                "name": "Size"
                            },
                            "name": "Large"
                        }
                    ]
                }
            ],
            "stock_buffer": 0,
            "minimum_quantity": 1,
            "multiples_of": 1
        },
        {
            "sku": "9021182-XL",
            "stock_level": "5",
            "prices": [
                {
                    "currency": "GBP",
                    "price": "790",
                    "quantity": 1
                }
            ],
            "tax_group": "Taxable Product",
            "attributes": [
                {
                    "group": {
                        "name": "Size"
                    },
                    "name": "Extra Large",
                    "tags": [
                        {
                            "group": {
                                "name": "Size"
                            },
                            "name": "Extra Large"
                        }
                    ]
                }
            ],
            "stock_buffer": 0,
            "minimum_quantity": 1,
            "multiples_of": 1
        }
    ],
    "tags": [
        {
            "group": {
                "name": "Colour"
            },
            "name": "Blue"
        }
    ],
    "active": true,
    "visible": true,
    "hide_when_no_stock": false,
    "seo": {
        "heading": "test heading",
        "page_title": "test page title",
        "meta_description": "test meta description",
        "noindex": 0,
        "nofollow": 0
    },
    "settings": {
        "_": {
            "no_group": "value"
        },
        "group": {
            "key": "value"
        }
    },
    "additional_attributes": [
        {
            "key": "test_name",
            "value": "test_value"
        }
    ]
}
```

</details>#### Example Response

```json
{
    "product": {
        "id": 1
    }
}
```