Products

Products is the core of Picqer. You can only sell and buy items that exists as a product in your catalog. To start managing stock of a product, add the product first and then update its stock.

See also documentation for stock and compositions and product parts.

Attributes

Name Type Required Description
idproduct integer generated Unique Picqer reference
idvatgroup integer required Linked to resource Vatgroups
name string required Name of product
price float required Price excluding VAT
fixedstockprice float optional Fixed stock price of product excluding VAT
idsupplier integer optional Linked to resource Suppliers
productcode string required Product code of product, needs to be unique
productcode_supplier string optional Product code of this product at supplier, used for purchase orders
deliverytime integer optional Delivery time from supplier in days
description string optional Longer description of product
barcode string optional Barcode (usually GS1, EAN13 or UPC code)
type string optional Only options: normal (default), unlimited_stock, virtual_composition, composition_with_stock
unlimitedstock boolean optional Deprecated in favor of 'type'. When unlimited stock is true, no stock will be monitored for this product
weight integer optional Weight of this product in grams
length integer optional Length of this product in centimeters. Not available for virtual compositions
width integer optional Width of this product in centimeters. Not available for virtual compositions
height integer optional Height of this product in centimeters. Not available for virtual compositions
minimum_purchase_quantity integer optional The minimum amount you need to purchase from your supplier
purchase_in_quantities_of integer optional If you need to purchase this products in batches of x pieces
hs_code string optional HS Code for customs
country_of_origin string optional Country of origin of this product for customs (needs to be ISO 3166 2-char code)
active boolean optional Default true
idfulfilment_customer integer optional Only for Picqer Fulfilment: Linked to belonging fulfilment customer
analysis_pick_amount_per_day float generated The average amount this product has been picked per day in the last 28 days
analysis_abc_classification string optional|generated Classification of A, B or C product, based on the recent amount of pick actions. Will be updated once every week. If you want to set the classification yourself, disable ABC classification in settings.
pricelists array optional Array with pricelists set for the product
pricelists.idpricelist integer required Linked to resource Pricelists
pricelists.price float required Price of the product set for the pricelist

Get all products

With this call, you will only get the active products. Provide the inactive parameter to get the inactive products.

GET https://example.picqer.com/api/v1/products
HTTP/1.1 200 OK [ { "idproduct": 626, "idvatgroup": 18, "idsupplier": null, "productcode": "6531", "name": "HyperKewl Ultra Sport Cooling Vest", "price": 54.46, "fixedstockprice": 32.11, "productcode_supplier": "", "deliverytime": null, "description": null, "barcode": null, "unlimitedstock": false, "assembled": false, "type": "normal", "weight": 1500, "length": 30, "width": 25, "height": 7, "minimum_purchase_quantity": 0, "purchase_in_quantities_of": 0, "hs_code": null, "country_of_origin": null, "active": true, "created": "2023-03-08 14:22:23", "updated": "2024-09-13 14:37:11", "comment_count": 0, "analysis_abc_classification": "C", "analysis_pick_amount_per_day": "0.036", "tags": { "TopWebshop": { "idtag": 1075, "title": "TopWebshop", "color": "#5993be", "inherit": true, "textColor": "#000000" }, "SummerProducts": { "idtag": 1156, "title": "SummerProducts", "color": "#c7b4f6", "inherit": true, "textColor": "#000000" } }, "productfields": [ { "idproductfield": 11, "title": "Eenheid", "value": "liter" } ], "images": [ "https://link-to-image.com/image2867/original", "https://link-to-image.com/image2867/original", "https://link-to-image.com/image2867/original", "https://link-to-image.com/image2867/original" ], "stock": [ { "idwarehouse": 18, "stock": 0, "reserved": 6, "reservedbackorders": 6, "reservedpicklists": 0, "reservedallocations": 0, "freestock": -6 } ], "pricelists": [] }, { "idproduct": 633, "idvatgroup": 18, "idsupplier": null, "productcode": "6531-RB-7-9", "name": "Hyperkewl Evaporative Cooling Vest Ultra Blue 7-9yr", "price": 54.46, "fixedstockprice": 0, "productcode_supplier": "", "deliverytime": null, "description": null, "barcode": "857825001442", "unlimitedstock": false, "assembled": false, "type": "normal", "weight": null, "length": null, "width": null, "height": null, "minimum_purchase_quantity": 0, "purchase_in_quantities_of": 0, "hs_code": null, "country_of_origin": null, "active": true, "tags": {}, "productfields": [ { "idproductfield": 11, "title": "Eenheid", "value": "liter" } ], "images": [ "https://link-to-image.com/image2867/original", "https://link-to-image.com/image2867/original", "https://link-to-image.com/image2867/original", "https://link-to-image.com/image2867/original" ], "stock": [ { "idwarehouse": 18, "stock": 112, "reserved": 0, "reservedbackorders": 0, "reservedpicklists": 0, "reservedallocations": 0, "freestock": 112 } ], "pricelists": [ { "idpricelist": 1198, "price": 50.25 }, { "idpricelist": 1154, "price": 48.75 } ] } ]
This endpoint uses pagination.

