Freewebstore API Documentation

Menu

Getting Started

The Freewebstore API is a RESTful web service using XML over HTTP. The HTTP methods used are GET, POST and DELETE. Therefore, technical knowledge in this area is essential.

The first step to using the API is getting authorisation from Freewebstore. Simply login to your Control Panel and navigate to Settings > Store API and select the "Generate API Key" button. You will then be supplied with an API Key and Client ID.

How to Use the API

Authorization

All API requests should be made via HTTP using the Freewebstore API URL: https://api.freewebstore.org

Authentication is managed using HTTP Basic Authentication. You will use your Client ID and API Key to authenticate. For example:

                                curl -u clientid:apikey -H 'Content-Type: application/xml' \
    https://api.freewebstore.org/category/
                                

Every request sent to the Freewebstore API must be in XML format. This means the Content-Type header must be set to application/xml.

Requests

The base URL for the Freewebstore API is: https://api.freewebstore.org/

Here are some examples of resource URIs:
https://api.freewebstore.org/category/
https://api.freewebstore.org/product/123456
https://api.freewebstore.org/shop/domain

See the Resource and URI Reference for all the possible requests URIs and HTTP verbs for the API resources.

Ensure all required nodes are present and in the correct order as set out in this section.

All requests are validated against an XML schema, which may be subject to change. The schema can be viewed at https://api.freewebstore.org/{resource}/{resource}.xsd in order to check that POSTed XML data is valid. For example https://api.freewebstore.org/product/product.xsd or https://api.freewebstore.org/category/category.xsd.

Only one record can be POSTed in any single request. In other words, only add and update one product / category / domain at a time.

There is a limit of 2500 requests per hour. Rate limiting is on a per user or per application basis. If this reached you will receive a 503 - Service Unavailable error.

Responses

If an API request fails, the error information will be returned with the HTTP status code together with an XML response. For example, if you supply incorrect API Key details, you will get a 401 Unauthorized response:

                                HTTP/1.x 401 Unauthorized
Date: Thu, 20 Mar 2011 11:28:23 GMT

<error>
    <date>Thu, 20 Oct 2011 11:28:23</date>
    <status>401 - Unauthorized</status>
    <message>Invalid API Key</message>
</error>
                            

If a request adds new records, for example when a new product is added, the response will use a 201 Created status and XML with the new details will be displayed.

                                HTTP/1.x 201 Created
Date: Thu, 20 Oct 2011 11:45:02 GMT

<shop>
    <name>Test Store</name>
</shop>
                            

Any other successful operation will return the 200 OK status code, together with relevant response XML:

                                HTTP/1.x 200 OK
Date: Thu, 20 Oct 2011 11:45:02 GMT

<categories>
    <category>
        <id>933818</id>
        <name>Category 1</name>
        <shopkeeper>1234</shopkeeper>
        <parentID>0</parentID>
        <description>Description of category</description>
        <imageURL>image.gif</imageURL>
        <sequence>4</sequence>
        <visible>0</visible>
    </category>
</categories>
                            

Resources

1. Category
1.1 List Categories

Use GET /category/ to retrieve a full list of Category IDs.

                                <categories>
    <category>
        <id>933818</id>
        <Name>Category 1</Name>
        <ParentID>0</ParentID>
    </category>
    <category>
        <id>933819</id>
        <Name>Category 2</Name>
        <ParentID>0</ParentID>
    </category>
</categories>
                            

Optional parameters: offset (int), limit (int), visible (bool), parentID (int) eg. /category/?offset=0&limit=10&visible=1

1.2 Show Category Details

Use GET /category/{id} to obtain the details for a certain category, e.g., /category/740109.

                                <categories>
    <category>
        <id>933818</id>
        <Name>Category 1</Name>
        <Shopkeeper>1234</Shopkeeper>
        <parentID>0</parentID>
        <Description>Description of category</Description>
        <imageURL>image.gif</imageURL>
        <sequence>4</sequence>
        <visible>0</visible>
    </category>
</categories>
                            
1.3 Add Category

Use POST /category/ to add a new category. The category details should be in XML format as follows:

                                <categories>
    <category>
    <Name>String Max 50 Required</Name>
        <parentID>Integer</parentID>
        <Description>String Max 2000</Description>
        <imageURL>String Max 255 Required</imageURL>
        <sequence>Integer</sequence>
        <visible>Boolean</visible>
    </category>
