Backend API
Product variants represent unique variations of a product that support stock tracking. Each variant is a combination of one or more options, for example, Size or Color. Variants are children of products.
Fields
id
objectIdautoUnique identifier for the variant.
name
stringrequiredHuman-friendly name of the variant. Defaults to the combined name of all options, for example "Blue, Large" in the case of 2 options; color and size.
parent_id
objectIdrequiredID of the parent product.
active
booleanAn active variant is visible to customers in a storefront. Otherwise it will be hidden from view.
archived
booleanA variant is automatically archived when it has been sold in the past and product options are changed in a way that would cause the variant to be removed.
attributes
objectAn object containing custom attribute values. Overrides product attributes. See attributes for more details.
code
stringUnique code to identify the gift card variant.
cost
currencyCost of goods used to calculate gross margins. Overrides parent product cost.
currency
stringThree-letter ISO currency code in uppercase. Defaults to store's base currency.
date_created
dateautoDate and time the variant was created.
date_updated
dateautoDate and time the variant was last updated.
images
array of objectList of images depicting the variant.
id
objectIdautoUnique identifier for the object.
caption
stringA brief description of the image.
file
objectAn object representing the image file.
file.id
objectIdUnique identifier for the file.
file.content_type
stringMIME content type of the file.
file.data
filedataA reference to the raw file data.
file.date_uploaded
dateDate the file was uploaded.
file.filename
stringOptional file name.
file.height
intImage height in pixels, if applicable.
file.length
intSize of the file in bytes.
file.md5
stringAn MD5 hash of the file contents. This can be used to uniquely identify the file for caching purposes.
file.url
stringA public URL to reference the file. Updated automatically if file content changes.
file.width
intImage width in pixels, if applicable.
file.private
booleanIndicates the image is not visible to customers.
file.metadata
objectArbitrary image data, typically used to store custom values. See Frontend API for more details.
option_value_ids
array of child_scalarList of option value IDs that constitute the variant.
orig_price
currencyReflects the non-sale price of the product
parent
ProductExpandable link to the parent product.
price
currencyList price used by default when sale=false or sale_price is not defined. Overrides parent product price.
prices
array of objectrequiredPrice rules to override price and sale_price when conditions match quantity or account group in a cart. Overrides parent product prices.
price
currencyrequiredPrice applied when conditions are met.
account_group
stringCustomer account group as a condition to apply price.
quantity_max
intMaximum quantity as a condition to apply price.
quantity_min
intMinimum quantity as a condition to apply price.
discount_percent
floatpurchase_options
objectPurchase options available for the product variant.
purchase_options.standard
objectDesignates purchase option as a one-time purchase.
standard.price
currencyList price used by default when sale=false or sale_price is not defined. Overrides product price.
standard.sale
booleanIndicates whether the product option is on sale. If true, the sale_price will be used by default when the product is added to a cart.
standard.sale_price
currencySale price used by default when sale=true, overriding price. Overrides product sale price.
standard.prices
array of objectPrice rules determined by cart quantity or customer account group. Overrides price and sale_price when conditions match.
price
currencyrequiredPrice applied when conditions are met.
account_group
stringCustomer account group as a condition to apply price.
quantity_max
intMaximum quantity as a condition to apply price.
quantity_min
intMinimum quantity as a condition to apply price.
discount_percent
floatstandard.orig_price
currencysale
booleanIndicates the variant is on sale andsale_price is used by default when the product is added to a cart. Overrides parent product sale.
sale_price
currencyrequiredSale price used by default when sale=true, overriding price. Overrides parent product sale_price.
shipment_weight
floatIf specified, shipping is calculated based on this shipping weight. Otherwise, it will assume 1 lb/oz/kg depending on your default weight unit. Overrides parent product shipment_weight.
sku
stringStock keeping unit (SKU) used to track inventory in a warehouse.
stock
StockExpandable list of stock adjustments for the variant.
stock_level
intCurrent in-stock quantity of the variant, based on the sum of stock entries.
subscription_interval
enumThe default billing interval when this product is used as a subscription plan. Can be monthly, yearly, weekly or daily.
Possible enum values:
subscription_interval_count
intMultiplier when combined with subscription_interval. For example, to make a subscription bill every 2 weeks, set subscription_interval=weekly and subscription_interval_count=2.
subscription_trial_days
intNumber of days offered as a free trial before the customer is billed. If a subscription is canceled by the last day of the trial period, an invoice won't be issued.
The product variant model
{
"id": "60f199509111e70000000067",
"name": "Medium",
"parent_id": "60f199509111e70000000069",
"active": true,
"archived": false,
"attributes": {
"example": true
},
"currency": "USD",
"date_created": "2021-07-16T14:36:00.333Z",
"date_updated": "2021-07-16T14:36:00.333Z",
"images": [
{
"id": "5ca24abb9c077817e5fe2b37",
"caption": "Just a variant",
"file": {
"id": "5ca24abb9c077817e5fe2b38",
"length": 66764,
"md5": "99194f53bfdea832553e7fa8ae8fd80f",
"content_type": "image/png",
"url": "http://cdn.swell.store/test/5ca24abb9c077817e5fe2b36/99194f53bfdea832553e7fa8ae8fd80f",
"width": 940,
"height": 600
}
}
],
"option_value_ids": [
"59764b54e68ba2330390319a"
],
"price": 18.99,
"sale": false,
"sale_price": null,
"sku": "EX2001",
"stock_level": 6
}
Create a new product variant. Normally, variants are automatically created when product options are set. If you wish to generate your own unique ID for the options or variant, it must use BSON ObjectID format for compatibility.
Arguments
name
stringrequiredHuman-friendly name of the variant. Defaults to the combined name of all options, for example, "Blue, Large" in the case of 2 options; color and size.
parent_id
objectIdrequiredThe id of the parent product.
attributes
objectAn object containing custom attribute values. Overrides product attributes. See attributes for more details.
option_value_ids
array of objectIdList of option value IDs that constitute the variant.
price
currencyList price used by default when sale=false or sale_price is not defined. Overrides product price.
active
booleanAn active variant is visible to customers in a storefront. Otherwise, it will be hidden from view.
archived
booleanA variant is automatically archived when it has been sold in the past and product options are changed in a way that would cause the variant to be removed.
cost
currencyCost of goods used to calculate gross margins. Overrides product cost.
images
array of objectList of images depicting the variant.
.id
objectIdautoUnique identifier for the object.
.caption
stringA brief description of the image.
.file
objectAn object representing the image file.
file.id
objectIdUnique identifier for the file.
file.content_type
stringMIME content type of the file.
file.data
filedatadata
file.date_uploaded
dateDate the file was uploaded.
file.filename
stringOptional file name.
file.height
intImage height in pixels, if applicable.
file.length
intSize of the file in bytes.
file.md5
stringAn MD5 hash of the file contents. This can be used to uniquely identify the file for caching purposes.
file.url
stringA public URL to reference the file. Updated automatically if file content changes.
file.width
intImage width in pixels, if applicable.
file.private
booleanIndicates the image is not visible to customers.
file.metadata
objectArbitrary image data, typically used to store custom values. See Frontend API for more details.
prices
array of objectPrice rules to override price and sale_price when conditions match quantity or account group in a cart. Overrides product prices
.price
currencyPrice applied when conditions are met.
.account_group
stringCustomer account group as a condition to apply price.
.quantity_max
intMaximum quantity as a condition to apply price.
.quantity_min
intMinimum quantity as a condition to apply price.
sale
booleanIndicates the variant is on sale and sale_price is used by default when the product is added to a cart. Overrides product sale.
sale_price
currencySale price used by default when sale=true, overriding price. Overrides product sale price.
shipment_weight
floatIf specified, shipping is calculated based on this shipping weight. Otherwise, it will assume 1 lb/oz/kg depending on your default weight unit. Overrides product shipping weight.
sku
stringStock keeping unit (SKU) used to track inventory in a warehouse.
const swell = require('swell-node').init('store-id', 'secret-key');
await swell.post('/products:variants', {
parent_id: '5ca24abb9c077817e5fe2b36',
name: 'Blue, Small',
});
Response
{
"id": "5c8fb5e1ed2faf8c79da492a",
"parent_id": "5ca24abb9c077817e5fe2b36",
"name": "Blue, Small",
"active": true,
"currency": "USD",
"date_created": "2019-04-01T00:00:00.000Z"
}
Retrieve an existing variant using the id that was returned when created.
Arguments
id
objectIdrequiredThe id of the variant to retrieve.
expand
stringExpanding link fields and child collections is performed using the expand argument.
- For example, expand=account would return a related customer account if one exists.
When the field represents a collection, you can specify the query limit.
- For example, expand=variants:10 would return up to 10 records of the variants collection.
See expanding for more details.
fields
stringReturn only the specified fields in the result.
- For example fields=name,slug would return only the fields name and slug in the response.
Supports nested object and array fields using dot-notation
- For example items.product_id. The variant id is always returned.
include
stringInclude one or more arbitrary queries in the response, possibly related to the main query.
See including for more details.
const swell = require('swell-node').init('store-id', 'secret-key');
await swell.get('/products:variants/{id}', {
});
Response
{
"id": "5c8fb5e1ed2faf8c79da492a",
"parent_id": "5ca24abb9c077817e5fe2b36",
"name": "Blue, Small",
"active": true,
"currency": "USD",
"date_created": "2019-04-01T00:00:00.000Z"
"date_updated": "2019-04-01T00:00:00.000Z",
}
Update an existing product using the ID that was returned when created. Updating performs a merge operation. To explicitly override values such as arrays, use the $set operator.
Arguments
id
objectIdUnique identifier for the variant.
parent_id
objectIdThe id of the parent product.
active
booleanAn active variant is visible to customers in a storefront, otherwise it will be hidden from view.
attributes
objectAn object containing custom attribute values. Overrides product attributes. See attributes for more details.
name
stringHuman-friendly name of the variant. Defaults to the combined name of all options, for example, "Blue, Large" in the case of 2 options; color and size.
price
currencyList price used by default when sale=false or sale_price is not defined. Overrides product price.
archived
booleanA variant is automatically archived when it has been sold in the past and product options are changed in a way that would cause the variant to be removed.
cost
currencyCost of goods used to calculate gross margins. Overrides product cost.
images
objectList of images depicting the variant.
images.caption
stringA brief description of the image.
images.file
objectAn object representing the image file.
file.data
fileA reference to the raw file data.
file.filename
stringOptional file name.
prices
array of objectPrice rules to override price and sale_price when conditions match quantity or account group in a cart. Overrides product prices.
.price
currencyPrice applied when conditions are met.
.account_group
stringCustomer account group as a condition to apply price.
.quantity_max
intMaximum quantity as a condition to apply price.
.quantity_min
intMinimum quantity as a condition to apply price.
sale
booleanIndicates the variant is on sale and sale_price is used by default when the product is added to a cart. Overrides product sale.
sale_price
currencySale price used by default when sale=true, overriding price. Overrides product sale price.
shipment_weight
floatIf specified, shipping is calculated based on this shipping weight. Otherwise it will assume 1 lb/oz/kg depending on your default weight unit. Overrides product shipping weight.
sku
stringStock keeping unit (SKU) used to track inventory in a warehouse.
const swell = require('swell-node').init('store-id', 'secret-key');
await swell.put('/products:variants/{id}', {
id: '5c8fb5e1ed2faf8c79da492a',
price: 19.98,
});
Response
{
"id": "5c8fb5e1ed2faf8c79da492a",
"parent_id": "5ca24abb9c077817e5fe2b36",
"name": "Blue, Small",
"active": true,
"currency": "USD",
"date_created": "2019-04-01T00:00:00.000Z",
"date_updated": "2019-04-01T00:00:00.000Z",
"price": 19.98
}
Return a list of product variants.
Arguments
expand
stringExpand link fields and child collections by using the expand argument.
- For example, expand=account would return a related customer account if one exists.
When the field represents a collection, you can specify the query limit.
- For example, expand=variants:10 would return up to 10 records of the variants collection.
See expanding for more details.
fields
stringReturns only the specified fields in the result.
- For example fields=name,slug would return only the fields name and slug in the response.
Supports nested object and array fields using dot-notation.
- For example, items.product_id. The product id is always returned.
include
objectInclude one or more arbitrary queries in the response which are potentially related to the main query.
See including for more details.
limit
intLimit the number of records returned, ranging between 1 and 1000. Defaults to 15.
page
intThe page number of results to return given the specified or default limit.
search
stringA text search is performed using the search argument. Searchable fields are defined by the model.
- For example, search=red would return records containing the word "red" anywhere in the defined text fields.
See searching for more details.
sort
stringExpression to sort results by using a format similar to a SQL sort statement.
- For example, sort=name asc would return records sorted by name ascending.
See sorting for more details.
where
objectAn object with criteria to filter the result.
- For example, active=true would return records containing a field active with the value true.
It's also possible to use query operators, for example, $eq, $ne, $gt, and more.
See querying for more details.
const swell = require('swell-node').init('store-id', 'secret-key');
await swell.get('/products:variants', {
where: { active: true },
limit: 25,
page: 1,
});
Response
{
"count": 15,
"results": [
{
"id": "5c8fb5e1ed2faf8c79da492a",
"parent_id": "5ca24abb9c077817e5fe2b36",
"name": "Blue, Small",
"active": true,
"currency": "USD",
"date_created": "2019-04-01T00:00:00.000Z",
"date_updated": "2019-04-01T00:00:00.000Z",
"price": 19.98
},
{...},
{...}
],
"page": 1,
"pages": {
"1": {
"start": 1,
"end": 15
}
}
}
Delete a variant. Try to avoid deleting variants that have been sold to a customer, as the link to existing orders will be broken.
Arguments
id
objectIdrequiredThe id of the variant to delete.
const swell = require('swell-node').init('store-id', 'secret-key');
await swell.delete('/products:variants/{id}', {
id: '5c8fb5e1ed2faf8c79da492a',
});
Response
{
"id": "5c8fb5e1ed2faf8c79da492a",
"parent_id": "5ca24abb9c077817e5fe2b36",
"name": "Blue, Small",
"active": true,
"currency": "USD",
"date_created": "2019-04-01T00:00:00.000Z",
"date_updated": "2019-04-01T00:00:00.000Z",
"price": 19.98
}