Products
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.
The product model
The product model contains all the information about the products stores have, including the price, media, and customization options.
Properties
- Name
id- Type
- integer
- Description
The unique product identifier
- Name
title- Type
- string
- Description
The product title.
- Name
slug- Type
- string
- Description
The unique product slug.
- Name
description- Type
- string
- Description
The product description.
- Name
images- Type
- object
- Description
The array of product images, displays the following information:
pathimage pathmetadataarray of image metadatasizesize in bytesfilenamefile nameextensionfile extensionmime_typefile mime type
- Name
order- Type
- integer
- Description
The order of the product relative to all other products in your storefront.
- Name
visibility- Type
- string
- 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_text- Type
- string
- 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_information- Type
- array
- 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_settings- Type
- array
- 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_at- Type
- timestamp
- Description
The time at which this product was deleted.
- Name
created_at- Type
- timestamp
- Description
The time at which this product was first created.
- Name
updated_at- Type
- timestamp
- Description
The time at which this product was last updated.
- Name
store_id- Type
- integer
- Description
The ID of the store this product belongs to.
- Name
category_id- Type
- integer
- Description
The ID of the category this product belongs to.
- Name
section_id- Type
- integer
- Description
The ID of the section this product belongs to.
- Name
section_order- Type
- integer
- Description
The order of the product within the section.
- Name
is_discoverable- Type
- integer
- Description
Whether the product can be discovered. One of two values:
1It can be discovered.0It cannot be discovered.
- Name
variants- Type
- object
- Description
Variants object containing a number of variant arrays. Variant arrays consist of:
idVariant IDtitleVariant title
- Name
url- Type
- string
- 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
List all products
This endpoint allows you to retrieve a paginated list of all your products. By default, a maximum of fifteen products are shown per page.
Optional attributes
- Name
limit- Type
- integer
- Description
Limit the number of products returned
- Name
page- Type
- integer
- Description
The page number you are attempting to access.
- Name
with_trashed- Type
- boolean
- Description
Include deleted products in the results
- Name
only_trashed- Type
- boolean
- Description
Limit the results to only deleted products
Request
$client = new http\Client;
$request = new http\Client\Request;
$request->setRequestUrl('https://sell.app/api/v2/products');
$request->setRequestMethod('GET');
$request->setHeaders([
'accept' => 'application/json',
'Authorization' => 'Bearer {ApiKeyHere}'
]);
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();
Response
{
"data": [
{
"id": 1,
"title": "Elixir of immortality",
"slug": "elixir-of-immortality",
"description": "<p>Want to live forever? Buy this now and I'll send a digital elixir that converts your soul into an NFT that will roam the internet for eternity!<\/p>",
"images": [
{
"path": "store\/1\/listings\/NM6TBKIMzpFJq1MKTV24oMJ1W4UrKCo7NS98nt4K.png",
"metadata": {
"size": 39289,
"filename": "NM6TBKIMzpFJq1MKTV24oMJ1W4UrKCo7NS98nt4K",
"extension": "png",
"mime_type": "image\/png"
}
},
{
"path": "store\/1\/listings\/ov6XMb68tRr80zl7sqfN1or7xfqqH5WbZygDEQ8X.png",
"metadata": {
"size": 422373,
"filename": "ov6XMb68tRr80zl7sqfN1or7xfqqH5WbZygDEQ8X",
"extension": "png",
"mime_type": "image\/png"
}
}
],
"order": 1,
"visibility": "PUBLIC",
"delivery_text": "Thanks again bud!",
"additional_information": [
{
"required": true,
"key": "3aecffd000e00e2211e94558007ffc37",
"type": "checkbox",
"label": "Do you agree to handing your soul over?"
}
],
"other_settings": {
"faq": [
{
"answer": "Yes, trust me!",
"question": "Will I really live forever?"
}
],
"video_url": "https:\/\/www.youtube.com\/watch?v=dQw4w9WgXcQ",
"redirect_url": "https:\/\/666.com\/transfer-soul?customer_email=[customer_email]&order_id=[order_id]",
"product_title": "The real elixir of immortality",
"product_description": "Live forever, online."
},
"deleted_at": null,
"created_at": "2024-01-09T22:56:49.000000Z",
"updated_at": "2024-01-10T10:00:28.000000Z",
"store_id": 1,
"category_id": null,
"section_id": null,
"section_order": null,
"is_discoverable": 1,
"variants": [
{
"id": 1,
"title": "Default"
}
],
"url": "https:\/\/example.sell.app\/product\/elixir-of-immortality"
}
],
"links": {
// ...
},
"meta": {
// ...
}
}
Create a product
Programmatically create a product using the following endpoint. See the code examples for how to create a new product with the SellApp API.
Unlike other endpoints, we will be using Multipart instead of JSON so we can add a product image.
If you do not wish to add a product image, you may modify the request and use JSON instead.
This will create a draft product. To complete the product, you will want to create a product variant via the product variant endpoint
Required attributes
- Name
title- Type
- string
- Description
The product title.
- Name
description- Type
- string
- Description
The product description.
- Name
visibility- Type
- string
- 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 or purchased.
Optional attributes
- Name
additional_information- Type
- array
- Description
The additional information input(s) of the product. The field supports 16 field types organized into categories for text input, selection, boolean, date, and special fields. Refer to the Field Type Details section below for examples.
Text Input Fields:
text,number,email,phone,currency,link,textareaSelection Fields:
select,radio,checkbox-group,pillboxBoolean Fields:
checkbox,switchDate Fields:
date,date-rangeSpecial:
hiddenRequired 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
images- Type
- object
- Description
The image(s) displaying the product.
To add an image, send a Multipart request with the image uploaded in the request. JSON will not work.
- Name
other_settings- Type
- array
- Description
Customization settings of the product, with the following options:
redirect_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
video_urlURL of a product video, will be displayed on product page. Supported services: YouTube, Vimeo, Dailymotion, Slideshare, Miroproduct_titleMeta title element of the product, will appear in search engines and social media.product_descriptionMeta description element of the product, will appear in search engines and social media.faqArray of frequently asked questions to be displayed on the product page. Consists of:questionFAQ question.answerFAQ answer.
Request
$client = new http\Client;
$request = new http\Client\Request;
$body = new http\Message\Body;
$body->addForm([
'title' => 'Immortality Elixir',
'description' => 'Want to live forever? Buy this now and I'll send a digital elixir that converts your soul into an NFT that will roam the internet for eternity!',
'visibility' => 'PUBLIC',
'delivery_text' => 'Thanks for purchasing! Here is a 20% off coupon for your next purchase: 20FREE24',
'additional_information[0][type]' => 'checkbox',
'additional_information[0][required]' => '1',
'additional_information[0][label]' => 'I agree to handing over my soul',
'additional_information[1][type]' => 'email',
'additional_information[1][required]' => '1',
'additional_information[1][label]' => 'Soul Transfer Email',
'additional_information[1][placeholder]' => 'your.soul@example.com',
'additional_information[1][description]' => 'We will send your digital elixir here',
'other_settings[redirect_url]' => 'https://666.com/transfer-soul?customer_email=[customer_email]&order_id=[order_id]',
'other_settings[video_url]' => 'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
'other_settings[product_title]' => 'The real elixir of immortality',
'other_settings[product_description]' => 'Live forever, online.',
'other_settings[faq][0][question]' => 'Will I really live forever?',
'other_settings[faq][0][answer]' => 'Yes, trust me!'
], [
[
'name' => 'images[]',
'type' => null,
'file' => 'path\\to\\image.png',
'data' => null
]
]);
$request->setRequestUrl('https://sell.app/api/v2/products');
$request->setRequestMethod('POST');
$request->setBody($body);
$request->setHeaders([
'Authorization' => 'Bearer {ApiKeyHere}'
]);
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();
Response
{
"data": {
"id": 2,
"title": "Immortality Elixir",
"slug": "immortality-elixir",
"description": "Want to live forever? Buy this now and I'll send a digital elixir that converts your soul into an NFT that will roam the internet for eternity!",
"images": [
{
"path": "store\/1\/listings\/qXZHzR15vs09zbfn3yui5jO6QK0IbQP4M6QVydUn.png",
"metadata": {
"size": 39289,
"filename": "qXZHzR15vs09zbfn3yui5jO6QK0IbQP4M6QVydUn",
"extension": "png",
"mime_type": "image\/png"
}
}
],
"order": 2,
"visibility": "PUBLIC",
"delivery_text": "Thanks for purchasing! Here is a 20% off coupon for your next purchase: 20FREE24",
"additional_information": [
{
"required": true,
"key": "5ebae238c0afae7f4a4b96b30ff6f34c",
"type": "checkbox",
"label": "I agree to handing over my soul"
},
{
"required": true,
"key": "soul_transfer_email",
"type": "email",
"label": "Soul Transfer Email",
"placeholder": "your.soul@example.com",
"description": "We will send your digital elixir here"
}
],
"other_settings": {
"faq": [
{
"answer": "Yes, trust me!",
"question": "Will I really live forever?"
}
],
"video_url": "https:\/\/www.youtube.com\/watch?v=dQw4w9WgXcQ",
"redirect_url": "https:\/\/666.com\/transfer-soul?customer_email=[customer_email]&order_id=[order_id]",
"product_title": "The real elixir of immortality",
"product_description": "Live forever, online."
},
"deleted_at": null,
"created_at": "2024-01-10T12:16:10.000000Z",
"updated_at": "2024-01-10T12:16:10.000000Z",
"store_id": 1,
"category_id": null,
"section_id": null,
"section_order": null,
"is_discoverable": 1,
"variants": [],
"url": "https:\/\/example.sell.app\/product\/immortality-elixir"
}
}
Retrieve a product
This endpoint allows you to retrieve a specific product by providing the unique identifier. Refer to the list at the top of this page to see which properties are included with product objects.
Request
$client = new http\Client;
$request = new http\Client\Request;
$request->setRequestUrl('https://sell.app/api/v2/products/1');
$request->setRequestMethod('GET');
$request->setHeaders([
'accept' => 'application/json',
'Authorization' => 'Bearer {ApiKeyHere}'
]);
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();
Response
{
"data": [
{
"id": 1,
"title": "Elixir of immortality",
"slug": "elixir-of-immortality",
"description": "<p>Want to live forever? Buy this now and I'll send a digital elixir that converts your soul into an NFT that will roam the internet for eternity!<\/p>",
"images": [
{
"path": "store\/1\/listings\/NM6TBKIMzpFJq1MKTV24oMJ1W4UrKCo7NS98nt4K.png",
"metadata": {
"size": 39289,
"filename": "NM6TBKIMzpFJq1MKTV24oMJ1W4UrKCo7NS98nt4K",
"extension": "png",
"mime_type": "image\/png"
}
},
{
"path": "store\/1\/listings\/ov6XMb68tRr80zl7sqfN1or7xfqqH5WbZygDEQ8X.png",
"metadata": {
"size": 422373,
"filename": "ov6XMb68tRr80zl7sqfN1or7xfqqH5WbZygDEQ8X",
"extension": "png",
"mime_type": "image\/png"
}
}
],
"order": 1,
"visibility": "PUBLIC",
"delivery_text": "Thanks again bud!",
"additional_information": [
{
"required": true,
"key": "3aecffd000e00e2211e94558007ffc37",
"type": "checkbox",
"label": "Do you agree to handing your soul over?"
}
],
"other_settings": {
"faq": [
{
"answer": "Yes, trust me!",
"question": "Will I really live forever?"
}
],
"video_url": "https:\/\/www.youtube.com\/watch?v=dQw4w9WgXcQ",
"redirect_url": "https:\/\/666.com\/transfer-soul?customer_email=[customer_email]&order_id=[order_id]",
"product_title": "The real elixir of immortality",
"product_description": "Live forever, online."
},
"deleted_at": null,
"created_at": "2024-01-09T22:56:49.000000Z",
"updated_at": "2024-01-10T10:00:28.000000Z",
"store_id": 1,
"category_id": null,
"section_id": null,
"section_order": null,
"is_discoverable": 1,
"variants": [
{
"id": 1,
"title": "Default"
}
],
"url": "https:\/\/example.sell.app\/product\/elixir-of-immortality"
}
],
"links": {
// ...
},
"meta": {
// ...
}
}
Update a product
Update a product's details with the following endpoint.
Optional attributes
- Name
title- Type
- string
- Description
The product title.
- Name
description- Type
- string
- Description
The product description.
- Name
visibility- Type
- string
- 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 or purchased.
- Name
additional_information- Type
- array
- Description
The additional information input(s) of the product. The field supports 16 field types organized into categories for text input, selection, boolean, date, and special fields. Refer to the Field Type Details section below for examples.
Text Input Fields:
text,number,email,phone,currency,link,textareaSelection Fields:
select,radio,checkbox-group,pillboxBoolean Fields:
checkbox,switchDate Fields:
date,date-rangeSpecial:
hiddenRequired 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
images- Type
- object
- Description
The image(s) displaying the product.
To add an image, send a Multipart request with the image uploaded in the request. JSON will not work.
- Name
other_settings- Type
- array
- Description
Customization settings of the product, with the following options:
redirect_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
video_urlURL of a product video, will be displayed on product page. Supported services: YouTube, Vimeo, Dailymotion, Slideshare, Miroproduct_titleMeta title element of the product, will appear in search engines and social media.product_descriptionMeta description element of the product, will appear in search engines and social media.faqArray of frequently asked questions to be displayed on the product page. Consists of:questionFAQ question.answerFAQ answer.
Request
$client = new http\Client;
$request = new http\Client\Request;
$body = new http\Message\Body;
$body->append('{
"description": "Updated Description"
}');
$request->setRequestUrl('https://sell.app/api/v2/products/2');
$request->setRequestMethod('PATCH');
$request->setBody($body);
$request->setHeaders([
'content-type' => 'application/json',
'Accept' => 'text/json',
'Authorization' => 'Bearer {ApiKeyHere}'
]);
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();
Response
{
"data": {
"id": 2,
"title": "Immortality Elixir",
"slug": "immortality-elixir",
"description": "Updated Description",
"images": [
{
"path": "store\/1\/listings\/qXZHzR15vs09zbfn3yui5jO6QK0IbQP4M6QVydUn.png",
"metadata": {
"size": 39289,
"filename": "qXZHzR15vs09zbfn3yui5jO6QK0IbQP4M6QVydUn",
"extension": "png",
"mime_type": "image\/png"
}
}
],
"order": 2,
"visibility": "PUBLIC",
"delivery_text": "Thanks for purchasing! Here is a 20% off coupon for your next purchase: 20FREE24",
"additional_information": [
{
"required": true,
"key": "5ebae238c0afae7f4a4b96b30ff6f34c",
"type": "checkbox",
"label": "I agree to handing over my soul"
}
],
"other_settings": {
"faq": [
{
"answer": "Yes, trust me!",
"question": "Will I really live forever?"
}
],
"video_url": "https:\/\/www.youtube.com\/watch?v=dQw4w9WgXcQ",
"redirect_url": "https:\/\/666.com\/transfer-soul?customer_email=[customer_email]&order_id=[order_id]",
"product_title": "The real elixir of immortality",
"product_description": "Live forever, online."
},
"deleted_at": null,
"created_at": "2024-01-10T12:16:10.000000Z",
"updated_at": "2024-01-10T12:16:10.000000Z",
"store_id": 1,
"category_id": null,
"section_id": null,
"section_order": null,
"is_discoverable": 1,
"variants": [],
"url": "https:\/\/example.sell.app\/product\/immortality-elixir"
}
}
Delete a product
This endpoint allows you to delete a product.
This will permanently delete the product and its associated data.
Request
$client = new http\Client;
$request = new http\Client\Request;
$request->setRequestUrl('https://sell.app/api/v2/products/2');
$request->setRequestMethod('DELETE');
$request->setHeaders([
'accept' => 'application/json',
'Authorization' => 'Bearer {ApiKeyHere}'
]);
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();