Overview
On this page, we’ll dive into the different product endpoints you can use to manage products programmatically.
Products are objects containing variants. When a customer purchases a product, they are sent the respetive deliverable(s) that product's variant contains.
One product can have many variants, each of which have their own price, product deliverable, and pricing.
On this page, we'll dive into the different product endpoints you can use to manage products - and product variants - programmatically. We'll look at how to create, update, and delete products.
Endpoints
The product model
The product model contains all the information about the products stores have, including the price, media, and customization options.
Properties
- Name
idinteger- Description
The unique product identifier
- Name
titlestring- Description
The product title.
- Name
slugstring- Description
The unique product slug.
- Name
descriptionstring- Description
The product description.
- Name
imagesobject- Description
The array of product images, displays the following information:
pathimage pathmetadataarray of image metadatasizesize in bytesfilenamefile nameextensionfile extensionmime_typefile mime type
- Name
orderinteger- Description
The order of the product relative to all other products in your storefront.
- Name
visibilitystring- Description
The product visibility. One of four values:
PUBLICProduct can be visited and purchased.ON_HOLDProduct can be visited but not be purchased.HIDDENProduct can be only visited via direct link and purchased.PRIVATEProduct cannot be visited nor purchased.
- Name
delivery_textstring- Description
The product delivery text, shown to customers in addition to the variant deliverables. Useful as a thank you note or offering a discount.
- Name
additional_informationarray- Description
The additional information input(s) of the product. The field supports 16 field types organized into the following categories:
Text Input Fields:
text- Single-line text inputnumber- Numeric input with validationemail- Email address with RFC 5321 validationphone- Phone number with country selector and E.164 formattingcurrency- Currency amount with currency selectorlink- Website URL with validationtextarea- Multi-line text input
Selection Fields:
select- Dropdown selection (single or multiple)radio- Radio button group with visual variantscheckbox-group- Multiple checkbox selection with visual variantspillbox- Tag-style multi-select with removable pills
Boolean Fields:
checkbox- Single yes/no checkboxswitch- Toggle switch (on/off)
Date Fields:
date- Single date picker with constraintsdate-range- Date range selector with validation
Special:
hidden- Hidden field not visible to customer
Each additional_information field supports the following properties:
Required Properties (all field types):
type(string) - Field type from the list abovelabel(string) - Display label (2-100 characters, must be unique)required(boolean) - Whether the field is mandatory for checkout
Optional Properties:
key(string) - Custom identifier for invoice data (2-100 chars, letters/underscores only). Auto-generated from label if omittedplaceholder(string) - Placeholder text for applicable field types (2-255 characters)description(string) - Help text displayed below the field (2-255 characters)options(array) - Available options for selection fields (required for select, radio, checkbox-group, pillbox)variant(string) - Visual style variant for selection fields and switchdate_options(object) - Date-specific configuration for date and date-range fields
- Name
other_settingsarray- Description
Customization settings of the product, with the following options:
faqObject containing an array of frequently asked questions to be displayed on the product page. Consists of:questionFAQ question.answerFAQ answer.
video_urlURL of a product video, will be displayed on the product page. Supported services: YouTube, Vimeo, Dailymotion, Slideshare, Miroredirect_urlURL you want to redirect your customers to after a successful purchase. The redirect URL can utilize the following dynamic values:[order_id]ID of the order[customer_email]email of the customer who placed the order
product_titleMeta title tag of the product, will appear in search engines and social media.product_descriptionMeta description tag of the product, will appear in search engines and social media.
- Name
deleted_attimestamp- Description
The time at which this product was deleted.
- Name
created_attimestamp- Description
The time at which this product was first created.
- Name
updated_attimestamp- Description
The time at which this product was last updated.
- Name
store_idinteger- Description
The ID of the store this product belongs to.
- Name
category_idinteger- Description
The ID of the category this product belongs to.
- Name
section_idinteger- Description
The ID of the section this product belongs to.
- Name
section_orderinteger- Description
The order of the product within the section.
- Name
is_discoverableinteger- Description
Whether the product can be discovered. One of two values:
1It can be discovered.0It cannot be discovered.
- Name
variantsobject- Description
Variants object containing a number of variant arrays. Variant arrays consist of:
idVariant IDtitleVariant title
- Name
urlstring- Description
Displays the full product URL, including storefront domain.
Field Type Details
Text Input Fields
text
Single-line text input with optional placeholder.
Supported properties: placeholder, description
Max length: 255 characters
Example:
{
"type": "text",
"label": "In-Game Username",
"required": true,
"placeholder": "Enter your username",
"description": "Must match your game account"
}number
Numeric input with range validation.
Supported properties: placeholder, description
Range: -9,007,199,254,740,991 to 9,007,199,254,740,991
Example:
{
"type": "number",
"label": "Quantity",
"required": true,
"placeholder": "0"
}email
Email input.
Supported properties: placeholder, description
Max length: 255 characters
Example:
{
"type": "email",
"label": "Recovery Email",
"required": false,
"placeholder": "user@example.com",
"description": "For account recovery"
}phone
Phone number input with country selector.
Supported properties: description
Max length: 25 characters
Format: Automatically normalized to E.164 (+1234567890)
Example:
{
"type": "phone",
"label": "Mobile Number",
"required": true,
"description": "For SMS delivery notifications"
}currency
Currency amount with currency selector.
Supported properties: description
Format: Stores amount in minor units (cents) with currency code
Example:
{
"type": "currency",
"label": "Budget",
"required": true,
"description": "Your maximum budget"
}link
URL input with validation. Automatically prepends https:// if missing.
Supported properties: placeholder, description
Max length: 2048 characters
Example:
{
"type": "link",
"label": "Portfolio Website",
"required": false,
"placeholder": "https://example.com"
}textarea
Multi-line text input.
Supported properties: placeholder, description
Max length: 2048 characters
Example:
{
"type": "textarea",
"label": "Special Instructions",
"required": false,
"placeholder": "Enter any special requirements...",
"description": "Tell us about customization needs"
}Selection Fields
Selection fields require an options array and support two formats:
Simple format (string array):
"options": ["Option A", "Option B", "Option C"]Enhanced format (objects with metadata):
Only supported for radio, checkbox-group, and switch (fieldset variant).
"options": [
{
"label": "Basic Plan",
"value": "basic",
"description": "Perfect for individuals"
},
{
"label": "Pro Plan",
"value": "pro",
"description": "Designed for teams"
}
]Enhanced option properties:
label(required) - Display text (1-100 characters)value(optional) - Stored value (defaults to label if omitted)description(optional) - Helper text (max 255 characters, only displays in compatible variants)
select
Dropdown selection field.
Supported properties: placeholder, description, variant, options (required)
Options format: String array only
Variants:
single(default) - Single selectionmultiple- Multiple selection
Example:
{
"type": "select",
"label": "Preferred Region",
"required": true,
"variant": "single",
"options": [
"North America",
"Europe",
"Asia"
],
"placeholder": "Select your region..."
}radio
Radio button group for single selection.
Supported properties: description, variant (required), options (required)
Options format: String array or enhanced objects (for default and cards variants)
Variants:
default- Standard radio buttons (supports descriptions)cards- Card-style options (supports descriptions)row- Inline horizontal layoutpills- Pill-shaped optionsbuttons- Button-style optionssegmented- Segmented control
Example with enhanced options:
{
"type": "radio",
"label": "Subscription Plan",
"required": true,
"variant": "cards",
"options": [
{
"label": "Starter",
"value": "starter",
"description": "$9/month - For individuals"
},
{
"label": "Pro",
"value": "pro",
"description": "$29/month - For teams"
}
]
}checkbox-group
Checkbox group for multiple selections.
Supported properties: description, variant (required), options (required)
Options format: String array or enhanced objects (for default and cards variants)
Variants:
default- Standard checkboxes (supports descriptions)cards- Card-style checkboxes (supports descriptions)fieldset- Horizontal inline grouppills- Pill-shaped checkboxesbuttons- Button-style checkboxes
Example:
{
"type": "checkbox-group",
"label": "Add-on Services",
"required": false,
"variant": "default",
"options": [
"Gift Wrapping",
"Express Shipping",
"Insurance"
]
}pillbox
Multi-select with removable pill-shaped tags.
Supported properties: placeholder, description, options (required)
Options format: String array only
Example:
{
"type": "pillbox",
"label": "Programming Languages",
"required": true,
"options": [
"JavaScript",
"Python",
"Java",
"Go"
],
"placeholder": "Choose languages..."
}Boolean Fields
checkbox
Single yes/no checkbox.
Supported properties: description
Example:
{
"type": "checkbox",
"label": "I agree to the Terms of Service",
"required": true,
"description": "You must accept to proceed"
}switch
Toggle switch (on/off).
Supported properties: description, variant (required)
Options: Only required for fieldset variant (supports enhanced format)
Variants:
single- Single on/off togglefieldset- Multiple switches in a group (requires options)
Important: Switch fields are typically not required because they represent on/off states where "off" (false) is a valid value. While you can technically set required: true, it rarely makes semantic sense for a toggle.
Example - Single:
{
"type": "switch",
"label": "Enable Notifications",
"required": false,
"variant": "single"
}Example - Fieldset:
{
"type": "switch",
"label": "Privacy Settings",
"required": false,
"variant": "fieldset",
"options": [
{
"label": "Profile Visibility",
"value": "profile_public",
"description": "Make profile public"
},
{
"label": "Activity Feed",
"value": "show_activity",
"description": "Display recent activity"
}
]
}Date Fields
Date fields support advanced configuration via the date_options object:
Common date_options properties:
min_date(string) - Minimum date: "today" or "YYYY-MM-DD"max_date(string) - Maximum date: "today" or "YYYY-MM-DD"start_day(integer) - First day of week (0=Sunday, 1=Monday, ..., 6=Saturday, default: 1)clearable(boolean) - Show clear button (default: false)week_numbers(boolean) - Display week numbers (default: false)selectable_header(boolean) - Clickable month/year header (default: false)
Additional properties for date-range:
min_range(integer) - Minimum range in days (≥1)max_range(integer) - Maximum range in days (≥1)with_presets(boolean) - Show preset buttons (default: false)with_inputs(boolean) - Show date inputs (default: false)presets(string) - Space-separated preset list
Available presets: today, yesterday, thisWeek, lastWeek, last7Days, last14Days, last30Days, thisMonth, lastMonth, last3Months, last6Months, thisQuarter, lastQuarter, thisYear, lastYear, yearToDate
date
Single date picker.
Supported properties: placeholder, description, date_options
Example:
{
"type": "date",
"label": "Delivery Date",
"required": true,
"placeholder": "Select a date...",
"date_options": {
"min_date": "today",
"max_date": "2025-12-31",
"start_day": 1,
"clearable": true
}
}date-range
Date range picker.
Supported properties: placeholder, description, date_options
Example:
{
"type": "date-range",
"label": "Rental Period",
"required": true,
"placeholder": "Select rental period...",
"description": "Minimum 3 days, maximum 30 days",
"date_options": {
"min_date": "today",
"max_date": "2026-06-30",
"min_range": 3,
"max_range": 30,
"start_day": 1,
"clearable": true,
"with_presets": true,
"presets": "last7Days last14Days last30Days thisMonth"
}
}Special Fields
hidden
Hidden field not visible to customers.
Supported properties: None
Note: Still requires a label for internal identification.
Example:
{
"type": "hidden",
"label": "Campaign Source",
"required": false,
"key": "utm_source"
}Validation Rules
Field-Level Validation
type- Must be a valid field type from the supported listlabel- Required, 2-100 characters, must be unique, cannot use reserved namesrequired- Required, must be booleankey- Optional, 2-100 characters, letters and underscores only, must be uniqueplaceholder- Optional, 2-255 characters (only for supported field types)description- Optional, 2-255 characters (only for supported field types)options- Required for select, radio, checkbox-group, pillbox. Required for switch with fieldset variantvariant- Required for select, radio, checkbox-group, switch. Must be valid variant for the field type
Reserved Field Labels
These labels are reserved and cannot be used:
purchase_quantitycustomer_emailpayment_methodextra
Options Validation
String options:
- Each option: 1-100 characters
Enhanced options (objects):
label- Required, 1-100 charactersvalue- Optional, 1-100 characters (defaults to label)description- Optional, max 255 characters
Date Options Validation
min_date/max_date- Must be "today" or validYYYY-MM-DDformatmin_datemust be ≤max_datewhen both are specific datesstart_day- Integer 0-6min_range/max_range- Positive integers ≥1min_rangemust be ≤max_range- Boolean options must be
trueorfalse presets- Space-separated string of valid preset values