Product

Product schema

id long? Product ID - cannot be null in PUT/PATCH methods πŸ“Ά EQUALS,ENUM πŸ”½ NONE

_categoryId long Category ID πŸ“Ά EQUALS,ENUM πŸ”½ NONE

_cloudId integer Cloud ID πŸ”½ NONE

_defaultCourseId long? Course πŸ“Ά EQUALS,ENUM

_eetSubjectId long? EET Subject ID πŸ“Ά EQUALS,ENUM πŸ”½ NONE

_supplierId long? Supplier ID πŸ“Ά EQUALS,ENUM πŸ”½ NONE

alternativeName string? Product alternative name

currency string?(3) Currency code πŸ”½ NONE

deleted boolean Product deleted - cannot be true in POST/PUT/PATCH methods πŸ“Ά EQUALS, ENUM πŸ”½ BOTH

deliveryNoteIds string? Delivery note IDs πŸ”½ NONE

description string?(1000) Product description πŸ”½ NONE

discountPercent double Discount percent πŸ”½ NONE

discountPermitted boolean Discount permitted πŸ“Ά EQUALS, ENUM

display boolean Product displayed πŸ“Ά EQUALS, ENUM πŸ”½ BOTH

ean string[]? EAN codes πŸ“Ά EQUALS, ENUM πŸ”½ BOTH (sort by the first EAN code in the list)

externalId string? External ID πŸ“Ά EQUALS,ENUM πŸ”½ NONE

features string[] Product features like spicy, vegan etc. primarily used for EOS

flags integer Product flags πŸ“Ά BITS πŸ”½ NONE

hexColor string(7) Product color πŸ”½ NONE

imageUrl string? Product image for EOS services. The value of this field can only be deleted by setting it to null. Non-null values will be ignored.

margin string?(50) Product margin as an exact value (plain number without a currency symbol) or a percentage (number followed by a '%' sign). If the percentage format is used the margin must be <= 100%. πŸ”½ NONE

marginMin double? Minimal margin πŸ”½ NONE

modifiedBy string?(32) Product modified by πŸ”½ NONE

name string(400) Product name πŸ“Ά STRINGπŸ”½ BOTH

notes string[]?(1000) Product notes πŸ”½ NONE

onSale boolean Discount offer πŸ“Ά EQUALS, ENUM

packageItem double? Item's package πŸ”½ NONE

packaging double Number of items in a package πŸ”½ NONE

packagingMeasurement double? Measurement packaging for product πŸ”½ NONE

packagingPriceWithVat double? Price of the packaging with VAT primarily used for EOS πŸ”½ NONE

plu string[]? PLU codes πŸ”½ EQUALS, ENUM πŸ”½ BOTH (sort by the first PLU code in the list)

points double Points for buying the product πŸ”½ NONE

priceWithVat double? Price with VAT πŸ“Ά EQUALS, ENUM πŸ”½ BOTH

priceWithVatB double? Alternative price with vat B

priceWithVatC double? Alternative price with vat C

priceWithVatD double? Alternative price with vat D

priceWithVatE double? Alternative price with vat E

priceWithoutVat double Price without VAT πŸ”½ BOTH

purchasePriceWithoutVat double? Purchase price without VAT πŸ”½ NONE

requiresPriceEntry boolean Product requires price entry πŸ“Ά EQUALS, ENUM

sortOrder long? Product sort order πŸ”½ NONE

stockDeduct boolean Product is deducted from Warehouse πŸ“Ά EQUALS, ENUM

stockOverdraft enum Stock overdraft allows to set whether the product can be sold even if its quantity in the stock is equal or less than 0 - or just display a warning in that case πŸ”½ NONE

subtitle string?(500) Product subtitle πŸ”½ NONE

supplierProductCode string? Supplier's product code πŸ”½ NONE

tags string[]? Tags for a product πŸ“Ά EQUALS, ENUM

unit enum Product unit πŸ“Ά EQUALS πŸ”½ NONE

unitMeasurement enum? Units for product measurement πŸ”½ NONE

vat double VAT value πŸ“Ά EQUALS πŸ”½ BOTH

versionDate timestamp? Last modification date and time πŸ“Ά EQUALS, ENUM, NUMBER πŸ”½ BOTH

Product.stockOverdraft (enum)

// representation like string
ALLOW, WARN, DISABLE

Product response