Filters

You can filter the products with the following parameters. Add these filters as querystring parameters to the URL.

Attribute Description Example
inactive Only provide this attribute to get the inactive products. Do not provide this attribute if you want to get the active products. true
tag Get the products that has the given tag name associated with them. summer
type Get products of a given type. Valid values are: normal, unlimited_stock, virtual_composition, composition_with_stock. Omitting this parameter returns products of all types. You can specify one type per request. normal
productcode Get the product with the provided productcode. Use this filter to get a single product. EJK89272
idsupplier Get the products linked to this supplier. 1532
idproducts Get multiple, specific products at once. Limited to 100 products per page and sorting is as normal. 9283,9928,3049,9922
search Fuzzy search with a limited number of characters through the fields name, product code, supplier product code and barcode. It returns a list of results matching the search approximately. Searching for 1 specific product with the product code? Please use the "productcode" filter instead of search.

Get single product

GET https://example.picqer.com/api/v1/products/{idproduct}
HTTP/1.1 200 OK { "idproduct": 633, "idvatgroup": 18, "idsupplier": null, "name": "Hyperkewl Evaporative Cooling Vest Ultra Blue 7-9yr", "price": 54.46, "fixedstockprice": 0, "productcode": "6531-RB-7-9", "productcode_supplier": "", "deliverytime": null, "description": "", "barcode": "857825001442", "unlimitedstock": false, "weight": 200, "length": 12, "width": 12, "height": 6, "active": true, "created": "2023-03-08 14:22:23", "updated": "2024-09-13 14:37:11", "comment_count": 0, "analysis_abc_classification": "C", "analysis_pick_amount_per_day": "0.036", "tags": { "SummerProducts": { "idtag": 1156, "title": "SummerProducts", "color": "#c7b4f6", "inherit": true, "textColor": "#000000" } }, "productfields": [ { "idproductfield": 11, "title": "Eenheid", "value": "liter" } ], "images": [ "https://link-to-image.com/image2867/original", "https://link-to-image.com/image2867/original", "https://link-to-image.com/image2867/original", "https://link-to-image.com/image2867/original" ], "stock": [ { "idwarehouse": 18, "stock": 112, "reserved": 0, "reservedbackorders": 0, "reservedpicklists": 0, "reservedallocations": 0, "freestock": 112 } ], "pricelists": [ { "idpricelist": 1198, "price": 45.67 } ] }

Create new product