</categories>
                            
1.4 Update Category

Use POST /category/{id} to update category details. The category details should be in XML format as shown above.

1.5 Delete Category

Use DELETE /category/{id} to delete a category.

2. Product
2.1 List Products

Use GET /product/ to retrieve a full list of products.

                                <products>
    <product>
        <id>3777977</id>
        <productName>Product 1</productName>
    </product>
    <product>
        <id>12345678</id>
        <productName>Product 2</productName>
    </product>
</products>
                            

Optional parameters: offset (int), limit (int), category (int), visible (bool), featured (bool), fields (str)
NB: All product fields apart from 'extraImages' and 'additionalCategories' can be added to a comma seperated list for the fields parameter.
eg. /product/?category=1454&visible=1&fields=id,sku,productName,category,brand

2.2 Show Product Details

Use GET /product/{id} to obtain the details for a certain product, e.g., /product/3777977.

                                <products>
    <product>
        <id>3777977</id>
        <productImageURL>image.jpg</productImageURL>
        <nUnitPrice>10.99</nUnitPrice>
        <category>740073</category>
        <minimumQuantity>1</minimumQuantity>
        <weight>0</weight>
        <sku>CODE123</sku>
        <qtyInStock>20</qtyInStock>
        <offerType>0</offerType>
        <offerPrice>0</offerPrice>
        <VAT>1</VAT>
        <discount>0</discount>
        <featured>1</featured>
        <brand>0</brand>
        <vat_rate>0</vat_rate>
        <product_form>-1</product_form>
        <wholesale>-1</wholesale>
        <supplier>-1</supplier>
        <stock_options>0</stock_options>
        <hidden>0</hidden>
        <productDescription>Product Description</productDescription>
        <productName>Name of product</productName>
        <UPC/>
        <EAN/>
        <MPN>123</MPN>
        <ISBN/>
        <extraImages>
            <extraImages>
                <id>10</id>
                <pid>4908743</pid>
                <fileName>test2.jpg</fileName>
                <sequence>2</sequence>
            </extraImages>
        </extraImages>
        <additionalCategories>
            <additionalCategories>740073</additionalCategories>
            <additionalCategories>740102</additionalCategories>
        </additionalCategories>
    </product>
</products>
                            
2.3 Add Product

Use POST /product/ to add a new product. The product details should be in XML format as follows:

                                <products>
    <product>
    <productImageURL>String max 450 Required</productImageURL>
        <nUnitPrice>Decimal Required</nUnitPrice>
        <category>Integer Required</category>
        <minimumQuantity>Integer</minimumQuantity>
        <weight>Integer</weight>
        <sku>String Max 50 Required</sku>
        <qtyInStock>Integer</qtyInStock>
        <offerType>Boolean</offerType>
        <offerPrice>Money</offerPrice>
        <VAT>Boolean</VAT>
        <discount>Integer</discount>
        <featured>Boolean</featured>
        <brand>Integer</brand>
        <vat_rate>Decimal<vat_rate>
        <product_form>Integer</product_form>
        <wholesale>Decimal</wholesale>
        <supplier>Integer</supplier>
        <stock_options>Boolean</stock_options>
        <productDescription>String Required</productDescription>
        <productName>String Max 150 Required</productName>
        <hidden>Boolean</hidden>
        <UPC>String Max 12</UPC>
        <EAN>String 14</EAN>
        <MPN>String Max 50</MPN>
        <ISBN>String Max 13</ISBN>
        <extraImages>
            <extraImages>
                <fileName>String Max 150 Required</fileName>
                <sequence>Integer</sequence>
            </extraImages>
        </extraImages>
        <additionalCategories>
        	<additionalCategories>Integer</additionalCategories>
        </additionalCategories>
    </product>
</products>
                            
2.4 Update Product

Use POST /product/{productID} to update product details. The request XML for product details should be in the format shown above.

2.5 Delete Product

Use DELETE /product/{productID} to delete a product.

3. Brand
3.1 List Brands

USe GET /brand/ to retrieve a full lists of brands.

3.2 Add Brand

Use POST /brand/ to add brand.

                                <brands>
    <brand>
        <Manufacturer>String Max 80</Manufacturer>
    </brand>
</brands>
                            
3.3 Delete Brand

