Introduction
Welcome to DINKASSA.SE for Developers.
This documentation will focus on the REST API for ES Kassasystem through our cloud service, "Dinkassa.se". The Dinkassa.se REST API is used to fetch data, create orders in the cash register, update inventory items etc. The API is organized around resources using URLs and the different HTTP methods to create and modify these resources. You authenticate using your credentials and basic auth.
Contact information
api@eskassa.se. Contact us for questions related to the API and its relationship to the POS system. For general POS support please see ES Kassa support.
How does it work?
POS: ES Kassasystem
API: Dinkassa.se REST API
Cloud: Dinkassa.se Cloud
API ENDPOINT
https://www.dinkassa.se/api/
# Dinkassa.se is used for all communications to and from any ES Kassasystem setup.
See below for Authentication.
All requests must be made using HTTPS. All data read or written through the API gets staged in the ES Kassasystem servers, the data is then replicated to/from the POS machine the next time it connects to the central system for updates.
Changes made with the API will commit instantly to the cloud. When the POS starts its synchronization it will download the changes and upload its own changes to the cloud servers. There are two possible synchronization times; for dinkassa.se Pro+ synchronization takes place every two minutes or immediately following a sale for transaction and stock information. For dinkassa.se Pro, synchronization takes place every 30 minutes. The API never connects directly to the POS system and works independently even if the POS system is not running. If a POS system was off when API changes were made, the changes will be synchronized to/from the POS system as soon as it starts up again.
Cost
Integrating with the Dinkassa.se REST API for ES Kassasystem is free for integrators. Provisionally based fees may be contractually agreed upon. Customers of the POS pay an additional fee for connecting an external system to the API.
Useful external links
Command-line tool to test HTTP REST APIs. used in documentation examples.
Desktop application to test HTTP REST APIs.
Authentication
API Serialization Format
Erpato Rest API supports JSON.
API Authentication
Authentication is made using three HTTP header values (MachineId, MachineKey, IntegratorId)
Attributes
Example headers
MachineId "9DD39BBF-8E67-4C07-825A-0845F8176075"
MachineKey "743C3270E091477EAF3D79A7D107D579"
IntegratorId "1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
# Do not use these details for testing purposes. They are dummy numbers.
Header | Required | Description |
---|---|---|
MachineId | Yes | To determine which Machine the API will be reading or writing data to we use MachineId. |
MachineKey | Yes | Each cash register machine has its own unique secret key connected to each specific MachineId. |
IntegratorId | Yes | IntegratorId represents the system integrator that is connecting to the API. Each system connecting receives a unique value. The same integrator can manage multiple machines. |
Category
API ENDPOINT
https://www.dinkassa.se/api/category
"Category" is used to categorize one or several inventory items. At least one (1) category must be created before any InventoryItem can be created. Without a category, the creation of an InventoryItem will not be possible.
Category Fields
Field | Read Only | Type | Default | Description | Constraints |
---|---|---|---|---|---|
Name | No | String (max 30 chars.) | Name of the category. | ||
AccountNumber | No | String (max 4 chars.) | Account number used for accounting. | Numerical value only. | |
ParentCategoryId | No | 64-bit Integer/null | ID of the parent category (null if none). | Must be the ID of a valid category. | |
SortingWeight | Yes | 32-bit Integer | Used to sort categories in a vertical order. | Numerical value only. | |
OnlyAllowCategories | No | Boolean | False | Checkbox in POS; "Use as main category without items". Used as a "favorites" or parent category. | true/false |
DefaultVatPercentage | No | Decimal | Default VAT percentage for new inventory items in this category. | Accepts 0, 6, 12 and 25. | |
Id | Yes | 64-bit Integer/null | Identification number. Unique per category. |
Search Category
REQUEST
curl -X GET "https://www.dinkassa.se/api/category"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
{
"Items" :
[
{
"CreatedDateTime": "2019-05-15T21:14:32",
"LastModifiedDateTime": "2019-05-15T21:14:32",
"Name": "Cider",
"AccountNumber": null,
"ParentCategoryId": "636863777946781196",
"SortingWeight": 0,
"OnlyAllowCategories": false,
"DefaultVatPercentage": 25.0000000000,
"Id": "636935444266525649"
},
]
}
Name | Description | Parmeter Type | Data Type | Required | Default | Constraints |
---|---|---|---|---|---|---|
offset | Specifies the number of items that will be skipped before starting to return. | Query-string | 32-bit Integer/null | No | 0 | Must be >= 0 |
fetch | Specified the number of items to fetch after the offset has been skipped. | Query-string | 32-bit Integer/null | No | 100 | Must be between 1 and 100 |
Fetch by Category ID
REQUEST
curl -X GET "https://www.dinkassa.se/api/category/636935444266525649"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
{
"Item": {
"CreatedDateTime": "2019-05-15T21:14:32",
"LastModifiedDateTime": "2019-05-15T21:14:32",
"Name": "Cider",
"AccountNumber": null,
"ParentCategoryId": "636863777946781196",
"SortingWeight": 0,
"OnlyAllowCategories": false,
"DefaultVatPercentage": 25.0000000000,
"Id": "636935444266525649"
}
}
If needed, a Category can be fetched via the ID-number. The ID-number is unique per category.
Create New Category
REQUEST
curl -X POST "https://www.dinkassa.se/api/category"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
-H "Content-Type: application/json"
-d '
{
"Item": {
"Name": "Accessories",
"AccountNumber": "3031",
"ParentCategoryId": "636863777946781196",
"OnlyAllowCategories": true,
"DefaultVatPercentage": 12
}
}
RESPONSE
{
"Item": {
"CreatedDateTime": "2019-12-19T23:52:22.8413105",
"LastModifiedDateTime": "2019-12-19T23:52:22.8413105",
"Name": "Accessories",
"AccountNumber": "3031",
"ParentCategoryId": "636863777946781196",
"SortingWeight": 0,
"OnlyAllowCategories": true,
"DefaultVatPercentage": 12.0,
"Id": "637123702696607434"
}
}
Creating a new category is rarely needed via the API, as this is mostly handled by the on-site staff through the physical cash register. But if need be, a Category (item group) can be created through the API.
Update Existing Category
REQUEST
curl -X PUT "https://www.dinkassa.se/api/category"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
-H "Content-Type: application/json"
-d '
{
"Item" : {
"Id": "637123702696607434",
"Name": "Extras",
"AccountNumber": "3032",
"DefaultVatPercentage": 25
}
}
RESPONSE
{
"Item" : {
"Id": "637123702696607434",
"Name": "Extras",
"AccountNumber": "3032",
"DefaultVatPercentage": 25.0
}
}
If any changes are needed for an already existing category, then a PUT request may be used to update for example the name of the category or perhaps the account number for the bookeeping.
Delete Category
REQUEST
curl -X DELETE "https://www.dinkassa.se/api/category/637123702696607434"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
# The response will be HTTP status code 200 if the delete was successful.
A Category can be deleted through the API, but make sure to check that there are no InventoryItems connected to the about-to-be-deleted Category before deleting. If a Category is deleted with InventoryItems present then the InventoryItems will have no connected parent Category and will therefor be invisible in the physical register, until a parent Category is reconnected either through the API for each InventoryItem, or through the physical register.
InventoryItem
API ENDPOINT
https://www.dinkassa.se/api/inventoryitem
Represents an item that can be sold.
InventoryItem Fields
Field | Read Only | Type | Default | Description | Constraints |
---|---|---|---|---|---|
ButtonColorHex | Yes | String | The selected color of the button, in hex format. | ||
VisibleOnSalesMenu | No | Boolean | true | true/false value if InventoryItem should be visible on the physical sales menu or not. | true/false |
ExtraCategoryIds | Yes | 64-bit Integer/null | Id-number of extra categories for which the InventoryItem is connected to. This is not the main category. | ||
SortingWeight | Yes | 32-bit Integer | Used to sort InventoryItems in an external system in a vertical order. | ||
DictionaryTable | Yes | Decimal | 1 | Words used within the register (Bong info) to present extra text on the kitchen ticket for each InventoryItem ordered. Not visible on customer receipt. | |
SpecialFunctionTypeId | Yes | 64-bit Integer/null | 1 | Number corresponds to a specific "Special Function" within the register. Only required if requested by API Support. | |
CreatedDateTime | Yes | DateTime | Datetime-stamp when the InventoryItem was first created, either via API or through the POS. | ||
LastModifiedDateTime | Yes | DateTime | Datetime-stamp when the InventoryItem was last modified. Any modification to the InventoryItem results in a DateTime update of LastModifiedDateTime. | ||
Description | No | String (max 30 chars.) | Name of the InventoryItem (I.e. Pizza Vesuvio) | ||
SupplierName | No | String (max 30 chars.) | The name of the supplier. | ||
QuantityInStockCurrent | No | Decimal | 0 | The number of InventoryItems currently in stock. Can be specified when creating the item. | Numerical value. |
BarCode | No | String (max 30 chars.) | Barcode used by the InventoryItem. If the item doesn't have a bar code; provide another unique value. BarCode 2-5 represents extra barcodes connected to the same InventoryItem. | Must be unique. | |
Barcode2-5 | No | String (max 30 chars.) | Null | Extra barcodes used by the InventoryItem. Usually used if an item has more than 1 barcode from different suppliers. | |
ProductCode | No | String (max 30 chars.) | Product code used by the item. If the item doesn't have a product code; provide another unique value. | Must be unique. | |
ExternalProductCode | No | String (max 30 chars.) | Same as ProductCode | Product code used by the item. If the item doesn't have a product code; provide another unique value. | Must be unique. |
PriceIncludingVat | No | Decimal | Price for the InventoryItem including VAT. | Numerical value | |
PickupPriceIncludingVat | No | Decimal | 0 | Pickup price (TakeAway) for the item including VAT. | 0 (no pickup price used) |
VatPercentage | No | Decimal/null | From Category | VAT percentage for the InventoryItem. | Accepts 0, 6, 12 and 25 |
BongCategoryId | Yes | 64-bit Integer/null | 0 | Unique Id-number of the BongCategory for which the item is connected to. For example "Starters". Names & Id's fetched through API/BongCategory. | |
MultiPriceListId | Yes | 64-bit Integer/null | null | Only used if an InventoryItem is connected to a MultiPriceList. See section "MultiPriceList". | Numerical value |
CategoryName | Yes | String (max 30 chars.) | The name of the category that the item belongs to. | ||
BongCategoryName | Yes | String (max 30 chars.) | The name of the BongCategory for which the InventoryItem is connected to. Used in conjunction with BongCategoryId if necessary. Names & Id's fetched through API/BongCategory. | ||
CategoryId | No | 64-bit Integer | The ID of the category that the item belongs to. | Must refer to an existing category. | |
Id | Yes | 64-bit Integer/null | Unique identification number of each InventoryItem. |
Search InventoryItem
REQUEST
curl -X GET "https://www.dinkassa.se/api/inventoryitem/?descriptionContains=Bacon&barcodeContains=12"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
"Items": [
{
"ButtonColorHex": "#FFFF00",
"VisibleOnSalesMenu": true,
"ExtraCategoryIds": [],
"SortingWeight": 10,
"DictionaryTable": 3,
"SpecialFunctionTypeId": 7,
"CreatedDateTime": "2019-06-05T13:25:20",
"LastModifiedDateTime": "2019-12-02T16:26:36",
"Description": "Baconburgare",
"SupplierName": "",
"QuantityInStockCurrent": 10.0000000000,
"BarCode": "33791238",
"BarCode2": null,
"BarCode3": null,
"BarCode4": null,
"BarCode5": null,
"_Attributes": [],
"ProductCode": "33791238",
"ExternalProductCode": "33791238",
"PriceIncludingVat": 125.0000000000,
"PickupPriceIncludingVat": 115.0000000000,
"VatPercentage": 12.0000000000,
"BongCategoryId": "636953306917068492",
"CategoryName": "Lunch",
"BongCategoryName": "LUNCH",
"CategoryId": "636903420394237638",
"Id": "636953307123851527"
}
]
}
Name | Description | Parmeter Type | Data Type | Required | Default | Constraints |
---|---|---|---|---|---|---|
offset | Specifies the number of items that will be skipped before starting to return. | Query-string | 32-bit Integer/null | No | 0 | Must be >= 0 |
fetch | Specified the number of items to fetch after the offset has been skipped. | Query-string | 32-bit Integer/null | No | 10 | Must be between 1 and 200 |
categoryId | Specifies the category to search for items in. | Query-string | 32-bit Integer/null | No | Null | The category must exist. |
descriptionContains | Characters that the description must contain, % can be used as a wildcard. | Query-string | String | No | Null | |
barCodeContains | Characters that the bar code must contain, % can be used as a wildcard. | Query-string | String | No | Null | |
productCodeContains | Characters that the product code must contain, % can be used as a wildcard. | Query-string | String | No | Null | |
VisibleOnSalesMenu | Specifices wether or not the InventoryItem is visible in the POS sales menu. | Query-string | Boolean | No | true | true/false |
OrderBy | Specifices which order the InventoryItems are visible. Only used with SortingWeight. | Query-string | String | No | Null | SortingWeight |
Fetch by InventoryItem ID
REQUEST
curl -X GET "https://www.dinkassa.se/api/inventoryitem/636874601642150005"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
{
"Item": {
"ButtonColorHex": "#32CD32",
"VisibleOnSalesMenu": true,
"ExtraCategoryIds": [],
"SortingWeight": 60,
"DictionaryTable": 1,
"SpecialFunctionTypeId": 1,
"CreatedDateTime": "2019-04-04T22:36:20",
"LastModifiedDateTime": "2019-07-02T09:44:06",
"Description": "Kyckling och Ostquesadilla",
"SupplierName": "",
"QuantityInStockCurrent": -23.0000000000,
"BarCode": "46376424",
"BarCode2": null,
"BarCode3": null,
"BarCode4": null,
"BarCode5": null,
"_Attributes": [],
"ProductCode": "46376424",
"ExternalProductCode": "46376424",
"PriceIncludingVat": 175.0000000000,
"PickupPriceIncludingVat": 0.0000000000,
"VatPercentage": 12.0000000000,
"BongCategoryId": "636874594496479772",
"CategoryName": "Huvudrätt",
"BongCategoryName": "MAIN COURSE",
"CategoryId": "636874594568996870",
"Id": "636874601642150005"
}
}
If needed, you may fetch any InventoryItem by ID. Include the ID in the request and the API will present the details for you.
Create New InventoryItem
REQUEST
curl -X POST "https://www.dinkassa.se/api/inventoryitem"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
-H "Content-Type: application/json"
-d '
{
"Item" : {
"Description" : "COLA",
"BarCode" : "21982982",
"ProductCode" : "43984911",
"PriceIncludingVat" : 9.00,
"PickupPriceIncludingVat" : 0.00,
"QuantityInStockCurrent" : 10,
"VatPercentage" : 12.00,
"CategoryId" : "98765432101"
}
}'
RESPONSE
{
"Item" : {
"Id" : "392893829382",
"Description" : "COLA",
"BarCode" : "21982982",
"ProductCode" : "43984911",
"QuantityInStockCurrent" : 10,
"PriceIncludingVat" : 9.00,
"PickupPriceIncludingVat" : 0.00,
"VatPercentage" : 12.00,
"CategoryId" : "98765432101",
"CategoryName" : "DRICKA",
"ButtonColorHex" : "#F0E68C"
}
}
Create new InventoryItem.
Update Existing InventoryItem
REQUEST
curl -X PUT "https://www.dinkassa.se/api/inventoryitem"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
-H "Content-Type: application/json"
-d '
{
"Item" : {
"Id" : "392893829382",
"Description" : "COCA COLA",
"BarCode" : "21982982",
"ProductCode" : "43984911",
"PriceIncludingVat" : 10.00,
"PickupPriceIncludingVat" : 0.00,
"VatPercentage" : 12.00,
"CategoryId" : "98765432101",
"QuantityInStockCurrent" : 10,
"QuantityInStockPrevious" : 5
}
}'
RESPONSE
{
"Item" : {
"Id" : "392893829382",
"Description" : "COCA COLA",
"BarCode" : "21982982",
"ProductCode" : "43984911",
"PriceIncludingVat" : 10.00,
"PickupPriceIncludingVat" : 0.00,
"QuantityInStockCurrent" : 10,
"VatPercentage" : 12.00,
"CategoryId" : "98765432101",
"CategoryName" : "DRICKA",
"ButtonColorHex" : "#F0E68C"
}
}
If any changes are needed for an already existing InventoryItem, then a PUT request may be used to update for example the name of the InventoryItem or perhaps PriceIncludingVat.
Change quantity in stock
REQUEST
curl -X POST "https://www.dinkassa.se/api/inventoryitem/392893829382"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
-H "Content-Type: application/x-www-form-urlencoded"
-d 'currentQuantity=10
newQuantity=7'
RESPONSE
{
"Item" : {
"Id" : "392893829382",
"Description" : "COCA COLA",
"BarCode" : "21982982",
"ProductCode" : "43984911",
"PriceIncludingVat" : 10.00,
"PickupPriceIncludingVat" : 0.00,
"QuantityInStockCurrent" : 5,
"VatPercentage" : 12.00,
"CategoryId" : "98765432101",
"CategoryName" : "DRICKA",
"ButtonColorHex" : "#F0E68C"
}
}
Name | Description | Parmeter Type | Data Type | Required | Default | Constraints |
---|---|---|---|---|---|---|
currentQuantity | The current quantity in stock for the item, used to verify no other changes were made and to make the call idempotent. | x-www-form-urlencoded | Decimal | Yes | ||
newQuantity | The new quantity in stock of the item. | x-www-form-urlencoded | Decimal | Yes |
Delete InventoryItem
REQUEST
curl -X DELETE "https://www.dinkassa.se/api/inventoryitem/392893829382"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
# The response will be HTTP status code 200 if the delete was successful.
Delete existing inventoryitem
Employee
API ENDPOINT
https://www.dinkassa.se/api/employee
Represents entities that interact with the POS system.
Employee Fields
Field | Read Only | Type | Default | Description | Constraints |
---|---|---|---|---|---|
EmployeeCode | No | String (max 30 chars.) | Code used to represent the employee, such as personnel number. | ||
Name | No | String (max 30 chars.) | Name of the employee | ||
Permissions | Yes | 32-bit Integer | Employee permission type | 0 = Standard 1 = Denied 2 = Admin 3 = N/A 4 = Moderator |
|
Id | Yes | 64-bit Integer | Identification number (not the same as EmployeeCode) | ||
EmployeePassword | No | String (max 4 chars.) | Employee password, used when logging in to POS. |
Search Employee
REQUEST
curl -X GET "https://www.dinkassa.se/api/employee"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
{
"Items": [
{
"CreatedDateTime": "2019-12-04T22:37:25",
"LastModifiedDateTime": "2019-12-18T16:48:03",
"EmployeeCode": "5",
"Name": "Petra Fredriksson",
"Permissions": 0,
"Id": "636874676151895901"
}
]
}
Name | Description | Parmeter Type | Data Type | Required | Default | Constraints |
---|---|---|---|---|---|---|
offset | Specifies the number of items that will be skipped before starting to return. | Query-string | 32-bit Integer/null | No | 0 | Must be >= 0 |
fetch | Specified the number of items to fetch after the offset has been skipped. | Query-string | 32-bit Integer/null | No | 100 | Must be between 1 and 100 |
Fetch by Employee ID
REQUEST
curl -X GET "https://www.dinkassa.se/api/employee/636874676151895901"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
{
"Item": {
"CreatedDateTime": "2019-04-04T22:37:25",
"LastModifiedDateTime": "2019-10-18T16:48:03",
"EmployeeCode": "5",
"Name": "Petra Fredriksson",
"Permissions": 0,
"Id": "636874676151895901"
}
}
Fetch the employees by Id. Every Id-number is unique for each employee. An Id-number is created automatically through the physical register (or the API) and cannot be set manually. Id is used to distinguish each employee in the database.
Create New Employee
REQUEST
curl -X POST "https://www.dinkassa.se/api/employee"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
-H "Content-Type: application/json"
-d '
{
"Item" : {
"EmployeeCode" : "3",
"Name" : "Niclas Persson",
"EmployeePassword" : "1234",
}
}'
RESPONSE
{
"Item" : {
"Id" : "348230984320984",
"EmployeeCode" : "3",
"Name" : "Niclas Persson",
}
}
If a Permissions-parameter is not set, it will be set to default 0 (Standard). All other fields are mandatory.
Update Existing Employee
REQUEST
curl -X PUT "https://www.dinkassa.se/api/employee"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
-H "Content-Type: application/json"
-d '
{
"Item" : {
"Id" : "636863776731055417",
"EmployeeCode" : "35",
"EmployeePassword" : "1235",
"Name" : "Niclas Persson",
}
}
RESPONSE
{
"Item": {
"CreatedDateTime": "2019-02-21T21:28:15",
"LastModifiedDateTime": "2019-12-19T12:34:00.3103758",
"EmployeeCode": "35",
"Name": "Niclas Persson",
"Permissions": 2,
"Id": "636863776731055417"
}
}
Updating an existing employee should be used with caution, especially in cases where the staff are using the built-in personal ledger within ES Kassasystem. Id-number is mandatory to be used in the Request as it is used to identify the employee. All other fields can be edited.
If a Permissions-parameter is not set, it will not be affected.
BongCategory
API ENDPOINT
https://www.dinkassa.se/api/bongcategory
A "bong" is a kitchen ticket. The "bong" tells the kitchen what food to make. Each InventoryItem is always connected to a BongCategory. The default BongCategory is always "STANDARD".
The BongCategory can, only per InventoryItem, be manually set to for example "STARTER", "MAIN COURSE", "DESSERT" etc. It's used to separate all the InventoryItems on the pysically printed (alternatively shown on a TV-screen) ticket. All InventoryItems selected as BongCategory=STARTER will then be shown under the heading "STARTER" on the kitchen ticket, all main courses will be shown under the heading "MAIN COURSE" etc. It makes it easier for the kitchen to read the ticket instead of all InventoryItems ending up helter-skelter.
BongCategory Fields
Field | Read Only | Type | Default | Description | Constraints |
---|---|---|---|---|---|
Name | No | String (max 30 chars.) | STANDARD | Name of the BongCategory, i.e. "STARTER", "MAIN COURSE" etc. | |
SortingWeight | No | 32-bit Integer | Represents where on the kitchen ticket the BongCategory-header is shown. Lower number = higher up on the ticket | Numerical value | |
Id | Yes | 64-bit Integer | Identification number of the BongCategory |
Search BongCategory
REQUEST
curl -X GET "https://www.dinkassa.se/api/bongcategory"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
"Items": [
{
"Name": "STANDARD",
"SortingWeight": 1,
"Id": "636874594495168052"
},
{
"Name": "STARTER",
"SortingWeight": 10,
"Id": "636874594495921313"
},
{
"Name": "MAIN COURSE",
"SortingWeight": 20,
"Id": "636874594496479772"
},
{
"Name": "DESSERT",
"SortingWeight": 30,
"Id": "636874594497038873"
}
]
}
Name | Description | Parmeter Type | Data Type | Required | Default | Constraints |
---|---|---|---|---|---|---|
offset | Specifies the number of items that will be skipped before starting to return. | Query-string | 32-bit Integer/null | No | 0 | Must be >= 0 |
fetch | Specified the number of items to fetch after the offset has been skipped. | Query-string | 32-bit Integer/null | No | 100 | Must be between 1 and 100 |
Fetch by BongCategory ID
REQUEST
curl -X GET "https://www.dinkassa.se/api/bongcategory/636874594496479772"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
{
"Item": {
"Name": "MAIN COURSE",
"SortingWeight": 20,
"Id": "636874594496479772"
}
}
Fetch a BongCategory by Id. Every Id-number is unique for each BongCategory. An Id-number is created automatically through the physical register (or when the BongCategory is created through the API) and cannot be set manually. Id is used to distinguish each BongCategory in the database.
Create New BongCategory
REQUEST
curl -X POST "https://www.dinkassa.se/api/bongcategory"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
-H "Content-Type: application/json"
-d '
{
"Item" : {
"Name" : "BREAD",
"SortingWeight" : "10",
}
}
RESPONSE
{
"Item": {
"Name": "LUNCH",
"SortingWeight": 10,
"Id": "637209860377028991"
}
}
Creating a new BongCategory will only create the actual BongCategory. If needed, InventoryItems can be updated with a PUT request to assign a new BongCategory. The new BongCategory will also be visible in the physical POS, so it can be changed manually by the onsite staff as well.
Each BongCategory has to have it's own unique SortingWeight. If a SortingWeight that already exists (for example "10") is entered when creating a new BongCategory, the API will respond with which BongCategory already exist with the SortingWeight you are requesting.
Update Existing BongCategory
REQUEST
curl -X PUT "https://www.dinkassa.se/api/BongCategory"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
-H "Content-Type: application/json"
-d '
{
"Item" : {
"Id" : "637209860377028991",
"Name" : "PIZZA",
"SortingWeight" : "20",
}
}
RESPONSE
{
"Item": {
"Name": "PIZZA",
"SortingWeight": 20,
"Id": "637209860377028991"
}
}
Id-number is mandatory to be used in the Request as it is used to identify the BongCategory. All other fields can be edited.
Delete BongCategory
REQUEST
curl -X DELETE "https://www.dinkassa.se/api/bongcategory/637209860377028991"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
# The response will be HTTP status code 200 if the delete was successful.
Delete an existing BongCategory. Please be cautious when deleting a BongCategory. Make sure no InventoryItems are connected to the affected BongCategoryId before deleting the BongCategory. If a BongCategory is deleted and InventoryItems are connected to it, they will completely lose the BongCategory and will no longer show up on the kitchen ticket before they are manually changed to fetch a new BongCategoryId, either via the POS system or via the API.
TableMap
API ENDPOINT
https://www.dinkassa.se/api/tablemap
Represents a table map where within PreSaleTransactionParkings can be created. PreSaleTransactionParking co-exists with api/TableMap. For a PreSaleTransactionParking to exist, a tablemap within api/TableMap must exist and be activated. A TableMap are by default named 1, 2, 3 etc. in the physical register.
A TableMap can for example be called "INSIDE", "OUTSIDE," VIP SECTION" etc. to more easily distinguish each one.
TableMap Fields
Field | Read Only | Type | Default | Description | Constraints |
---|---|---|---|---|---|
Id | Yes | Decimal | Identification number of each TableMap. From 0-9 or 0-4 depending on cash register version. | ||
Name | Yes | String | 1 to 5 | The name of the table map | |
Active | Yes | Boolean | false | Defines wether or not the table map is activated. | true/false |
Search TableMap
REQUEST
curl -X GET "https://www.dinkassa.se/api/tablemap"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
"Items": [
{
"Id": 0,
"Name": "INSIDE",
"Active": true
},
{
"Id": 1,
"Name": "OUTSIDE",
"Active": true
},
{
"Id": 2,
"Name": "VIP SECTION",
"Active": true
},
{
"Id": 3,
"Name": "3",
"Active": false
},
{
"Id": 4,
"Name": "4",
"Active": false
}
]
}
Name | Description | Parmeter Type | Data Type | Required | Default | Constraints |
---|---|---|---|---|---|---|
offset | Specifies the number of items that will be skipped before starting to return. | Query-string | 32-bit Integer/null | No | 0 | Must be >= 0 |
fetch | Specified the number of items to fetch after the offset has been skipped. | Query-string | 32-bit Integer/null | No | 10 | Must be between 1 and 200 |
Fetch by TableMap ID
REQUEST
curl -X GET "https://www.dinkassa.se/api/tablemap/1"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
{
"Id": 1,
"Name": "INSIDE",
"Active": true
}
Fetch the TableMap by Id. Every Id-number is unique for each TableMap. The Id-numbers are created automatically through the physical register and cannot be set manually. Id is used to distinguish each TableMap in the database.
DictionaryWord
API ENDPOINT
https://www.dinkassa.se/api/dictionaryword
Each DictionaryWord represents an item which is normally sent as "ExtraInformation" for a PreSaleTransaction. Each DictionaryWord has been manually entered through the POS system through a functionality called "Bong info". DictionaryWords are used to inform the kitchen of extra information pertaining to the order. For example "no cheese", "extra onion", "no ketchup" etc.
DictionaryWord Fields
Field | Read Only | Type | Default | Description | Constraints |
---|---|---|---|---|---|
NewLine | Yes | Boolean | false | Defines if a carriage return shall be performed after the Word-row | true/false |
Word | Yes | String | The name of the actual DictionaryWord | ||
SortingWeight | Yes | 32-bit Integer | The order of which the DictionaryWord is visually presented in the POS. Lower number = higher vertically | Numerical value | |
DictionaryTable | Yes | Decimal | 1 | Defines the ID-number of the DictionaryTable. (typically 0-4) | Numerical value |
InventoryItemId | Yes | String/null | null | Available if a DictionaryWord is connected to an InventoryItem, i.e. “EXTRA CHEESE” for 10 SEK. | Numerical value |
Id | Yes | 64-bit Integer | Unique identification number of each DictionaryWord, independent of InventoryItemId | Numerical value |
Search DictionaryWord
REQUEST
curl -X GET "https://www.dinkassa.se/api/dictionaryword"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
"Items": [
{
"NewLine": false,
"Word": "AVOCADO",
"SortingWeight": 1,
"DictionaryTable": 1,
"InventoryItemId": "",
"Id": "636874593132327134"
},
{
"NewLine": true,
"Word": "EXTRA SALAMI",
"SortingWeight": 2,
"DictionaryTable": 2,
"InventoryItemId": "636940712352421109",
"Id": "636940710777581272"
},
{
"NewLine": true,
"Word": "EXTRA CHEESE",
"SortingWeight": 3,
"DictionaryTable": 2,
"InventoryItemId": "",
"Id": "637114808697888691"
}
]
}
The DictionaryWord-table can only be searched as a whole. Fetch, Offset, and By Id are not avaiable for DictionaryWord.
PreSaleTransaction
API ENDPOINT
https://www.dinkassa.se/api/presaletransaction
Represents an order/shopping cart before the sale is finalized. When a sale is finalized the PreSaleTransaction is deleted and a Transaction is created.
PreSaleTransaction Fields
Field | Read Only | Type | Default | Description | Constraints |
---|---|---|---|---|---|
ExternalReference1 | No | String (max 30 chars.) | A text string that can be used to refer to this object from another system. | ||
TransactionName | No | String (max 50 chars.) | A text string that will be printed on the receipt, often used to indicate customer. | ||
ExternalOrderContactInfo | No | String (max 250 chars.) | A text string that will be printed on the kitchen order ticket, used for contact information to the customer. For example the customers phone number. | ||
State | Yes | 32-bit Integer | State of the item. Items of state 0 (None) cannot be managed through the API as they originate from the POS system. | Can only be changed through a separate API call (submit). 0 = None, 1 = Not submitted, 2 = Submitted. | |
Items | Yes | PreSaleTransactionItem | The items to be sold in the PreSaleTransaction. | ||
Payments | Yes | PreSaleTransactionPayment | Any payments made for the PreSaleTransaction. Note that payments can be added later on the POS system. For a customer that pre-orders online and pays in the store payments would remain empty. | PreSaleTransactionPayments of type WebShop can not be combined with a different Type. The total amount paid must also match the total cost of InventoryItems. | |
EmployeeId | No | 64-bit Integer | The employee posting this PreSaleTransaction. | Must match a existing Employee. | |
IsReadyForPickup | No | Boolean | false | Not used as of yet. Prepared for marking an order as "Ready for pickup" | true/false |
IsTakeAway | No | Boolean | false | Mark order as "Take Away". Notes present on kitchen ticket as well as in the POS visible to the cashier. | true/false |
IsDelivery | No | Boolean | false | Mark order as "Delivery". Notes present on kitchen ticket as well as in the POS visible to the cashier. | true/false |
IsCurbside | No | Boolean | false | "Mark order as "Curbside". Notes present on kitchen ticket as well as in the POS visible to the cashier. | true/false |
CreatedDateTime | Yes | DateTime | Datetime-stamp when the PreSaleTransaction was first created, either via API or through the POS. | ||
LastModifiedDateTime | Yes | DateTime | Datetime-stamp when the PreSaleTransaction was last modified. Any modification to the PreSaleTransaction results in a DateTime update of LastModifiedDateTime. | ||
ParkingId | No | Decimal | null | Used in the header of the POST to park the InventoryItems on a table. Refer to PreSaleTransactionParking and TableMap within this documentation. | |
Id | Yes | 64-bit Integer/null | Identification number of the PreSaleTransaction. Can be used to refer to a PreSaleTransaction within a finalized Transaction. |
Search PreSaleTransaction
REQUEST
curl -X GET "https://www.dinkassa.se/api/presaletransaction"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
{
"Items": [
{
"ExternalReference1": "2694",
"TransactionName": "Order 2694",
"ExternalOrderContactInfo": "Take Away\Pickup 11:00\nTel: 0841050990",
"State": 1,
"Items": [
{
"ExternalReference1": null,
"IsTakeAway": true,
"ExtraInformation": "No cheese",
"PricePerItemIncludingVat": 89.0,
"DiscountAllowed": true,
"CreatedDateTime": "2020-03-24T01:42:17.227",
"LastModifiedDateTime": "2020-03-28T17:13:53",
"VatPercentage": 12.0000000000,
"TotalDiscount": 0.0,
"Quantity": 1.0000000000,
"QuantityPerPackage": 1.0000000000,
"ParentItemId": null,
"BongCategoryId": "636863777915994469",
"InventoryItemDescription": "Capricciosa",
"InventoryItemId": "637205118056046636",
"Id": "637206109372415147"
}
],
"Payments": [
{
"Type": 18,
"TotalAmount": 89.0000000000,
"ExternalReference1": "e45ts-4strg3-11vz3",
"Id": "637206109372503148"
}
],
"EmployeeId": "636863776731055417",
"CreatedDateTime": "2020-03-24T01:42:17.21",
"LastModifiedDateTime": "2020-03-24T01:42:17.24",
"ParkingId": "",
"Id": "637206109372271466"
}
]
}
Name | Description | Parmeter Type | Data Type | Required | Default | Constraints |
---|---|---|---|---|---|---|
offset | Specifies the number of items that will be skipped before starting to return. | Query-string | 32-bit Integer/null | No | 0 | Must be >= 0 |
fetch | Specified the number of items to fetch after the offset has been skipped. | Query-string | 32-bit Integer/null | No | 100 | Must be between 1 and 100 |
onlyParked | Include only parked items (used mostly for parking on tables in TableMap) | Query-string | Boolean/null | No | false | |
state | Include items of a certain state. | Query-string | 32-bit Integer/null | No | Null | 0 = Created in POS 1 = Not submitted (editable) 2 = Submitted for webshop (not editable) 3+ = For internal use |
Fetch by PreSaleTransaction ID
REQUEST
curl -X GET "https://www.dinkassa.se/api/presaletransaction/637205513331907038"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
{
"Item": {
"ExternalReference1": "2645",
"TransactionName": "Order 2645",
"ExternalOrderContactInfo": "Take Away\Pickup 15:00\nTel: 0841050990",
"State": 1,
"Items": [
{
"ExternalReference1": null,
"IsTakeAway": true,
"ExtraInformation": "",
"PricePerItemIncludingVat": 89.0,
"DiscountAllowed": true,
"CreatedDateTime": "2020-03-23T09:08:53.307",
"LastModifiedDateTime": "2020-03-28T17:13:53",
"VatPercentage": 12.0000000000,
"TotalDiscount": 0.0,
"Quantity": 1.0000000000,
"QuantityPerPackage": 1.0000000000,
"ParentItemId": null,
"BongCategoryId": "636863777915994469",
"InventoryItemDescription": "VESUVIO",
"InventoryItemId": "637205117815623729",
"Id": "637205513332077394"
},
{
"ExternalReference1": null,
"IsTakeAway": true,
"ExtraInformation": "",
"PricePerItemIncludingVat": 79.0,
"DiscountAllowed": true,
"CreatedDateTime": "2020-03-23T09:08:53.307",
"LastModifiedDateTime": "2020-03-28T17:13:53",
"VatPercentage": 12.0000000000,
"TotalDiscount": 0.0,
"Quantity": 1.0000000000,
"QuantityPerPackage": 1.0000000000,
"ParentItemId": null,
"BongCategoryId": "636863777915994469",
"InventoryItemDescription": "HAWAII",
"InventoryItemId": "637205117980104695",
"Id": "637205513332119968"
}
],
"Payments": [
{
"Type": 18,
"TotalAmount": 168.0000000000,
"ExternalReference1": "sdf3as-452sa-4564a",
"Id": "637205513332153358"
}
],
"EmployeeId": "636863776731055417",
"CreatedDateTime": "2020-03-23T09:08:53.293",
"LastModifiedDateTime": "2020-03-23T09:08:53.323",
"ParkingId": "",
"Id": "637205513331907038"
}
}
If needed, you may fetch any PreSaleTransaction by ID. Include the ID in the request and the API will present the details for you.
Create New PreSaleTransaction
REQUEST
curl -X POST "https://www.dinkassa.se/api/presaletransaction?requestKey=AFDA6368-6C91-45E6-A309-4900986A5212"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
-H "Content-Type: application/json"
-d '
{
"Item": {
"EmployeeId": "636874675803407543",
"State": 1,
"ExternalReference1": "2384",
"ExternalOrderContactInfo": "08-41050990",
"TransactionName": "Order 2384",
"Items": [
{
"ExtraInformation": "No Cheese",
"PricePerItemIncludingVat": 95,
"Quantity": 1,
"InventoryItemId": "636874600387269846"
},
{
"PricePerItemIncludingVat": 15,
"Quantity": 1,
"InventoryItemId": "636874601642150005"
}
],
"Payments": [
{
"Type": 18,
"Amount": 110
}
]
}
}
RESPONSE
{
"Item": {
"ExternalReference1": "2384",
"TransactionName": "Order 2384",
"ExternalOrderContactInfo": "08-41050990",
"State": 1,
"Items": [
{
"ExternalReference1": null,
"IsTakeAway": false,
"ExtraInformation": "No Cheese",
"PricePerItemIncludingVat": 95.00,
"DiscountAllowed": true,
"CreatedDateTime": "2020-03-28T20:24:07.6333475",
"LastModifiedDateTime": "2020-03-28T20:24:07.6333475",
"VatPercentage": 12.0000000000,
"TotalDiscount": 0.0,
"Quantity": 1.0,
"QuantityPerPackage": 1.0,
"ParentItemId": null,
"BongCategoryId": "636874594495921313",
"InventoryItemDescription": "Pizza Capricciosa",
"InventoryItemId": "636874600387269846",
"Id": "637210238475945120"
},
{
"ExternalReference1": null,
"IsTakeAway": false,
"ExtraInformation": "",
"PricePerItemIncludingVat": 15.00,
"DiscountAllowed": true,
"CreatedDateTime": "2020-03-28T20:24:07.6333475",
"LastModifiedDateTime": "2020-03-28T20:24:07.6333475",
"VatPercentage": 12.0000000000,
"TotalDiscount": 0.0,
"Quantity": 1.0,
"QuantityPerPackage": 1.0,
"ParentItemId": null,
"BongCategoryId": "636874594496479772",
"InventoryItemDescription": "Fanta",
"InventoryItemId": "636874601642150005",
"Id": "637210238475969235"
}
],
"Payments": [
{
"Type": 18,
"TotalAmount": 110.0,
"ExternalReference1": null,
"Id": "637210238475989954"
}
],
"EmployeeId": "636874675803407543",
"CreatedDateTime": "2020-03-28T20:24:07.6333475",
"LastModifiedDateTime": "2020-03-28T20:24:07.6489831",
"ParkingId": "",
"Id": "637210238475909876"
}
}
Use the provided example of how to create a new PreSaleTransaction. A creating of a PreSaleTransaction towards the API is directly connected to the WEBORDER-system within ES Kassasystem.
Update Existing PreSaleTransaction
REQUEST
curl -X PUT "https://www.dinkassa.se/api/presaletransaction"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
-H "Content-Type: application/json"
-d '
{
"Item": {
"Id": "637210242100904840",
"EmployeeId": "636874675803407543",
"State": 1,
"Items": [
{
"PricePerItemIncludingVat": 95,
"Quantity": 1,
"InventoryItemId": "636874600387269846"
}
],
"Payments": [
{
"Type": 18,
"Amount": 95
}
]
}
}
RESPONSE
{
"Item": {
"ExternalReference1": null,
"TransactionName": null,
"ExternalOrderContactInfo": null,
"State": 1,
"Items": [
{
"ExternalReference1": null,
"IsTakeAway": false,
"ExtraInformation": "",
"PricePerItemIncludingVat": 95.00,
"DiscountAllowed": true,
"CreatedDateTime": "2020-03-28T20:30:22.3179758",
"LastModifiedDateTime": "2020-03-28T20:30:22.3179758",
"VatPercentage": 12.0000000000,
"TotalDiscount": 0.0,
"Quantity": 1.0,
"QuantityPerPackage": 1.0,
"ParentItemId": null,
"BongCategoryId": "636874594495921313",
"InventoryItemDescription": "Ostbollar",
"InventoryItemId": "636874600387269846",
"Id": "637210242222798230"
}
],
"Payments": [
{
"Type": 18,
"TotalAmount": 95.0,
"ExternalReference1": null,
"Id": "637210242222824821"
}
],
"EmployeeId": "636874675803407543",
"CreatedDateTime": "2020-03-28T20:30:10.13",
"LastModifiedDateTime": "2020-03-28T20:30:22.3336027",
"ParkingId": "",
"Id": "637210242100904840"
}
}
If any changes are needed for an already existing PreSaleTransaction, then a PUT request may be used to update for example the State or the InventoryItems.
Delete PreSaleTransaction
REQUEST
curl -X DELETE "https://www.dinkassa.se/api/presaletransaction/637210242100904840"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
-H "Content-Type: application/json"
-d '
RESPONSE
# The response will be HTTP status code 200 if the delete was successful.
Delete existing PreSaleTransaction.
Delete all old + empty
REQUEST
curl -X DELETE "https://www.dinkassa.se/api/presaletransaction?deleteOldEmpty=true&minSecondsOldToDelete=30"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
-H "Content-Type: application/json"
-d '
RESPONSE
# The response will be HTTP status code 200 if the delete was successful.
Name | Description | Parmeter Type | Data Type | Required | Default | Constraints |
---|---|---|---|---|---|---|
deleteOldEmpty | Must be set to true to delete old items. | Query-string | Boolean | Yes | ||
minSecondsOldToDelete | The number of seconds ago that items have to have been created to be deleted. | Query-string | 32-bit Integer | Yes | ||
maxDeleteCount | The max number of items to delete in this request. | Query-string | 32-bit Integer | No | 100 | 1-200 |
Submit for processing
REQUEST
curl -X POST "https://www.dinkassa.se/api/presaletransaction/635588210231306742"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
-H "Content-Type: application/x-www-form-urlencoded"
-d 'submit=true'
RESPONSE
{
"Item": {
"ExternalReference1": null,
"TransactionName": "Order: 1825",
"ExternalOrderContactInfo": "08-41050990",
"State": 2,
"Items": [
{
"ExternalReference1": null,
"IsTakeAway": false,
"ExtraInformation": "Extra Mushroom",
"PricePerItemIncludingVat": 95.0,
"DiscountAllowed": true,
"CreatedDateTime": "2020-03-28T20:38:45.993",
"LastModifiedDateTime": "2020-03-28T20:38:45.993",
"VatPercentage": 12.0000000000,
"TotalDiscount": 0.0,
"Quantity": 1.0000000000,
"QuantityPerPackage": 1.0000000000,
"ParentItemId": null,
"BongCategoryId": "636874594495921313",
"InventoryItemDescription": "Pizza Capricciosa",
"InventoryItemId": "636874600387269846",
"Id": "637210247259416977"
}
],
"Payments": [
{
"Type": 18,
"TotalAmount": 95.0000000000,
"ExternalReference1": null,
"Id": "637210247259482943"
}
],
"EmployeeId": "636874675803407543",
"CreatedDateTime": "2020-03-28T20:38:45.977",
"LastModifiedDateTime": "2020-03-28T20:42:17.0933748",
"ParkingId": "",
"Id": "637210247259381834"
}
}
Name | Description | Parmeter Type | Data Type | Required | Default | Constraints |
---|---|---|---|---|---|---|
submit | Must be set to true to submit the PreSaleTransaction. After submit the item cannot be changed or deleted and is now managed by the POS system. | x-www-form-urlencoded | Boolean | Yes |
PreSaleTransactionItem
API ENDPOINT
NOT AN ENDPOINT
Represents an item to be sold as part of a PreSaleTransaction.
PreSaleTransactionItem Fields
Field | Read Only | Type | Default | Description | Constraints |
---|---|---|---|---|---|
ExternalReference1 | No | String (max 30 chars.) | A text string that can be used to refer to this object from another system, i.e. order number. | ||
IsTakeAway | No | Boolean | false | Used to distinguish between "Dine In" and "Take Away". If True, the kitchen ticket will display "TAKE AWAY". | true/false |
ExtraInformation | No | String (max 500 chars.) | Additional information for the item. Example: Extra veggies, no cheese. | ||
PricePerItemIncludingVat | No | Decimal/null | The PriceIncludingVat from the InventoryItem. | Price per item including VAT. If the item has a quantity != 1 the price is for each item, i.e. total price = this price * quantity. | |
DiscountsAllowed | Yes | Boolean | true | Shows whether or not the Category the InventoryItem is connected to is marked as "allowed" for discounts or not. Alcohol-categories are not allowed for discount. | |
CreatedDateTime | Yes | DateTime | Datetime-stamp when the PreSaleTransactionItem was first created, either via API or through the POS. | ||
LastModifiedDateTime | Yes | DateTime | Datetime-stamp when the PreSaleTransactionItem was last modified. Any modification to the PreSaleTransactionItem results in a DateTime update of LastModifiedDateTime. | ||
VatPercentage | Yes | Decimal | Shows the VatPercentage of each PreSaleTransactionItem. Fetched automatically from InventoryItem and cannot be manually edited through the API due to risk. | 0, 6, 12 or 25. | |
TotalDiscount | Yes | Decimal | 0 | Shows the total discount of each PreSaleTransactionItem. Fetched automatically from the POS and cannot (yet) be manually edited through the API. | |
Quantity | No | Decimal | Number of items being sold. | 0 – 1000000 | |
QuantityPerPackage | No | Decimal | Used to select X/unit. Example: 2 Vodka-shots with 4cl each; choose "Quantity": 8 and "QuantityPerPackage": 2. Set automatically to the same as Quantity if not used. | ||
ParentItemId | Yes | 64-bit Integer/null | null | Not used as of yet. | |
BongCategoryId | No | 64-bit Integer/null | Used to determine BongCategory for each InventoryItem. Used normally if an InventoryItem has "MAIN COURSE" as standard and client wants "MAIN COURSE" as "STARTER" instead. | ||
InventoryItemDescription | Yes | Decimal | The description of the InventoryItem being sold. | ||
InventoryItemId | No | 64-bit Integer | The ID of the InventoryItem being sold. | Must match existing InventoryItem. |
PreSaleTransactionPayment
API ENDPOINT
NOT AN ENDPOINT
Represents a payment for a PreSaleTransaction.
PreSaleTransactionPayment Fields
Field | Read Only | Type | Default | Description | Constraints |
---|---|---|---|---|---|
Type | No | 32-bit Integer | The type of payment used. | Must be one of: Cash = 1 Card = 2 Coupon = 3 BankAccount = 7 WebShop = 18 |
|
TotalAmount | No | Decimal | The amount paid. | 0 – 1000000 | |
ExternalReference1 | No | String (max 30 chars.) | A text string that can be used to refer to this object from another system. | ||
Id | Yes | 64-bit Integer | Identification number of the complete PreSaleTransaction. | Numerical value |
PreSaleTransactionParking
API ENDPOINT
https://www.dinkassa.se/api/presaletransactionparking
Represents a place where a PreSaleTransaction can be parked (for ex. a table). PreSaleTransactionParking co-exists with api/TableMap. For a PreSaleTransactionParking to exist, a tablemap within api/TableMap must exist and be activated. A PreSaleTransactionParking is essentially a table within the physical registers table map where the names of the tables are usually "1", "2", "3" etc.
PreSaleTransactionParking Fields
Field | Read Only | Type | Default | Description | Constraints |
---|---|---|---|---|---|
Id | Yes | 64-bit Integer | Identification number | ||
Name | Yes | String | The name of the table | ||
TableMap | Yes | 32-bit Integer | The map where this parking should be shown (typically 0-4). |
Search PreSaleTransactionParking
REQUEST
curl -X GET "https://www.dinkassa.se/api/presaletransactionparking"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
"Items": [
{
"Name": "100",
"TableMap": 1,
"Id": "636936094895645899"
}
]
}
Name | Description | Parmeter Type | Data Type | Required | Default | Constraints |
---|---|---|---|---|---|---|
offset | Specifies the number of items that will be skipped before starting to return. | Query-string | 32-bit Integer/null | No | 0 | Must be >= 0 |
fetch | Specified the number of items to fetch after the offset has been skipped. | Query-string | 32-bit Integer/null | No | 10 | Must be between 1 and 200 |
Transaction
API ENDPOINT
https://www.dinkassa.se/api/transaction
Represents a transaction once the sale/return has been finalized. Transactions can only be fetched for a period of 7 days from current date. Data needed from dates later than 7 days are not fetchable. The reason for this is to not overload the API.
Transaction Fields
Field | Read Only | Type | Default | Description | Constraints |
---|---|---|---|---|---|
Id | Yes | 64-bit Integer/null | Identification number | ||
Number | Yes | 32-bit Integer | The number of the transaction if the transaction represents a receipt (and not an invoice) | ||
InvoiceNumber | Yes | 32-bit Integer/null | The invoice number if the transaction represents an invoice. | ||
DateTime | Yes | DateTime | The date and time of the transaction. | ||
TransactionName | Yes | String (max 50 chars.) | A text string that will be printed on the receipt, often used to indicate customer. | ||
EnteredByEmployeeCode | Yes | 64-bit Integer | The code of the employee that posted this transaction. | ||
EnteredByEmployeeName | Yes | 64-bit Integer | The name of the employee that posted this transaction. | ||
TotalAmountIncludingVat | Yes | Decimal | Total price including VAT. | ||
TotalVat | Yes | Decimal | Total VAT. | ||
Items | Yes | TransactionItem | The InventoryItems sold or returned. | ||
Payments | Yes | TransactionPayment | Any payments made as part of this transaction. |
Search Transaction
REQUEST
curl -X GET "https://www.dinkassa.se/api/transaction/?offset=1&fetch=1&startDateTime=2019-12-13&endDateTime=2019-12-19"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
"Items": [
{
"Number": 57476,
"DateTime": "2019-12-18T10:09:19",
"TransactionName": null,
"InvoiceNumber": null,
"CreatedDateTime": "2019-12-18T10:09:19",
"LastModifiedDateTime": "2019-12-18T10:09:19",
"TotalAmountIncludingVat": 150.0000000000,
"TotalVat": 16.0714290000,
"EnteredByEmployeeCode": "1",
"EnteredByEmployeeName": "Admin",
"Items": [
{
"InventoryItemDescription": "Pasta Carbonara",
"ProductCode": "46365120",
"ProductBarCode": "46365120",
"TotalAmountIncludingVat": 150.0000000000,
"TotalVat": 16.07142857142857142857142857,
"Quantity": 1.0000000000,
"Id": "637122569595835337"
}
],
"Payments": [
{
"CreatedDateTime": "2019-12-18T10:09:19",
"LastModifiedDateTime": "2019-12-18T10:09:19",
"PaymentDateTime": "2019-12-18T10:09:19",
"Type": 2,
"Amount": 150.0000000000,
"Id": "637122569595835071"
}
],
"Id": "637122569595834746"
}
]
}
Name | Description | Parmeter Type | Data Type | Required | Default | Constraints |
---|---|---|---|---|---|---|
offset | Specifies the number of items that will be skipped before starting to return. | Query-string | 32-bit Integer/null | No | 0 | Must be >= 0 |
fetch | Specified the number of items to fetch after the offset has been skipped. | Query-string | 32-bit Integer/null | No | 10 | Must be between 1 and 200 |
startDateTime | The date to include transaction starting from. | Query-string | DateTime | Yes | Must be within 7 days of the end date. | |
endDateTime | The date to include transactions up until. | Query-string | DateTime | Yes | Must be within 7 days of the start date. |
Get by number
REQUEST
curl -X GET "https://www.dinkassa.se/api/category/636935444266525649"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
{
"Item": {
"Number": 57474,
"DateTime": "2019-12-18T10:06:49",
"TransactionName": null,
"InvoiceNumber": null,
"CreatedDateTime": "2019-12-18T10:06:49",
"LastModifiedDateTime": "2019-12-18T10:06:49",
"TotalAmountIncludingVat": 75.0000000000,
"TotalVat": 8.0357150000,
"EnteredByEmployeeCode": "1",
"EnteredByEmployeeName": "Admin",
"Items": [
{
"InventoryItemDescription": "Melon och skinka",
"ProductCode": "46360440",
"ProductBarCode": "46360440",
"TotalAmountIncludingVat": 75.0000000000,
"TotalVat": 8.035714285714285714285714286,
"Quantity": 1.0000000000,
"Id": "637122568091988971"
}
],
"Payments": [
{
"CreatedDateTime": "2019-12-18T10:06:49",
"LastModifiedDateTime": "2019-12-18T10:06:49",
"PaymentDateTime": "2019-12-18T10:06:49",
"Type": 2,
"Amount": 75.0000000000,
"Id": "637122568091988664"
}
],
"Id": "637122568091988272"
}
}
TransactionItem
API ENDPOINT
NOT AN ENDPOINT
Represents an item that was sold or returned as part of a Transaction.
TransactionItem Fields
Field | Read Only | Type | Default | Description | Constraints |
---|---|---|---|---|---|
InventoryItemId | Yes | 64-bit Integer | The ID of the InventoryItem being sold. | ||
ProductCategory | Yes | String (max 30 chars.) | The category of the InventoryItem being sold. | ||
ProductDescription | Yes | String (max 30 chars.) | The description of the InventoryItem being sold. | ||
ProductBarCode | Yes | String (max 50 chars.) | The bar code of the InventoryItem being sold. | ||
ProductCode | Yes | String (max 50 chars.) | The product code of the InventoryItem being sold. | ||
TotalAmountIncludingVat | Yes | Decimal | Total price including VAT. | ||
TotalVat | Yes | Decimal | Total VAT. | ||
TotalDiscount | Yes | Decimal | Total discount including VAT. | ||
Quantity | Yes | Decimal | Number of items being sold. | 0 – 1000000 |
TransactionPayment
API ENDPOINT
NOT AN ENDPOINT
Represents a payment that was made or returned as part of a Transaction.
TransactionPayment Fields
Field | Read Only | Type | Default | Description | Constraints |
---|---|---|---|---|---|
Amount | Yes | Decimal | The amount paid. | 0 – 1000000 | |
Type | Yes | 32-bit Integer | The type of payment used. | Cash = 1 Card = 2 Coupon = 3 BankAccount = 7 WebShop = 18 |
|
PaymentDateTime | Yes | DateTime | The date and time that the payment was made. |
MultiPriceList
API ENDPOINT
https://www.dinkassa.se/api/multipricelist
MultiPriceLists are not actual InventoryItem's. Each Multipricelist contains different pricing levels. MultiPriceList are created at for example a Pizzeria where one MultiPriceList is called "Pizza Vesuvio". The pricing levels can be "Childrens Pizza", "Regular Pizza", "Family Size Pizza" etc; each one with a different price. The prices for a "Regular Pizza" can be split into columns, whereas ColumnName1 can be "Eat in" and ColumnName2 can be "Take Away". Whenever a Column is marked as Take Away (IsTakeAwayColumn1-6), the item will be automatically marked as "Pickup" when sent to the register as well as on the business reports of the cash register.
MultiPriceList Fields
Field | Read Only | Type | Default | Description | Constraints |
---|---|---|---|---|---|
Description | Yes | String | The name of the MultiPriceList, i.e. "Pizza Vesuvio" | ||
NumberOfColumns | Yes | 32-bit Integer | 2 | The number of columns activated | Numerical value |
ColumnName1-6 | Yes | String/null | The name of each respective column | ||
IsTakeAwayColumn1-6 | Yes | Boolean | false | True/false value if column is marked as "TakeAway" or not | true/false |
ColumnColor1-6 | Yes | String | PaleGreen | The visual color of the respective column | |
Id | Yes | 64-bit Integer | Unique identification number of each MultiPriceList | Numerical value |
Search MultiPriceList
REQUEST
curl -X GET "https://www.dinkassa.se/api/multipricelist"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
"Items": [
{
"Description": "Pizza Vesuvio",
"NumberOfColumns": 2,
"ColumnName1": "Dine In",
"ColumnName2": "Take Away",
"ColumnName3": "",
"ColumnName4": "",
"ColumnName5": "",
"ColumnName6": "",
"IsTakeAwayColumn1": false,
"IsTakeAwayColumn2": true,
"IsTakeAwayColumn3": false,
"IsTakeAwayColumn4": false,
"IsTakeAwayColumn5": false,
"IsTakeAwayColumn6": false,
"ColumnColor1": "PaleGreen",
"ColumnColor2": "Yellow",
"ColumnColor3": "PaleGreen",
"ColumnColor4": "PaleGreen",
"ColumnColor5": "PaleGreen",
"ColumnColor6": "PaleGreen",
"Id": "637206765420183087"
}
]
}
Name | Description | Parmeter Type | Data Type | Required | Default | Constraints |
---|---|---|---|---|---|---|
offset | Specifies the number of items that will be skipped before starting to return. | Query-string | 32-bit Integer/null | No | 0 | Must be >= 0 |
fetch | Specified the number of items to fetch after the offset has been skipped. | Query-string | 32-bit Integer/null | No | 100 | Must be between 1 and 100 |
Fetch by MultiPriceList ID
REQUEST
curl -X GET "https://www.dinkassa.se/api/multipricelist/637206765420183087"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
{
"Item": {
"Description": "Pizza Vesuvio",
"NumberOfColumns": 2,
"ColumnName1": "Äta här",
"ColumnName2": "Ta med",
"ColumnName3": "",
"ColumnName4": "",
"ColumnName5": "",
"ColumnName6": "",
"IsTakeAwayColumn1": false,
"IsTakeAwayColumn2": true,
"IsTakeAwayColumn3": false,
"IsTakeAwayColumn4": false,
"IsTakeAwayColumn5": false,
"IsTakeAwayColumn6": false,
"ColumnColor1": "PaleGreen",
"ColumnColor2": "Yellow",
"ColumnColor3": "PaleGreen",
"ColumnColor4": "PaleGreen",
"ColumnColor5": "PaleGreen",
"ColumnColor6": "PaleGreen",
"Id": "637206765420183087"
}
}
Fetch the MultiPriceList by Id. Every Id-number is unique for each MultiPriceList. An Id-number is created automatically through the physical register (or the API) and cannot be set manually. Id is used to distinguish each MultiPriceList in the database.
MultiPriceItem
API ENDPOINT
https://www.dinkassa.se/api/multipriceitem
MultiPriceItems are not actual InventoryItems. A MultiPriceItem cannot exist without being directly connected to a MultiPriceList. A MultiPriceItem can only be created after creating a MultiPriceList. Each MultiPriceItem is defined in the register as a "Pricing level"; for example "Regular Pizza" or "Family Size Pizza". Each MultiPriceItem can be connected to an InventoryItem (mainly for stock-keeping and result tracking) and therefor pick up the price from the InventoryItem, or just be set up with a manual pre-defined price.
MultiPriceItem Fields
Field | Read Only | Type | Default | Description | Constraints |
---|---|---|---|---|---|
MultiPriceListId | Yes | 64-bit Integer/null | The ID of the connected MultiPriceList for which the MultiPriceItem is connected to. | Always refers to an existing MultiPriceList | |
Description | Yes | String | The name of the MultiPriceItem. | ||
SortingWeight | Yes | 32-bit Integer | The order of which the MultiPriceItem is visually presented in the MultiPriceList. Lower number = higher vertically | Numerical value | |
PriceToUseColumn1-6 | Yes | Decimal/null | The price of the MultiPriceItem for each column within the MultiPriceList. | Numerical value | |
InventoryItemIdColumn1-6 | Yes | 64-bit Integer/null | The InventoryItemId of the connected InventoryItem for each MultiPriceItem. | Numerical value | |
Id | Yes | 64-bit Integer | Unique identification number of each MultiPriceItem. | Numerical value |
Search MultiPriceItem
REQUEST
curl -X GET "https://www.dinkassa.se/api/multipriceitem"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
"Items": [
{
"MultiPriceListId": 637206776564267789,
"Description": "Family Size",
"SortingWeight": 20,
"PriceToUseColumn1": 100.0000000000,
"PriceToUseColumn2": 90.0000000000,
"PriceToUseColumn3": null,
"PriceToUseColumn4": null,
"PriceToUseColumn5": null,
"PriceToUseColumn6": null,
"InventoryItemIdColumn1": 637206771558031961,
"InventoryItemIdColumn2": 637206771558031961,
"InventoryItemIdColumn3": null,
"InventoryItemIdColumn4": null,
"InventoryItemIdColumn5": null,
"InventoryItemIdColumn6": null,
"Id": "637206776566034359"
}
]
}
Name | Description | Parmeter Type | Data Type | Required | Default | Constraints |
---|---|---|---|---|---|---|
offset | Specifies the number of items that will be skipped before starting to return. | Query-string | 32-bit Integer/null | No | 0 | Must be >= 0 |
fetch | Specified the number of items to fetch after the offset has been skipped. | Query-string | 32-bit Integer/null | No | 100 | Must be between 1 and 100 |
multiPriceListId | Used to filter levels for a specific MultiPriceList. | Query-string | 64-bit Integer/null | No | MultiPriceList must exist |
Fetch by MultiPriceItem ID
REQUEST
curl -X GET "https://www.dinkassa.se/api/multipriceitem/637206776566034359"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
{
"Item": {
"MultiPriceListId": 637206776564267789,
"Description": "Family Size",
"SortingWeight": 20,
"PriceToUseColumn1": 100.0000000000,
"PriceToUseColumn2": 90.0000000000,
"PriceToUseColumn3": null,
"PriceToUseColumn4": null,
"PriceToUseColumn5": null,
"PriceToUseColumn6": null,
"InventoryItemIdColumn1": 637206771558031961,
"InventoryItemIdColumn2": 637206771558031961,
"InventoryItemIdColumn3": null,
"InventoryItemIdColumn4": null,
"InventoryItemIdColumn5": null,
"InventoryItemIdColumn6": null,
"Id": "637206776566034359"
}
}
Fetch the MultiPriceItem by Id. Every Id-number is unique for each MultiPriceItem. An Id-number is created automatically through the physical register (or the API) and cannot be set manually. Id is used to distinguish each MultiPriceItem in the database.
Settings
API ENDPOINT
https://www.dinkassa.se/api/settings
api/Settings represents all global settings available through the API. These settings may be used to understand what to display on your application. At the moment, the only thing available in api/Settings is "Unit". Unit is what the default global unit of the POS system is set to. It could for example be kg, cl, l, g etc. depending on the preference of the customer.
The way api/settings is currently used is in our POS application called "WaiterApp". Within the waiter application you are able to select for example 1x 4cl of Vodka. The way this works is with PreSaleTransactionItem.QuantityPerPackage and PreSaleTransactionItem.Quantity.
Example: you want to sell 2 Vodka-shots with 4cl each; then you would set QuantityPerPackage to 4 and Quantity to 8 (total amount of cl sold) within the creating of PreSaleTransaction for each PreSaleTransactionItem.
Settings Fields
Field | Read Only | Type | Default | Description | Constraints |
---|---|---|---|---|---|
Unit | Yes | String | st | Default global unit of the POS system. I.e kg, cl, l, g etc. |
Search Settings
REQUEST
curl -X GET "https://www.dinkassa.se/api/settings"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
RESPONSE
{
"Unit": "st"
}
No search parameters such as offset or fetch available.
Session
API ENDPOINT
https://www.dinkassa.se/api/session
"Session" is an authorization of login to the Dinkassa.se API for a total of 12h from the time of login - no more, no less.
Session is used when an employee logs into a system for which he or she should have limited access to. Session is normally used for onsite applications. An example of an application using Session is the ES Kassasystem WaiterApp. The way the ES Kassasystem WaiteApp works is that the SessionKey is extracted directly from the POS system (per each employee) and entered as the login code in the WaiterApp. The SessionKey can only be used once. When it has been authorized one time it's then seen as used and will not work again. If the SessionKey has been lost by the employee, he or she need to request a new one directly from the POS system.
The ability to extract a SessionKey from the POS is available for all our POS systems using Windows 7 and upwards.
Session Authorization
Session is different from the regular setup of MachineId, MachineKey and IntegratorId. Session is authorized through the endpoint by setting the parameters "EmployeeId" and "MachineId" as a part of the request.
An authorized Session is visually presented as a 12-digit 32-bit Integer to the employee, while it internally contains a MachineId and an EmployeeId for the POS system is was extracted from.
When Session has been authorized, a GUID will be provided to you to be used together with a, From the ES Kassasystem API-team, provided IntegratorId.
Create New Session
REQUEST
curl -X POST "https://www.dinkassa.se/api/Session?employeeId=636900074226919670&MachineId=5712D2DB-D4EF-41A1-AFD1-F832594EAC8A"
-H "Content-Type: application/json"
-d '
RESPONSE
"654365432777"
Session can be created manually if necessary, even though this normally is done through the POS, whereas the POS contacts the API to retreive the SessionKey. As previously mentioned; to be able to create a Session, an EmployeeId and a MachineId is required. If your integration plan consists of only using one single employee at all times, then the creating of Session is not for your type of integration. Details can be provided to you from the ES Kassasystem API-team.
What you are presented with after creating a Session is the 12-digit SessionKey. Use this SessionKey in the next step; Authentication.
Authenticate Session
REQUEST
curl -X POST "https://www.dinkassa.se/api/Session"
-H "Content-Type: application/json"
-d '
"654365432777"
RESPONSE
{
"Id": "200eff42-dda1-4159-b649-c5f1767ce23f",
"Type": 1,
"EmployeeId": "636900074226919670",
"ExpiresDateTime": "2020-03-28T08:31:26.373"
}
When authenticating a previously created Session, all you need to input in the body is just the SessionKey. The API is listening for the provided SessionKey for 12h from the time it was created. When the SessionKey is activated via authentication, the API responds with a unique SessionId-number. With this Id-number, you will be able to use the API to it's fullest with all other type of requests. The Id-number is still just active for the limited amount of time from the orginal SessionKey creation. See example below on how to, for example, create a PreSaleTransaction using the SessionId and your previously provided IntegratorId.
Create New Order
REQUEST
curl -X POST "https://www.dinkassa.se/api/PreSaleTransaction"
-H "SessionId: 200eff42-dda1-4159-b649-c5f1767ce23f"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
-H "Content-Type: application/json"
-d '
{
"Item": {
"EmployeeId": "636900074226919670",
"State": 4,
"TransactionName": "TABLE 1",
"ParkingId": "636874593402171667",
"Items": [
{
"Quantity": 1,
"InventoryItemId": "636874601642150005"
}
],
"Payments": []
}
}
RESPONSE
{
"Item": {
"ExternalReference1": null,
"TransactionName": "TABLE 1",
"ExternalOrderContactInfo": null,
"State": 4,
"Items": [
{
"ExternalReference1": null,
"IsTakeAway": false,
"ExtraInformation": "",
"PricePerItemIncludingVat": 175.00,
"DiscountAllowed": true,
"CreatedDateTime": "2020-03-29T23:14:45.89181",
"LastModifiedDateTime": "2020-03-29T23:14:45.89181",
"VatPercentage": 12.0000000000,
"TotalDiscount": 0.0,
"Quantity": 1.0,
"QuantityPerPackage": 1.0,
"ParentItemId": null,
"BongCategoryId": "636874594496479772",
"InventoryItemDescription": "Chicken & Cheese quesadilla",
"InventoryItemId": "636874601642150005",
"Id": "637211168855298783"
}
],
"Payments": [],
"EmployeeId": "636900074226919670",
"CreatedDateTime": "2020-03-29T23:14:45.89181",
"LastModifiedDateTime": "2020-03-29T23:14:45.9074388",
"ParkingId": "636874593402171667",
"Id": "637211168855265546"
}
}
Creating a new order (PreSaleTransaction) with a SessionId is no different than creating a PreSaleTransaction with MachineId, MachineKey and IntegratorId. This is just a simple example using SessionId instead. If needed, please see the section preSaleTransaction for more in-depth information.
In the Headers, the SessionId and IntegratorId are provided instead.
RequestKey (Param)
REQUEST
curl -X POST "https://www.dinkassa.se/api/employee?requestKey=AFDA6368-6C91-45E6-A309-4900986A5215"
-H "MachineId: 9DD39BBF-8E67-4C07-825A-0845F8176075"
-H "MachineKey: 3E836351-5E66-496A-9BF1-91053CDAFDB5"
-H "IntegratorId: 1CF3DD98-787F-4ER4-9681-ADE1D1A408C2"
-H "Content-Type: application/json"
-d '
{
"Item" : {
"EmployeeCode" : "3",
"Name" : "Niclas Persson",
"EmployeePassword" : "1234",
}
}'
RESPONSE
The requestKey (AFDA6368-6C91-45E6-A309-4900986A5215) has already been received.
RequestKey is not an endpoint in itself but rather a parameter, however, it's important enough to be given notice within it's own section of the API documentation.
In order to avoid getting for example duplicate orders (PreSaleTransaction), the Dinkassa.se API support idempotent requests for all API methods. The request requires a GUID/UUID to be provided as a query-string named “requestKey”.
With all requests, and especially for PreSaleTransaction, you add the requestKey and provide a new GUID/UUID for each request. if you get an error back on the request you can safely retry using the same GUID/UUID. If it has already been used then HTTP code 409 will be returned with an error message and you will know that the previous request succeeded.
For an example of how this is used within PreSaleTransaction, please see PreSaleTransaction under "Create new PreSaleTransaction". The approach is exactly the same for all API methods. In this section, an example of a declined API rqequest for the creation of an Employee with a previously used RequestKey is presented.
If the previous request was already accepted, HTTP code 409 will be returned. If not, HTTP 200 would be returned and you know the new request has been accepted.
Make sure you generate a new GUID/UUID for each request. A previously used GUID/UUID can never be used again and will immediately return 409.
Errors
The Dinkassa.se API uses the following error codes:
Error Code | Meaning |
---|---|
400 | Bad Request -- Your request is invalid. |
401 | Unauthorized |
403 | Forbidden -- The request is hidden for administrators only. |
404 | Not Found |
405 | Method Not Allowed |
406 | Not Acceptable -- You requested a format that isn't json. |
409 | RequestKey provided has already been received and may not be used again or the requestkey is not a valid GUID/UUID. |
410 | Gone |
429 | Too Many Requests |
500 | Internal Server Error -- Try again later. |
503 | Service Unavailable -- We're temporarily offline for maintenance. Please try again later. |