POST https://example.picqer.com/api/v1/products
{ "idvatgroup": 18, "productcode": "883629-22", "name": "Hyperkewl Evaporative Cooling Vest Ultra Blue 7-9yr", "price": 54.46 }
HTTP/1.1 201 Created { "idproduct": 119692, "idvatgroup": 18, "idsupplier": null, "productcode": "883629-22", "name": "Hyperkewl Evaporative Cooling Vest Ultra Blue 7-9yr", "price": 54.46, "fixedstockprice": 0, "productcode_supplier": "", "deliverytime": null, "description": null, "barcode": null, "unlimitedstock": false, "weight": null, "length": null, "width": null, "height": null, "minimum_purchase_quantity": 0, "purchase_in_quantities_of": 0, "hs_code": null, "country_of_origin": null, "show_on_portal": null, "active": true, "created": "2024-09-12 09:45:16", "updated": "2024-09-25 08:29:25", "comment_count": 0, "analysis_abc_classification": null, "analysis_pick_amount_per_day": null, "tags": {}, "productfields": [], "images": [], "stock": [ { "idwarehouse": 6685, "stock": 0, "reserved": 0, "reservedbackorders": 0, "reservedpicklists": 0, "reservedallocations": 0, "freestock": 0 }, { "idwarehouse": 6695, "stock": 0, "reserved": 0, "reservedbackorders": 0, "reservedpicklists": 0, "reservedallocations": 0, "freestock": 0 }, { "idwarehouse": 6832, "stock": 0, "reserved": 0, "reservedbackorders": 0, "reservedpicklists": 0, "reservedallocations": 0, "freestock": 0 } ], "pricelists": [] }

Update product

You can update all fields of a product. Two fields are special: active and type.

To make a product inactive: it cannot have stock, cannot be used in compositions and cannot be on open picklists or purchase orders.

To change the type of a product: it cannot have stock, have parts or be on open picklists or purchase orders.

PUT https://example.picqer.com/api/v1/products/{idproduct}
{ "name": "Hyperkewl Evaporative Cooling Vest Ultra Red", "price": 51.99, "productfields": [ { "idproductfield": 11, "value": "liter" } ] }
HTTP/1.1 200 OK { "idproduct": 119692, "idvatgroup": 18, "idsupplier": null, "productcode": "883629-22", "name": "Hyperkewl Evaporative Cooling Vest Ultra Red", "price": 51.99, "fixedstockprice": 0, "productcode_supplier": "", "deliverytime": null, "description": null, "barcode": null, "unlimitedstock": false, "assembled": false, "type": "normal", "weight": null, "length": null, "width": null, "height": null, "minimum_purchase_quantity": 0, "purchase_in_quantities_of": 0, "hs_code": null, "country_of_origin": null, "active": true, "created": "2024-08-13 10:01:06", "updated": "2024-09-25 10:20:18", "comment_count": 0, "analysis_abc_classification": null, "analysis_pick_amount_per_day": null, "tags": {}, "productfields": [ { "idproductfield": 11, "title": "Eenheid", "value": "liter" } ], "images": [], "stock": [ { "idwarehouse": 6685, "stock": 0, "reserved": 0, "reservedbackorders": 0, "reservedpicklists": 0, "reservedallocations": 0, "freestock": 0 } ], "pricelists": [] }

Activate and inactivate product

With a POST request on https://example.picqer.com/api/v1/products/{idproduct}/inactivate you can inactivate a product. A product cannot have stock, be on open picklists, have backorders or be on open purchase orders when you want to inactivate it. You will get an error while trying.

You can also re-activate a product with a POST request on https://example.picqer.com/api/v1/products/{idproduct}/activate

Get stock info of product

Information about product stock is moved to seperate docs page.

Update stock info of product

Information about product stock is moved to seperate docs page.

Get warehouse settings

Each product can have different settings per warehouse. You can get the current settings for all warehouses with this request.

GET https://example.picqer.com/api/v1/products/{idproduct}/warehouses
HTTP/1.1 200 OK [ { "idproduct":954712, "idwarehouse":18, "stock_level_order":3, "stock_level_desired":5, "stock_level_maximum":0, "picking_stock_replenish_trigger":null, "picking_stock_replenish_to":null, "stock_location":"AB.291" }, { "idproduct":954712, "idwarehouse":1389, "stock_level_order":2, "stock_level_desired":0, "stock_level_maximum":0, "picking_stock_replenish_trigger":null, "picking_stock_replenish_to":null, "stock_location":"EK.928" } ]

