Create Product
curl --request POST \
--url https://qwoty.app/api/products \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--data '
{
"api_name": "<string>",
"recurrence_type": "<string>",
"name": "<string>",
"reference": "<string>",
"description": "<string>",
"is_active": true,
"catalog_ids": [
"<string>"
],
"category_ids": [
"<string>"
],
"inventory": {
"sku": "<string>"
},
"settings": {
"unit_per_pack": 123
},
"accounting": {
"ledger_account": "<string>"
},
"identifiers": {
"crm": "<string>",
"erp": "<string>",
"accounting": "<string>"
},
"shipping": {
"weight": 123,
"weight_unit": "<string>",
"height": 123,
"length": 123,
"width": 123,
"length_unit": "<string>",
"country_of_origin": "<string>",
"harmonized_system_code": "<string>"
}
}
'import requests
url = "https://qwoty.app/api/products"
payload = {
"api_name": "<string>",
"recurrence_type": "<string>",
"name": "<string>",
"reference": "<string>",
"description": "<string>",
"is_active": True,
"catalog_ids": ["<string>"],
"category_ids": ["<string>"],
"inventory": { "sku": "<string>" },
"settings": { "unit_per_pack": 123 },
"accounting": { "ledger_account": "<string>" },
"identifiers": {
"crm": "<string>",
"erp": "<string>",
"accounting": "<string>"
},
"shipping": {
"weight": 123,
"weight_unit": "<string>",
"height": 123,
"length": 123,
"width": 123,
"length_unit": "<string>",
"country_of_origin": "<string>",
"harmonized_system_code": "<string>"
}
}
headers = {
"Authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({
api_name: '<string>',
recurrence_type: '<string>',
name: '<string>',
reference: '<string>',
description: '<string>',
is_active: true,
catalog_ids: ['<string>'],
category_ids: ['<string>'],
inventory: {sku: '<string>'},
settings: {unit_per_pack: 123},
accounting: {ledger_account: '<string>'},
identifiers: {crm: '<string>', erp: '<string>', accounting: '<string>'},
shipping: {
weight: 123,
weight_unit: '<string>',
height: 123,
length: 123,
width: 123,
length_unit: '<string>',
country_of_origin: '<string>',
harmonized_system_code: '<string>'
}
})
};
fetch('https://qwoty.app/api/products', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://qwoty.app/api/products",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'api_name' => '<string>',
'recurrence_type' => '<string>',
'name' => '<string>',
'reference' => '<string>',
'description' => '<string>',
'is_active' => true,
'catalog_ids' => [
'<string>'
],
'category_ids' => [
'<string>'
],
'inventory' => [
'sku' => '<string>'
],
'settings' => [
'unit_per_pack' => 123
],
'accounting' => [
'ledger_account' => '<string>'
],
'identifiers' => [
'crm' => '<string>',
'erp' => '<string>',
'accounting' => '<string>'
],
'shipping' => [
'weight' => 123,
'weight_unit' => '<string>',
'height' => 123,
'length' => 123,
'width' => 123,
'length_unit' => '<string>',
'country_of_origin' => '<string>',
'harmonized_system_code' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://qwoty.app/api/products"
payload := strings.NewReader("{\n \"api_name\": \"<string>\",\n \"recurrence_type\": \"<string>\",\n \"name\": \"<string>\",\n \"reference\": \"<string>\",\n \"description\": \"<string>\",\n \"is_active\": true,\n \"catalog_ids\": [\n \"<string>\"\n ],\n \"category_ids\": [\n \"<string>\"\n ],\n \"inventory\": {\n \"sku\": \"<string>\"\n },\n \"settings\": {\n \"unit_per_pack\": 123\n },\n \"accounting\": {\n \"ledger_account\": \"<string>\"\n },\n \"identifiers\": {\n \"crm\": \"<string>\",\n \"erp\": \"<string>\",\n \"accounting\": \"<string>\"\n },\n \"shipping\": {\n \"weight\": 123,\n \"weight_unit\": \"<string>\",\n \"height\": 123,\n \"length\": 123,\n \"width\": 123,\n \"length_unit\": \"<string>\",\n \"country_of_origin\": \"<string>\",\n \"harmonized_system_code\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://qwoty.app/api/products")
.header("Authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"api_name\": \"<string>\",\n \"recurrence_type\": \"<string>\",\n \"name\": \"<string>\",\n \"reference\": \"<string>\",\n \"description\": \"<string>\",\n \"is_active\": true,\n \"catalog_ids\": [\n \"<string>\"\n ],\n \"category_ids\": [\n \"<string>\"\n ],\n \"inventory\": {\n \"sku\": \"<string>\"\n },\n \"settings\": {\n \"unit_per_pack\": 123\n },\n \"accounting\": {\n \"ledger_account\": \"<string>\"\n },\n \"identifiers\": {\n \"crm\": \"<string>\",\n \"erp\": \"<string>\",\n \"accounting\": \"<string>\"\n },\n \"shipping\": {\n \"weight\": 123,\n \"weight_unit\": \"<string>\",\n \"height\": 123,\n \"length\": 123,\n \"width\": 123,\n \"length_unit\": \"<string>\",\n \"country_of_origin\": \"<string>\",\n \"harmonized_system_code\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://qwoty.app/api/products")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"api_name\": \"<string>\",\n \"recurrence_type\": \"<string>\",\n \"name\": \"<string>\",\n \"reference\": \"<string>\",\n \"description\": \"<string>\",\n \"is_active\": true,\n \"catalog_ids\": [\n \"<string>\"\n ],\n \"category_ids\": [\n \"<string>\"\n ],\n \"inventory\": {\n \"sku\": \"<string>\"\n },\n \"settings\": {\n \"unit_per_pack\": 123\n },\n \"accounting\": {\n \"ledger_account\": \"<string>\"\n },\n \"identifiers\": {\n \"crm\": \"<string>\",\n \"erp\": \"<string>\",\n \"accounting\": \"<string>\"\n },\n \"shipping\": {\n \"weight\": 123,\n \"weight_unit\": \"<string>\",\n \"height\": 123,\n \"length\": 123,\n \"width\": 123,\n \"length_unit\": \"<string>\",\n \"country_of_origin\": \"<string>\",\n \"harmonized_system_code\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "880e8400-e29b-41d4-a716-446655440003",
"product_parent_id": "550e8400-e29b-41d4-a716-446655440000",
"workspace_id": "990e8400-e29b-41d4-a716-446655440004",
"name": "Premium Widget",
"api_name": "premium_widget",
"reference": "PROD-001",
"description": "High-quality widget for professional use",
"description_inherit_from_product": true,
"primary_image_inherit_from_product": true,
"is_active": true,
"is_default": true,
"catalogs": [
{
"id": "660e8400-e29b-41d4-a716-446655440001",
"name": "Main Catalog",
"api_name": "catalog_main"
}
],
"categories": [
{
"id": "770e8400-e29b-41d4-a716-446655440002",
"api_name": "category_premium"
}
],
"product_ids": ["880e8400-e29b-41d4-a716-446655440003"],
"settings": {
"unit_per_pack": 1,
"product_type": null,
"language_code": null,
"unit_of_measure": null,
"recurrence_type": "one_off"
},
"shipping": {
"weight": 2.5,
"weight_unit": "kg",
"height": 10,
"length": 30,
"width": 20,
"length_unit": "cm",
"country_of_origin": "FR",
"harmonized_system_code": "8471.30"
},
"inventory": {
"sku": "WID-PRE-001"
},
"identifiers": {
"crm": "crm_123",
"erp": "erp_456",
"accounting": "acc_789"
},
"accounting": {
"ledger_account": "4010"
},
"options": [],
"prices": [
{
"id": "price-001",
"key": "premium_widget.standard",
"pricebook": { "id": "pb-001", "name": "Standard", "api_name": "standard", "type": "fixed" },
"billing_frequency": null,
"pricing_model": "flat",
"amount": 1990
}
],
"primary_image_id": null,
"parent_primary_image_id": null,
"created_at": "2024-12-21T10:30:00Z",
"updated_at": "2024-12-21T10:30:00Z"
}
}
Products
Create Product
Create a new product (master + default variant) in your workspace
POST
/
api
/
products
Create Product
curl --request POST \
--url https://qwoty.app/api/products \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--data '
{
"api_name": "<string>",
"recurrence_type": "<string>",
"name": "<string>",
"reference": "<string>",
"description": "<string>",
"is_active": true,
"catalog_ids": [
"<string>"
],
"category_ids": [
"<string>"
],
"inventory": {
"sku": "<string>"
},
"settings": {
"unit_per_pack": 123
},
"accounting": {
"ledger_account": "<string>"
},
"identifiers": {
"crm": "<string>",
"erp": "<string>",
"accounting": "<string>"
},
"shipping": {
"weight": 123,
"weight_unit": "<string>",
"height": 123,
"length": 123,
"width": 123,
"length_unit": "<string>",
"country_of_origin": "<string>",
"harmonized_system_code": "<string>"
}
}
'import requests
url = "https://qwoty.app/api/products"
payload = {
"api_name": "<string>",
"recurrence_type": "<string>",
"name": "<string>",
"reference": "<string>",
"description": "<string>",
"is_active": True,
"catalog_ids": ["<string>"],
"category_ids": ["<string>"],
"inventory": { "sku": "<string>" },
"settings": { "unit_per_pack": 123 },
"accounting": { "ledger_account": "<string>" },
"identifiers": {
"crm": "<string>",
"erp": "<string>",
"accounting": "<string>"
},
"shipping": {
"weight": 123,
"weight_unit": "<string>",
"height": 123,
"length": 123,
"width": 123,
"length_unit": "<string>",
"country_of_origin": "<string>",
"harmonized_system_code": "<string>"
}
}
headers = {
"Authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({
api_name: '<string>',
recurrence_type: '<string>',
name: '<string>',
reference: '<string>',
description: '<string>',
is_active: true,
catalog_ids: ['<string>'],
category_ids: ['<string>'],
inventory: {sku: '<string>'},
settings: {unit_per_pack: 123},
accounting: {ledger_account: '<string>'},
identifiers: {crm: '<string>', erp: '<string>', accounting: '<string>'},
shipping: {
weight: 123,
weight_unit: '<string>',
height: 123,
length: 123,
width: 123,
length_unit: '<string>',
country_of_origin: '<string>',
harmonized_system_code: '<string>'
}
})
};
fetch('https://qwoty.app/api/products', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://qwoty.app/api/products",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'api_name' => '<string>',
'recurrence_type' => '<string>',
'name' => '<string>',
'reference' => '<string>',
'description' => '<string>',
'is_active' => true,
'catalog_ids' => [
'<string>'
],
'category_ids' => [
'<string>'
],
'inventory' => [
'sku' => '<string>'
],
'settings' => [
'unit_per_pack' => 123
],
'accounting' => [
'ledger_account' => '<string>'
],
'identifiers' => [
'crm' => '<string>',
'erp' => '<string>',
'accounting' => '<string>'
],
'shipping' => [
'weight' => 123,
'weight_unit' => '<string>',
'height' => 123,
'length' => 123,
'width' => 123,
'length_unit' => '<string>',
'country_of_origin' => '<string>',
'harmonized_system_code' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://qwoty.app/api/products"
payload := strings.NewReader("{\n \"api_name\": \"<string>\",\n \"recurrence_type\": \"<string>\",\n \"name\": \"<string>\",\n \"reference\": \"<string>\",\n \"description\": \"<string>\",\n \"is_active\": true,\n \"catalog_ids\": [\n \"<string>\"\n ],\n \"category_ids\": [\n \"<string>\"\n ],\n \"inventory\": {\n \"sku\": \"<string>\"\n },\n \"settings\": {\n \"unit_per_pack\": 123\n },\n \"accounting\": {\n \"ledger_account\": \"<string>\"\n },\n \"identifiers\": {\n \"crm\": \"<string>\",\n \"erp\": \"<string>\",\n \"accounting\": \"<string>\"\n },\n \"shipping\": {\n \"weight\": 123,\n \"weight_unit\": \"<string>\",\n \"height\": 123,\n \"length\": 123,\n \"width\": 123,\n \"length_unit\": \"<string>\",\n \"country_of_origin\": \"<string>\",\n \"harmonized_system_code\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://qwoty.app/api/products")
.header("Authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"api_name\": \"<string>\",\n \"recurrence_type\": \"<string>\",\n \"name\": \"<string>\",\n \"reference\": \"<string>\",\n \"description\": \"<string>\",\n \"is_active\": true,\n \"catalog_ids\": [\n \"<string>\"\n ],\n \"category_ids\": [\n \"<string>\"\n ],\n \"inventory\": {\n \"sku\": \"<string>\"\n },\n \"settings\": {\n \"unit_per_pack\": 123\n },\n \"accounting\": {\n \"ledger_account\": \"<string>\"\n },\n \"identifiers\": {\n \"crm\": \"<string>\",\n \"erp\": \"<string>\",\n \"accounting\": \"<string>\"\n },\n \"shipping\": {\n \"weight\": 123,\n \"weight_unit\": \"<string>\",\n \"height\": 123,\n \"length\": 123,\n \"width\": 123,\n \"length_unit\": \"<string>\",\n \"country_of_origin\": \"<string>\",\n \"harmonized_system_code\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://qwoty.app/api/products")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"api_name\": \"<string>\",\n \"recurrence_type\": \"<string>\",\n \"name\": \"<string>\",\n \"reference\": \"<string>\",\n \"description\": \"<string>\",\n \"is_active\": true,\n \"catalog_ids\": [\n \"<string>\"\n ],\n \"category_ids\": [\n \"<string>\"\n ],\n \"inventory\": {\n \"sku\": \"<string>\"\n },\n \"settings\": {\n \"unit_per_pack\": 123\n },\n \"accounting\": {\n \"ledger_account\": \"<string>\"\n },\n \"identifiers\": {\n \"crm\": \"<string>\",\n \"erp\": \"<string>\",\n \"accounting\": \"<string>\"\n },\n \"shipping\": {\n \"weight\": 123,\n \"weight_unit\": \"<string>\",\n \"height\": 123,\n \"length\": 123,\n \"width\": 123,\n \"length_unit\": \"<string>\",\n \"country_of_origin\": \"<string>\",\n \"harmonized_system_code\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "880e8400-e29b-41d4-a716-446655440003",
"product_parent_id": "550e8400-e29b-41d4-a716-446655440000",
"workspace_id": "990e8400-e29b-41d4-a716-446655440004",
"name": "Premium Widget",
"api_name": "premium_widget",
"reference": "PROD-001",
"description": "High-quality widget for professional use",
"description_inherit_from_product": true,
"primary_image_inherit_from_product": true,
"is_active": true,
"is_default": true,
"catalogs": [
{
"id": "660e8400-e29b-41d4-a716-446655440001",
"name": "Main Catalog",
"api_name": "catalog_main"
}
],
"categories": [
{
"id": "770e8400-e29b-41d4-a716-446655440002",
"api_name": "category_premium"
}
],
"product_ids": ["880e8400-e29b-41d4-a716-446655440003"],
"settings": {
"unit_per_pack": 1,
"product_type": null,
"language_code": null,
"unit_of_measure": null,
"recurrence_type": "one_off"
},
"shipping": {
"weight": 2.5,
"weight_unit": "kg",
"height": 10,
"length": 30,
"width": 20,
"length_unit": "cm",
"country_of_origin": "FR",
"harmonized_system_code": "8471.30"
},
"inventory": {
"sku": "WID-PRE-001"
},
"identifiers": {
"crm": "crm_123",
"erp": "erp_456",
"accounting": "acc_789"
},
"accounting": {
"ledger_account": "4010"
},
"options": [],
"prices": [
{
"id": "price-001",
"key": "premium_widget.standard",
"pricebook": { "id": "pb-001", "name": "Standard", "api_name": "standard", "type": "fixed" },
"billing_frequency": null,
"pricing_model": "flat",
"amount": 1990
}
],
"primary_image_id": null,
"parent_primary_image_id": null,
"created_at": "2024-12-21T10:30:00Z",
"updated_at": "2024-12-21T10:30:00Z"
}
}
Authorization
string
required
Bearer token for authentication. Format:
Bearer qwoty_your_tokenRequest Body
string
required
Unique API identifier (snake_case). Can only contain lowercase letters,
numbers and underscores.
string
required
Billing model. Allowed values:
one_off, recurringstring
required
Product name
string
Internal reference code for the default variant
string
Product description
boolean
default:"true"
Active status
string[]
Array of catalog UUIDs to link the product to. The workspace default catalog
is always included automatically.
string[]
Array of product category UUIDs to assign to this product.
object
object
Examples
curl -X POST https://qwoty.app/api/products \
-H "Authorization: Bearer qwoty_your_token" \
-H "Content-Type: application/json" \
-d '{
"api_name": "premium_widget",
"recurrence_type": "one_off",
"name": "Premium Widget",
"description": "High-quality widget for professional use",
"reference": "PROD-001",
"is_active": true,
"catalog_ids": ["660e8400-e29b-41d4-a716-446655440001"],
"category_ids": ["770e8400-e29b-41d4-a716-446655440002"],
"inventory": {
"sku": "WID-PRE-001"
},
"settings": {
"unit_per_pack": 1
},
"accounting": {
"ledger_account": "4010"
},
"identifiers": {
"crm": "crm_123",
"erp": "erp_456",
"accounting": "acc_789"
},
"shipping": {
"weight": 2.5,
"weight_unit": "kg",
"height": 10,
"length": 30,
"width": 20,
"length_unit": "cm",
"country_of_origin": "FR",
"harmonized_system_code": "8471.30"
}
}'
const response = await fetch('https://qwoty.app/api/products', {
method: 'POST',
headers: {
Authorization: 'Bearer qwoty_your_token',
'Content-Type': 'application/json',
},
body: JSON.stringify({
api_name: 'premium_widget',
recurrence_type: 'one_off',
name: 'Premium Widget',
description: 'High-quality widget for professional use',
reference: 'PROD-001',
is_active: true,
catalog_ids: ['660e8400-e29b-41d4-a716-446655440001'],
category_ids: ['770e8400-e29b-41d4-a716-446655440002'],
'inventory': {
'sku': 'WID-PRE-001',
},
'settings': {
'unit_per_pack': 1,
},
'accounting': {
'ledger_account': '4010',
},
'identifiers': {
'crm': 'crm_123',
'erp': 'erp_456',
'accounting': 'acc_789',
},
'shipping': {
'weight': 2.5,
'weight_unit': 'kg',
'height': 10,
'length': 30,
'width': 20,
'length_unit': 'cm',
'country_of_origin': 'FR',
'harmonized_system_code': '8471.30',
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://qwoty.app/api/products',
headers={
'Authorization': 'Bearer qwoty_your_token',
'Content-Type': 'application/json'
},
json={
'api_name': 'premium_widget',
'recurrence_type': 'one_off',
'name': 'Premium Widget',
'description': 'High-quality widget for professional use',
'reference': 'PROD-001',
'is_active': True,
'catalog_ids': ['660e8400-e29b-41d4-a716-446655440001'],
'category_ids': ['770e8400-e29b-41d4-a716-446655440002'],
'inventory': {
'sku': 'WID-PRE-001',
},
'settings': {
'unit_per_pack': 1,
},
'accounting': {
'ledger_account': '4010',
},
'identifiers': {
'crm': 'crm_123',
'erp': 'erp_456',
'accounting': 'acc_789',
},
'shipping': {
'weight': 2.5,
'weight_unit': 'kg',
'height': 10,
'length': 30,
'width': 20,
'length_unit': 'cm',
'country_of_origin': 'FR',
'harmonized_system_code': '8471.30',
},
}
)
data = response.json()
Response
boolean
Indicates if the request was successful
object
The created product object (variant structure, identical to
GET /api/products/{id})Show Product Object
Show Product Object
string
Product ID (UUID) — this is the default variant ID
string
Parent product ID (UUID)
string
Workspace ID (UUID)
string
Product name
string
API identifier (creation-only, cannot be modified)
string
Internal reference
string
Product description
boolean
Active status
boolean
Always
true for the default variantarray
array
array
Array containing the default variant ID (same as
id)object
Settings:
unit_per_pack, product_type, language_code, unit_of_measure, recurrence_typeobject
Shipping info:
weight, weight_unit, height, length, width, length_unit, country_of_origin, harmonized_system_codeobject
Inventory info:
skuobject
External identifiers:
crm, erp, accountingobject
Accounting info:
ledger_accountarray
Option values (empty array for default variant)
array
Prices created across all pricebooks for this product
Show Price Entry
Show Price Entry
string
Price ID (UUID)
string | null
Semantic price key (
<product_api_name>.<pricebook_api_name>[.<unit>.<period>]), same value as key on /prices and the CSV price import id columnobject
object | null
Billing frequency (
{ id, period, unit }), null for a one-off pricestring
Pricing model (
flat, volume, graduated, percent, cost_based, none)number | null
Unit price. Only populated when
pricing_model is flat, otherwise null.string | null
Primary image ID (null at creation)
string | null
Parent product primary image ID
{
"success": true,
"data": {
"id": "880e8400-e29b-41d4-a716-446655440003",
"product_parent_id": "550e8400-e29b-41d4-a716-446655440000",
"workspace_id": "990e8400-e29b-41d4-a716-446655440004",
"name": "Premium Widget",
"api_name": "premium_widget",
"reference": "PROD-001",
"description": "High-quality widget for professional use",
"description_inherit_from_product": true,
"primary_image_inherit_from_product": true,
"is_active": true,
"is_default": true,
"catalogs": [
{
"id": "660e8400-e29b-41d4-a716-446655440001",
"name": "Main Catalog",
"api_name": "catalog_main"
}
],
"categories": [
{
"id": "770e8400-e29b-41d4-a716-446655440002",
"api_name": "category_premium"
}
],
"product_ids": ["880e8400-e29b-41d4-a716-446655440003"],
"settings": {
"unit_per_pack": 1,
"product_type": null,
"language_code": null,
"unit_of_measure": null,
"recurrence_type": "one_off"
},
"shipping": {
"weight": 2.5,
"weight_unit": "kg",
"height": 10,
"length": 30,
"width": 20,
"length_unit": "cm",
"country_of_origin": "FR",
"harmonized_system_code": "8471.30"
},
"inventory": {
"sku": "WID-PRE-001"
},
"identifiers": {
"crm": "crm_123",
"erp": "erp_456",
"accounting": "acc_789"
},
"accounting": {
"ledger_account": "4010"
},
"options": [],
"prices": [
{
"id": "price-001",
"key": "premium_widget.standard",
"pricebook": { "id": "pb-001", "name": "Standard", "api_name": "standard", "type": "fixed" },
"billing_frequency": null,
"pricing_model": "flat",
"amount": 1990
}
],
"primary_image_id": null,
"parent_primary_image_id": null,
"created_at": "2024-12-21T10:30:00Z",
"updated_at": "2024-12-21T10:30:00Z"
}
}
Error Responses
{
"success": false,
"error": "Validation error",
"details": [
"Field 'api_name' is required",
"Field 'recurrence_type' is required (one_off | recurring)"
]
}
{
"success": false,
"error": "Validation error",
"details": ["A product with api_name 'premium_widget' already exists"]
}
{
"success": false,
"error": "Validation error",
"details": ["Catalog(s) not found: 660e8400-e29b-41d4-a716-446655440001"]
}
{
"success": false,
"error": "Invalid or expired token"
}
Last modified on October 28, 2026
Was this page helpful?

