Base URL
https://{tenant}.logzi.com/api/product/
Every request returns a JSON response. On success result.code == 1, on failure result.code == 0.
/api/product/get
Retrieve a single product by ID, part number, barcode, or product group, with full details.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
int | The product's unique identifier (or use the partnumber parameter instead) |
|
partnumber |
string | Search by part number (if id is not provided) |
|
barcode |
string | Search by barcode | |
product_group_id |
int | Search by product group ID | |
store_id |
int | Warehouse identifier — to include stock information in the response |
Example request
GET /api/product/get?id=42&store_id=1
X-API-KEY: {your_api_key}
Example response
{
"result": { "code": 1, "message": "success" },
"data": {
"id": 42,
"type_id": 6,
"product_group_id": 10,
"partnumber": "TERM-0042",
"name": "Minta termék",
"product_name": "Minta termék",
"product_unit_name": "db",
"vtsz": "8471300000",
"weight_netto": "0.500",
"weight_brutto": "0.600",
"active_id": 1,
"price": 5000,
"tax_id": 2,
"currency_id": 1,
"incoming_price": 3500,
"incoming_currency_id": 1,
"incoming_tax_id": 2
}
}
/api/product/get_stock
Retrieve a product's stock information per warehouse.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
int | The product's identifier (or partnumber) |
|
partnumber |
string | Search by part number (alternative to id) |
|
list_condition[store_id] |
int | Filter for a specific warehouse |
Example request
GET /api/product/get_stock?id=42&list_condition[store_id]=1
X-API-KEY: {your_api_key}
Example response
{
"result": { "code": 1, "message": "success" },
"data": {
"id": 42,
"partnumber": "TERM-0042",
"quantity_phy": "120.000000",
"quantity_acc": "5.000000"
}
}
/api/product/get_extended
Retrieve a product with extended data — including availability and reserved quantity information.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
int | The product's unique identifier (or partnumber) |
|
partnumber |
string | Search by part number | |
store_id |
int | Warehouse filter for stock |
Example request
GET /api/product/get_extended?id=42
X-API-KEY: {your_api_key}
/api/product/list
Retrieve a paginated list of products with filtering options.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
list_offset |
int | Pagination offset (default: 0) | |
list_count |
int | Number of results per page (default: 10) | |
list_condition[partnumber] |
string | Filter by part number (LIKE) | |
list_condition[name] |
string | Filter by product name (LIKE) | |
list_condition[type_id] |
int | Filter by product type (1–6) | |
list_condition[product_category_id] |
int | Filter by product category ID | |
list_condition[active_id] |
int | Filter by status (1=active, 0=inactive) | |
list_condition[store_id] |
int | Warehouse stock filter — only products available in the given warehouse |
Example request
GET /api/product/list?list_offset=0&list_count=20&list_condition[active_id]=1
X-API-KEY: {your_api_key}
Example response
{
"result": { "code": 1, "message": "success" },
"data": [
{
"id": 42,
"type_id": 6,
"partnumber": "TERM-0042",
"name": "Minta termék",
"product_name": "Minta termék",
"product_unit_name": "db",
"active_id": 1,
"price": 5000,
"incoming_price": 3500
}
],
"params": {
"list_count": 20,
"list_offset": 0,
"list_all": 158
}
}
/api/product/list_extended
Extended list of products — with full price list, stock, and related data.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
list_offset |
int | Pagination offset (default: 0) | |
list_count |
int | Number of results per page | |
list_condition |
array | Array of filter conditions (same as in /list) |
|
list_params |
array | Additional parameters |
Example request
GET /api/product/list_extended?list_offset=0&list_count=10
X-API-KEY: {your_api_key}
/api/product/list_group
Paginated list of product groups — group-level data with stock and price information.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
list_offset |
int | Pagination offset (default: 0) | |
list_condition[active_id] |
int | Filter by status (1=active, 0=inactive) | |
list_condition[type_id] |
int | Filter by product type (1–6) |
Example request
GET /api/product/list_group?list_offset=0&list_condition[active_id]=1
X-API-KEY: {your_api_key}
Example response
{
"result": { "code": 1, "message": "success" },
"data": [
{
"id": 10,
"product_group_id": 10,
"name": "Minta termék csoport",
"type_id": 1,
"type_name": "Variációs termék",
"active_id": 1,
"partnumber_list": "TERM-001, TERM-002",
"quantity_phy": "240.000000",
"price": 5000,
"incoming_price": 3500
}
],
"params": {
"list_count": 10,
"list_offset": 0,
"list_all": 42
}
}
/api/product/get_group
Retrieve a single product group with all of its variants and price list.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
product_group_id |
int | The product group's identifier | |
language_id |
int | Language identifier (default: 1 — Hungarian) |
Example request
GET /api/product/get_group?product_group_id=10
X-API-KEY: {your_api_key}
/api/product/save
Create or update a product. The data structure depends on the value of type_id.
Product types (type_id)
| 1 | Variant product | Multiple variants — the item[] array is required |
| 2 | Service | Simple product |
| 3 | Bundle product | A bundle of simple products |
| 4 | Virtual – Entry ticket | For ticket types |
| 5 | Recipe-based product | Manufactured from ingredients |
| 6 | Simple product | Most common type |
A) Group-level fields — apply to all types
These fields affect the db_product_group table. On update, fields left blank retain their existing value.
| Field | Type | Required | Description |
|---|---|---|---|
id |
int | 0 = new product, >0 = update existing product (product_id) |
|
type_id |
int | Product type (1–6) — required for new products, not needed for updates | |
product_group_id |
int | 0 = create new group, >0 = update existing group | |
name |
string | Product name. If not provided, falls back in order: product_name → product_group_name → product_unit_name |
|
product_name |
string | Individual product name (fallback for name) |
|
product_group_name |
string | Group name (fallback for name) |
|
vtsz |
string | CN/TESZOR tariff code (e.g. 8471300000) |
|
description |
string | Short description | |
description_long |
string | Long description (HTML allowed) | |
meta_title |
string | SEO title | |
meta_keyword |
string | SEO keywords (comma-separated) | |
meta_description |
string | SEO description | |
packaging_note |
string | Packaging note | |
active_id |
int | Active status (1=active, 0=inactive — default: 1) | |
partner_id |
int | Manufacturer/partner identifier | |
acquisition_partner_id |
int | Preferred supplier identifier | |
unnumber_id |
int | UN number identifier (hazardous material) | |
category_id |
int | Product main category identifier | |
default_store_id |
int | Default warehouse identifier | |
default_store_locality_id |
int | Default warehouse location code identifier | |
ledger_number_in_id |
int | Incoming ledger number identifier | |
ledger_number_out_id |
int | Outgoing ledger number identifier | |
ledger_number_out_abroad_id |
int | Export ledger number identifier | |
acquisition_auto |
int | Automatic ordering (0/1) | |
serialnumber_required |
int | Serial number required (0=no, 1=yes) | |
stockable |
int | Tracks stock (0/1 — default: 1 if type_id=1) |
|
synchronizable |
int | Webshop synchronization (0/1 — default: 1) | |
integration_use_price_list |
int | Update selling price on web order (0/1) | |
drs |
int | Mandatory deposit return scheme (DRS) product (0/1) | |
excisable |
int | Excise product (0/1) | |
tax_inverse |
int | Reverse-charge taxed product (0/1) | |
service_intermediate |
int | Intermediated service (0/1) | |
erase_code |
int | Data erase code (0/1) | |
package |
int | Packaging/container material (0/1) | |
size_width |
decimal | Width (cm) | |
size_height |
decimal | Height (cm) | |
size_depth |
decimal | Depth (cm) |
B) item[] array — only for type_id = 1 (Variant product)
At least 1 element is required. Each variant has its own part number. Prices are set at the variant level.
| Field | Type | Required | Description |
|---|---|---|---|
item[n][id] |
int | 0 = new variant, >0 = update existing one | |
item[n][partnumber] |
string | Part number — min. 3 characters, unique in the system | |
item[n][product_unit_id] |
int | Unit of measure identifier (e.g. pc, kg, l) | |
item[n][product_unit_value] |
decimal | Variant quantity (e.g. 0.5, 1.0, 6.0) | |
item[n][product_unit_name] |
string | Custom variant name (e.g. "0.5l bottle") | |
item[n][product_url] |
string | Item-specific URL slug | |
item[n][quantity_min] |
decimal | Minimum stock level (alert threshold) | |
item[n][quantity_opt] |
decimal | Optimum stock level | |
item[n][quantity_max] |
decimal | Maximum stock level | |
item[n][weight_netto] |
decimal | Net weight in kg (comma also accepted as decimal separator) | |
item[n][weight_brutto] |
decimal | Gross weight in kg (including packaging) | |
item[n][warranty_month] |
int | Warranty in months | |
item[n][remove] |
int | 1 = mark for deletion (soft delete) | |
| PRICE FIELDS — variant level | |||
item[n][price] |
decimal | Net selling price | |
item[n][currency_id] |
int | Selling currency identifier | |
item[n][tax_id] |
int | VAT rate identifier (selling) | |
item[n][incoming_price] |
decimal | Net purchase price | |
item[n][incoming_currency_id] |
int | Purchase currency identifier | |
item[n][incoming_tax_id] |
int | VAT rate identifier (purchase) | |
item[n][incoming_cost_price] |
decimal | Cost price | |
item[n][price_on_sale] |
decimal | Sale price | |
item[n][price_on_sale_date_end] |
datetime | Sale expiration (YYYY-MM-DD HH:ii:ss) |
|
item[n][price_discount] |
decimal | Discount rate (%) | |
item[n][list_price] |
decimal | Recommended retail price (RRP) | |
item[n][list_currency_id] |
int | Recommended retail price currency identifier | |
item[n][list_tax_id] |
int | Recommended retail price VAT identifier | |
C) Product-level fields — for type_id = 2, 3, 4, 5, 6
For these types, fields are provided at the root level (not inside the item[] array). Prices are also saved at the root level.
| Field | Type | Required | Description |
|---|---|---|---|
partnumber |
string | Part number — min. 3 characters, unique in the system | |
weight_netto |
decimal | Net weight in kg | |
weight_brutto |
decimal | Gross weight in kg (including packaging) | |
warranty_month |
int | Warranty in months | |
product_url |
string | Product URL slug | |
| PRICE FIELDS — root level | |||
price |
decimal | Net selling price | |
currency_id |
int | Selling currency identifier | |
tax_id |
int | VAT rate identifier (selling) | |
incoming_price |
decimal | Net purchase price | |
incoming_currency_id |
int | Purchase currency identifier | |
incoming_tax_id |
int | VAT rate identifier (purchase) | |
incoming_cost_price |
decimal | Cost price | |
price_on_sale |
decimal | Sale price | |
price_on_sale_date_end |
datetime | Sale expiration (YYYY-MM-DD HH:ii:ss) |
|
price_discount |
decimal | Discount rate (%) | |
list_price |
decimal | Recommended retail price (RRP) | |
list_currency_id |
int | Recommended retail price currency identifier | |
list_tax_id |
int | Recommended retail price VAT identifier | |
Example request — TYPE 1 (Variant product, with item[] array)
POST /api/product/save
X-API-KEY: {your_api_key}
Content-Type: application/json
{
"data": {
"id": 0,
"type_id": 1,
"product_group_id": 0,
"name": "Ásványvíz",
"vtsz": "2201100090",
"description": "Természetes ásványvíz",
"active_id": 1,
"stockable": 1,
"synchronizable": 1,
"category_id": 5,
"item": [
{
"id": 0,
"partnumber": "ASVANY-05L",
"product_unit_id": 3,
"product_unit_value": 0.5,
"product_unit_name": "0,5l palack",
"remove": 0,
"price": 120,
"currency_id": 1,
"tax_id": 2,
"incoming_price": 75,
"incoming_currency_id": 1,
"incoming_tax_id": 2
},
{
"id": 0,
"partnumber": "ASVANY-15L",
"product_unit_id": 3,
"product_unit_value": 1.5,
"product_unit_name": "1,5l palack",
"remove": 0,
"price": 250,
"currency_id": 1,
"tax_id": 2,
"incoming_price": 160,
"incoming_currency_id": 1,
"incoming_tax_id": 2
}
]
}
}
Example request — TYPE 6 (Simple product)
POST /api/product/save
X-API-KEY: {your_api_key}
Content-Type: application/json
{
"data": {
"id": 0,
"type_id": 6,
"product_group_id": 0,
"name": "Irodai szék",
"partnumber": "SZEK-001",
"vtsz": "9401300000",
"description": "Ergonomikus irodai szék",
"active_id": 1,
"weight_netto": 12.5,
"weight_brutto": 14.0,
"warranty_month": 24,
"price": 45000,
"currency_id": 1,
"tax_id": 2,
"incoming_price": 28000,
"incoming_currency_id": 1,
"incoming_tax_id": 2
}
}
Example response
{
"result": { "code": 1, "message": "success" },
"data": {
"product_group_id": 15,
"product_id": 48,
"partnumber": "SZEK-001"
}
}
/api/product/delete
Delete a product. Only a product with no associated stock movements can be deleted.
POST fields — data object
| Field | Type | Required | Description |
|---|---|---|---|
id |
int | Identifier of the product group to delete (product_group_id) |
Example request
POST /api/product/delete
X-API-KEY: {your_api_key}
Content-Type: application/json
{
"data": {
"id": 15
}
}
Example response
{
"result": { "code": 1, "message": "success" },
"data": {}
}
/api/product/save_weight
Update a product's net and gross weight by part number. Records a version in the db_product_data table.
POST fields — data object
| Field | Type | Required | Description |
|---|---|---|---|
partnumber |
string | The product's part number (unique identifier) | |
weight_netto |
decimal | Net weight in kg | |
weight_brutto |
decimal | Gross weight in kg (including packaging) |
Example request
POST /api/product/save_weight
X-API-KEY: {your_api_key}
Content-Type: application/json
{
"data": {
"partnumber": "TERM-0042",
"weight_netto": 0.48,
"weight_brutto": 0.62
}
}
Example response
{
"result": { "code": 1, "message": "success" },
"data": {}
}
/api/product/save_warehouse_info
Update a product's warehouse information and gross weight. Records a version in both the db_product_data and db_product_group_data tables.
POST fields — data object
| Field | Type | Required | Description |
|---|---|---|---|
partnumber |
string | The product's part number | |
weight_brutto |
decimal | Gross weight in kg | |
store_id |
int | Default warehouse identifier | |
store_locality_id |
int | Default warehouse location code identifier |
Example request
POST /api/product/save_warehouse_info
X-API-KEY: {your_api_key}
Content-Type: application/json
{
"data": {
"partnumber": "TERM-0042",
"weight_brutto": 0.62,
"store_id": 1,
"store_locality_id": 14
}
}
Example response
{
"result": { "code": 1, "message": "success" },
"data": {}
}
/api/product/save_extra
Update a product's dimensions, warehouse placement, and barcode by part number. If the given barcode does not yet exist, it is created automatically.
POST fields — data object
| Field | Type | Required | Description |
|---|---|---|---|
partnumber |
string | The product's part number | |
size_width |
decimal | Width (cm) | |
size_height |
decimal | Height (cm) | |
size_depth |
decimal | Depth (cm) | |
weight_brutto |
decimal | Gross weight in kg | |
store_id |
int | Default warehouse identifier | |
store_locality_id |
int | Default location code identifier | |
barcode |
string | EAN/barcode — if it does not yet exist, it is created automatically in the db_product_barcode table |
Example request
POST /api/product/save_extra
X-API-KEY: {your_api_key}
Content-Type: application/json
{
"data": {
"partnumber": "TERM-0042",
"size_width": 30.5,
"size_height": 20.0,
"size_depth": 15.0,
"weight_brutto": 0.62,
"store_id": 1,
"store_locality_id": 14,
"barcode": "5901234123457"
}
}
Example response
{
"result": { "code": 1, "message": "success" },
"data": {}
}
Create your account now,
pay later!