Create a product with variations
Creates one product plus one or more variations. Products can carry custom tags for organization and filtering; variations can carry flags such as Organic and SNAP/EBT eligibility. Square sync is queued through the normal catalog sync flags when sync is enabled.
POST
/
v2
/
products
Create a product with variations
curl --request POST \
--url https://api.vantr.ai/v2/products \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"variations": [
{
"name": "<string>",
"description": "<string>",
"price": 123,
"unit": "EA",
"sku": "<string>",
"barcode": "<string>",
"ebt_eligible": true,
"wic_eligible": true,
"organic_certified": true,
"kosher_certified": true,
"tobacco": true,
"allergens": [],
"tax_code": "<string>",
"tags": [
"<string>"
],
"square_sync_enabled": true,
"is_archived": true
}
]
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
variations: [
{
name: '<string>',
description: '<string>',
price: 123,
unit: 'EA',
sku: '<string>',
barcode: '<string>',
ebt_eligible: true,
wic_eligible: true,
organic_certified: true,
kosher_certified: true,
tobacco: true,
allergens: [],
tax_code: '<string>',
tags: ['<string>'],
square_sync_enabled: true,
is_archived: true
}
]
})
};
fetch('https://api.vantr.ai/v2/products', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.vantr.ai/v2/products"
payload = {
"name": "<string>",
"variations": [
{
"name": "<string>",
"description": "<string>",
"price": 123,
"unit": "EA",
"sku": "<string>",
"barcode": "<string>",
"ebt_eligible": True,
"wic_eligible": True,
"organic_certified": True,
"kosher_certified": True,
"tobacco": True,
"allergens": [],
"tax_code": "<string>",
"tags": ["<string>"],
"square_sync_enabled": True,
"is_archived": True
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"success": true,
"product": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"category_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"tags": [
"<string>"
],
"is_archived": true,
"square_sync_enabled": true,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"variations": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"product_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"price": 123,
"unit": "EA",
"sku": "<string>",
"barcode": "<string>",
"image_url": "<string>",
"ebt_eligible": true,
"wic_eligible": true,
"organic_certified": true,
"kosher_certified": true,
"tobacco": true,
"alcohol_class": "<string>",
"controlled_class": "<string>",
"allergens": [
"<string>"
],
"tax_code": "<string>",
"tags": [
"<string>"
],
"is_archived": true,
"square_sync_enabled": true
}
]
}
}{
"success": false,
"code": "<string>",
"message": "<string>"
}{
"error": "<string>",
"error_description": "<string>"
}{
"error": "<string>",
"error_description": "<string>"
}Authorizations
OAuth2BasicClientAuth
OAuth 2.0 with opaque bearer tokens. Authorization-code requests require PKCE S256.
Headers
Pin a dated API release (YYYY-MM-DD). Omit for the latest (2026-06-09). Unknown values return 400 unsupported_api_version; the resolved version is echoed back in the X-API-Version response header.
Pattern:
^\d{4}-\d{2}-\d{2}$Example:
"2026-06-09"
Body
application/json
Was this page helpful?
⌘I
Create a product with variations
curl --request POST \
--url https://api.vantr.ai/v2/products \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"variations": [
{
"name": "<string>",
"description": "<string>",
"price": 123,
"unit": "EA",
"sku": "<string>",
"barcode": "<string>",
"ebt_eligible": true,
"wic_eligible": true,
"organic_certified": true,
"kosher_certified": true,
"tobacco": true,
"allergens": [],
"tax_code": "<string>",
"tags": [
"<string>"
],
"square_sync_enabled": true,
"is_archived": true
}
]
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
variations: [
{
name: '<string>',
description: '<string>',
price: 123,
unit: 'EA',
sku: '<string>',
barcode: '<string>',
ebt_eligible: true,
wic_eligible: true,
organic_certified: true,
kosher_certified: true,
tobacco: true,
allergens: [],
tax_code: '<string>',
tags: ['<string>'],
square_sync_enabled: true,
is_archived: true
}
]
})
};
fetch('https://api.vantr.ai/v2/products', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.vantr.ai/v2/products"
payload = {
"name": "<string>",
"variations": [
{
"name": "<string>",
"description": "<string>",
"price": 123,
"unit": "EA",
"sku": "<string>",
"barcode": "<string>",
"ebt_eligible": True,
"wic_eligible": True,
"organic_certified": True,
"kosher_certified": True,
"tobacco": True,
"allergens": [],
"tax_code": "<string>",
"tags": ["<string>"],
"square_sync_enabled": True,
"is_archived": True
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"success": true,
"product": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"category_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"tags": [
"<string>"
],
"is_archived": true,
"square_sync_enabled": true,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"variations": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"product_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"price": 123,
"unit": "EA",
"sku": "<string>",
"barcode": "<string>",
"image_url": "<string>",
"ebt_eligible": true,
"wic_eligible": true,
"organic_certified": true,
"kosher_certified": true,
"tobacco": true,
"alcohol_class": "<string>",
"controlled_class": "<string>",
"allergens": [
"<string>"
],
"tax_code": "<string>",
"tags": [
"<string>"
],
"is_archived": true,
"square_sync_enabled": true
}
]
}
}{
"success": false,
"code": "<string>",
"message": "<string>"
}{
"error": "<string>",
"error_description": "<string>"
}{
"error": "<string>",
"error_description": "<string>"
}