Use DELETE /brand/{brandID} to delete brand.

4. Order
4.1 List Orders

Use GET /order/ to retrieve a full list of Orders.

                                <orders>
    <order>
        <id>481320</id>
        <customer>481320</customer>
        <creationdate>19-05-2012 10:36</creationdate>
        <total>1518.5</total>
        <status>2</status>
        <isnew>0</isnew>
        <paymentmethod>PayPal</paymentmethod>
        <dispatched>1</dispatched>
        <shopkeeper_orderno>1001</shopkeeper_orderno>
    </order>
    <order>
        <id>481325</id>
        <customer>4545</customer>
        <creationdate>25-04-2012 18:45</creationdate>
        <total>1518.5</total>
        <status>2</status>
        <isnew>0</isnew>
        <paymentmethod>PayPal</paymentmethod>
        <dispatched>1</dispatched>
        <shopkeeper_orderno>1002</shopkeeper_orderno>
    </order>
</orders>
                            

Optional parameters: offset (int), limit (int), isnew (bool), status(int) ( 0 - payment not processed, 1 - payment processed, 2 - closed, 3 - problem)
eg. /order/?offset=0&limit=10&isnew=1&status=1

4.2 Show Order Details

Use GET /order/{orderID} to obtain the details for a specific order.

                                <orders>
    <order>
        <id>521965</id>
        <shopkeeper_orderno>1001</shopkeeper_orderno>
        <customer>528870</customer>
        <creationdate>Oct 17 2011 01:03:53:557PM</creationdate>
        <reference>1bn0b445h1q2lmuz1hvmm255</reference>
        <net>22.99</net>
        <vat>5.0233</vat>
        <deductions>2.99</deductions>
        <order>
            <discount>
                <couponcode>DFR456</couponcode>
                <discount>2.99&</discount>
                <couponID>7458</couponID>
            </discount>
        </order>
        <status>0</status>
        <isnew>1</isnew>
        <postage>0.59</postage>
        <postage_method>UK Second Class: For baskets whose total weight is between 101g and 250g</postage_method>
        <paymentmethod>PayPal </paymentmethod>
        <instructions/>
        <errors/>
        <kashflow_synch>0</kashflow_synch>
        <order>
            <billing_address>
                <surname>Smith</surname>
                <forename>Anthony</forename>
                <companyname>Test Company</companyname>
                <add1>3 Test Street</add1>
                <add2></add2>
                <add3></add3>
                <city>Test City</city>
                <county>Test County</county>
                <postcode>SK3 7GH</postcode>
                <telephone>045896 4587896</telephone>
                <mobile>07789582696</mobile>
            </billing_address>
        </order>
        <order>
            <delivery_address>
                <surname>Smith</surname>
                <forename>Christine</forename>
                <companyname></companyname>
                <add1>10 Test Road</add1>
                <add2></add2>
                <add3></add3>
                <city>Test City</city>
                <county>Test County</county>
                <postcode>SK4 6NG</postcode>
                <telephone>045896 4587896</telephone>
                <mobile>07789582696</mobile>
            </delivery_address>
        </order>
        <postage_tax>0</postage_tax>
        <dispatched>0</dispatched>
        <paybyotherid>-1</paybyotherid>
        <ip>81.168.44.121 </ip>
        <wheredidyouhearid>-1</wheredidyouhearid>
        <items>
            <id>775434</id>
            <headerID>521965</headerID>
            <productID>4084620</productID>
            <description>lorem ipsum</description>
            <net>22.99</net>
            <vat>5.0233</vat>
            <qty>1</qty>
            <formID>-1</formID>
            <options>
                <option_271080>
                <id>271080</id>
                <orderDetailsID>775434</orderDetailsID>
                <optionid>763217</optionid>
                <optionCost>100</optionCost>
                <optionVAT>17.5</optionVAT>
                <customText>txt 1</customText>
                </option_271080>
            <option_271081>
                <id>271081</id>
                <orderDetailsID>775434</orderDetailsID>
                <optionid>763242</optionid>
                <optionCost>0</optionCost>
                <optionVAT>0</optionVAT>
                <customText>text 2</customText>
            </option_271081>
            </options>
        </items>
    </order>
</orders>
                            
4.3 Show New Orders

Use GET /order/new to return the number of new orders.

4.4 Update Order 'Status'

