Products

The catalog of services and goods that appear on invoices, bills, and sales receipts. Prices are decimal strings in the company's home currency. Reads need any of reports, money_in, money_out, or accounting; writes need one of the last three.

Inventory

A tracked good carries a read-only quantity_on_hand. Stock moves through bills, sales, and inventory adjustments, never by editing the number, and a good created here starts at zero. Tracking cannot be switched on or off while a product carries stock. Opening stock, variants, bundles, assemblies, serial or lot tracking, and changing a product's type are done in the app; sending any of them returns 422 unsupported_product_feature naming the field.

The Product Object

FieldTypeDescription
idstringProduct UUID
objectstringAlways 'product'
namestringName, unique within the company
skustringSKU
barcodestringBarcode
descriptionstringDescription shown on sales documents
product_typestringservice or good (bundle and assembly are read-only here)
track_inventorybooleanWhether stock is tracked for this good
sales_pricestringDefault sales price as a decimal string (e.g., "49.99")
coststringDefault purchase cost as a decimal string
currencystringISO currency code the prices are in
taxablebooleanWhether sales tax applies
activebooleanInactive products are hidden from pickers but keep their history
quantity_on_handstringCurrent stock as a decimal string (tracked goods only, read-only)
reorder_pointstringStock level that flags a reorder, decimal string or null
income_account_idstringChart account credited on sale
expense_account_idstringChart account debited on purchase (COGS for tracked goods)
inventory_account_idstringInventory asset account (tracked goods only)
tax_category_idstringTax category UUID (if set)
created_atstringISO 8601 timestamp
updated_atstringISO 8601 timestamp

Endpoints

GET/api/v1/products

List products

Returns a paginated list of products and services, active only unless asked otherwise. Variants, bundles and assemblies are included read-only.

Path & Query Parameters

ParameterTypeDescription
product_typestringFilter by type (service, good, bundle, assembly)
track_inventorystringPass 'true' or 'false' to filter tracked goods
include_inactivestringPass 'true' to include inactive products
searchstringSearch by name, SKU or description
pagenumberPage number (default 1)
per_pagenumberResults per page (1-200, default 50)
POST/api/v1/products

Create a product or service

Creates a plain service or good. A tracked good needs cost, an inventory account and an expense account, and starts with zero stock; receive opening stock through a bill or inventory adjustment. Bundles, assemblies, variants and opening quantities are refused with 422 unsupported_product_feature.

Body Parameters

ParameterTypeDescription
namerequiredstringName, unique within the company
product_typestringservice (default) or good
skustringSKU
barcodestringBarcode, unique within the company
descriptionstringDescription
sales_pricestringDefault sales price as a decimal string (e.g., "49.99")
coststringDefault purchase cost as a decimal string; required for tracked goods
taxablebooleanWhether sales tax applies (default true)
track_inventorybooleanTrack stock for this good (default false)
income_account_idstringChart account credited on sale
expense_account_idstringChart account debited on purchase; required for tracked goods
inventory_account_idstringInventory asset account; required for tracked goods
tax_category_idstringTax category UUID
reorder_pointstringReorder point as a decimal string
GET/api/v1/products/:id

Retrieve a product

Path & Query Parameters

ParameterTypeDescription
idrequiredstringProduct UUID
PATCH/api/v1/products/:id

Update a product

Updates a product's catalog fields. Stock is never edited here. Changing product_type is not supported on the public API (v1 restriction; it is possible in the app until the product has been used).

Path & Query Parameters

ParameterTypeDescription
idrequiredstringProduct UUID

Body Parameters

ParameterTypeDescription
namestringName
skustringSKU
barcodestringBarcode
descriptionstringDescription
sales_pricestringDefault sales price as a decimal string
coststringDefault purchase cost as a decimal string
taxablebooleanWhether sales tax applies
track_inventorybooleanStart or stop tracking stock; refused once the product has been used or carries stock
income_account_idstringChart account credited on sale
expense_account_idstringChart account debited on purchase
inventory_account_idstringInventory asset account
tax_category_idstringTax category UUID
reorder_pointstringReorder point as a decimal string
POST/api/v1/products/:id/deactivate

Deactivate a product

Hides the product from pickers. History and stock are kept.

Path & Query Parameters

ParameterTypeDescription
idrequiredstringProduct UUID
POST/api/v1/products/:id/activate

Reactivate a product

Path & Query Parameters

ParameterTypeDescription
idrequiredstringProduct UUID