Update warehouse setting

You can update the product warehouses settings on a per-warehouse basis with this request.

stock_location is deprecated

The stock_location field is deprecated but will remain available for backwards compatibility. It is replaced by dedicated locations, and you can link products to existing locations. If you enter a location in stock_location that does not exist yet, we will create it for you. You can enter multiple locations by separating them by a comma: "A.12, A.21".

PUT https://example.picqer.com/api/v1/products/{idproduct}/warehouses/{idwarehouse}
{ "stock_level_order":5, "stock_level_desired":10, "stock_level_maximum":0, "picking_stock_replenish_trigger":2, "picking_stock_replenish_to":25, "stock_location":"AB.221" }
HTTP/1.1 200 OK { "idproduct":954712, "idwarehouse":18, "stock_level_order":5, "stock_level_desired":10, "stock_level_maximum":0, "picking_stock_replenish_trigger":2, "picking_stock_replenish_to":25, "stock_location":"AB.221" }

Get all images of product

GET https://example.picqer.com/api/v1/products/{idproduct}/images
HTTP/1.1 200 OK [ { "idproduct_image": 12123, "idproduct": 1105343, "url": "https://cdn.example.com/3123/1e7af8e2/original.jpg", "contenttype": "image/jpeg", "size": 7210 }, { "idproduct_image": 12222, "idproduct": 1105343, "url": "https://cdn.example.com/3123/a1b483f2/original.jpg", "contenttype": "image/jpeg", "size": 67210 } ]
This endpoint uses pagination.

Add new image to product

Only JPEG and PNG images are allowed. Encode them as a base64 string to feed to the API.

POST https://example.picqer.com/api/v1/products/{idproduct}/images
{ "image": "--base64 encoded image--" }
HTTP/1.1 201 Created { "idproduct_image": 12124, "idproduct": 1105345, "url": "https://cdn.example.com/3123/1e7af8e2/original.jpg", "contenttype": "image/jpeg", "size": 7210 }

Delete a product image

DELETE https://example.picqer.com/api/v1/products/{idproduct}/images/{idproduct_image}
HTTP/1.1 204 No Content

Get locations from a product

A product can be located at none, one or more locations.

The mentioned stock is for this specific location, a product can have stock on other locations and on "no specific location". Use stock endpoint for complete information all stock of a product.

GET https://example.picqer.com/api/v1/products/{idproduct}/locations
HTTP/1.1 200 OK [ { "idlocation": 4, "idwarehouse": 13, "parent_idlocation": 3, "type": "location", "name": "A.1.1.A", "remarks": null, "unlink_on_empty": false, "location_type": { "idlocation_type": 2, "name": "Standaard", "default": true, "color": "#0000f0" }, "is_bulk_location": true, "stock_for_product": { "stock": 31, "stock_reserved_picklists": 0 } } ]

Link product to a location

POST https://example.picqer.com/api/v1/products/{idproduct}/locations
{ "idlocation": 5 }
HTTP/1.1 201 Created { "idlocation": 5, "idwarehouse": 13, "parent_idlocation": 3, "type": "location", "name": "A.1.1.B", "remarks": null, "unlink_on_empty": false, "location_type": { "idlocation_type": 2, "name": "Standaard", "default": true, "color": "#0000f0" }, "is_bulk_location": false, "stock_for_product": { "stock": 4, "stock_reserved_picklists": 1 } }

Unlink product from a location

Only locations without stock can be unlinked from a product. Move or remove the stock first before you unlink a location.

DELETE https://example.picqer.com/api/v1/products/{idproduct}/locations/{idlocation}
HTTP/1.1 204 No Content

Get tags from a product

Products can have tags linked to them.