Use POST /order/{orderID}/status to update the Status field.

                                <orders>
    <order>
        <status>int</status>
    </order>
</orders>
                            

Possible values for status: 0 = Not paid, 1 = Paid , 2 = Closed, 3+ = Error.

4.5 Update Order 'Dispatched'

Use POST /order/{orderID}/dispatched to update Dispatched field.

                                <orders>
    <order>
        <dispatched>boolean</dispatched>
    </order>
</orders>
                            
4.6 Update Order 'isnew'

Use POST /order/{orderID}/isnew to update the isNew field.

                                <orders>
    <order>
        <isnew>boolean</isnew>
    </order>
</orders>
                            
4.7 Add New Order

Use POST /order/ to add a new order.

                                <orders>
    <order>
        <customer>Integer Required</customer>
        <reference>String Max 50</reference>
        <net>decimal Required</net>
        <vat>decimal Required</vat>
        <status>integer Required</status>
        <deductions>decimal Required</deductions>
        <discounts>
            <discount>
                <couponcode>Integer</couponcode>
                <discount>String Max 30</discount>
                <couponID>integer Required</couponID>
            </discount>
        </discounts>
        <postage>decimal</postage>
        <paymentmethod>String Max 20</paymentmethod>
        <instructions>String Max 500</instructions>
        <errors>String Max 500</errors>
        <kashflow_synch>Boolean Required</kashflow_synch>
        <billing_address>
            <companyname>String Max 25</companyname>
            <surname>String Max 60</surname>
            <forename>String Max 60</forename>
            <add1>String Max 80</add1>
            <add2>String Max 80</add2>
            <add3>String Max 80</add3>
            <city>String Max 50</city>
            <county>String Max 50</county>
            <postcode>String Max 15</postcode>
            <region_id>Integer Required</region_id>
            <country_id>Integer Required</country_id>
            <telephone>String Max 25</telephone>
            <mobile>String Max 25</mobile>
            <primary>Boolean</primary>
        </billing_address>
        <delivery_address>
            <companyname>String Max 25</companyname>
            <surname>String Max 60</surname>
            <forename>String Max 60</forename>
            <add1>String Max 80</add1>
            <add2>String Max 80</add2>
            <add3>String Max 80</add3>
            <city>String Max 50</city>
            <county>String Max 50</county>
            <postcode>String Max 15</postcode>
            <region_id>Integer Required</region_id>
            <country_id>Integer Required</country_id>
            <telephone>String Max 25</telephone>
            <mobile>String Max 25</mobile>
            <primary>Boolean</primary>
        </delivery_address>
        <postage_tax>Decimal Required</postage_tax>
        <dispatched>Boolean Required</dispatched>
        <paybyotherid>Integer Required</paybyotherid>
        <wheredidyouhearid>Integer Required</wheredidyouhearid>
        <notified>Boolean Required</notified>
        <items>Required
            <item>
            <productID>Integer Required</productID>
            <description>String Max 200</description>
            <net>Decimal Required</net>
            <vat>Decimal Required</vat>
            <qty>Integer Required</qty>
            <formID>Integer Required</formID>
            <options>
                <option>
                    <optionid>Integer Required</optionid>
                    <optionCost>Decimal</optionCost>
                    <optionVAT>Decimal</optionVAT>
                <customText>String Max 150</customText>
                </option>
            </options>
            </item>
        </items>
    </order>
</orders>
                            
4.8 Delete Order

Use DELETE /order/{orderID}/ to delete an order.

5. Customer
5.1 List Customers

Use GET /customer/ to retrieve a list of customers with orders assigned to them.

Use GET /customer/?all=1 to retrieve a full list of customers.

                                <customers>
    <customer>
        <id>481320</id>
        <email>test@example.com</email>
    </customer>
    <customer>
        <id>481325</id>
        <email>test2@example.co.uk</email>
    </customer>
</customers>
                            

Optional parameters: offset (int), limit (int), all(bool)

5.2 Show Customer Details

Use GET /customer/{customerID} to retrieve details for a customer.

                                <customers>
    <customer>
        <id>481320</id>
        <shopkeeper>12458</shopkeeper>
        <surname>Surname</surname>
        <forename>Forename</forename>
        <companyname>Company</companyname>
        <email>test@example.com</email>
        <telephone>07895641254</telephone>
        <mobile>07895641254</mobile>
        <created>Sep 14 2011 12:26:45:890PM</created>
        <account_type>0</account_type>
        <lastlogin>Sep 14 2011 12:26:45:890PM</lastlogin>
    </customer>