{
"_categoryId": <long>,
"_cloudId": <integer>,
"_defaultCourseId": <long>,
"_eetSubjectId": <long>,
"_supplierId": <long>,
"currency": <string>,
"deleted": <boolean>,
"deliveryNoteIds": <string>,
"description": <string>,
"discountPercent": <double>,
"discountPermitted": <boolean>,
"display": <boolean>,
"ean": <string[]>,
"externalId": <string>,
"flags": <integer>,
"hexColor": <string>,
"id": <long>,
"margin": <string>,
"marginMin": <double>,
"modifiedBy": <string>,
"name": <string>,
"notes": <string[]>,
"onSale": <boolean>,
"packageItem": <double>,
"packaging": <double>,
"packagingMeasurement": <double>,
"plu": <string>,
"points": <double>,
"priceWithVat": <double>,
"priceWithoutVat": <double>,
"purchasePriceWithoutVat": <double>,
"requiresPriceEntry": <boolean>,
"sortOrder": <long>,
"stockDeduct": <boolean>,
"stockOverdraft": <enum>,
"subtitle": <string>,
"supplierProductCode": <string>,
"tags": <string[]>,
"unit": <enum>,
"unitMeasurement": <enum>,
"vat": <double>,
"versionDate": <timestamp>
}

Product flags

Bit

Name

0

SHORTCUT

1

REQUIRES_QUANTITY_ENTRY

2

REQUIRES_PRICE_ENTRY

3

TIMEABLE

5

MANUAL_SALE_ITEM

6

TIMEABLE_LOCKED

7

JOINT_SALE_ITEM

8

FISCALIZATION_DISABLED

10

ASSEMBLED_ITEM

11

TAKE_AWAY

12

TAKE_AWAY_ITEM

13

SPECIAL

14

WITH_CUSTOMIZATIONS

15

EXEMPTED_VAT

18

UNCERTIFIED_QUANTITY(18)

get
Get products

https://api.dotykacka.cz/v2/clouds/:cloudId/products
Request
Response
Request
Path Parameters
cloudId
required
integer
​
Headers
If-None-Match
optional
string
ETag to return results only if changed.
Authorization
required
string
Bearer accessToken
Query Parameters
sort
optional
string
​
filter
optional
string
​
page
optional
integer
​
limit
optional
integer
​
include
optional
array
Include other entities [1]
Response
200: OK
​
400: Bad Request
​
404: Not Found
​

[1] The following entities can be included in the response:

  • customizations- list of customizations

  • ingredients - list of ingredients

Multiple entities can be included at the same time, f.e.: include=customizations,ingredients

Note that the client must have the proper permissions to read the included entity. The API2 will return HTTP error 403 Forbidden otherwise.

Response when other entities are included

{
// paging data
...
"data": [
{
// product fields
...
"customizations": [
{
// customization fields
},
...
],
"ingredients": [
{
// ingredient fields
},
...
]
},
...
]
}

get
Get product

https://api.dotykacka.cz/v2/clouds/:cloudId/products/:productId
Request
Response
Request
Path Parameters
cloudId
required
integer
​
productId
required
integer
​
Headers
If-None-Match
optional
string
ETag to return results only if changed.
Authorization
required
string
Bearer accessToken
Response
200: OK
​
400: Bad Request
​
404: Not Found
​

post
Create products

https://api.dotykacka.cz/v2/clouds/:cloudId/products
Request
Response
Request
Path Parameters
cloudId
required
integer
​
Headers
Authorization
required
string
Bearer accessToken
Body Parameters
required
array
Array of products. Maximum size 100.
Response
200: OK
​
400: Bad Request
​
// Body request minimmum
[
{
"_categoryId": <long>,
"_cloudId": <integer>,
"deleted": <boolean>,
"discountPercent": <double>,
"discountPermitted": <boolean>,
"display": <boolean>,
"flags": <integer>,
"hexColor": <string>,
"name": <string>,
"onSale": <boolean>,
"packaging": <double>,
"points": <double>,
"priceWithoutVat": <double>,
"requiresPriceEntry": <boolean>,
"stockDeduct": <boolean>,
"stockOverdraft": <enum>,
"unit": <enum>,
"vat": <double>,
"versionDate": <timestamp>
}
]

put
Replace or create products