GET https://example.picqer.com/api/v1/products/{idproduct}/tags
HTTP/1.1 200 OK [ { "idtag":11, "title":"Winter", "color":"#03008a", "inherit":false, "textColor":"#FFFFFF" }, { "idtag":13, "title":"Hoeden", "color":"#03008a", "inherit":false, "textColor":"#FFFFFF" } ]
This endpoint uses pagination.

Add tag to product

POST https://example.picqer.com/api/v1/products/{idproduct}/tags
{ "idtag": 223 }
HTTP/1.1 201 Created { "idtag":223, "title":"Zomer", "color":"#03008a", "inherit":false, "textColor":"#FFFFFF" }

Remove tag from product

DELETE https://example.picqer.com/api/v1/products/{idproduct}/tags/{idtag}
HTTP/1.1 204 No Content

Get price history of product

GET https://example.picqer.com/api/v1/products/{idproduct}/pricehistory
HTTP/1.1 200 OK [ { "oldprice": 0, "pricechange": 5.23, "newprice": 5.23, "iduser": 13089, "date": "2022-04-08 12:34:59" }, { "oldprice": 5.23, "pricechange": 0.13, "newprice": 5.36, "iduser": 20603, "date": "2022-07-12 16:35:09" }, { "oldprice": 5.36, "pricechange": 0.39, "newprice": 5.75, "iduser": 13089, "date": "2023-01-02 16:49:15" }, { "oldprice": 5.75, "pricechange": 0.24, "newprice": 5.99, "iduser": 20603, "date": "2023-11-22 11:23:20" }, { "oldprice": 5.99, "pricechange": -0.19, "newprice": 5.8, "iduser": 13089, "date": "2024-01-02 13:35:27" }, { "oldprice": 5.8, "pricechange": -0.05, "newprice": 5.75, "iduser": 13089, "date": "2024-01-02 16:36:36" } ]

Get fixed stock price history of product

GET https://example.picqer.com/api/v1/products/{idproduct}/fixedstockpricehistory
HTTP/1.1 200 OK [ { "old_fixedstockprice": 4.23, "fixedstockprice_change": 0.22, "new_fixedstockprice": 4.45, "iduser": 13089, "date": "2023-12-21 09:02:49" }, { "old_fixedstockprice": 4.45, "fixedstockprice_change": -0.24, "new_fixedstockprice": 4.21, "iduser": 20603, "date": "2023-12-30 11:01:57" }, { "old_fixedstockprice": 4.21, "fixedstockprice_change": 0.54, "new_fixedstockprice": 4.75, "iduser": 13089, "date": "2024-01-02 09:11:05" }, { "old_fixedstockprice": 4.75, "fixedstockprice_change": 0.07, "new_fixedstockprice": 4.82, "iduser": 13089, "date": "2024-01-03 08:28:14" } ]

Get outstanding purchase orders for product

Gives you all the outstanding purchase order lines for this product, in order of expected arrival date. The amount_to_receive gives the amount that is to receive at this moment.

GET https://example.picqer.com/api/v1/products/{idproduct}/expected
HTTP/1.1 200 OK [ { "idpurchaseorder": 19, "idpurchaseorder_product": 321, "idwarehouse": 1, "amount_to_receive": 4, "delivery_date": "2023-12-01" }, { "idpurchaseorder": 19, "idpurchaseorder_product": 334, "idwarehouse": 1, "amount_to_receive": 1, "delivery_date": "2023-12-01" }, { "idpurchaseorder": 6, "idpurchaseorder_product": 34, "idwarehouse": 1, "amount_to_receive": 2, "delivery_date": "2023-12-06" }, { "idpurchaseorder": 20, "idpurchaseorder_product": 344, "idwarehouse": 1, "amount_to_receive": 1, "delivery_date": null }, { "idpurchaseorder": 21, "idpurchaseorder_product": 345, "idwarehouse": 2, "amount_to_receive": 1, "delivery_date": null } ]

Comments

Comments are supported on products.

Read more Product stock