# Products ## Create Products `products.create_products(ProductCreateProductsParams**kwargs) -> ProductCreateProductsResponse` **post** `/api/v2/public/products` Creates or updates products in bulk. ### Parameters - `flush: Optional[bool]` When true, removes existing products before inserting. - `body: Optional[Iterable[Body]]` - `is_counted: bool` - `product_name: str` Display name of the product. - `product_number: str` Unique product number. - `allow_decimal: Optional[bool]` - `attention_code: Optional[SequenceNotStr[str]]` - `average_weight: Optional[float]` - `barcode: Optional[str]` - `barcodes_array: Optional[Iterable[BodyBarcodesArray]]` - `barcode: Optional[str]` - `base_unit_name: Optional[str]` - `brand_code: Optional[str]` - `brand_description: Optional[str]` - `carrier_item_quantity: Optional[float]` - `category_code: Optional[str]` - `color: Optional[str]` - `color_code: Optional[str]` - `countries_allowed: Optional[SequenceNotStr[str]]` - `countries_not_allowed: Optional[SequenceNotStr[str]]` - `country_code: Optional[str]` - `default_location_tag: Optional[str]` - `deprecation_date: Optional[Union[str, datetime, null]]` - `expiration_min_range: Optional[int]` - `free_fields: Optional[Iterable[BodyFreeField]]` - `key: Optional[str]` - `sort_order: Optional[int]` - `value: Optional[str]` - `image_url: Optional[str]` - `ioq: Optional[int]` - `is_active: Optional[bool]` - `is_adr: Optional[bool]` - `is_deleted: Optional[bool]` - `is_edit_min_max: Optional[bool]` - `is_edit_replenishment: Optional[bool]` - `is_expiration: Optional[bool]` - `is_markdown_allowed: Optional[bool]` - `is_order_manually: Optional[bool]` - `is_ordering: Optional[bool]` - `is_promotion: Optional[bool]` - `is_reset_store_stock: Optional[bool]` - `is_set: Optional[bool]` - `is_stock: Optional[bool]` - `is_store_product: Optional[bool]` - `is_template: Optional[bool]` - `is_theft: Optional[bool]` - `margin_category: Optional[str]` - `moq: Optional[float]` - `price: Optional[float]` - `price_compare_multiplier: Optional[float]` - `price_compare_unit: Optional[str]` - `price_lines: Optional[str]` - `product_details: Optional[str]` - `product_reference_number: Optional[str]` - `product_status: Optional[str]` - `product_type: Optional[str]` - `product_url: Optional[str]` - `promo_stores_allowed: Optional[SequenceNotStr[str]]` - `promo_stores_not_allowed: Optional[SequenceNotStr[str]]` - `promotion_price: Optional[float]` - `promotion_text: Optional[str]` - `promotion_week: Optional[str]` - `purchase_price: Optional[float]` - `purchase_unit_barcode: Optional[str]` - `purchase_unit_name: Optional[str]` - `purchase_unit_product_number: Optional[str]` - `purchase_unit_quantity: Optional[float]` - `referral_product_number: Optional[str]` - `set_products: Optional[Iterable[BodySetProduct]]` - `set_item_quantity: Optional[str]` - `set_product_number: Optional[str]` - `shelf_labels: Optional[Iterable[BodyShelfLabel]]` - `shelflabel_1: Optional[str]` - `shelflabel_2: Optional[str]` - `shelflabel_3: Optional[str]` - `shelflabel_4: Optional[str]` - `shelflabel_5: Optional[str]` - `shelflabel_6: Optional[str]` - `size: Optional[str]` - `size_code: Optional[str]` - `smallest_product_number: Optional[str]` - `smallest_quantity: Optional[float]` - `store_number: Optional[str]` - `stores_allowed: Optional[SequenceNotStr[str]]` - `stores_not_allowed: Optional[SequenceNotStr[str]]` - `supplier_name: Optional[str]` - `supplier_number: Optional[str]` - `supplier_product_number: Optional[str]` - `units: Optional[Iterable[BodyUnit]]` - `unit_barcode: str` - `unit_name: str` - `unit_quantity: float` - `variant_code: Optional[str]` - `volume: Optional[str]` ### Returns - `class ProductCreateProductsResponse: …` Standard success response returned by mutation endpoints. - `data: Optional[str]` Optional data payload returned by the operation. - `message: Optional[str]` Human-readable message describing the result. - `success: Optional[bool]` Indicates whether the operation completed successfully. ### Example ```python import os from colleqtive_sdk import Colleqtive client = Colleqtive( bearer_token=os.environ.get("COLLEQTIVE_BEARER_TOKEN"), # This is the default and can be omitted ) response = client.products.create_products() print(response.data) ``` ## List Products `products.list_products(ProductListProductsParams**kwargs) -> ProductListProductsResponse` **get** `/api/v2/public/products` Retrieves a paginated list of products. ### Parameters - `page_size: Optional[str]` The number of items per page. - `page_start: Optional[str]` The starting page index for pagination. - `product_number: Optional[SequenceNotStr[str]]` Optional array of product numbers to filter by. ### Returns - `class ProductListProductsResponse: …` Lightweight paginated result set. - `page_number: Optional[int]` Current page number (1-based). - `page_size: Optional[int]` Maximum number of records returned per page. - `records: Optional[List[ProductItem]]` Collection of records for the current page. - `barcode: str` - `product_name: str` Display name of the product. - `product_number: str` Unique product number. - `allow_decimal: Optional[bool]` - `attention_code: Optional[str]` - `average_weight: Optional[float]` - `barcodes_array: Optional[str]` - `base_unit_name: Optional[str]` - `brand_code: Optional[str]` - `brand_description: Optional[str]` - `carrier_item_quantity: Optional[float]` - `category_code: Optional[str]` - `color: Optional[str]` - `color_code: Optional[str]` - `countries_allowed: Optional[List[str]]` - `countries_not_allowed: Optional[List[str]]` - `country_code: Optional[str]` - `deprecation_date: Optional[datetime]` - `edit_min_max_percentage: Optional[int]` - `expiration_min_range: Optional[int]` - `free_fields: Optional[List[FreeField]]` - `key: Optional[str]` - `sort_order: Optional[int]` - `value: Optional[str]` - `general_ledger: Optional[str]` - `image_url: Optional[str]` - `is_active: Optional[bool]` - `is_counted: Optional[bool]` - `is_edit_min_max: Optional[bool]` - `is_edit_replenishment: Optional[bool]` - `is_expiration: Optional[bool]` - `is_order_manually: Optional[bool]` - `is_promotion: Optional[bool]` - `is_set: Optional[bool]` - `is_stock: Optional[bool]` - `is_store_product: Optional[bool]` - `is_template: Optional[bool]` - `margin_category: Optional[str]` - `moq: Optional[float]` - `old_price: Optional[float]` - `price: Optional[float]` - `price_compare_multiplier: Optional[float]` - `price_compare_unit: Optional[str]` - `price_lines: Optional[str]` - `product_details: Optional[str]` - `product_type: Optional[str]` - `product_url: Optional[str]` - `promo_stores_allowed: Optional[List[str]]` - `promo_stores_not_allowed: Optional[List[str]]` - `promotion: Optional[str]` - `promotion_week: Optional[str]` - `purchase_price: Optional[float]` - `purchase_unit_barcode: Optional[str]` - `purchase_unit_name: Optional[str]` - `purchase_unit_product_number: Optional[str]` - `purchase_unit_quantity: Optional[float]` - `referral_product_id: Optional[str]` - `reset_store_stock: Optional[bool]` - `set_product: Optional[List[SetProduct]]` - `set_item_quantity: Optional[str]` - `set_product_number: Optional[str]` - `shelf_label: Optional[bool]` - `shelf_label_barcode: Optional[bool]` - `shelf_label_layout: Optional[int]` - `shelf_label_price: Optional[bool]` - `shelf_label_quantity: Optional[int]` - `size: Optional[str]` - `size_code: Optional[str]` - `smallest_product_number: Optional[str]` - `smallest_quantity: Optional[float]` - `special_price: Optional[float]` - `stores_allowed: Optional[List[str]]` - `stores_not_allowed: Optional[List[str]]` - `supplier_id: Optional[str]` - `supplier_name: Optional[str]` - `supplier_product_number: Optional[str]` - `units: Optional[List[Unit]]` - `unit_barcode: Optional[str]` - `unit_name: Optional[str]` - `unit_quantity: Optional[float]` - `variant_code: Optional[str]` - `variant_factor: Optional[float]` - `variant_family: Optional[str]` - `volume: Optional[str]` - `total_record_count: Optional[int]` Total number of records matching the query across all pages. ### Example ```python import os from colleqtive_sdk import Colleqtive client = Colleqtive( bearer_token=os.environ.get("COLLEQTIVE_BEARER_TOKEN"), # This is the default and can be omitted ) response = client.products.list_products() print(response.page_number) ``` ## Delete Products `products.delete_products(ProductDeleteProductsParams**kwargs) -> ProductDeleteProductsResponse` **delete** `/api/v2/public/products` Deletes products by product numbers. ### Parameters - `product_number: Optional[SequenceNotStr[str]]` The product numbers to target. ### Returns - `class ProductDeleteProductsResponse: …` Standard success response returned by mutation endpoints. - `data: Optional[str]` Optional data payload returned by the operation. - `message: Optional[str]` Human-readable message describing the result. - `success: Optional[bool]` Indicates whether the operation completed successfully. ### Example ```python import os from colleqtive_sdk import Colleqtive client = Colleqtive( bearer_token=os.environ.get("COLLEQTIVE_BEARER_TOKEN"), # This is the default and can be omitted ) response = client.products.delete_products() print(response.data) ``` ## Update Product Attributes `products.update_product_attributes(ProductUpdateProductAttributesParams**kwargs)` **put** `/api/v2/public/products/attributes` Updates a product attribute value across all products matching the old value. ### Parameters - `attribute: str` The attribute name to update. - `new_value: str` The new value to set. - `old_value: str` The current value to match. ### Example ```python import os from colleqtive_sdk import Colleqtive client = Colleqtive( bearer_token=os.environ.get("COLLEQTIVE_BEARER_TOKEN"), # This is the default and can be omitted ) client.products.update_product_attributes( attribute="category_code", new_value="CAT-NEW", old_value="CAT-OLD", ) ``` ## Create Prices `products.create_prices(ProductCreatePricesParams**kwargs) -> ProductCreatePricesResponse` **post** `/api/v2/public/products/prices` Creates or updates product prices. ### Parameters - `body: Optional[Iterable[Body]]` - `price_id: str` Unique price identifier. - `product_number: str` The product number this price applies to. - `country_code: Optional[str]` - `price: Optional[float]` - `price_group: Optional[str]` - `price_quantity: Optional[float]` - `price_type: Optional[int]` - `price_unit: Optional[str]` - `store_number: Optional[str]` - `valid_from: Optional[Union[str, datetime]]` - `valid_to: Optional[Union[str, datetime]]` ### Returns - `class ProductCreatePricesResponse: …` Standard success response returned by mutation endpoints. - `data: Optional[str]` Optional data payload returned by the operation. - `message: Optional[str]` Human-readable message describing the result. - `success: Optional[bool]` Indicates whether the operation completed successfully. ### Example ```python import os from colleqtive_sdk import Colleqtive client = Colleqtive( bearer_token=os.environ.get("COLLEQTIVE_BEARER_TOKEN"), # This is the default and can be omitted ) response = client.products.create_prices() print(response.data) ``` ## Create Discount Prices `products.create_discount_prices(ProductCreateDiscountPricesParams**kwargs) -> ProductCreateDiscountPricesResponse` **post** `/api/v2/public/products/discountprices` Creates or updates discount prices for products. ### Parameters - `discounts: Optional[Iterable[Discount]]` The list of discount price entries. - `discount_description: Optional[str]` - `discount_group: Optional[str]` - `discount_id: Optional[str]` - `discount_type: Optional[int]` - `is_delete: Optional[bool]` - `line_number: Optional[int]` - `price: Optional[float]` - `product_number: Optional[str]` The product number this discount applies to. - `valid_from: Optional[Union[str, datetime, null]]` - `valid_to: Optional[Union[str, datetime, null]]` - `is_flush: Optional[bool]` ### Returns - `class ProductCreateDiscountPricesResponse: …` Standard success response returned by mutation endpoints. - `data: Optional[str]` Optional data payload returned by the operation. - `message: Optional[str]` Human-readable message describing the result. - `success: Optional[bool]` Indicates whether the operation completed successfully. ### Example ```python import os from colleqtive_sdk import Colleqtive client = Colleqtive( bearer_token=os.environ.get("COLLEQTIVE_BEARER_TOKEN"), # This is the default and can be omitted ) response = client.products.create_discount_prices() print(response.data) ``` ## Domain Types ### Product Item - `class ProductItem: …` Full product details returned from the products GET endpoint, including units, barcodes, pricing, and store/country assignments. - `barcode: str` - `product_name: str` Display name of the product. - `product_number: str` Unique product number. - `allow_decimal: Optional[bool]` - `attention_code: Optional[str]` - `average_weight: Optional[float]` - `barcodes_array: Optional[str]` - `base_unit_name: Optional[str]` - `brand_code: Optional[str]` - `brand_description: Optional[str]` - `carrier_item_quantity: Optional[float]` - `category_code: Optional[str]` - `color: Optional[str]` - `color_code: Optional[str]` - `countries_allowed: Optional[List[str]]` - `countries_not_allowed: Optional[List[str]]` - `country_code: Optional[str]` - `deprecation_date: Optional[datetime]` - `edit_min_max_percentage: Optional[int]` - `expiration_min_range: Optional[int]` - `free_fields: Optional[List[FreeField]]` - `key: Optional[str]` - `sort_order: Optional[int]` - `value: Optional[str]` - `general_ledger: Optional[str]` - `image_url: Optional[str]` - `is_active: Optional[bool]` - `is_counted: Optional[bool]` - `is_edit_min_max: Optional[bool]` - `is_edit_replenishment: Optional[bool]` - `is_expiration: Optional[bool]` - `is_order_manually: Optional[bool]` - `is_promotion: Optional[bool]` - `is_set: Optional[bool]` - `is_stock: Optional[bool]` - `is_store_product: Optional[bool]` - `is_template: Optional[bool]` - `margin_category: Optional[str]` - `moq: Optional[float]` - `old_price: Optional[float]` - `price: Optional[float]` - `price_compare_multiplier: Optional[float]` - `price_compare_unit: Optional[str]` - `price_lines: Optional[str]` - `product_details: Optional[str]` - `product_type: Optional[str]` - `product_url: Optional[str]` - `promo_stores_allowed: Optional[List[str]]` - `promo_stores_not_allowed: Optional[List[str]]` - `promotion: Optional[str]` - `promotion_week: Optional[str]` - `purchase_price: Optional[float]` - `purchase_unit_barcode: Optional[str]` - `purchase_unit_name: Optional[str]` - `purchase_unit_product_number: Optional[str]` - `purchase_unit_quantity: Optional[float]` - `referral_product_id: Optional[str]` - `reset_store_stock: Optional[bool]` - `set_product: Optional[List[SetProduct]]` - `set_item_quantity: Optional[str]` - `set_product_number: Optional[str]` - `shelf_label: Optional[bool]` - `shelf_label_barcode: Optional[bool]` - `shelf_label_layout: Optional[int]` - `shelf_label_price: Optional[bool]` - `shelf_label_quantity: Optional[int]` - `size: Optional[str]` - `size_code: Optional[str]` - `smallest_product_number: Optional[str]` - `smallest_quantity: Optional[float]` - `special_price: Optional[float]` - `stores_allowed: Optional[List[str]]` - `stores_not_allowed: Optional[List[str]]` - `supplier_id: Optional[str]` - `supplier_name: Optional[str]` - `supplier_product_number: Optional[str]` - `units: Optional[List[Unit]]` - `unit_barcode: Optional[str]` - `unit_name: Optional[str]` - `unit_quantity: Optional[float]` - `variant_code: Optional[str]` - `variant_factor: Optional[float]` - `variant_family: Optional[str]` - `volume: Optional[str]`