Products
Product Index Endpoint
Structure
See View Product Endpoint for the structure of the order payload inside the data array.
Scopes
Name
|
Description
|
Example
|
active |
Only return active products |
?scope=active |
inactive |
Only return inactive products |
?scope=inactive |
visible |
Only return visible products |
?scope=visible |
hidden |
Only return hidden products |
?scope=hidden |
published |
Only return published products |
?scope=published |
unpublished |
Only return unpublished products |
?scope=unpublished |
scheduled |
Only return scheduled to be published products |
?scope=scheduled |
These scopes are applied at database level and may not always reflect real-time search index data. For precise filtering use the Product Search Endpoint.
Filters
Name
|
Description
|
Example
|
models |
Only return products with specific models (note: singular form ?model not supported) |
?models=ABC,DEF |
skus |
Only return products with variants that have specific SKUs |
?skus=ABC-123,DEF-456 |
Plural filters can also be used in singular form (unless otherwise stated), e.g. ?sku=ABC-123 for ?skus=ABC-123.
Example Request
GET /api/products?per_page=2&min_updated_at=2023-08-30%2010:36:23
Example Response
{
"current_page": 1,
"data": [
//...
],
"first_page_url": "http://aero.test/api/products?page=1",
"from": 1,
"last_page": 16,
"last_page_url": "http://aero.test/api/products?page=16",
"next_page_url": "http://aero.test/api/products?page=2",
"path": "http://aero.test/api/products",
"per_page": 2,
"prev_page_url": null,
"to": 2,
"total": 32
}
Product Search Endpoint
Pre-requisites
This endpoint performs product search queries using Elasticsearch. Make sure your product documents are indexed before using this route:
php artisan aero:search:reindex --type=product
You must run this command after installing the API.
Structure
See View Product Endpoint for the structure of the order payload inside the data array.
Name
|
Description
|
Example
|
active |
Only return active products |
?scope=active |
inactive |
Only return inactive products |
?scope=inactive |
visible |
Only return visible products |
?scope=visible |
hidden |
Only return hidden products |
?scope=hidden |
categorised |
Only return products that are in a category |
?scope=categorised |
un-categorised |
Only return products that aren't in a category |
?scope=un-categorised |
published |
Only return published products |
?scope=published |
unpublished |
Only return unpublished products |
?scope=unpublished |
scheduled |
Only return scheduled to be published products |
?scope=scheduled |
has-stock |
Only return products that have stock |
?scope=has-stock |
out-of-stock |
Only return products that don't have stock |
?scope=out-of-stock |
not-tracking-stock |
Only return products that aren't tracking stock |
?scope=not-tracking-stock |
reduced |
Only return reduced products |
?scope=reduced |
not-reduced |
Only return non-reduced products |
?scope=not-reduced |
has-images |
Only return products that have images |
?scope=has-images |
no-images |
Only return products that don't have images |
?scope=no-images |
Filters
Name
|
Description
|
Example
|
manufacturers |
Only return products with specific manufacturer ids (or names) |
?manufacturers=1,burberry |
tags |
Only return products with specific tag ids (or names formatted as group|name) |
?tags=1,colour|red |
barcodes |
Only return products with specific barcodes |
?barcodes=123,abc |
references |
Only return products with specific references |
?references=123,abc |
price |
Only return products with specific price in whole units (e.g. pounds, not pence) |
?price=123 |
min_price |
Only return products with price above min price in whole units (e.g. pounds, not pence) |
?min_price=123 |
max_price |
Only return products with price below max price in whole units (e.g. pounds, not pence) |
?max_price=123 |
stock_level |
Only return products with specific stock level |
?stock_level=1 |
min_stock_level |
Only return products with stock above specific stock level |
?min_stock_level=1 |
max_stock_level |
Only return products with stock below specific stock level |
?max_stock_level=10 |
type |
Only return products of a certain type (e.g. simple or variant) |
?type=variant |
models |
Only return products with specific models |
?models=ABC,DEF |
skus |
Only return products with variants that have specific SKUs |
?skus=ABC-123,DEF-456 |
The tags filter applies AND logic across groups and OR logic within groups:
- ?tags=size|small,colour|red = small and red.
- ?tags=colour|red,colour|green = red or green.
Plural filters can also be used in singular form, e.g. ?manufacturer=burberry for ?manufacturers=burberry.
Example Request
GET /api/products/search?per_page=2&min_updated_at=2023-08-30%2010:36:23&min_stock_level=1&max_stock_level=10
Example Response
{
"current_page": 1,
"data": [
//...
],
"first_page_url": "http://aero.test/api/products?page=1",
"from": 1,
"last_page": 16,
"last_page_url": "http://aero.test/api/products?page=16",
"next_page_url": "http://aero.test/api/products?page=2",
"path": "http://aero.test/api/products",
"per_page": 2,
"prev_page_url": null,
"to": 2,
"total": 32
}
View Product Endpoint
Structure
Product
Name
|
Type
|
Description
|
model |
string |
The unique model identifier for the product |
name |
string |
The display name of the product |
manufacturer |
object |
The Manufacturer object (null when none) |
summary |
string |
A short summary of the product |
description |
string |
A detailed description of the product |
active |
boolean |
Whether the product is active (available for purchase) |
visible |
boolean |
Whether the product is visible in the storefront |
attribute_groups_to_split_by |
?array |
The attribute groups to split listings by (null when none) |
published_at |
timestamp |
When the product was published |
images |
array |
An array of Image objects |
categories |
array |
An array of Category objects |
tags |
array |
An array of Tag objects |
variants |
array |
An array of Variant objects |
seo |
object |
A SEO object |
settings |
object |
A Settings object with grouped key-value pairs |
additional_attributes |
array |
An array of Additional Attribute objects |
specifications * |
array |
An array of Specification objects |
specification_groups * |
array |
An array of Specification Group objects |
upsells |
array |
An array of Upsell objects |
related_listings |
array |
An array of Related Listing objects |
* specifications is if using <1.0.0 version of aerocargo/specifications, otherwise use specification_groups.
Manufacturer
Name
|
Type
|
Description
|
id |
int |
The id of the manufacturer |
name |
string |
The name of the manufacturer |
Image
Name
|
Type
|
Description
|
url |
string |
The url of the image |
default |
bool |
Whether the image is default |
attributes |
array |
An array of Attribute objects |
Category
Name
|
Type
|
Description
|
id |
int |
The id of the category |
name |
string |
The name of the category (e.g., Coats) |
breadcrumb |
string |
The breadcrumb path for the category (e.g., Mens > Coats) |
Variant
Name
|
Type
|
Description
|
sku |
string |
The unique SKU for the variant |
reference |
string |
The unique reference for the variant |
name |
string |
Display name of the variant |
summary |
string |
A short summary of the variant |
description |
string |
A detailed description of the variant |
barcode |
string |
The barcode/UPC/EAN of the variant |
buyable |
boolean |
Whether the variant can be purchased |
visible |
boolean |
Whether the variant is visible in listings |
shippable |
boolean |
Whether the variant is shippable |
discountable |
boolean |
Whether discounts can be applied to this variant |
hide_when_no_stock |
boolean |
Whether the variant should be hidden when out of stock |
infinite_stock |
boolean |
Whether the variant has unlimited stock |
stock_level |
int |
Current stock level |
stock_buffer |
int |
The stock buffer |
tax_group |
string |
The tax group applied to the variant |
minimum_quantity |
int |
Minimum quantity per purchase |
maximum_quantity |
int |
Maximum quantity per purchase |
multiples_of |
int |
Purchasable only in multiples of this number |
weight |
float |
Weight of the variant |
weight_unit |
string |
Unit of weight (e.g., kg, lb) |
volume |
float |
Volume of the variant |
volume_unit |
string |
Unit of volume (e.g., m^3, cm^3) |
hs |
string |
HS (Harmonized System) code for customs |
price.amount |
float |
The current price of the variant excluding tax |
price.tax |
float |
The tax of the current price |
price.currency |
string |
The currency of the current price |
retail.amount |
float |
The RRP for the variant excluding tax |
retail.tax |
float |
The tax of the RRP |
retail.currency |
string |
The currency of the RRP |
origin_country |
string |
ISO country code of origin (e.g., US, GB) |
goods_description |
string |
Description of goods for customs |
attributes |
array |
An array of Attribute objects |
tags |
array |
An array of Tag objects |
cost |
object |
The Cost Price of the variant |
prices |
array |
An array of Price objects |
additional_attributes |
array |
An array of Additional Attribute objects |
specifications * |
array |
An array of Specification objects |
specification_groups * |
array |
An array of Specification Group objects |
upsells |
array |
An array of Upsell objects |
* specifications is if using <1.0.0 version of aerocargo/specifications, otherwise use specification_groups.
Attribute
Name
|
Type
|
Description
|
id |
int |
The id of the attribute |
name |
string |
The name of the attribute |
reference |
string |
The reference of the attribute |
group |
object |
The Attribute Group object |
Attribute Group
Name
|
Type
|
Description
|
id |
int |
The id of the tag group |
name |
string |
The name of the tag group |
reference |
string |
The reference of the tag group |
Tag
Name
|
Type
|
Description
|
id |
int |
The id of the tag |
name |
string |
The name of the tag |
reference |
string |
The reference of the tag |
group |
object |
The Tag Group object |
Tag Group
Name
|
Type
|
Description
|
id |
int |
The id of the tag group |
name |
string |
The name of the tag group |
reference |
string |
The reference of the tag group |
Cost Price
Name
|
Type
|
Description
|
amount |
float |
The cost price including tax |
currency |
string |
Currency code (defaults to store default if not provided) |
Price
Name
|
Type
|
Description
|
id |
int |
The id of the price |
currency |
string |
The currency code for the price |
quantity |
int |
The quantity required for the price to be detected/applied |
value.amount |
float |
The normal price excluding tax |
value.tax |
float |
The tax for the normal price |
sale_value.amount |
float |
The sale price excluding tax |
sale_value.tax |
float |
The tax for the sale price |
retail_value.amount |
float |
The retail price excluding tax |
retail_value.tax |
float |
The tax for the retail price |
start_at |
timestamp |
The start date for when the price is active |
end_at |
timestamp |
The end date for when the price is active |
reference |
string |
The reference for the price |
SEO
Name
|
Type
|
Description
|
heading |
string |
The SEO Heading |
page_title |
string |
The SEO Page Title |
meta_description |
string |
The SEO Meta Description |
canonical |
string |
The SEO Canonical |
noindex |
boolean |
The SEO No Index |
nofollow |
boolean |
The SEO No Follow |
Settings
Settings are grouped as key-value pairs.
- Use "_" for ungrouped settings.
- Each group contains its own object of key-value pairs.
{
"settings": {
"_": {
"no_group": "value"
},
"group": {
"key": "value"
}
}
}
Additional Attribute
Name
|
Type
|
Description
|
key |
string |
The key of the additional attribute |
value |
string |
The value of the additional attribute |
Specification
Name
|
Type
|
Description
|
group.name |
string |
The name of the specification group |
name |
string |
The name of the specification |
value |
string |
The value of the specification |
media |
array |
An array of Media objects |
This is only for <1.0.0 version of aerocargo/specifications. See Specification Group for 1.x structure.
Specification Group
Name
|
Type
|
Description
|
id |
int |
The id of the specification group |
name |
string |
The name of the specification group |
fields |
array |
An array of Field objects |
media |
array |
An array of Media objects |
settings |
object |
A Settings object with grouped key-value pairs |
This is only for >=1.0.0 version of aerocargo/specifications. See Specification for 0.x structure.
Specification Group Field
Name
|
Type
|
Description
|
id |
int |
The id of the specification group field |
name |
string |
The name of the specification group field |
value |
string |
The value of the specification group field |
media |
array |
An array of Media objects |
settings |
object |
A Settings object with grouped key-value pairs |
Name
|
Type
|
Description
|
id |
int |
The id of the media |
slug |
string |
The slug of the media |
disk |
string |
The disk used to store the media |
path |
string |
The path of the media on the disk |
title |
string |
The title of the media |
type |
string |
The mimetype of the media |
extension |
string |
The file extension of the media |
size |
int |
The file size of the media in bytes |
meta |
object |
The meta data of the media |
source |
string |
The source file name of the media |
is_protected |
bool |
Whether the media is protected |
Upsell
Name
|
Type
|
Description
|
group |
object |
The Upsell Group object (null when none) |
attributes |
array |
An array of Attribute objects that the upsell shows for |
models |
array |
And array of models for the upsell |
skus |
array |
And array of SKUs for the upsell |
Upsell Group
Name
|
Type
|
Description
|
key |
string |
The key of the upsell group |
name |
string |
The name of the upsell group |
Name
|
Type
|
Description
|
id |
int |
The id of the listing |
product.id |
int |
The id of the product linked to the listing |
product.model |
string |
The model of the product linked to the listing |
variants.*.id |
id |
The id of the variants linked to the listing |
variants.*.sku |
string |
The sku of the variants linked to the listing |
sort |
int |
The sort of the listing within the group |
Example Requests
GET /api/products/{id|model}
GET /api/products?model=model
Using the first request syntax is advised, only use the second if/when the model is numeric, as if a matching id exists that would be resolved instead.
Example Responses
Simple Product
{
"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",
"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"
}
]
}
Variant Product
{
"id": 1,
"model": "8021182",
"name": "Detachable Sleeve Puffer Jacket",
"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.",
"type": "variant",
"active": true,
"visible": true,
"attribute_groups_to_split_by": null,
"published_at": "2025-06-13T07:34:34.000000Z",
"manufacturer": {
"id": 1,
"name": "Burberry"
},
"images": [
{
"url": "https://picsum.photos/seed/first/600/400",
"default": "1"
},
{
"url": "https://picsum.photos/seed/second/600/400",
"default": "1"
},
{
"url": "https://picsum.photos/seed/third/600/400",
"default": "1"
},
],
"categories": [
{
"id": 3,
"name": "Padded Coats",
"breadcrumb": "Mens » Coats » Padded Coats"
}
],
"tags": [
{
"id": 1,
"name": "Blue",
"reference": null,
"group": {
"id": 1,
"name": "Colour",
"reference": null
}
}
],
"seo": {
"heading": "test heading",
"page_title": "test page title",
"meta_description": "test meta description",
"open_graph": "",
"canonical": "",
"noindex": null,
"nofollow": null
},
"variants": [
{
"id": 1,
"sku": "8021182-S",
"reference": null,
"name": "",
"summary": "",
"description": "",
"barcode": null,
"buyable": true,
"visible": true,
"shippable": true,
"discountable": true,
"infinite_stock": false,
"stock_level": 5,
"stock_buffer": 0,
"weight": null,
"weight_unit": null,
"volume": null,
"volume_unit": null,
"hs": null,
"origin_country": null,
"goods_description": null,
"cost": {
"amount": 5623.54,
"currency": "GBP"
},
"price": {
"amount": 65833.33,
"tax": 13166.669999999998,
"currency": "GBP"
},
"retail": {
"amount": null,
"tax": null,
"currency": "GBP"
},
"prices": [
{
"id": 1,
"currency": "GBP",
"quantity": 1,
"value": {
"amount": 65833.33,
"tax": 13166.669999999998
},
"sale_value": {
"amount": 65833.33,
"tax": 13166.669999999998
},
"retail_value": {
"amount": null,
"tax": null
},
"start_at": null,
"end_at": null,
"reference": null
}
],
"images": [
{
"url": "https://picsum.photos/seed/fourth/600/400",
"default": "1",
"attributes": [
{
"group": {
"name": "Size"
},
"name": "Small"
}
]
}
],
"attributes": [
{
"id": 1,
"name": "Small",
"display_name": "Small",
"reference": null,
"group": {
"id": 1,
"name": "Size",
"reference": null
}
}
],
"tags": [
{
"id": 2,
"name": "Small",
"reference": null,
"group": {
"id": 2,
"name": "Size",
"reference": null
}
}
],
"additional_attributes": []
},
{
"id": 2,
"sku": "8021182-M",
"reference": null,
"name": "",
"summary": "",
"description": "",
"barcode": null,
"buyable": true,
"visible": true,
"shippable": true,
"discountable": true,
"infinite_stock": false,
"stock_level": 5,
"stock_buffer": 0,
"weight": null,
"weight_unit": null,
"volume": null,
"volume_unit": null,
"hs": null,
"origin_country": null,
"goods_description": null,
"cost": {
"amount": null,
"currency": null
},
"price": {
"amount": 65833.33,
"tax": 13166.669999999998,
"currency": "GBP"
},
"retail": {
"amount": null,
"tax": null,
"currency": "GBP"
},
"prices": [
{
"id": 2,
"currency": "GBP",
"quantity": 1,
"value": {
"amount": 65833.33,
"tax": 13166.669999999998
},
"sale_value": {
"amount": 65833.33,
"tax": 13166.669999999998
},
"retail_value": {
"amount": null,
"tax": null
},
"start_at": null,
"end_at": null,
"reference": null
}
],
"images": [],
"attributes": [
{
"id": 2,
"name": "Medium",
"display_name": "Medium",
"reference": null,
"group": {
"id": 1,
"name": "Size",
"reference": null
}
}
],
"tags": [
{
"id": 3,
"name": "Medium",
"reference": null,
"group": {
"id": 2,
"name": "Size",
"reference": null
}
}
],
"additional_attributes": []
},
{
"id": 3,
"sku": "8021182-L",
"reference": null,
"name": "",
"summary": "",
"description": "",
"barcode": null,
"buyable": true,
"visible": true,
"shippable": true,
"discountable": true,
"infinite_stock": false,
"stock_level": 5,
"stock_buffer": 0,
"weight": null,
"weight_unit": null,
"volume": null,
"volume_unit": null,
"hs": null,
"origin_country": null,
"goods_description": null,
"cost": {
"amount": null,
"currency": null
},
"price": {
"amount": 65833.33,
"tax": 13166.669999999998,
"currency": "GBP"
},
"retail": {
"amount": null,
"tax": null,
"currency": "GBP"
},
"prices": [
{
"id": 3,
"currency": "GBP",
"quantity": 1,
"value": {
"amount": 65833.33,
"tax": 13166.669999999998
},
"sale_value": {
"amount": 65833.33,
"tax": 13166.669999999998
},
"retail_value": {
"amount": null,
"tax": null
},
"start_at": null,
"end_at": null,
"reference": null
}
],
"images": [],
"attributes": [
{
"id": 3,
"name": "Large",
"display_name": "Large",
"reference": null,
"group": {
"id": 1,
"name": "Size",
"reference": null
}
}
],
"tags": [
{
"id": 4,
"name": "Large",
"reference": null,
"group": {
"id": 2,
"name": "Size",
"reference": null
}
}
],
"additional_attributes": []
},
{
"id": 4,
"sku": "8021182-XL",
"reference": null,
"name": "",
"summary": "",
"description": "",
"barcode": null,
"buyable": true,
"visible": true,
"shippable": true,
"discountable": true,
"infinite_stock": false,
"stock_level": 5,
"stock_buffer": 0,
"weight": null,
"weight_unit": null,
"volume": null,
"volume_unit": null,
"hs": null,
"origin_country": null,
"goods_description": null,
"cost": {
"amount": null,
"currency": null
},
"price": {
"amount": 65833.33,
"tax": 13166.669999999998,
"currency": "GBP"
},
"retail": {
"amount": null,
"tax": null,
"currency": "GBP"
},
"prices": [
{
"id": 1,
"currency": "GBP",
"quantity": 1,
"value": {
"amount": 65833.33,
"tax": 13166.669999999998
},
"sale_value": {
"amount": 65833.33,
"tax": 13166.669999999998
},
"retail_value": {
"amount": null,
"tax": null
},
"start_at": null,
"end_at": null,
"reference": null
}
],
"images": [],
"attributes": [
{
"id": 4,
"name": "Extra Large",
"display_name": "Extra Large",
"reference": null,
"group": {
"id": 1,
"name": "Size",
"reference": null
}
}
],
"tags": [
{
"id": 5,
"name": "Extra Large",
"reference": null,
"group": {
"id": 2,
"name": "Size",
"reference": null
}
}
],
"additional_attributes": []
}
],
"additional_attributes": [],
"settings": []
}
Create Product Endpoint
Structure
Product
Name
|
Type
|
Description
|
Required
|
id |
int |
The id for the product |
No |
model |
string |
The unique model identifier for the product |
Yes |
name |
string |
The display name of the product |
Yes |
manufacturer |
string |
The manufacturer/brand of the product |
No |
summary |
string |
A short summary of the product |
No |
description |
string |
A detailed description of the product |
No |
active |
boolean |
Whether the product is active (available for purchase) |
No |
visible |
boolean |
Whether the product is visible in the storefront |
No |
attribute_groups_to_split_by |
array |
An array of attribute group names to split listings by (e.g., ["Size"]) |
No |
published_at |
timestamp |
When the product was published |
No |
images |
array |
An array of Image objects |
No |
categories |
array |
An array of Category objects |
No |
tags |
array |
An array of Tag objects |
No |
variants |
array |
An array of Variant objects |
Yes |
seo |
object |
A SEO object |
No |
settings |
object |
A Settings object with grouped key-value pairs |
No |
additional_attributes |
array |
An array of Additional Attribute objects |
No |
specifications * |
array |
An array of Specification objects |
No |
specification_groups * |
array |
An array of Specification Group objects |
No |
upsells |
array |
An array of Upsell objects |
No |
related_listings |
array |
An array of Related Listing objects |
No |
* specifications is if using <1.0.0 version of aerocargo/specifications, otherwise use specification_groups.
Category
Name
|
Type
|
Description
|
Required
|
name |
string |
The category name or breadcrumb (e.g., "Coats" or "Mens > "Coats") |
Yes |
Variant
Name
|
Type
|
Description
|
Required
|
id |
int |
The id for the variant |
No |
sku |
string |
The unique SKU for the variant |
Yes |
reference |
string |
The unique reference for the variant |
No |
name |
string |
Display name of the variant |
No |
summary |
string |
A short summary of the variant |
No |
description |
string |
A detailed description of the variant |
No |
barcode |
string |
The barcode/UPC/EAN of the variant |
No |
buyable |
boolean |
Whether the variant can be purchased |
No |
visible |
boolean |
Whether the variant is visible in listings |
No |
shippable |
boolean |
Whether the variant is shippable |
No |
discountable |
boolean |
Whether discounts can be applied to this variant |
No |
hide_when_no_stock |
boolean |
Whether the variant should be hidden when out of stock |
No |
infinite_stock |
boolean |
Whether the variant has unlimited stock |
No |
stock_level |
int |
Current stock level |
No |
stock_buffer |
int |
The stock buffer |
No |
tax_group |
string |
The tax group applied to the variant |
No |
minimum_quantity |
int |
Minimum quantity per purchase |
No |
maximum_quantity |
int |
Maximum quantity per purchase |
No |
multiples_of |
int |
Purchasable only in multiples of this number |
No |
weight |
float |
Weight of the variant |
No |
weight_unit |
string |
Unit of weight (e.g., kg, lb) |
No |
volume |
float |
Volume of the variant |
No |
volume_unit |
string |
Unit of volume (e.g., m^3, cm^3) |
No |
hs |
string |
HS (Harmonized System) code for customs |
No |
origin_country |
string |
ISO country code of origin (e.g., US, GB) |
No |
goods_description |
string |
Description of goods for customs |
No |
attributes |
array |
An array of Attribute objects |
If product has variants |
tags |
array |
An array of Tag objects |
No |
cost |
object |
The Cost Price of the variant |
No |
prices |
array |
An array of Price objects |
Yes |
additional_attributes |
array |
An array of Additional Attribute objects |
No |
specifications * |
array |
An array of Specification objects |
No |
specification_groups * |
array |
An array of Specification Group objects |
No |
upsells |
array |
An array of Upsell objects |
No |
* specifications is if using <1.0.0 version of aerocargo/specifications, otherwise use specification_groups.
Attribute
Name
|
Type
|
Description
|
Required
|
name |
string |
The name of the attribute (e.g., "Small" or "Red") |
Yes |
tags |
array |
An array of Tag objects linked to the attribute |
No |
group |
object |
The Attribute Group of the attribute |
Yes |
Attribute Group
Name
|
Type
|
Description
|
Required
|
name |
string |
The name of the attribute group (e.g., "Size", "Colour") |
Yes |
Tag
Name
|
Type
|
Description
|
Required
|
name |
string |
The name of the tag (e.g., "Small" or "Red") |
Yes |
group |
object |
The Tag Group of the tag |
Yes |
Tag Group
Name
|
Type
|
Description
|
Required
|
name |
string |
The name of the tag group (e.g., "Size" or "Colour" |
Yes |
Image
Name
|
Type
|
Description
|
Required
|
src |
string |
The source url of the image |
Yes |
alt |
string |
Alt text for accessibility and SEO |
No |
is_default |
boolean |
Whether this is a default image |
No |
position |
int |
Sort order position of the image |
No |
attributes |
array |
An array of Attribute objects that apply to this image |
No |
Cost Price
Name
|
Type
|
Description
|
Required
|
amount |
float |
The cost price including tax |
Yes |
currency |
string |
Currency code (defaults to store default if not provided) |
No |
Price
Name
|
Type
|
Description
|
Required
|
price |
float |
The base price including tax |
Yes |
sale_price |
float |
The sale price including tax |
No |
retail_price |
float |
The retail price including tax |
No |
quantity |
int |
Quantity required for this price tier (default: 1) |
No |
currency |
string |
Currency code (defaults to store default) |
No |
start_at |
timestamp |
When this price becomes active (e.g., 2023-09-01 09:29:41) |
No |
end_at |
timestamp |
When this price expires |
No |
reference |
string |
The unique reference for the price |
No |
SEO
Name
|
Type
|
Description
|
Required
|
heading |
string |
The SEO Heading |
No |
page_title |
string |
The SEO Page Title |
No |
meta_description |
string |
The SEO Meta Description |
No |
canonical |
string |
The SEO Canonical |
No |
noindex |
boolean |
The SEO No Index |
No |
nofollow |
boolean |
The SEO No Follow |
No |
Settings
Settings are grouped as key-value pairs.
- Use "_" for ungrouped settings.
- Each group contains its own object of key-value pairs.
{
"settings": {
"_": {
"no_group": "value"
},
"group": {
"key": "value"
}
}
}
Additional Attribute
Name
|
Type
|
Description
|
Required
|
key |
string |
The key of the additional attribute |
Yes |
value |
string |
The value of the additional attribute |
Yes |
Specification
Name
|
Type
|
Description
|
Required
|
group.name |
string |
The name of the specification group |
Yes |
name |
string |
The name of the specification |
* |
value |
string |
The value of the specification |
No |
media |
array |
An array of Media objects |
* |
* 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.
This is only for <1.0.0 version of aerocargo/specifications. See Specification Group for 1.x structure.
Specification Group
Name
|
Type
|
Description
|
Required |
id |
int |
The id of the specification group |
* |
name |
string |
The name of the specification group |
* |
fields |
array |
An array of Field objects |
Yes |
media |
array |
An array of Media objects |
No |
settings |
object |
A Settings object with grouped key-value pairs |
No |
* At least one must be present.
This is only for >=1.0.0 version of aerocargo/specifications. See Specification for 0.x structure.
Specification Group Field
Name
|
Type
|
Description
|
Required
|
id |
int |
The id of the specification group field |
* |
name |
string |
The name of the specification group field |
* |
value |
string |
The value of the specification group field |
Yes |
media |
array |
An array of Media objects |
No |
settings |
object |
A Settings object with grouped key-value pairs |
No |
* At least one must be present.
Name
|
Type
|
Description
|
Required
|
id |
int |
The id of the media |
* |
source |
string |
The source of the media, e.g. test.png |
* |
* At least one must be present.
Upsell
Name
|
Type
|
Description
|
Required
|
group.key |
string |
The upsell group key |
Yes |
attributes |
array |
An array of Attribute objects that the upsell shows for |
No |
models |
array |
And array of models for the upsell |
No |
skus |
array |
And array of SKUs for the upsell |
No |
Name
|
Type
|
Description
|
Required
|
id |
int |
The id of the listing |
Conditional * |
variant_id |
int |
The id of the variant (of the listing) |
Conditional * |
sku |
string |
The SKU of the variant (of the listing) |
Conditional * |
product_id |
int |
The id of the product (of the listing) |
Conditional * |
model |
string |
The model of the product (of the listing) |
Conditional * |
* At least one must be present, resolved in the order they are listed top-down.
Example Requests
Simple Product (One variant without any attributes)
POST /api/products
{
"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"
}
]
}
Variant Product (Multiple variants with shared attribute matrix structure)
POST /api/products
{
"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"
}
]
}
Example Response
{
"product": {
"id": 1
}
}
Update Product Endpoint
Structure
Product
Name
|
Type
|
Description
|
Required
|
name |
string |
The name of the product |
No |
manufacturer |
string |
The manufacturer of the product |
No |
summary |
string |
The summary of the product |
No |
description |
string |
The description of the product |
No |
active |
boolean |
Whether the product is active |
No |
visible |
boolean |
Whether the product is visible |
No |
attribute_groups_to_split_by |
array |
An array of attribute group names to split listings by (e.g., ["Size"] |
No |
published_at |
timestamp |
When the product was published |
No |
images |
array |
An array of Image objects |
No |
categories |
array |
An array of Category objects |
No |
tags |
array |
An array of Tag objects |
No |
variants |
array |
An array of Variant objects |
No |
seo |
object |
A SEO object |
No |
settings |
object |
A Settings object with grouped key-value pairs |
No |
additional_attributes |
array |
An array of Additional Attribute objects |
No |
specifications * |
array |
An array of Specification objects |
No |
specification_groups * |
array |
An array of Specification Group objects |
No |
upsells |
array |
An array of Upsell objects |
No |
related_listings |
array |
An array of Related Listing objects |
No |
* specifications is if using <1.0.0 version of aerocargo/specifications, otherwise use specification_groups.
Category
Name
|
Type
|
Description
|
Required
|
name |
string |
The category name or breadcrumb (e.g., "Coats" or "Mens > "Coats") |
Yes |
Variant
Name
|
Type
|
Description
|
Required
|
sku |
string |
The unique SKU for the variant to be updated |
Yes |
reference |
string |
The unique reference for the variant |
No |
name |
string |
Display name of the variant |
No |
summary |
string |
A short summary of the variant |
No |
description |
string |
A detailed description of the variant |
No |
barcode |
string |
The barcode/UPC/EAN of the variant |
No |
buyable |
boolean |
Whether the variant can be purchased |
No |
visible |
boolean |
Whether the variant is visible in listings |
No |
shippable |
boolean |
Whether the variant is shippable |
No |
discountable |
boolean |
Whether discounts can be applied to this variant |
No |
hide_when_no_stock |
boolean |
Whether the variant should be hidden when out of stock |
No |
infinite_stock |
boolean |
Whether the variant has unlimited stock |
No |
stock_level |
int |
Current stock level |
No |
stock_buffer |
int |
The stock buffer |
No |
stock_action |
string |
The stock action (e.g., set, add, remove & multiply). Defaults to set |
No |
tax_group |
string |
The tax group applied to the variant |
No |
minimum_quantity |
int |
Minimum quantity per purchase |
No |
maximum_quantity |
int |
Maximum quantity per purchase |
No |
multiples_of |
int |
Purchasable only in multiples of this number |
No |
weight |
float |
Weight of the variant |
No |
weight_unit |
string |
Unit of weight (e.g., kg, lb) |
No |
volume |
float |
Volume of the variant |
No |
volume_unit |
string |
Unit of volume (e.g., m^3, cm^3) |
No |
hs |
string |
HS (Harmonized System) code for customs |
No |
origin_country |
string |
ISO country code of origin (e.g., US, GB) |
No |
goods_description |
string |
Description of goods for customs |
No |
tags |
array |
An array of Tag objects |
No |
cost |
object |
The Cost Price of the variant |
No |
prices |
array |
An array of Price objects |
No |
additional_attributes |
array |
An array of Additional Attribute objects |
No |
specifications * |
array |
An array of Specification objects |
No |
specification_groups * |
array |
An array of Specification Group objects |
No |
upsells |
array |
An array of Upsell objects |
No |
Tag
Name
|
Type
|
Description
|
Required
|
name |
string |
The name of the tag (e.g., "Small" or "Red") |
Yes |
group |
object |
The Tag Group of the tag |
Yes |
Tag Group
Name
|
Type
|
Description
|
Required
|
name |
string |
The name of the tag group (e.g., "Size" or "Colour" |
Yes |
Image
Name
|
Type
|
Description
|
Required
|
src |
string |
The source url of the image |
Yes |
alt |
string |
Alt text for accessibility and SEO |
No |
is_default |
boolean |
Whether this is a default image |
No |
position |
int |
Sort order position of the image |
No |
attributes |
array |
An array of Attribute objects that apply to this image |
No |
Attribute
Name
|
Type
|
Description
|
Required
|
name |
string |
The name of the attribute (e.g., "Small" or "Red") |
Yes |
tags |
array |
An array of Tag objects linked to the attribute |
No |
group |
object |
The Attribute Group of the attribute |
Yes |
Attribute Group
Name
|
Type
|
Description
|
Required
|
name |
string |
The name of the attribute group (e.g., "Size", "Colour") |
Yes |
Cost Price
Name
|
Type
|
Description
|
Required
|
amount |
float |
The cost price including tax |
Yes |
currency |
string |
Currency code (defaults to store default if not provided) |
No |
Price
Name
|
Type
|
Description
|
Required
|
price |
float |
The base price including tax |
Yes |
sale_price |
float |
The sale price including tax |
No |
retail_price |
float |
The retail price including tax |
No |
quantity |
int |
Quantity required for this price tier (default: 1) |
No |
currency |
string |
Currency code (defaults to store default) |
No |
start_at |
timestamp |
When this price becomes active (e.g., 2023-09-01 09:29:41) |
No |
end_at |
timestamp |
When this price expires |
No |
reference |
string |
The unique reference for the price |
No |
SEO
Name
|
Type
|
Description
|
Required
|
heading |
string |
The SEO Heading |
No |
page_title |
string |
The SEO Page Title |
No |
meta_description |
string |
The SEO Meta Description |
No |
canonical |
string |
The SEO Canonical |
No |
noindex |
boolean |
The SEO No Index |
No |
nofollow |
boolean |
The SEO No Follow |
No |
Settings
Settings are grouped as key-value pairs.
- Use "_" for ungrouped settings.
- Each group contains its own object of key-value pairs.
{
"settings": {
"_": {
"no_group": "value"
},
"group": {
"key": "value"
}
}
}
Additional Attribute
Name
|
Type
|
Description
|
Required
|
key |
string |
The key of the additional attribute |
Yes |
value |
string |
The value of the additional attribute |
Yes |
Specification
Name
|
Type
|
Description
|
Required
|
group.name |
string |
The name of the specification group |
Yes |
name |
string |
The name of the specification |
* |
value |
string |
The value of the specification |
No |
media |
array |
An array of Media objects |
* |
* At least one must be present.
This is only for <1.0.0 version of aerocargo/specifications. See Specification Group for 1.x structure.
Specification Group
Name
|
Type
|
Description
|
Required
|
id |
int |
The id of the specification group |
* |
name |
string |
The name of the specification group |
* |
fields |
array |
An array of Field objects |
No |
media |
array |
An array of Media objects |
No |
settings |
object |
A Settings object with grouped key-value pairs |
No |
* At least one must be present.
This is only for >=1.0.0 version of aerocargo/specifications. See Specification for 0.x structure.
Specification Group Field
Name
|
Type
|
Description
|
Required
|
id |
int |
The id of the specification group field |
* |
name |
string |
The name of the specification group field |
* |
value |
string |
The value of the specification group field |
No |
media |
array |
An array of Media objects |
No |
settings |
object |
A Settings object with grouped key-value pairs |
No |
* At least one must be present.
Name
|
Type
|
Description
|
Required
|
id |
int |
The id of the media |
* |
source |
string |
The source of the media, e.g. test.png |
* |
Upsell
Name
|
Type
|
Description
|
Required
|
group.name |
string |
The upsell group name |
No |
attributes |
array |
An array of Attribute objects that the upsell shows for |
No |
models |
array |
And array of models for the upsell |
No |
skus |
array |
And array of SKUs for the upsell |
No |
Name
|
Type
|
Description
|
Required
|
id |
int |
The id of the listing |
Conditional * |
variant_id |
int |
The id of the variant (of the listing) |
Conditional * |
sku |
string |
The SKU of the variant (of the listing) |
Conditional * |
product_id |
int |
The id of the product (of the listing) |
Conditional * |
model |
string |
The model of the product (of the listing) |
Conditional * |
* At least one must be present, resolved in the order they are listed top-down.
Example Requests
Update Basic Product Details
PUT /api/products/{id|model}
{
"name": "Detachable Sleeve Puffer Jacket v2",
"manufacturer": "Burberry v2",
"summary": "A lightweight puffer with removable sleeves.",
"description": "This updated puffer jacket offers versatility with detachable sleeves, premium fill, and water-resistant fabric.",
"active": true,
"visible": true
}
Add Categories to Product
PUT /api/products/{id|model}
{
"categories": [
{
"name": "Mens > Jackets",
},
{
"name": "Winter Collection"
}
]
}
Add Tags to Product
PUT /api/products/{id|model}
{
"tags": [
{
"group": {
"name": "Colour"
},
"name": "Indigo"
},
{
"group": {
"name": "Season"
},
"name": "Winter 2023"
}
]
}
Update Variant by Sku
PUT /api/products/{id|model}
{
"variants": [
{
"sku": "9021182-S",
"stock_level": 50,
"buyable": true,
"tags": [
{
"group": {
"name": "Style"
},
"name": "Casual"
}
],
"prices": [
{
"price": 199.99,
"sale_price": 179.99,
"currency": "GBP"
}
],
"cost": {
"amount": 350,
"currency": "GBP"
}
}
]
}
Update Images
PUT /api/products/{id|model}
{
"images": [
{
"src": "https://picsum.photos/seed/front/600/400",
"alt": "Front view of detachable sleeve puffer jacket",
"is_default": true,
"position": 1
},
{
"src": "https://picsum.photos/seed/back/600/400",
"alt": "Back view of detachable sleeve puffer jacket",
"position": 2
}
]
}
Update Product SEO & Settings
PUT /api/products/{id|model}
{
"seo": {
"heading": "Detachable Sleeve Puffer Jacket",
"page_title": "Men’s Detachable Sleeve Puffer Jacket | Burberry",
"meta_description": "Shop the Burberry detachable sleeve puffer jacket – versatile winterwear with premium fill and removable sleeves.",
"canonical": "https://shop.example.com/mens/detachable-sleeve-puffer",
"noindex": false,
"nofollow": false
},
"settings": {
"_": {
"featured": "true"
},
"shipping": {
"oversized": "false"
}
}
}
You can use PUT /api/products?model=model if your model is numeric and might clash with an id.
Example Response
{
"product": {
"id": 1
}
}