https://api.dotykacka.cz/v2/clouds/:cloudId/products
Request
Response
Request
Path Parameters
cloudId
required
integer
​
Headers
If-Match
required
string
ETag to update only if not changed.
Authorization
required
string
Bearer accessToken
Body Parameters
required
array
Array of products. Maximum size 100.
Response
200: OK
​
// Body request minimmum
[
{
"_categoryId": <long>,
"_cloudId": <integer>,
"deleted": <boolean>,
"discountPercent": <double>,
"discountPermitted": <boolean>,
"display": <boolean>,
"flags": <integer>,
"hexColor": <string>,
"id": <long>,
"name": <string>,
"onSale": <boolean>,
"packaging": <double>,
"points": <double>,
"priceWithoutVat": <double>,
"requiresPriceEntry": <boolean>,
"stockDeduct": <boolean>,
"stockOverdraft": <enum>,
"unit": <enum>,
"vat": <double>,
"versionDate": <timestamp>
}
]

put
Replace or create product

https://api.dotykacka.cz/v2/clouds/:cloudId/products/:productId
Request
Response
Request
Path Parameters
cloudId
required
integer
​
productId
required
integer
​
Headers
If-Match
required
string
ETag to update only if not changed.
Authorization
required
string
Bearer accessToken
Body Parameters
required
object
Product
Response
200: OK
​
400: Bad Request
​
500: Internal Server Error
​
// Body request minimmum
{
"_categoryId": <long>,
"_cloudId": <integer>,
"deleted": <boolean>,
"discountPercent": <double>,
"discountPermitted": <boolean>,
"display": <boolean>,
"flags": <integer>,
"hexColor": <string>,
"id": <long>,
"name": <string>,
"onSale": <boolean>,
"packaging": <double>,
"points": <double>,
"priceWithoutVat": <double>,
"requiresPriceEntry": <boolean>,
"stockDeduct": <boolean>,
"stockOverdraft": <enum>,
"unit": <enum>,
"vat": <double>,
"versionDate": <timestamp>
}

patch
Partial update of Product

https://api.dotykacka.cz/v2/clouds/:cloudId/products/:productId
Request
Response
Request
Path Parameters
cloudId
required
integer
​
productId
required
integer
​
Headers
If-Match
required
string
ETag to update only if not changed.
Authorization
required
string
Bearer accessToken
Body Parameters
required
object
Part of product object
Response
200: OK
​
404: Not Found
​

delete
Delete product

https://api.dotykacka.cz/v2/clouds/:cloudId/products/:productId
Request
Response
Request
Path Parameters
cloudId
required
integer
​
productId
required
integer
​
Headers
If-Match
optional
string
ETag ignored (temporarily) when deleting an entity.
Authorization
required
string
Bearer accessToken
Body Parameters
productIsIngredient
optional
string
Strategy when product is an ingredient [1]
productHasIngredients
optional
string
Strategy when product has ingredients [1]
Response
200: OK
​
404: Not Found
​

[1] Can be one of the following: ERROR, PRESERVE, DELETE. An example BODY can look like this:

{
"productIsIngredient": "DELETE",
"productHasIngredients": "ERROR"
}

If no request BODY is sent (default) or a JSON object with the strategy ERROR is sent and the product has own ingredients or is an ingredient of another product then the API returns an error response with status 409 Conflict with a BODY like in this example:

{
"timestamp": "2021-01-20T15:54:06.319+01:00",
"status": "409",
"error": "Conflict",
"message": "The product is an ingredient",
"resolution": {
"productIsIngredient": [
"ERROR",
"PRESERVE",
"DELETE"
],
"productHasIngredients": [
"ERROR",
"PRESERVE",
"DELETE"
]
}
}

If a request with a strategy DELETE is issued and the product has own ingredients or is an ingredient of another product then the related ingredients are deleted. If a request with a strategy PRESERVE is issued then no ingredients are deleted (ingredients will be preserved).

If a request with a strategy DELETE is issued and the user does not have the permission to delete ingredients then the API returns the following error response:

{
"timestamp": "2021-01-20T15:51:13.362+01:00",
"status": "403",
"error": "Forbidden",
"message": "No permission to delete product ingredients"
}

options
Options products

https://api.dotykacka.cz/v2/clouds/:cloudId/products
Request
Response
Request
Path Parameters
cloudId
required
integer
​
Headers
Authorization
required
string
Bearer accessToken
Response
200: OK
​

options
Options product

https://api.dotykacka.cz/v2/clouds/:cloudId/products/:productId
Request
Response
Request
Path Parameters
cloudId
required
integer
​
productId
required
integer
​
Headers
Authorization
required
string
Bearer accessToken
Response
200: OK
​