Endpoint:
https://api.website.world/webapps/api/product
Description
Use our /product endpoint to get/create/update products, product variations and product options.
When Getting data, if supplying an ID, then only 1 data JSON element is returned. Otherwise an array is returned, irrespective of how many items are matched. When POSTing data, then only a single element will be returned, and only a single element is expected to be POSTed as a time.
Get Parameters
Name | Description | Example | Data type |
id |
If ID is specified, then only a single element is returned if found. Otherwise, an array is returned, even if only one item matches. |
id=12345 |
int |
keywords |
Filter results based on Site keywords: Site search keywords |
keywords=abc |
string |
code |
Filter results based on p_code: Product code |
code=123 | string |
categoryID |
Filter results based on Product category id |
categoryID=101 |
int |
includeVariants | Include product variants with the product | includeVariants=1 | string |
includeAllAttributes | When doing a multiple item search, include some product attributes that are hidden for the benfit of bandwidth. Attributes that are excluded by default are those where unlimited length HTML or rich text are included in the product description. So use this parameter if you specifically want this data, otherwise leave it out to have a smaller payload. | includeAllAttributes=t | boolean |
includeMinimalAttributes | When doing a multiple item search, we can reduce fields only to code,title, but all pricing and stock fields, thus saving bandwidth | includeMinimalAttributes=t | boolean |
includeUltraMinimalAttributes | When doing a multiple item search, we can reduce fields only to only code, basic pricing and stock fields, thus saving bandwidth | includeUltraMinimalAttributes=t | boolean |
modifiedAfter | Various date/time formats ok, but prefer 2021-06-20 14:59:59 modifiedAfter will be updated if any stock movement occurs. |
modifiedAfter=2021-06-20 | datetime |
location |
Filter results based on Product location |
location=auckland |
string |
title |
Filter results based on Product name/title |
title=Book | string |
orderby |
Sort results based on date/time created, product name, date/time updated at, product code |
orderby=created / orderby=name / orderby=updated / orderby=code | string |
orderDirection | Sort results in descending order. Default is ascending order |
orderDirection = reverse for descending order |
string |
Useful use cases
1. Get all products
Return all products related to your website. Use GET to retrieve the data. Use additional parameters above. Use pagination if you have more than 100 products to return.
Example URL: https://api.website.world/webapps/api/product
"data": [{"p_title": "prod1","p_price": 10.00,"pid": 1234,...}]}
1b. Get 1 product
Return 1 product, with all additional meta data. Use GET to retrieve the data. In this case, data is a single object.
Example URL: GET https://api.website.world/webapps/api/product?id=12345
{
"data":
{
"p_title": "prod1",
"p_price": 10.00,
"pid": 12345,
...
}
}
2. Create a new product
To create a new product you do not need to include an id in the data JSON. All the other information provided will be used to create a new Product.
To add the product to an existing category include : "p_groupid" : group id number. where the group id number can be found from the category endpoint.
{
"p_title": "Bag",
"p_price": 50.00,
"p_qtyinstock": 25.0
}
The above JSON will create a new product with name Bag, price 50 and quantity in stock 25.
3. Update an existing product
To update an existing product include the product id and the fields you would like to update in the data JSON value. Only provide the minimal fields you would like to update in the data. You can also update a product by providing only a p_code instead of an ID, however, it will only update the first match.
In this example, we already know the ID, and only update stock count and price.
{ "id": 12345, "p_qtyinstock": 5.000, "p_price": 25.00 }
Product Options
Some Products have sizes/colours/styles associated with it. We can create new options and update existing options for a Product.
To do so, include a JSON Array of styles/colours/sizes and provide p_option_type, p_option keys. The option name is p_option and the option type is p_option_type. The type is optional here while the name has to be unique.
To update any option include the option_id to identify the option to update. See below examples.
1. View Product options
To view the product options related to an individual product, GET the Product using the product ID
Example URL: https://api.website.world/webapps/api/product?id=12345
The product options will be contained in one of the 3 array elements, highlighting it's type. If the product contains variants, there is no guarantee that the sizes/colours/styles will be represented here, as our system can generate that data on the fly from the variant data.
{ "id": 12345, ... "sizes": [], "colours": [], "styles": [], ... }
2. Create new option/size/colour/style
To create a new option, make sure you provide a unique option name (p_option) which hasn't been used before on that Product. The key of the options array to add should either be sizes or colours or styles. You do not need to provide the id for the option. The rest of the information provided will be used to create the option. The below example creates a large option in the product 12345.=
{ "id": 12345, "sizes": [ { "p_option": "large", "p_option_price": 10.00 } ] }
3. Update existing option
The product id and option id is provided for identifying the product option. The rest of the information provided will be used to update the option. Only provide data you wish to update. In the example below the p_option and p_option_price will be updated for option id 123.
{ "id": 12345, "sizes": [ { "id": 123, "p_option": "Large", "p_option_price": 5.00 } ] }
4. Deleting Options
Send an option with a sorting order to negative -999 and we will delete the option.
eg "p_sort_order": -999
Or, add a request parameter, or a json data parameter (in top level) called "DeleteMissingArrayElements" and we will delete any items that are not in your array.
Product Variants
Product variants are different type of product options as they give you control over the stock quantity of the variation. Creating and updating a variant is similar to product with the key difference that a variant has a parent id.
1. Insert a Product Variant
To create a new variant provide the variant(s) in the "variants" array. Every variant must have a parent id and hence the id key field must be provided. In the below example we are creating a new variant Large Red variant under the product id 12345. The rest of the information will be used to create the variant.
"id": 12345,
"variants": [
{
"id": 12345,
"variants": [
{
"p_size": "Large",
"p_colour": "Red",
"p_qtyinstock": 10,
"p_price": 15.00,
"p_code": "ABC123",
"p_img": "image_url.jpeg"
},
...
]
}
2. Update Product Variant
To update a variant include the id of the variant or the code to identify the variant. You must also provide the parent id of the variant. All the information provided with it will be used to update the variant. In the below examples we are updating the variant using id in the left example and using the code in the right.
{ "id": 12345, "variants": [ { "id": 1234, "p_size": "Medium" } ] } |
{ "id": "12345", "variants": [ { "p_code": "Code123", "p_size": "Medium" } ] } |
3. Delete Product Variant
Set the product order status to delete a specific variant. That variant may remain in the database, but it will not be visible to anyone.
eg "p_order":-999
Or, add a request parameter, or a json data parameter (in top level) called "DeleteMissingArrayElements" and we will delete any items that are not in your array. {Feature under construction}
Pro Tips:
GST Pricing
Prices via API excl GST, and using 3 decimal points is good to ensure tidy round inclusive pricing. We don't have a GST component field, so if you want inclusive = 12.00, then you need to push price=10.435 Alternatively we can "round" all prices to 10cents if the merchant wants.
Category Ordering
Products can exist in multiple categories. The category exposure is visible or managed in 2 different ways. The hard connection to categories is via the p_group* fields. And a softer linkage is via a nested "groupOrdering" where you can control the ordering within a category.
The ordering is any number > 0, and need not be sequential. Lowest numbers position at the top, and higher numbers position further down the page. These numbers may be automatically converted by our system to sequential positions should any item be repositioned within the CMS. You can use either approach to add and remove products from categories.
You can use pg_groupid or category_id interchangeably, both are valid. Same for pg_order or category_order. We now supply a read only field category_name for the text of the category.
If you use the p_groupid* approach, then we will only remove the product from a category if the p_groupid is a negative number. If you do not supply these keys in your update, then no changes will occur.
If you do not provide a complete category ordering array, then we will not remove category linking, unless you specifically add a request parameter, or a json data parameter (in top level) called "DeleteMissingArrayElements".
Visibility
The p_order field is used to determine general visibility on page and in search. The field p_order used to determine the position on the page of the product, but that has been deprecated and replaced with each product having a unique position within any category, where a product may belong in multiple categories. The position in categories is now managed in the array "groupOrdering"
- "p_order":1, (This is a ordinary visible product, the default value)
- "p_order":0, (This product is hidden from category lists, but remains a searchable product, and you can link to it as you like.)
- "p_order":-1, (This is a hidden product, and anyone can access if the link is known, but it is excluded from search)
- "p_order":-99, (This is a hidden/blocked product, and no one can access it)
Security Visibility
The p_minlevelforsee and p_maxlevelforsee fields are focused on a member security level. Use the min level to require a password. Whereas, use a lower max level, to prevent your wholesale customers viewing the product. The 2 fields together create a range. Similar fields and rules exist for categories, but products do need to be secured in their own right, as a product can be searched without reference to the multiple categories in which it may reside.
- "p_minlevelforsee":0 (Anyone can see this product)
- "p_minlevelforsee":100 (Customers must login to see this product)
- "p_minlevelforsee":600 (This product is visible only to POS users)
- "p_minlevelforsee":999 (This is a blocked product, no one can see this)
Promotions / Featured Items
The "p_promote" field is reserved for visual "Stamps" that appear on the product list within a category. If you supply a p_promote field it will also be added to the "promotions" json array, with a default position.
Use the "promotions" array to manage the promotional targets of your product. If you supply a promotion array, then the item will be promoted in all those categories, but no stamp is created.
You can specify any text as the product promotional stamp. Whereas the array is really intended for specified target areas.
If you provide no promotions array, there will be no changes to the database for promotions. This is the general approach we have where you only need to supply data if you intend a change to happen.
You can supply a promo_order of < 0 to force a delete of a specific promotion.
If you do provide an array, but do not provide a complete array, then we will still not adjust promotional lists, unless you specifically add a request parameter, or a json data parameter (in top level) called "DeleteMissingArrayElements".
Stock Counts
Unlimited stock can be set as p_qtyinstock=9999, or any number less indicate how many are available. If you have sold 3 items on backorder, then the stock level is negative -3
Unlimited backorder stock can be set as p_backorder=9999, or any number less indicates how many are on back order.
There are several more fields to help with reports and stock level targeting.
p_qtyinstock is updated whenever items are sold, or when stock movements are specifically saved. This field can be overridden by specified API connections, and also by importing CSV data. We make a best effort to provide a robust stock count, but acknowledge the needs for many merchants to manage this number externally.
Example JSON (Full sample)
{ "endPoint": "product/1514650", "resultCount": 1, "data": { "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 }, "success": true, "RecordExists": true }
Data Dictionary
Additional information revealed in a tabbed interface
Name | Description | Validation | Data type |
---|---|---|---|
pid (ID) | Product Unique ID, aka ID. System generated serial. |
Read only | Integer |
p_parentpid | 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. | Fkey to PID | Integer |
p_title | Product name | required | Text |
p_subtitle | Sub title of product h2, optional field | Text | |
p_details | Product short description | Text | |
p_code | Product code used for reconcilation with other systems, or possibly printed bar code. | desireable | Text |
p_suppliercode | Product code used for purchasing new stock | Text | |
p_manufact_sku | Manufacturer code, eg barcode or ISBN | Text | |
p_price | The primary checkout price (excl GST). Correct to 3 Decimal places in database. |
required, 0=free | Decimal |
p_priceprediscount | RRP Price prior to discount | >=price | Decimal |
p_pricea | Member Price A / VIP | <=price | Decimal |
p_priceb, etc | Member Price Group/Teir B - H | <=price | Decimal |
p_price_from | Where variants exist, this is the lowest price. | <=price | Decimal |
p_price_to | Where variants exist, this is the highest price. | <=price | Decimal |
p_shipping | Fixed unit cost for domestic shipping on top of any other freight fees. | Decimal | |
p_shipping_int | Fixed unit cost for international shipping on top of any other freight fees | Decimal | |
p_freight_exclude | Exclude courier setup freight fees, eg gift voucher | t,f | Boolean |
p_pricebreaka | Quantity price break A (low) | Decimal | |
p_pricebreaka_minqty | Qty to get price A | Decimal | |
p_pricebreaka_setup | Setup price added to total before quantity price break unit price | Decimal | |
... | Price breaks A-F ... | ||
p_groupid | Master Category / Collection ID Top level product = 0 Hidden or N/A = -9 | Fkey To Category ID | Integer |
p_groupid2, etc | Category 2 - 8 ID (additional categories) | Fkey To Category ID | Integer |
p_uom | Unit of Measure | Text | |
p_order | 1 is public and visible, 0 is hidden, -99 is blocked | -99, 0, 1 | Integer |
p_minlevelforsee | Security visibility, as per member level, eg 0 is public access 100 for any logged in users 200 for authorised users 600 for POS users only | 0,150,200,600,999, etc | Integer |
p_maxlevelforsee | Hide from wholesale option, as per member level, eg 175 only for retail visibility only 999 wholesale members can view | 175,999, | Integer |
p_privacy_mbrgroupid | Security visibility to a limited member group | memberGroup.id | Integer |
p_weight | Weight in grams | 0+ | Decimal |
p_height | Height in cm | 0+ | Decimal |
p_width | Width in cm | 0+ | Decimal |
p_depth | Depth / length in cm | 0+ | Decimal |
p_extra1,2,3,4,... | Extra fields, often used for make, model year etc | Text | |
p_img | Image (Primary product image). URL can be local reference. External URLs will be imported and replaced with a local file reference. | URL | Text |
p_img_size | Size of image in bytes | URL | Integer |
p_url | URL or attachment to PDF or something | Text | |
p_listed | Timestamp this product record was created | Timestamp | |
p_qtyinstock | 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 | Decimal | |
p_stock_checked | 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. | Timestamp | |
p_backorder_maxqty | Permittable quantity of back order quantity allowed, perhaps set to the total number currently on back order by the supplier | Decimal | |
p_stock_display | Override default stock display rules | eg OOS,NONE,QTY,etc | Text |
p_qtylowstock | An arbitrary point when stock is considered too low, and reordering is urgent. | Decimal | |
p_replenishqty | 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 | ignore if 0 | Decimal |
p_target_quantity | The desired stock holding level. Purchase orders default to this number less stock on hand. | ignore if 0 | Decimal |
p_minqty | The min quantity that must be purchased per order | ignore if 0 | Decimal |
p_minqtytrade | The min quantity that must be purchased per order, before trade price available. | ignore if 0 | Decimal |
p_maxqty | The max quantity that can be purchased per order. | ignore if 0 | Decimal |
p_qtyinc | The increment unit, eg if an item is only sold by the dozen, then 12, or if decimals are permitted, then 0.1 | >0 | Decimal |
p_qtyonorder | Total quantity in submitted purchase orders awaiting delivery. Value likely to be reset when purchase orders are edited. | 0+ | Decimal |
p_supplier_puq | The incremental unit for purchase orders. eg if a supplier only allows purchases by the dozen, then PUQ is 12 | Decimal | |
p_outofstockmessage | 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 | Decimal | |
p_assembled_part_count | If this product is assembled, then it will have a count of parts/materials (not quantity) | 0+ | Integer |
p_recipe_type | The type of assembled part recipe, determines how products are synced to | REVEALRECIPE,PACKAGE or NULL | Text |
p_aggregaterating | An average review rating (5 stars) | 0.0 - 5.0 | Decimal |
p_aggregateratingcount | Count of reviews contributing to average review | 0+ | Integer |
p_categories | Category list, human friendly | readonly | Text |
p_group | 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) | Text | |
p_filename | SEO Filename, will be prefixed with "/product/" automatically unless the SEO filename starts with a slash | Text | |
p_metatitle | SEO meta title | Text | |
p_metadesc | SEO meta description | Text | |
p_metakeywords | SEO meta keywords | Text | |
p_manufacturer | Name of manufacturer | Text | |
p_suppliername | Name of supplier | Text | |
p_supplierprice | Known cost of item to replace from supplier | Decimal | |
p_vendor_notify | Email address of a vendor to supply the goods, in a drop shipping arrangement | Text | |
p_age_target | For market places, these specific age values represent age bands, for products targeting certain ages, such as baby or preschool | 0,1,2,3,5,10,15,25,50,70 | Integer |
p_madeincountry | Country Code of origin. (2 digit country code, one code only. Used with market places. | NZ,AU,US,CA,CM,JP etc | Text |
p_autoupgrademember | Upgrades member to this security level once paid, status achieved. refer member security levels. | 0+ | Integer |
p_autoupgradepassword | If True, then a password will be sent to the customer as a welcome email, when paid status | T | 1Char |
p_autovoucher | If True, then create a voucher to send to the customer and save in the vouchers list. | T | 1Char |
p_vouchervalue | The monetary value of the voucher in the default currency | Decimal | |
p_voucherexpiry | Interval signalling the date of expiry of voucher | Interval | |
p_voucher_percent | A percentage voucher, gives this percentage of discount of a future purchase. | Decimal | |
p_voucher_createafter | Delayed creation of the voucher, eg as a future incentive | Decimal | |
p_voucher_limit_groupid | Limit voucher use to this category | Refers category.id | Integer |
p_voucher_limit_pid | Limit voucher use to this product | Refers product.id | Integer |
p_voucher_exclude_groupid | Allow voucher use for any category except this one. | Refers category.id | Integer |
p_optioncount | Number of product options rows, plus 1 if there is a value in p_prompt4text | 0+ | Integer |
p_childcnt | Count of variant products, if this is a master product. Value = 0 forordinary product. | 0+ | Integer |
p_stock_enquiry_count | Count of open enquiries related to this product | 0+ | Integer |
p_prompt4text | Adds a prompt for customer to enter text, eg "enter your name for engraving" | Text | |
p_style | The default or variant style/option | Text | |
p_colour | The default or variant colour | Text | |
p_size | The default or variant size | Text | |
p_option_display_type | System code for alternative display logic for product options | Text | |
p_showbuybutton | Buy button is hidden if this value is false. | Boolean | |
p_dt_available | This product is hidden until this date makes the product available (visible) | Timestamp | |
p_dt_expires | The product will be hidden from this date onwards | Timestamp | |
p_updated | 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 | Timestamp | |
p_sale_ends | 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. | Timestamp | |
p_cascade_pricing | Prices are automatically cascaded to variants when changes made to the master product, eg where there is no price variations expected. | Boolean | |
p_promote | The most recently assigned featured product stamp. A product can be featured in multiple places, but this value is only the most recent stamp | Text | |
p_api_source | A system code identifying which API is the master for this product. | Text | |
p_api_source_id | An identifier used for syncing with an API, eg a GUID | Text | |
p_api_last_updated | The timestamp when last synced with an API | Timestamp | |
p_api_debug | Either JSON or XML data as per the last API sync | Text | |
p_freight_exclude | Exclude normal freight rules, but apply product specific rules if known. Usually used to signal a gift voucher. | Boolean | |
p_freight_ship_separately | Calculate shipping on the basis that this item will be shipped separately. Courier platform dependent. | Boolean | |
p_limitshippingtocountries | Limit shipping to these countries only. Full country text, comma separated. eg "New Zealand, Australia" | New Zealand, Australia | Text |
p_address_search | Post Code availability. Product only available in these postcodes | 1021,1022,3050 | Text |
p_gst_rule | Currently used to identify if GST / Sales tax should apply domestically. If false, then GST is not added to line items. | Depreciating in favour of tax codes at some point | Boolean (Subject to change) |
p_postpay_info | 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. | Text | |
p_private_stock_notes | Confidential notes that the merchant keeps about the stock availability, but not visible to customers. | Text | |
p_location | Confidential location of the stock, eg shelf/bin number | Text | |
p_additionaltext | Additional rich product information revealed after product pricing table, but above the tabbed interface. So always visible on page. | HTML | Text |
p_tab_moreinformation | Additional information revealed in a tabbed interface | HTML | Text |
p_tab_features | Additional information revealed in a tabbed interface | HTML | Text |
p_tab_specifications | Additional information revealed in a tabbed interface | HTML | Text |
p_tab_contents | Additional information revealed in a tabbed interface | HTML | Text |
p_tab_links | Additional information revealed in a tabbed interface | HTML | Text |
p_tab_video | Additional information revealed in a tabbed interface | HTML | Text |
p_tab_reviews | Additional information revealed in a tabbed interface | HTML | Text |
p_tab_applications | Additional information revealed in a tabbed interface | HTML | Text |
p_tab_termsconditions | Additional information revealed in a tabbed interface. Then presents this also at checkout, and requires acceptable of combined T&C's | HTML | Text |
p_checkout_questions | A legacy approach to present additional questions at checkout... HTML format. | Text | |
p_custom_fields | A count of how many additional customisation fields exist. Stored in text format for legacy reasons. | Text | |
p_qty_label | An alternative wording for the quantity prompt. | Text | |
p_deposit_pc | 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. | Decimal | |
p_bookingtype | If this is a bookable item, then there are 4 types | eg | Text |
p_bookingcalendartags | If a service, or room, then these tags identify a limited set of global resources that can be used. | Text | |
p_calendar_count | How many resources (aka hire items or seats) are available to book (calendar instances) | Integer | |
p_booking_price_unit | 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. | Interval | |
p_bookingsequence | For consecutive services, in which order would these occur. | Integer | |
p_duplicationid | Used internally during website/page duplications as a temporary reference to the old product | ||
p_season_pricing | Seasonal pricing matrix applies | Integer | |
p_sale_items_left | 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. | Integer | |
p_code_gl_sales | GL Code to use on API connections. eg Xero requires an item ID, and a sales code | Text | |
p_img_next_import | When any offsite image is next due to attempt an import. eg if p_img starts with http | Timestamp | |
p_error_msg | The error message related to any image import, but also reserved for other uses.. | Text | |
p_last_sale | When this item was last sold to anyone | Timestamp | |
p_itemcondition | eg is this item New or Second Hand... Refer to meta schema for values. Default meaning is New if blank, so leave it blank. | Text | |
p_customer_price_json | JSON structure for targeted pricing on a unique customer basis, only best price applies compared with customer price teir. | JSON | |