</customers>
                            
5.3 Add Customer

Use POST /customer/ to add a new customer.

                                <customers>
    <customer>
        <surname>String Max 60</surname>
        <forename>String Max 60</forename>
        <companyname>String Max 50</companyname>
        <email>String Max 150</email>
        <telephone>String Max 50</telephone>
        <mobile>String Max 50</mobile>
        <password>String Max 50</password>
        <account_type>Integer Required</account_type>
    </customer>
</customers>
                            

Possible 'account_type' options: 0 = Guest, 1 = Customer Account

5.4 Delete Customer

Use DELETE /customer/{customerID}/ to delete a customer.

6. Address
6.1 List Addresses

Use GET /address/{customerID} to retrieve a full list of addresses for customer.

                                <addresses>
    <address>
        <id>12458</id>
        <tag>Surname</tag>
        <add1>Forename</add1>
        <postcode>Company</postcode>
    </address>
    <address>
        <id>12458</id>
        <tag>Surname</tag>
        <add1>Forename</add1>
        <postcode>Company</postcode>
    </address>
</addresses>
                            
6.2 Show Address Details

Use GET /address/{customerID}/{addressID} to show address details for ID.

Use GET /address/{customerID}/?primary_billing=1 to show primary billing address details.

Use GET /address/{customerID}/?primary_delivery=1 to show primary delivery address details.

                                <addresses>
    <address>
        <id>12458</id>
        <customerid>12458</customerid>
        <tag>12458</tag>
        <surname>Surname</surname>
        <forename>Forename</forename>
        <companyname>Company</companyname>
        <add1>Address 1</add1>
        <add2>Address 2</add2>
        <add3>Address 3</add3>
        <city>City</city>
        <county>County</county>
        <country>Country</country>
        <postcode>Post Code</postcode>
        <telephone>Telephone</telephone>
        <mobile>078956412025</mobile>
        <primary_billing>0</primary_billing>
        <primary_delivery>1</primary_delivery>
        <region_id>12458</region_id>
        <country_id>65</country_id>
        <created>Sep 14 2011 12:26:45:890PM</created>
    </address>
</addresses>
                            
6.3 Add New Address

Use POST /address/{customerID}/ to add new address.

                                <addresses>
    <address>
        <tag>String Max 20</tag>
        <surname>String Max 60</surname>
        <forename>String Max 60</forename>
        <companyname>String Max 50</companyname>
        <add1>String Max 80</add1>
        <add2>String Max 80</add2>
        <add3>String Max 80</add3>
        <city>String Max 50</city>
        <county>String Max 100</county>
        <country>String Max 50</country>
        <postcode>String Max 15</postcode>
        <telephone>String Max 25</telephone>
        <mobile>String Max 15</mobile>
        <primary_billing>Boolean</primary_billing>
        <primary_delivery>Boolean</primary_delivery>
        <region_id>Integer Required</region_id>
        <country_id>Integer Required</country_id>
    </address>
</addresses>
                            
6.4 Delete Address

Use DELETE /address/{customerID}/{addressID} to delete address.

7. Countries and Regions
7.1 List Countries

Use GET /countries/ to list country names and IDs.

7.2 List Regions/ States

Use GET /countries/states/{country_id} to list region names and IDs for country.

8. Image
8.1 Product Images
8.1.1 List Product Images

Use GET /image/product/ to list all product images for store.

                                <images>
    <image>
        <name>filename.jpg</name>
        <time>1320799815</time>
        <size>25922</size>
    </image>
    <image>
        <name>filename2.jpg</name>
        <time>1320542573</time>
        <size>13280</size>
    </image>
</images>
                            
8.1.2 Add Product Image

Use POST /image/product/{filename.jpg} to upload product images.

Pass the image data to the API as string. NB: jpg, jpeg, gif and png file extensions accepted.

8.1.3 Delete Product Image

Use DELETE /image/product/{filename.jpg} to delete an image.

Appendix

