CMS Tool API schema
Public API version 1.4.10.
Products
A saleable item, or variant of a parent product.
Endpoint URL
https://api.cms-tool.net/api/product
/api/product
Read and update products.
GET
List products, or retrieve one by appending its ID to the path.
Query parameters
| Name | Type | Example | Notes |
|---|---|---|---|
id | int | 123 | Filter results by id. |
page | int | 123 | Filter results by page. |
keywords | text | example | Filter results by keywords. |
code | text | ABC123 | Filter results by code. |
categoryid | int | 123 | Filter results by categoryid. |
groupid | int | 123 | Filter results by groupid. |
modifiedAfter | date | 2026-09-24T14:30:00+12:00 | Filter results by modified after. |
includeVariants | boolean | true | Include variants in the response. Accepts true or 1. |
includeAdditionalImages | boolean | true | Include additional images in the response. Accepts true or 1. |
offset | int | 123 | Skip this many matching records before returning results. |
pageSize | int | 123 | Limit the number of records returned. |
POST
Create or update a product from JSON. Responses include ImagesPath for later image uploads.
Request content type: application/json
Request body fields
| Name | Type | Example | Notes |
|---|---|---|---|
id | int | 123 | Set the id value. |
page | int | 123 | Set the page value. |
p_title | text | example | Set the p title value. |
p_code | text | ABC123 | Set the p code value. |
p_details | text | example | Set the p details value. |
p_price | number | 19.95 | Set the p price value. |
p_qtyinstock | number | 19.95 | Set the p qtyinstock value. |
p_img | text | /images/112136/example.jpg | Set the p img value. |
variants | text | example | Set the variants value. |
additionalImages | text | example | Set the additional images value. |
LinkedProducts | text | example | Set the linked products value. |
POST
Create or update a product and save its images in one multipart request.
Request content type: multipart/form-data
Request body fields
| Name | Type | Example | Notes |
|---|---|---|---|
data | text | {"id":123} | Set the data value. |
uploadPrimaryImage | text | example.jpg | Upload the primary image. |
uploadAdditionalImage | text | example.jpg | Upload the additional image. |
uploadAdditionalImages | text | example.jpg | Upload the additional images. |
data contains the product JSON; uploadPrimaryImage accepts one file; either additional-image field may be repeated.
Data definitions
| Field | Type | Description | Format | Example |
|---|---|---|---|---|
p_aggregaterating | decimal | An average review rating (5 stars) value between 0 and 5 (Readonly) | ||
p_maxqty | decimal | The max quantity that can be purchased per order. (Validation: ignore if 0) | ||
p_manufacturer | text | Name of manufacturer | ||
p_assembled_part_count | int | If this product is assembled, then it will have a count of parts/materials (not quantity) (Validation: 0+) | ||
p_tab_applications | text | Additional information about product applications revealed in a tabbed interface (Validation: HTML) | ||
p_voucher_limit_pid | int | Limit voucher use to this product (Validation: Refers product.id) | ||
p_voucher_not_redeemable_online | bool | Is this product a voucher that is not redeemable online (only redeemable in store) | ||
p_backorder_maxqty | decimal | Permittable quantity of back order quantity allowed, perhaps set to the total number currently on back order by the supplier | ||
p_stock_display | text | Override default stock display rules (Validation: eg OOS,NONE,QTY,etc) | ||
p_last_sale | timestamp | When this item was last sold to anyone | 2025-12-31 23:59:59 | |
p_pricebreakd_minqty | decimal | Quantity required to get cheaper price **p_pricebreakd** | ||
p_cost_price | decimal | The average cost price of this product. Read only. The cost price is derived from recent purchases. | ||
p_author | text | The authors name, if this is a book or Artists name if this is a painting | ||
p_pricebreakb_minqty | decimal | Quantity required to get cheaper price **p_pricebreakb** | ||
p_pricebreakf_minqty | decimal | Quantity required to get cheaper price **p_pricebreakf** | ||
p_pricebreakc_minqty | decimal | Quantity required to get cheaper price **p_pricebreakc** | ||
p_pricebreake_minqty | decimal | Quantity required to get cheaper price **p_pricebreake** | ||
p_price_prefix | text | Words that might prefix a price in special circumstances eg From, Estimated, Approx, etc | ||
p_pricebreaka_minqty | decimal | Quantity required to get cheaper price **p_pricebreaka** | ||
p_promo_classes | text | Custom CSS promptional classes that are added to a product to create visual stamps or ohter CSS outcomes | ||
p_img | text | Image (Primary product image). URL can be local reference. External URLs will be imported and replaced with a local file reference. (Validation: URL) | ||
p_api_debug | text | Either JSON or XML data as per the last API sync | ||
p_parentpid | int | Product variants will have a p_parentpid that links to the master product. Master products have p_parentpid=0. Only master products display on category pages. (Validation: Fkey to PID) | ||
p_tab_reviews | text | Additional information about product reviews revealed in a tabbed interface (Validation: HTML) | ||
p_customer_price_json | json | JSON structure for targeted pricing on a unique customer basis, only best price applies compared with customer price teir. | ||
p_voucherexpiry | interval | Interval signalling the date of expiry of voucher added to whatever the purchase date was. | 01:00:00 | |
p_details | text | Product short description | ||
p_gst_rule | bool | Currently used to identify if GST / Sales tax should apply domestically. If false, then GST is not added to line items. (Validation: Depreciating in favour of tax codes at some point) | ||
p_pricebreakf | decimal | Quantity price break price F, subject to minimum quantity **p_pricebreakf_minqty** | ||
p_voucher_percent | decimal | Purchase of this product is a percentage based voucher, gives this percentage of discount of a future purchase. | ||
p_pricebreake | decimal | Quantity price break price E, subject to minimum quantity **p_pricebreake_minqty** | ||
p_pricebreakb_setup | decimal | Setup price added to total if Quantity Price break B is used. | ||
p_groupid2 | int | Additional category ID 2, a product can belong to 10 different categories. Refer category meta data | ||
p_freight_rule | text | Enum, Generally null, but other options include (Exclude,SeparateItem,SeparateLine). Exclude means this product does not use the normal freight rules | ||
p_api_source_id | text | An identifier used for syncing with an API, eg a GUID | ||
p_groupid8 | int | Additional category ID 8, a product can belong to 10 different categories. Refer category meta data | ||
p_groupid7 | int | Additional category ID 7, a product can belong to 10 different categories. Refer category meta data | ||
p_groupid9 | int | Additional category ID 9, a product can belong to 10 different categories. Refer category meta data | ||
p_groupid4 | int | Additional category ID 4, a product can belong to 10 different categories. Refer category meta data | ||
p_minqty | decimal | The min quantity that must be purchased per order (Validation: ignore if 0) | ||
p_groupid3 | int | Additional category ID 3, a product can belong to 10 different categories. Refer category meta data | ||
p_groupid6 | int | Additional category ID 6, a product can belong to 10 different categories. Refer category meta data | ||
p_groupid5 | int | Additional category ID 5, a product can belong to 10 different categories. Refer category meta data | ||
p_privacy_mbrgroupid | int | Security visibility to a limited member group ID to see the product. Refer member group meta data. | ||
p_tab_termsconditions | text | Special product related terms and conditions revealed in a tabbed interface. Then presents  this also at checkout, and requires acceptable of combined T&C's (Validation: HTML) | ||
p_autoupgrademember | int | Upgrades member to this security level once paid, status achieved. refer member security levels.  (Validation: 0+) | ||
p_style | text | The default or variant style/option | ||
p_error_msg | text | The error message related to any image import, but also reserved for other uses.. | ||
p_pricebreake_setup | decimal | Setup price added to total if Quantity Price break E is used. | ||
p_api_setting_id | int | ID of API service that has the master data for this product | ||
p_group | text | Temporary use when importing products into categories. When used in CSV imports, this column can auto create required categories, link them, and can expand into multiple categories using a | delimiter. Sometimes this column has the name of the primary category when exported (but is not guaranteed) | ||
p_tab_moreinformation | text | Additional information revealed in a tabbed interface (Validation: HTML) | ||
p_colour | text | The default or variant colour | ||
p_bookingsequence | int | For consecutive services, in which order would these occur. | ||
p_replenishqty | decimal | If enabled, the qty in stock will be reset to this value every morning. Typically used by cafes and bakeries who cook 10 dozen muffins every day, or something like that. Ignored if 0 (Validation: ignore if 0) | ||
p_private_stock_notes | text | Confidential notes that the merchant keeps about the stock availability, but not visible to customers. | ||
p_filename | text | SEO Filename, will be prefixed with "/product/" automatically unless the SEO filename starts with a slash SEO filenames should only contains letters numbers dashes underscores and full stops. forward slashes / may be used. No spaces. If the first character is a / then the file will be published, which is not desireable if there are more than 100 products. | ||
p_stock_checked | timestamp | The date of the last stock take, eg when this product last had it's qty in stock "set" as a new total, by a CMS web form. | 2025-12-31 23:59:59 | |
p_listed | timestamp | Timestamp this product record was created | 2025-12-31 23:59:59 | |
p_madeincountry | text | Country Code of origin. (2 digit country code, one code only. Used with market places. (Validation: NZ,AU,US,CA,CM,JP etc) | ||
p_shipping | decimal | Fixed unit cost for domestic shipping on top of any other freight fees. | ||
p_limitshippingtocountries | text | Limit shipping to these countries only. Full country text, comma separated. eg "New Zealand, Australia" (Validation: New Zealand, Australia) | ||
p_exclude_countries | text | CSV of country names. Do not allow these countries to purchase a restricted product | ||
p_priced | decimal | The price for members in price group D | ||
p_suppliercode | text | Product code used for purchasing new stock  | ||
p_pricee | decimal | The price for members in price group E | ||
p_priceb | decimal | The price for members in price group B | ||
p_voucher_createafter | interval | Delayed creation of the voucher, eg as a future incentive | 01:00:00 | |
p_pricec | decimal | The price for members in price group C | ||
p_priceh | decimal | The price for members in price group H | ||
p_pricef | decimal | The price for members in price group F | ||
p_priceg | decimal | The price for members in price group G | ||
p_cascade_pricing | bool | Prices are automatically cascaded to variants when changes made to the master product, eg where there is no price variations expected. | ||
p_updated | timestamp | The time this product was last updated for core information, which should include when stock count changes. This may not be updated for long text fields | 2025-12-31 23:59:59 | |
p_itemcondition | text | eg is this item New or Second Hand... Refer to meta schema for values. Default meaning is New if blank, so leave it blank. | ||
p_pricebreakd_setup | decimal | Setup price added to total if Quantity Price break D is used. | ||
p_booking_price_unit | interval | How the standard price unit compares to time. eg 1 day, 1 hour, or 45 minutes. This may be the fixed duration of a service or seat hire, or alternatively related to pricing units multiplied by quantity of time. | 01:00:00 | |
p_pricea | decimal | The price for VIP or members in price group A (Validation: <=price) | ||
p_location | text | Confidential location of the stock, eg shelf/bin number | ||
p_tab_contents | text | Additional information about product contents revealed in a tabbed interface (Validation: HTML) | ||
p_qtyinc | decimal | The increment unit, eg if an item is only sold by the dozen, then 12, or if decimals are permitted, then 0.1 (Validation: >0 ) | ||
p_freight_ship_separately | bool | Calculate shipping on the basis that this item will be shipped separately. Courier platform dependent. | ||
p_img_more_count | int | Additional image count. Additional images are stored in another table | ||
p_autoupgrade_expiry | interval | Upgrades member to a new expiry date once paid | 01:00:00 | |
p_privacy_mbrgroupid_price | int | Security visibility to a limited member group ID to see the price. Refer member group meta data. | ||
p_dt_expires | timestamp | This product will no longer be visible after this date | 2025-12-31 23:59:59 | |
p_voucher_limit_groupid | int | Limit voucher use to this category (Validation: Refers category.id) | ||
p_minqtytrade | decimal | The min quantity that must be purchased per order, before trade price  available. (Validation: ignore if 0) | ||
p_tab_links | text | Additional links and information about the product revealed in a tabbed interface (Validation: HTML) | ||
p_features_json | json | A JSON object containing list of feature IDs | ||
pid | serial | System ID for the product, also referred to by ID | 123456 | |
p_suppliername | text | Name of supplier | ||
p_price | decimal | The primary checkout price (excl Tax or GST). Correct to 3 Decimal places in database. (Validation: required, 0=free) | ||
p_pricebreakc_setup | decimal | Setup price added to total if Quantity Price break C is used. | ||
p_enquiry | text | Display an enquiry form with this product | ||
p_uom | text | Unit of Measure | ||
p_autovoucher | char | If True, then create a voucher to send to the customer and save in the vouchers list. (Validation: T) | ||
p_recipe_type | text | The type of assembled part recipe, determines how products are synced to (Validation: REVEALRECIPE,PACKAGE or NULL) | ||
p_minlevelforsee | int | Only members with this security level can see the product. A value of 0 means anyone can see the product | ||
p_pricebreakf_setup | decimal | Setup price added to total if Quantity Price break F is used. | ||
p_groupid10 | int | Additional category ID 10, a product can belong to 10 different categories. Refer category meta data | ||
p_shipping_int | decimal | Fixed unit cost for international shipping on top of any other freight fees | ||
p_autoupgrade_mbrgrpid | int | Upgrade a member to this security group once paid | ||
p_sale_ends | timestamp | On this date/time the sale price will end, and the main price will revert to the value of the p_priceprediscount if a value exists. | 2025-12-31 23:59:59 | |
p_title | text | Product name (Validation: required) | ||
p_width | decimal | Product dimension width in cm. Including packaging. (Validation: 0+) | ||
p_target_quantity | decimal | The desired stock holding level. Purchase orders default to this number less stock on hand. (Validation: ignore if 0) | ||
p_material_required_groupid | int | If this product requires fabric or material in order to be manufactured, From which category ID can material or fabric be selected | ||
p_minlevelforbuy | int | Only members with this security level can buy this product. A value of 0 means anyone can buy this procuct | ||
p_buy_points | decimal | If this value is more than 0 then the customer will gain additional loyalty points when they purchase this product | ||
p_manufact_sku | text | Manufacturer code, eg barcode or ISBN | ||
p_supplieraccountcode | text | Supplier code is used with some APIs where this value is required, otherwise null | ||
p_metadesc | text | SEO meta description | ||
p_subtitle | text | Sub title of product h2, optional field | ||
p_emailfile | text | Once purchased, a secure file at this file location will be emailed to the customer. Otherwise referred to as a digial file purchase | ||
p_depth | decimal | Depth / length in cm (Validation: 0+) | ||
p_subscribetocampaignid | int | Upon purchase, a customer will be subscribed to this email campaign ID | ||
p_display_options_json | json | Additional configuraiton in JSON format that lists the colours, options, styles and display rules for these. | ||
p_bookingtype | text | If this is a bookable item, then there are 4 types (Validation: eg ) | ||
p_vendor_notify | text | Email address of a vendor to supply the goods, in a drop shipping arrangement (Validation: Email) | ||
p_age_target | int | For market places, these specific age values represent age bands, for products targeting certain ages, such as baby or preschool (Validation: 0,1,2,3,5,10,15,25,50,70) | ||
p_api_source | text | A system code identifying which API is the master for this product. | ||
p_deposit_pc | decimal | If only a deposit is required for this product, then only require this much be paid on checkout, even though the total of the invoice will be for the full cost, expectation to pay difference when collecting hire items. | ||
page | int | System ID for the page (read only) | 123456 | |
p_additionaltext | text | Additional rich product information revealed after product pricing table, but above the tabbed interface. So always visible on page. (Validation: HTML) | ||
p_season_pricing | int | Seasonal pricing matrix applies | ||
p_sale_items_left | int | How many items left on sale price, if greater than 0. Once it gets to 0, then prediscount price applies. This number is visible to customer, and is used to encourage a scarcity decision. | ||
p_code_gl_sales | text | GL Code to use on API connections. eg Xero requires an item ID, and a sales code | ||
p_privacy_mbrgroupid_buy | int | Security visibility to a limited member group ID to buy the product Refer member group meta data. | ||
p_vendorid | int | Member ID of the vendor who has ownership rights of this product, and might earn commissions from the sale of this product. | ||
p_postpay_info | text | Information to be provided on invoices/receipts after payment. This might be a product key or instructions. Designed to give information only once payment received, but only unique per product, not per order. | ||
p_qtyonorder | decimal | Total quantity in submitted purchase orders awaiting delivery. Value likely to be reset when purchase orders are edited. (Validation: 0+) | ||
p_calendar_count | int | How many resources (aka hire items or seats) are available to book (calendar instances) | ||
p_tab_specifications | text | Additional information about product specifications revealed in a tabbed interface (Validation: HTML) | ||
p_extra5 | text | Custom Product Data Field 5 | ||
p_img_json | json | Meta data about the primary product image | ||
p_extra6 | text | Custom Product Data Field 6 | ||
p_extra3 | text | Custom Product Data Field 3 | ||
p_priceprediscount | decimal | RRP Price prior to discount (Validation: >=price) | ||
p_childcnt | int | Count of variant products, if this is a master product. Value = 0 forordinary product. (Validation: 0+) | ||
p_vouchervalue | decimal | Purchase of this product is a fixed value voucher. The monetary value of the voucher that can be redeemed in the default currency of the shopping cart. | ||
p_aggregateratingcount | int | Count of reviews contributing to average review (Readonly) | ||
p_extra4 | text | Custom Product Data Field 4 | ||
p_extra1 | text | Custom Product Data Field 1 | ||
p_supplier_puq | decimal | The incremental unit for purchase orders. eg if a supplier only allows purchases by the dozen, then PUQ is 12 | ||
p_extra2 | text | Custom Product Data Field 2 | ||
p_pricebreakb | decimal | Quantity price break price B, subject to minimum quantity **p_pricebreakb_minqty** | ||
p_tab_video | text | Additional information likely embedded product videos revealed in a tabbed interface (Validation: HTML) | ||
p_pricebreaka | decimal | Quantity price break price A, subject to minimum quantity **p_pricebreaka_minqty** | ||
p_metatitle | text | SEO meta title | ||
p_pricebreakd | decimal | Quantity price break price D, subject to minimum quantity **p_pricebreakd_minqty** | ||
p_pricebreakc | decimal | Quantity price break unit price C, subject to minimum quantity **p_pricebreakc_minqty** | ||
p_code | text | Product code used for reconcilation with other systems, or possibly printed bar code. (Validation: desireable) | ||
p_exclude_from_list | text | If specified, then exclude this product from merchant center product feeds. Enum values include (GoogleMerchantFeed,FacebookProductFeed) | ||
p_maxlevelforsee | int | Hide from wholesale option, as per <a href="https://www.help.cms-tool.net/blog/member-levels.html">member level</a>, eg 175 only for retail visibility only 999 wholesale members can view (Validation: 175,999, ) | ||
p_outofstockmessage | text | A customer defined text message to warn customer of specifics relating to availability. The existence of this message overrides default messages, and is considered a warning, so should be used for edge cases, not for global information | ||
p_minlevelforprice | int | Only members with this security level can see the product price. A value of 0 means anyone can see the price | ||
p_pricebreaka_setup | decimal | Setup price added to total if Quantity Price break A is used. | ||
p_api_last_updated | timestamp | The timestamp when last synced with an API | 2025-12-31 23:59:59 | |
p_weight | decimal | Weight in grams, including packaging (Validation: 0+) | ||
p_promote | text | The most recently assigned featured product stamp. A product can be featured in multiple places, but this value is only the most recent stamp | ||
p_qtylowstock | decimal | An arbitrary point when stock is considered too low, and reordering is urgent. | ||
p_qtyinstock | decimal | Stock on hand. This value excludes recent sales that have already decremented this value. This number can go into negatives, typically in a back order situation. There is no break down by location | ||
p_voucher_exclude_groupid | int | Allow voucher use for any category except this one. (Validation: Refers category.id) | ||
p_tab_features | text | Additional information about product features revealed in a tabbed interface (Validation: HTML) | ||
p_supplierprice | decimal | Known cost of item to replace from supplier | ||
p_stock_enquiry_count | int | Count of open enquiries related to this product (Validation: 0+) | ||
p_metakeywords | text | SEO meta keywords | ||
p_address_search | text | Post Code availability. Product only available in these postcodes (Validation: 1021,1022,3050) | ||
p_height | decimal | Height in cm, default 0 if unknown (Validation: 0+) | ||
p_promote_price_incl | decimal | The tax inclusive price that retail customers would pay. This is not the main price. This price is derived from the main price including any general discounts. (Readonly) | ||
p_bookingcalendartags | text | If a service, or room, then these tags identify a limited set of global resources that can be used. | ||
p_size | text | The default or variant size |
Sample object
{
"id": 1514650,
"p_title": "One small thing only",
"p_price": 10,
"p_aggregaterating": 5,
"p_maxqty": 0,
"p_qty_label": "Length",
"p_assembled_part_count": 0,
"pid": 1514650,
"p_voucher_limit_pid": 0,
"p_backorder_maxqty": 0,
"p_last_sale": "2021-12-06 09:52:59.027852",
"p_custom_fields": {},
"p_categories": "Main Test Products",
"p_order": 1,
"groupOrdering": [{
"pg_groupid": 4772,
"pg_order": 2
}],
"p_minlevelforsee": 0,
"p_pricebreakb_minqty": 0,
"p_pricebreakc_minqty": 0,
"p_pricebreaka_minqty": 0,
"p_shipping_int": 0,
"p_autoupgrade_mbrgrpid": 0,
"p_img": "/images/05.png",
"p_width": 0,
"p_target_quantity": 0,
"p_parentpid": 0,
"p_customer_price_json": {},
"p_gst_rule": "t",
"p_buy_points": 0,
"p_metadesc": "rtetre",
"p_groupid2": -9,
"p_depth": 0,
"p_subscribetocampaignid": 0,
"p_groupid8": -9,
"p_age_target": 0,
"p_groupid7": -9,
"p_counter": 0,
"p_deposit_pc": 0,
"page": 905,
"p_groupid4": -9,
"p_minqty": 1,
"p_showbuybutton": "t",
"p_groupid3": -9,
"p_season_pricing": 0,
"p_sale_items_left": 9999,
"p_groupid6": -9,
"cid": 517,
"p_groupid5": -9,
"p_duplicationid": 0,
"p_privacy_mbrgroupid": 0,
"p_autoupgrademember": 0,
"p_vendorid": 0,
"p_qtyonorder": 0,
"p_group": "Main Test Products",
"p_calendar_count": 0,
"p_bookingsequence": 0,
"p_replenishqty": 0,
"p_priceprediscount": 13.043,
"p_childcnt": 0,
"p_aggregateratingcount": 0,
"p_supplier_puq": 1,
"p_listed": "2017-02-03 14:03:07.639828",
"p_pricebreakb": 0,
"p_pricebreaka": 0,
"p_freight_exclude": "f",
"p_pricebreakc": 0,
"p_shipping": 0,
"p_priced": 6.38,
"p_pricee": 6.58,
"p_api_last_updated": "2017-02-03 14:03:07.639828",
"p_priceb": 6.58,
"p_weight": 0,
"p_pricec": 6.58,
"p_priceh": 6.58,
"p_pricef": 6.58,
"p_priceg": 6.58,
"p_cascade_pricing": "f",
"p_qtylowstock": 0,
"p_qtyinstock": 8,
"p_voucher_exclude_groupid": 0,
"p_updated": "2021-12-06 09:52:59.027852",
"p_pricea": 7.83,
"p_supplierprice": 0,
"p_stock_enquiry_count": 0,
"p_optioncount": 0,
"p_qtyinc": 0.1,
"p_groupid": 4772,
"p_metakeywords": "retrwet",
"p_height": 0,
"p_voucher_limit_groupid": 0,
"p_promote_price_incl": 11.5
}Machine-readable documentation
This documentation is also available as JSON or Markdown at the same URL. Request JSON with Accept: application/json or Markdown with Accept: text/markdown.