Resouce and URI Reference
URI Method Resource Operation
/category/?parameter={parameter} GET Category Retrieves list of category IDs. Optional parameters: visible, parentID, offset, limit
/category/{categoryID} GET Category Retrieves category details for single category
/category/ POST Category Adds details for new category
/category/{categoryID} POST Category Updates details of an existing category
/category/{categoryID} DELETE Category Deletes category
/product/?parameter={parameter} GET Product Retrieves list of product IDs. Optional parameters: category, visible, featured, offset, limit, fields
/product/{productID} GET Product Retrieves product details for single product
/product/ POST Product Adds details for new product
/product/{productID} POST Product Updates details of an existing product
/product/{productID} DELETE Product Deletes product
/brand/ GET Brand Retrieves list of brands
/brand/ POST Brand Adds brand
/brand/{brandID} DELETE Brand Deletes brand
/order/?parameter={parameter} GET Order Retrieves list of orders. Optional parameters: offset, limit, isnew, status
/order/{orderID} GET Order Retrieves  order details for single order
/order/new GET Order Bring back amount of new orders
/order/{orderID}/status POST Order Update order status ( 0 = order received payment not processed, 1 = order received and payment processed, 2 = closed, 3+ = problem )
/order/{orderID}/dispatched POST Order Mark Order as dispatched
/order/{orderID}/isnew POST Order Mark Order as viewed
/order/ POST Order Add new order
/order/{orderID}/ DELETE Order Delete order
/customer/?parameter={parameter} GET Customer List customers. Optional parameters: offset, limit, all
/customer/{customerID} GET Customer View customer details
/customer/ POST Customer Add new customer
/customer/{customerID} DELETE Customer Delete customer details
/address/{customerID} GET Address List customers
/address/{customerID}/{addressID}?parameter={parameter} GET Address View address details. Optional parameters: primary_billing, primary_address
/address/{customerID} POST Address Add new address
/address/{customerID}/{addressID} DELETE Address Delete address details
/countries/ GET Countries & Regions List countries
/countries/states/{country_id} GET Countries & Regions List states for country
/image/product/ GET Image List all product images
/image/product/{filename.jpg} POST Image Upload a product image
/image/product/{filename.jpg} DELETE Image Delete product image

Example Code

To help get you started, download a simple working example in your preferred language.

Change Log
  • 10 September 2013 - API KEY RESOURCE
    Improved: Made improvements to the API Key generator, users will need to generate a new API Key to connect to the API.

  • 19 August 2013 - Customer Resource
    Improved: Removed address details from customer resource, Address now has its own resource.

  • 19 August 2013 - Customer Resource
    Improved: Can use GET /customer/?all=1 to bring out all customers instead of customers that have an order associated with it.

  • 19 August 2013 - Order Resource
    Added: Can now POST orders

  • 19 August 2013 - Customer Resource
    Added: Can now POST customers.

  • 19 August 2013 - Customer Resource
    Added: Can now DELETE customer.

  • 19 August 2013 - Countries & Regions Resource
    Added: Added a new Countries & Regions resource.

  • 19 August 2013 - Address Resource
    Added: Added a new address resource.

  • 19 August 2013 - Order Resource
    Improved: 'discounts' have been added to the GET /order/{orderid} results

  • 19 August 2013 - Order Resource
    Improved: GET /order/ now brings out all orders regardless of payment status, prevously brought back only orders where payment was processed. Use the 'status' parameter instead.

  • 13 May 2013 - Order Resource
    Added: Included optional parameters: isnew (bool).

  • 15 Nov 2012 - Image Resource
    Added: Included new Image resource to manage product Images.

  • 07 Nov 2012 - Product Resource
    Removed: Removed GET /product/category/{categoryID}. Use /product/?cat={catID} instead.

  • 07 Nov 2012 - Product Resource
    Improved: Ability to specify fields when returning list of products. eg. GET /product/?fields=id,category,producName,productImageURL

  • 07 Nov 2012 - Product Resource
    Improved: Included Additional Categories and Extra Images for a product.

  • 25 Oct 2012 - Brand Resource
    Added: Added new Brand resource.

  • 25 Oct 2012 - Order Resource
    Added: Added new field 'postage_method' to Order resource.

  • 03 Oct 2012 - Product Resource
    Improved: Renamed field 'ClientsCode' to 'sku'.

  • 27 Sept 2012 - Product Resource
    Deprecated: GET /product/category/{categoryID} to be removed. Use /product/?cat={catID} instead.