The ready2order API uses a three-token flow to grant your integration access to a ready2order account. Your integration identifies itself with a Developer Token, requests permission from the account owner, and receives a long-lived Account Token to use for all subsequent requests.
Every API request to account data must include:
Authorization: Bearer <ACCOUNT_TOKEN>
| Token | Scope | Lifetime |
|---|---|---|
| Developer Token | Identifies your integration | Permanent |
| Grant Access Token | One-time permission request | 10 minutes |
| Account Token | Access to a ready2order account | Until revoked |
This is a one-time process per account you want to integrate with.
Register at https://api.ready2order.com. Your Developer Token will be emailed to you.
Store it securely — it identifies your integration across all accounts.
Call this endpoint using your Developer Token:
POST /v1/developerToken/grantAccessToken
Authorization: Bearer <DEVELOPER_TOKEN>
{
"callbackUri": "https://your-app.com/callback"
}
callbackUri is optional but strongly recommended (see Step 3).
Response:
{
"grantAccessToken": "...",
"grantAccessUri": "https://app.ready2order.com/..."
}
Redirect the account owner to the grantAccessUri. They will log in to their ready2order account and click Approve.
With callbackUri — after approval, ready2order redirects the account owner back to your URL:
https://your-app.com/callback?accountToken=<ACCOUNT_TOKEN>&grantAccessToken=<GRANT_ACCESS_TOKEN>&status=approved
The accountToken in that redirect is what you store and use for all future requests.
Without callbackUri — poll for the result instead:
GET /v1/developerToken/grantAccessToken/{grantAccessToken}
Authorization: Bearer <DEVELOPER_TOKEN>
The response will include accountToken once the account owner has approved.
The Grant Access Token expires after 10 minutes. If the account owner does not approve in time, repeat Step 2 to generate a new one.
Some resources support a training mode that keeps test transactions separate from live data. It is handy for staff training and demos where test sales should not show up in reports or fiscal records.
When a cashier puts the POS into training mode, all transactions in that session are flagged as training records and kept separate from live data. On the API side, the trainingMode field on a resource tells you whether it is a training record, and most list endpoints accept a trainingMode query parameter to filter by it.
| Status | Likely cause |
|---|---|
401 Unauthorized |
Wrong token type, or Authorization header missing |
403 Forbidden |
Developer Token used where Account Token is required (or vice versa) |
429 Too Many Requests |
Rate limit exceeded — max 60 requests per minute per Account Token |
Products are the items sold at the point of sale. Each product belongs to a product group and carries a price, a VAT rate, and a set of optional features such as stock tracking, variations, and ingredients.
Identifiers
A product supports three optional identifiers alongside its system product_id:
product_itemnumber: the merchant's own article number, used on labels, in exports, and for stock lookupsproduct_barcode: EAN or barcode for scanning at the POSproduct_externalReference: for integrators to store their own system's ID, so you can map between your records and ready2order without storing product_id on your sidePricing and VAT
product_price is the base price. Set product_priceIncludesVat to true (the default) if that figure is gross, or false if it is net. A VAT rate is required on creation — supply either product_vat as a percentage or product_vat_id referencing a VAT rate.
Customers and customer categories can have individual price overrides managed via the per-customer prices and per-category prices endpoints.
Custom price and quantity
Set product_customPrice: true to let the cashier enter the price manually at checkout, which is useful for open-price items. product_customQuantity: true does the same for the quantity.
Stock
Stock tracking is optional and configured per product. Set product_stock_enabled: true, then use product_stock_value for the current quantity, product_stock_safetyStock for the minimum threshold, and product_stock_reorderLevel for the point at which the system alerts about low inventory. Use the get stock and update stock endpoints to read or update stock figures without touching other product fields.
Product type
product_type is mainly relevant in gastro mode, where it drives printer routing (e.g. kitchen vs. bar). Available values: standard, food, drink, extra, sidedish, variation, ingredient. For standard retail products, use standard.
Variations and ingredients
Variations (selectable add-ons or modifications) and ingredients (component tracking for recipes and partial-unit sales) are enabled per product with product_variations_enabled and product_ingredients_enabled. Both require the corresponding feature to be active on the account.
Keeping a catalogue in sync
The recommended approach is to subscribe to webhooks for product.created and product.updated events. This avoids polling and ensures your system is updated in near real-time without unnecessary requests.
If webhooks are not an option, use the updatedAfter query parameter on list products to fetch only products changed since a given timestamp. Use batch create to create multiple products in one request.
Creates multiple products in a single request. Returns a result for each item along with a count of how many succeeded and how many failed.
required | Array of objects |
{- "items": [
- {
- "productgroup_id": 1,
- "product_name": "Coca cola",
- "product_price": 124.25,
- "product_vat": 10.5,
- "product_vat_id": 1234,
- "product_itemnumber": "x-123",
- "product_externalReference": "xxx-123",
- "product_barcode": "12345678",
- "product_description": "lorem ipsum dolor sit amet",
- "product_priceIncludesVat": false,
- "product_active": true,
- "product_discountable": true,
- "product_stock_enabled": true,
- "product_stock_value": 10.5,
- "product_stock_reorderLevel": 2.5,
- "product_stock_safetyStock": 5.1,
- "product_stock_unit": "Kg",
- "product_sortIndex": 5,
- "product_type": "food, drink or default",
- "product_accountingCode": "XY124",
- "product_accountingCodeName": "code-name-x",
- "product_alternativeNameOnReceipts": "XXX Cola",
- "product_alternativeNameInPos": "POS Cola",
- "product_ingredients_enabled": true,
- "product_variations_enabled": true,
- "product_customPrice": true,
- "product_customQuantity": true,
- "product_soldOut": false,
- "product_expressMode": true,
- "product_highlight": true,
- "product_sideDishOrder": true,
- "product_fav": true
}
]
}{- "product_id": 9999,
- "product_externalReference": "string",
- "product_itemnumber": "string",
- "product_barcode": "string",
- "product_name": "string",
- "product_description": "string",
- "product_price": 0,
- "product_priceIncludesVat": false,
- "product_vat": 0,
- "product_vat_id": 9999,
- "product_customPrice": false,
- "product_customQuantity": false,
- "product_fav": false,
- "product_highlight": false,
- "product_expressMode": false,
- "product_stock_enabled": false,
- "product_ingredients_enabled": false,
- "product_variations_enabled": false,
- "product_stock_value": 0,
- "product_stock_unit": "string",
- "product_stock_reorderLevel": 0,
- "product_stock_safetyStock": 0,
- "product_sortIndex": 9999,
- "product_soldOut": false,
- "product_sideDishOrder": false,
- "product_discountable": false,
- "product_accountingCode": "string",
- "product_colorClass": "string",
- "productgroup_id": 9999,
- "product_type_id": 9999,
- "product_type": "string",
- "product_created_at": "string",
- "product_updated_at": "string",
- "product_alternativeNameOnReceipts": "string",
- "product_alternativeNameInPos": "string",
- "productgroup": {
- "productgroup_id": 9999,
- "productgroup_name": "string",
- "productgroup_description": "string",
- "productgroup_shortcut": "string",
- "productgroup_active": false,
- "productgroup_sortIndex": 9999,
- "productgroup_created_at": "string",
- "productgroup_updated_at": "string",
- "productgroup_type_id": 9999
}, - "productvariation": [
- {
- "variation_id": 9999,
- "variation_name": "string",
- "variation_price": "string",
- "variation_stock": 0
}
], - "productingredient": [
- {
- "ingredient_id": 9999,
- "ingredient_name": "string",
- "ingredient_unit": "string",
- "ingredient_quantity": 0
}
], - "images": [
- {
- "image_id": 9999,
- "image_url": "string"
}
]
}Updates stock for multiple products in one request. Each item can be identified by either product_id or product_itemNumber.
required | Array of objects List of products |
{- "products": "List of products"
}{- "updatedIds": {
- "id": 1
}, - "updatedItemNumbers": {
- "number": 1
}
}Returns a paginated list of products. Filter by product group, name, barcode, or item number. Use updatedAfter to fetch only products changed since a given timestamp.
| page | integer Example: page=1 Page you want to display |
| limit | integer Example: limit=25 Items per page |
| productgroup_id | integer Example: productgroup_id=1 get all products for this productgroup_id |
| itemNumber | string Example: itemNumber=x-123 search for a product with the given product_itemNumber |
| name | string Example: name=coca cola search for a product with the given product_name |
| barcode | string Example: barcode=1234567890 search for a product with the given product_barcode |
| q | string Example: q=keyword search for a product by keywords |
| includeProductGroup | boolean Example: includeProductGroup=false include product group information |
| includeProductVariations | boolean Example: includeProductVariations=false include product variations information |
| includeProductIngredients | boolean Example: includeProductIngredients=false include product variations information |
| updatedAfter | string Example: updatedAfter=2021-12-29 04:18:00 Only return list of products which have been updated after a given timestamp |
[- {
- "product_id": 1234,
- "product_externalReference": "ref-1234",
- "product_itemnumber": 1,
- "product_barcode": "x400467508233",
- "product_name": "coca cola",
- "product_description": "coca cola - non-alcoholic drink",
- "product_price": 10.5,
- "product_priceIncludesVat": false,
- "product_vat": 2,
- "product_vat_id": 2,
- "product_customPrice": true,
- "product_customQuantity": true,
- "product_fav": true,
- "product_highlight": true,
- "product_expressMode": true,
- "product_stock_enabled": true,
- "product_ingredients_enabled": true,
- "product_variations_enabled": true,
- "product_stock_value": 100,
- "product_stock_unit": "kg",
- "product_stock_reorderLevel": 10,
- "product_stock_safetyStock": 20,
- "product_sortIndex": 5,
- "product_soldOut": true,
- "product_sideDishOrder": true,
- "product_discountable": true,
- "product_accountingCode": 1000123,
- "product_colorClass": "bgGreenYellow",
- "productgroup_id": 1,
- "product_type_id": 1,
- "product_type": "standard",
- "product_created_at": "2019-01-01 11:11:11",
- "product_updated_at": "2019-01-01 11:11:11",
- "product_alternativeNameOnReceipts": "xxx cola",
- "product_alternativeNameInPos": "yyy cola",
- "productgroup": {
- "productgroup_id": 1,
- "productgroup_name": "string",
- "productgroup_description": "string",
- "productgroup_shortcut": "string",
- "productgroup_active": false,
- "productgroup_sortIndex": 9999,
- "productgroup_created_at": "string",
- "productgroup_updated_at": "string",
- "productgroup_type_id": 9999
}, - "productvariation": [
- {
- "variation_id": 1,
- "variation_name": "schnitzel with chips and mayo",
- "variation_price": 15.2,
- "variation_stock": 10
}
], - "productingredient": [
- {
- "ingredient_id": 1,
- "ingredient_name": "pork meat",
- "ingredient_unit": "Kg",
- "ingredient_quantity": 0
}
], - "images": [
]
}
]Creates a new product.
| productgroup_id | integer Product group id |
| product_name required | string Product name |
| product_price required | string Product price |
| product_vat | string VAT-Rate in decimals. Provide either product_vat or product_vat_id |
| product_vat_id | integer ID of VAT-rate (see /vat-rates). Provide either product_vat or product_vat_id |
| product_itemnumber | string Item number |
| product_externalReference | string External reference |
| product_barcode | string Barcode |
| product_description | string Optional description |
| product_priceIncludesVat | boolean Whether price is provided included or excluding VAT |
| product_active | boolean Is product active |
| product_discountable | boolean Is product discountable |
| product_stock_enabled | boolean Is stock for product enabled |
| product_stock_value | string Product stock value |
| product_stock_reorderLevel | string Product stock reorder level |
| product_stock_safetyStock | string Product stock safety level |
| product_stock_unit | string Product stock unit |
| product_sortIndex | integer Product sort index |
| product_type | string In case of adding new sidedishes or extras you need to provide the product_type. For example, if you're adding 'Fries' as a side you need to provide 'food'. |
| product_accountingCode | string Product accounting code |
| product_accountingCodeName | string Accounting code name |
| product_alternativeNameOnReceipts | string Product alternative name on receipts |
| product_alternativeNameInPos | string An alternative name shown on the POS screen instead of the regular product name. Useful when the shelf name differs from what staff should see at checkout. |
| product_ingredients_enabled | boolean Enables ingredients for this product. Ingredients are used for recipe-based costing and partial-unit sales. Requires the ingredients feature to be active on the account. |
| product_variations_enabled | boolean Enables variations for this product. Variations are selectable add-ons or modifications the cashier can apply at checkout. Requires the variations feature to be active on the account. |
| product_customPrice | boolean Allows the cashier to enter the price freely at checkout instead of using the product's configured price. Useful for open-price items or when the price varies per transaction. |
| product_customQuantity | boolean Allows the cashier to enter the quantity freely at checkout instead of incrementing by whole units. |
| product_soldOut | boolean Is product sold out |
| product_expressMode | boolean Enables express checkout for this product in the POS. When a cashier taps the product button, a bill is created and closed immediately — skipping the cart entirely. Useful for single-item, fixed-price sales such as a prepaid coffee or a parking ticket. |
| product_highlight | boolean Highlights the product line on printed receipts and order tickets — the line is printed in red with a distinct fill character between the product name and price. Red colour output requires a printer that supports it. |
| product_sideDishOrder | boolean Presents the sidedish list for this product in a fixed order. Only relevant when the product has sidedishes configured. |
| product_fav | boolean Marks the product as a favourite in the POS, making it appear in the favourites section for quicker access. |
object | |
object |
{- "productgroup_id": 1,
- "product_name": "Coca cola",
- "product_price": 124.25,
- "product_vat": 10.5,
- "product_vat_id": 1234,
- "product_itemnumber": "x-123",
- "product_externalReference": "xxx-123",
- "product_barcode": "12345678",
- "product_description": "lorem ipsum dolor sit amet",
- "product_priceIncludesVat": false,
- "product_active": true,
- "product_discountable": true,
- "product_stock_enabled": true,
- "product_stock_value": 10.5,
- "product_stock_reorderLevel": 2.5,
- "product_stock_safetyStock": 5.1,
- "product_stock_unit": "Kg",
- "product_sortIndex": 5,
- "product_type": "food, drink or default",
- "product_accountingCode": "XY124",
- "product_accountingCodeName": "code-name-x",
- "product_alternativeNameOnReceipts": "XXX Cola",
- "product_alternativeNameInPos": "POS Cola",
- "product_ingredients_enabled": true,
- "product_variations_enabled": true,
- "product_customPrice": true,
- "product_customQuantity": true,
- "product_soldOut": false,
- "product_expressMode": true,
- "product_highlight": true,
- "product_sideDishOrder": true,
- "product_fav": true,
- "productgroup": {
- "productgroup_id": 0
}, - "product_base": {
- "product_id": 1002
}
}{- "product_id": 1234,
- "product_externalReference": "ref-1234",
- "product_itemnumber": 1,
- "product_barcode": "x400467508233",
- "product_name": "coca cola",
- "product_description": "coca cola - non-alcoholic drink",
- "product_price": 10.5,
- "product_priceIncludesVat": false,
- "product_vat": 2,
- "product_vat_id": 2,
- "product_customPrice": true,
- "product_customQuantity": true,
- "product_fav": true,
- "product_highlight": true,
- "product_expressMode": true,
- "product_stock_enabled": true,
- "product_ingredients_enabled": true,
- "product_variations_enabled": true,
- "product_stock_value": 100,
- "product_stock_unit": "kg",
- "product_stock_reorderLevel": 10,
- "product_stock_safetyStock": 20,
- "product_sortIndex": 5,
- "product_soldOut": true,
- "product_sideDishOrder": true,
- "product_discountable": true,
- "product_accountingCode": 1000123,
- "product_colorClass": "bgGreenYellow",
- "productgroup_id": 1,
- "product_type_id": 1,
- "product_type": "standard",
- "product_created_at": "2019-01-01 11:11:11",
- "product_updated_at": "2019-01-01 11:11:11",
- "product_alternativeNameOnReceipts": "xxx cola",
- "product_alternativeNameInPos": "yyy cola",
- "productgroup": {
- "productgroup_id": 1,
- "productgroup_name": "string",
- "productgroup_description": "string",
- "productgroup_shortcut": "string",
- "productgroup_active": false,
- "productgroup_sortIndex": 9999,
- "productgroup_created_at": "string",
- "productgroup_updated_at": "string",
- "productgroup_type_id": 9999
}, - "productvariation": [
- {
- "variation_id": 1,
- "variation_name": "schnitzel with chips and mayo",
- "variation_price": 15.2,
- "variation_stock": 10
}
], - "productingredient": [
- {
- "ingredient_id": 1,
- "ingredient_name": "pork meat",
- "ingredient_unit": "Kg",
- "ingredient_quantity": 0
}
], - "images": [
]
}Returns a single product by ID.
| id required | integer Example: 123456 Product ID to find |
| includeProductGroup | boolean Example: includeProductGroup=false include product group information |
| includeProductVariations | boolean Example: includeProductVariations=false include product variations information |
| includeProductIngredients | boolean Example: includeProductIngredients=false include product variations information |
{- "product_id": 1234,
- "product_externalReference": "ref-1234",
- "product_itemnumber": 1,
- "product_barcode": "x400467508233",
- "product_name": "coca cola",
- "product_description": "coca cola - non-alcoholic drink",
- "product_price": 10.5,
- "product_priceIncludesVat": false,
- "product_vat": 2,
- "product_vat_id": 2,
- "product_customPrice": true,
- "product_customQuantity": true,
- "product_fav": true,
- "product_highlight": true,
- "product_expressMode": true,
- "product_stock_enabled": true,
- "product_ingredients_enabled": true,
- "product_variations_enabled": true,
- "product_stock_value": 100,
- "product_stock_unit": "kg",
- "product_stock_reorderLevel": 10,
- "product_stock_safetyStock": 20,
- "product_sortIndex": 5,
- "product_soldOut": true,
- "product_sideDishOrder": true,
- "product_discountable": true,
- "product_accountingCode": 1000123,
- "product_colorClass": "bgGreenYellow",
- "productgroup_id": 1,
- "product_type_id": 1,
- "product_type": "standard",
- "product_created_at": "2019-01-01 11:11:11",
- "product_updated_at": "2019-01-01 11:11:11",
- "product_alternativeNameOnReceipts": "xxx cola",
- "product_alternativeNameInPos": "yyy cola",
- "productgroup": {
- "productgroup_id": 1,
- "productgroup_name": "string",
- "productgroup_description": "string",
- "productgroup_shortcut": "string",
- "productgroup_active": false,
- "productgroup_sortIndex": 9999,
- "productgroup_created_at": "string",
- "productgroup_updated_at": "string",
- "productgroup_type_id": 9999
}, - "productvariation": [
- {
- "variation_id": 1,
- "variation_name": "schnitzel with chips and mayo",
- "variation_price": 15.2,
- "variation_stock": 10
}
], - "productingredient": [
- {
- "ingredient_id": 1,
- "ingredient_name": "pork meat",
- "ingredient_unit": "Kg",
- "ingredient_quantity": 0
}
], - "images": [
]
}Updates an existing product. To update stock figures without changing other product data, use the update stock endpoint instead.
| id required | integer Example: 1001 product id |
| product_vat | string VAT-Rate in decimals. Provide either product_vat or product_vat_id |
| product_vat_id | integer ID of VAT-rate (see /vat-rates). Provide either product_vat or product_vat_id |
| product_name | string Product name |
| product_itemnumber | string Item number |
| product_externalReference | string External reference |
| product_barcode | string Barcode |
| product_description | string Optional description |
| product_price | string Product price |
| product_priceIncludesVat | boolean Whether price is provided included or excluding VAT |
| product_active | boolean Is product active |
| product_discountable | boolean Is product discountable |
| product_stock_enabled | boolean Is stock for product enabled |
| product_stock_value | string Product stock value |
| product_stock_reorderLevel | string Product stock reorder level |
| product_stock_safetyStock | string Product stock safety level |
| product_stock_unit | string Product stock unit |
| product_sortIndex | integer Product sort index |
| productgroup_id | integer Product group id |
| product_type | string In case of adding new sidedishes or extras you need to provide the product_type. For example, if you're adding 'Fries' as a side you need to provide 'food'. |
| product_accountingCode | string Product accounting code |
| product_accountingCodeName | string Accounting code name |
| product_alternativeNameOnReceipts | string Product alternative name on receipts |
| product_alternativeNameInPos | string An alternative name shown on the POS screen instead of the regular product name. Useful when the shelf name differs from what staff should see at checkout. |
| product_ingredients_enabled | boolean Enables ingredients for this product. Ingredients are used for recipe-based costing and partial-unit sales. Requires the ingredients feature to be active on the account. |
| product_variations_enabled | boolean Enables variations for this product. Variations are selectable add-ons or modifications the cashier can apply at checkout. Requires the variations feature to be active on the account. |
| product_customPrice | boolean Allows the cashier to enter the price freely at checkout instead of using the product's configured price. Useful for open-price items or when the price varies per transaction. |
| product_customQuantity | boolean Allows the cashier to enter the quantity freely at checkout instead of incrementing by whole units. |
| product_soldOut | boolean Is product sold out |
| product_expressMode | boolean Enables express checkout for this product in the POS. When a cashier taps the product button, a bill is created and closed immediately — skipping the cart entirely. Useful for single-item, fixed-price sales such as a prepaid coffee or a parking ticket. |
| product_highlight | boolean Highlights the product line on printed receipts and order tickets — the line is printed in red with a distinct fill character between the product name and price. Red colour output requires a printer that supports it. |
| product_sideDishOrder | boolean Presents the sidedish list for this product in a fixed order. Only relevant when the product has sidedishes configured. |
| product_fav | boolean Marks the product as a favourite in the POS, making it appear in the favourites section for quicker access. |
object | |
object |
{- "product_vat": 10.5,
- "product_vat_id": 1234,
- "product_name": "Coca cola",
- "product_itemnumber": "x-123",
- "product_externalReference": "xxx-123",
- "product_barcode": "12345678",
- "product_description": "lorem ipsum dolor sit amet",
- "product_price": 124.25,
- "product_priceIncludesVat": false,
- "product_active": true,
- "product_discountable": true,
- "product_stock_enabled": true,
- "product_stock_value": 10.5,
- "product_stock_reorderLevel": 2.5,
- "product_stock_safetyStock": 5.1,
- "product_stock_unit": "Kg",
- "product_sortIndex": 5,
- "productgroup_id": 1,
- "product_type": "food, drink or default",
- "product_accountingCode": "XY124",
- "product_accountingCodeName": "code-name-x",
- "product_alternativeNameOnReceipts": "XXX Cola",
- "product_alternativeNameInPos": "POS Cola",
- "product_ingredients_enabled": true,
- "product_variations_enabled": true,
- "product_customPrice": true,
- "product_customQuantity": true,
- "product_soldOut": false,
- "product_expressMode": true,
- "product_highlight": true,
- "product_sideDishOrder": true,
- "product_fav": true,
- "product_base": {
- "product_id": 1002
}, - "productgroup": {
- "productgroup_id": 0
}
}{- "product_id": 1234,
- "product_externalReference": "ref-1234",
- "product_itemnumber": 1,
- "product_barcode": "x400467508233",
- "product_name": "coca cola",
- "product_description": "coca cola - non-alcoholic drink",
- "product_price": 10.5,
- "product_priceIncludesVat": false,
- "product_vat": 2,
- "product_vat_id": 2,
- "product_customPrice": true,
- "product_customQuantity": true,
- "product_fav": true,
- "product_highlight": true,
- "product_expressMode": true,
- "product_stock_enabled": true,
- "product_ingredients_enabled": true,
- "product_variations_enabled": true,
- "product_stock_value": 100,
- "product_stock_unit": "kg",
- "product_stock_reorderLevel": 10,
- "product_stock_safetyStock": 20,
- "product_sortIndex": 5,
- "product_soldOut": true,
- "product_sideDishOrder": true,
- "product_discountable": true,
- "product_accountingCode": 1000123,
- "product_colorClass": "bgGreenYellow",
- "productgroup_id": 1,
- "product_type_id": 1,
- "product_type": "standard",
- "product_created_at": "2019-01-01 11:11:11",
- "product_updated_at": "2019-01-01 11:11:11",
- "product_alternativeNameOnReceipts": "xxx cola",
- "product_alternativeNameInPos": "yyy cola",
- "productgroup": {
- "productgroup_id": 1,
- "productgroup_name": "string",
- "productgroup_description": "string",
- "productgroup_shortcut": "string",
- "productgroup_active": false,
- "productgroup_sortIndex": 9999,
- "productgroup_created_at": "string",
- "productgroup_updated_at": "string",
- "productgroup_type_id": 9999
}, - "productvariation": [
- {
- "variation_id": 1,
- "variation_name": "schnitzel with chips and mayo",
- "variation_price": 15.2,
- "variation_stock": 10
}
], - "productingredient": [
- {
- "ingredient_id": 1,
- "ingredient_name": "pork meat",
- "ingredient_unit": "Kg",
- "ingredient_quantity": 0
}
], - "images": [
]
}Returns stock information for a product looked up by its item number rather than its ID.
| itemNumber required | string Example: X-123 Product item number |
{- "product_id": 1234,
- "product_stock": 10,
- "product_reorderLevel": 5.2,
- "product_safetyStock": 2.1,
- "product_unit": "piece"
}Returns the current stock level, safety stock, and reorder level for a product.
| id required | integer Example: 123456 Product ID |
{- "product_id": 1234,
- "product_stock": 10,
- "product_reorderLevel": 5.2,
- "product_safetyStock": 2.1,
- "product_unit": "piece"
}Updates stock for a product. Use product_stock to set an absolute value or product_stockDelta to add or subtract from the current quantity.
| id required | integer Example: 123456 Product ID |
| product_stock | string |
| product_reorderLevel | string |
| product_safetyStock | string |
| product_stockDelta | string |
{- "product_stock": "string",
- "product_reorderLevel": "string",
- "product_safetyStock": "string",
- "product_stockDelta": "string"
}{- "product_id": 1234,
- "product_stock": 10,
- "product_reorderLevel": 5.2,
- "product_safetyStock": 2.1,
- "product_unit": "piece"
}Returns all per-customer price overrides for a product.
| id required | integer Example: 123456 ID to find |
[- {
- "price_id": 1234,
- "price_value": 12.45,
- "price_valueGross": 13.56,
- "price_valueNet": 12.45,
- "price_timestamp": 1234,
- "product_id": 1234,
- "customer_id": 1
}
]Sets a price override for a specific customer on this product.
| id required | integer Example: 123456 ID to find |
| price_value required | string |
| customer_id required | integer |
{- "price_value": "string",
- "customer_id": 9999
}{- "price_id": 1234,
- "price_value": 12.45,
- "price_valueGross": 13.56,
- "price_valueNet": 12.45,
- "price_timestamp": 1234,
- "product_id": 1234,
- "customer_id": 1
}Returns the price override for a specific customer.
| id required | integer Example: 123456 ID to find |
| customerId required | integer Example: 123456 Customer category ID to find |
{- "price_id": 1234,
- "price_value": 12.45,
- "price_valueGross": 13.56,
- "price_valueNet": 12.45,
- "price_timestamp": 1234,
- "product_id": 1234,
- "customer_id": 1
}Updates the price override for a specific customer on this product.
| id required | integer Example: 123456 ID to find |
| customerId required | integer Example: 1 customer id |
| price_value required | string |
{- "price_value": "string"
}{- "price_id": 1234,
- "price_value": 12.45,
- "price_valueGross": 13.56,
- "price_valueNet": 12.45,
- "price_timestamp": 1234,
- "product_id": 1234,
- "customer_id": 1
}Removes the price override for a customer, reverting to the product's base price or their category price if one is set.
| id required | integer Example: 123456 ID to find |
| customerId required | integer Example: 123456 Customer category ID to find |
{- "error": false,
- "success": true,
- "msg": "Product price was deleted successfully."
}Returns all customer category price overrides for a product.
| id required | integer Example: 123456 ID to find |
[- {
- "price_id": 1234,
- "price_value": 12.45,
- "price_valueGross": 13.56,
- "price_valueNet": 12.45,
- "price_timestamp": 1234,
- "product_id": 1234,
- "customerCategory_id": 1
}
]Sets a price override for a customer category on this product.
| id required | integer Example: 123456 ID to find |
| price_value required | string |
| customerCategory_id required | integer |
{- "price_value": "string",
- "customerCategory_id": 9999
}{- "price_id": 1234,
- "price_value": 12.45,
- "price_valueGross": 13.56,
- "price_valueNet": 12.45,
- "price_timestamp": 1234,
- "product_id": 1234,
- "customerCategory_id": 1
}Returns the price override for a specific customer category.
| id required | integer Example: 123456 ID to find |
| customerCategoryId required | integer Example: 123456 Customer category ID to find |
{- "price_id": 1234,
- "price_value": 12.45,
- "price_valueGross": 13.56,
- "price_valueNet": 12.45,
- "price_timestamp": 1234,
- "product_id": 1234,
- "customerCategory_id": 1
}Updates the price override for a customer category on this product.
| id required | integer Example: 123456 ID to find |
| customerCategoryId required | integer Example: 1 customer category id |
| price_value required | string |
{- "price_value": "string"
}{- "price_id": 1234,
- "price_value": 12.45,
- "price_valueGross": 13.56,
- "price_valueNet": 12.45,
- "price_timestamp": 1234,
- "product_id": 1234,
- "customerCategory_id": 1
}Removes the price override for a customer category, reverting to the product's base price.
| id required | integer Example: 123456 ID to find |
| customerCategoryId required | integer Example: 123456 Customer category ID to find |
{- "error": false,
- "success": true,
- "msg": "Product price was deleted successfully."
}| page | integer Example: page=1 Page you want to display |
| limit | integer Example: limit=25 Items per page |
[- {
- "productgroup_id": 83012,
- "productgroup_name": "Favorites",
- "productgroup_description": "Just a description",
- "productgroup_shortcut": "fav",
- "productgroup_active": true,
- "productgroup_sortIndex": -1,
- "productgroup_created_at": "2019-07-29 08:26:18",
- "productgroup_updated_at": "2019-07-29 08:26:18",
- "productgroup_type_id": 2
}
]| productgroup_name required | string |
| productgroup_description | string |
| productgroup_shortcut | string |
| productgroup_active | boolean |
| productgroup_parent | integer |
| productgroup_sortIndex | integer |
| productgroup_accountingCode | string |
| productgroup_accountingCodeName | string |
| productgroup_accountingCodeVatRate | string
|
| productgroup_type_id | integer |
{- "productgroup_name": "string",
- "productgroup_description": "string",
- "productgroup_shortcut": "string",
- "productgroup_active": false,
- "productgroup_parent": 9999,
- "productgroup_sortIndex": 9999,
- "productgroup_accountingCode": "string",
- "productgroup_accountingCodeName": "string",
- "productgroup_accountingCodeVatRate": "string",
- "productgroup_type_id": 9999
}{- "productgroup_id": 83012,
- "productgroup_name": "Favorites",
- "productgroup_description": "Just a description",
- "productgroup_shortcut": "fav",
- "productgroup_active": true,
- "productgroup_sortIndex": -1,
- "productgroup_created_at": "2019-07-29 08:26:18",
- "productgroup_updated_at": "2019-07-29 08:26:18",
- "productgroup_type_id": 2
}| id required | integer Example: 123456 ID to find |
{- "productgroup_id": 83012,
- "productgroup_name": "Favorites",
- "productgroup_description": "Just a description",
- "productgroup_shortcut": "fav",
- "productgroup_active": true,
- "productgroup_sortIndex": -1,
- "productgroup_created_at": "2019-07-29 08:26:18",
- "productgroup_updated_at": "2019-07-29 08:26:18",
- "productgroup_type_id": 2
}| id required | integer Example: 123456 ID to find |
| productgroup_name | string |
| productgroup_description | string |
| productgroup_shortcut | string |
| productgroup_active | boolean |
| productgroup_parent | integer |
| productgroup_sortIndex | integer |
| productgroup_accountingCode | string |
| productgroup_accountingCodeName | string |
| productgroup_accountingCodeVatRate | string
|
| productgroup_type_id | integer |
{- "productgroup_name": "string",
- "productgroup_description": "string",
- "productgroup_shortcut": "string",
- "productgroup_active": false,
- "productgroup_parent": 9999,
- "productgroup_sortIndex": 9999,
- "productgroup_accountingCode": "string",
- "productgroup_accountingCodeName": "string",
- "productgroup_accountingCodeVatRate": "string",
- "productgroup_type_id": 9999
}{- "productgroup_id": 83012,
- "productgroup_name": "Favorites",
- "productgroup_description": "Just a description",
- "productgroup_shortcut": "fav",
- "productgroup_active": true,
- "productgroup_sortIndex": -1,
- "productgroup_created_at": "2019-07-29 08:26:18",
- "productgroup_updated_at": "2019-07-29 08:26:18",
- "productgroup_type_id": 2
}| id required | integer Example: 123456 ID to find |
{- "productgroup_id": 83012,
- "productgroup_name": "Favorites",
- "productgroup_description": "Just a description",
- "productgroup_shortcut": "fav",
- "productgroup_active": true,
- "productgroup_sortIndex": -1,
- "productgroup_created_at": "2019-07-29 08:26:18",
- "productgroup_updated_at": "2019-07-29 08:26:18",
- "productgroup_type_id": 2
}| offset | integer Example: offset=10 Offset |
| limit | integer Example: limit=255 Items per page |
| query | string Example: query=RG2018/1 Search query; the value to search by. |
| tableId | integer Example: tableId=153311 Table-Id to filter by. |
| customerId | integer Example: customerId=27268 Customer-Id to filter by. |
| dateField | string Default: "daily_report" Enum: "daily_report" "dr_startDate" "bill" "b_dateTime" Example: dateField=daily_report Date field the query should filter by. |
| dateFrom | string Example: dateFrom=2024-10-23 Marks the start date for filtering. Can be a whole date (account's timestamp is used by default) or a datetime (ISO 8601). |
| dateTo | string Example: dateTo=2024-11-21 Marks the end date for filtering. Can be a whole date (account's timestamp is used by default) or a datetime (ISO 8601). |
| testMode | boolean Default: "false" Example: testMode=false Training mode on/off. |
| items | boolean Default: "false" Example: items=false Include list of items. |
| discounts | boolean Example: discounts=false Include list of discounts. |
| payments | boolean Example: payments=false Include list of payments. |
| payment | boolean Example: payment=false [DEPRECATED] |
{- "invoices": [
- {
- "invoice_id": 1234,
- "invoice_reference_id": 1233,
- "invoice_timestamp": "2019-01-01 00:00:00",
- "invoice_number": 1,
- "invoice_numberFull": "RG2019/1",
- "invoice_total": 12,
- "invoice_totalNet": 10,
- "invoice_totalVat": 2,
- "invoice_totalTip": 0,
- "invoice_address_company": "ready2order GmbH",
- "invoice_address_vatId": "ATU12341234",
- "invoice_address_salutation": "Mr/Ms",
- "invoice_address_title": "Professor",
- "invoice_address_firstName": "Chris",
- "invoice_address_lastName": "Fox",
- "invoice_address_street": "Hintere Zollamtsstraße 17",
- "invoice_address_city": "Vienna",
- "invoice_address_zip": 1030,
- "invoice_address_country": "AT",
- "invoice_address_email": "dux@fox.com",
- "invoice_address_phone": "+43 664 1234 1234 1234",
- "invoice_inPrinterQueue": false,
- "invoice_priceBase": "brutto",
- "invoice_deleted_at": "2019-01-01 00:00:00",
- "invoice_deletedReason": "Some reason",
- "invoice_textBeforeItemsTable": "Some text",
- "invoice_text": "Some text",
- "invoice_locked": true,
- "invoice_externalReferenceNumber": "REF-1234",
- "invoice_internalInvoiceReferenceNumber": 1233,
- "invoice_dueDate": "2019-01-05",
- "invoice_deliveryDate": "2019-01-01",
- "invoice_paid": true,
- "invoice_paidDate": "2019-01-01",
- "invoice_offlineTimestamp": "2019-01-01 00:00:00",
- "invoice_offlineNumber": "2A26A8D9/1",
- "invoice_testMode": true,
- "invoice_formatVersion": 2,
- "customer_id": 1234,
- "customerCategory_id": 1023,
- "table_id": 1234,
- "tableArea_id": 67,
- "paymentMethod_id": 1234,
- "user_id": 1234,
- "printer_id": 23,
- "billType_id": 1,
- "currency_id": 1,
- "items": [
- {
- "item_id": 76234,
- "item_timestamp": "2019-01-01 00:00:00",
- "item_quantity": 1,
- "item_retour": false,
- "item_number": 1,
- "item_serialNumber": "some-serial-number",
- "item_expirationDate": "2019-01-01 00:00:00",
- "item_name": "MyProductName",
- "item_comment": "my-optional-comment",
- "item_price": 12,
- "item_priceNet": 10,
- "item_priceBase": false,
- "item_total": 12,
- "item_totalNet": 10,
- "item_vat": 2,
- "item_vatRate": 20,
- "item_vatCompensation": 0,
- "item_undiscountedSumBeforeLineDiscount": 0,
- "item_undiscountedSumBeforeInvoiceDiscount": 0,
- "item_lineDiscountId": 1234,
- "item_lineDiscountGroupId": 1234,
- "item_lineDiscountName": "SomeDiscountName",
- "item_lineDiscountPercent": 0,
- "item_lineDiscountNet": 0,
- "item_lineDiscountGross": 0,
- "item_invoiceDiscountNet": 0,
- "item_invoiceDiscountGross": 0,
- "item_discountable": true,
- "paymentMethod_id": 1234,
- "item_updatedStock": true,
- "product_id": 1234,
- "productgroup_name": "My product group",
- "productGroup_id": 1234,
- "customer_id": 1234,
- "user_id": 1234,
- "user_name": "SomeUser",
- "invoice_id": 1234,
- "deliveryBill_id": 1234,
- "dailyReport_id": 1234,
- "productUnit_id": 1,
- "table_id": 1234,
- "table_name": "SomeTableName",
- "payment_id": 431,
- "retourInvoice_id": 1233,
- "item_accountingCode": 4000,
- "item_testMode": false,
- "item_product_price": 12,
- "item_product_priceNet": 10,
- "item_product_vat": 2,
- "item_qty": 1,
- "item_product_vatRate": 20,
- "item_product_vatCompensation": 0,
- "item_product_priceNetPerUnit": 10,
- "item_product_pricePerUnit": 12,
- "item_product_discountable": true
}
], - "address": {
- "company": "ready2order GmbH",
- "vatId": "ATU12341234",
- "salutation": "Mr/Ms",
- "title": "Professor",
- "firstName": "Chris",
- "lastName": "Muster",
- "street": "SomeStreet 1234",
- "city": "Vienna",
- "zip": 1030,
- "country": "AT",
- "email": "dummy@email.com",
- "phone": "+43 1234 12312341234"
}, - "type": {
- "billType_id": 1,
- "billType_name": "Rechnung",
- "billType_symbol": "RG"
}, - "payment": [
- {
- "billPayment_id": 9999,
- "billPayment_name": "Cash",
- "billPayment_value": 12,
- "payment_id": 431,
- "referenced_bill_id": 1234
}
], - "transaction": {
- "id": "TFRG4C6NG2",
- "tx_id": "string",
- "customer_receipt": "string",
- "amount": "string",
- "r2o_id": "U1JGILYS"
}, - "discounts": [
- {
- "billDiscount_id": 9999,
- "billDiscount_name": "SomeDiscountName",
- "billDiscount_value": 0,
- "billDiscount_percent": 0,
- "billDiscount_discount_id": 9999,
- "billDiscount_discountGroup_id": 9999,
- "billDiscount_created_at": "2019-01-01 00:00:00",
- "billDiscount_updated_at": "2019-01-01 00:00:00"
}
]
}
], - "count": 50,
- "offset": 0,
- "limit": 50,
- "dateFrom": "2019-01-01",
- "dateTo": "2019-12-31",
- "query": "some-query"
}| paymentMethod_id required | integer PaymentMethod ID. Whether the bill is marked as paid depends on the payment method type — payment methods with markAsPaid=true will automatically mark the bill as paid. |
| user_id required | integer User ID |
Array of objects List of part-payments to split the bill total into multiple payments | |
| table_id | integer Table ID |
| customer_id | integer Customer ID |
| billType_id | integer BillType ID |
| printer_id | integer Printer ID on which the bill should be printed |
| printingProfile_id | integer PrintingProfile ID on which the bill should be printed. |
| invoice_printCount | integer Number of copies to be printed (where 1 is the original receipt) |
| invoice_textBeforeItemsTable | string Text shown before items table on bill PDF |
| invoice_text | string Text shown after items table on bill PDF |
| invoice_externalReferenceNumber | string External reference number for the bill |
| invoice_totalTip | string Total tip amount for the invoice. |
| invoice_priceBase | string Enum: "gross" "net" Pricebase |
| invoice_testMode | boolean Trainingmode |
| createPDF | boolean Whether to create and return PDF or not |
| pdfFormat | string PDF format |
| invoice_showRecipient | boolean Show additional lines on invoice receipt |
| invoice_dueDate | string Due date |
Array of objects List of items | |
| orderItem_ids | Array of integers List of orderItemIds to process the invoice for |
Array of objects Address object | |
Array of objects List of invoice-level discounts | |
| order_enablePrinting | boolean Whether to print the order receipts (foods, drinks) for the bill (if configured) |
| priceLevel_id | integer PriceLevel ID |
| invoice_roundToSmallestCurrencyUnit | string Rounding to 0.05 or 0.10 cents |
{- "paymentMethod_id": 123456,
- "user_id": 123456,
- "partPayments": [
- {
- "paymentMethod_id": 123456,
- "amount": 5,
- "tip": 1,
- "couponIdentifier": "COUPON-123"
}
], - "table_id": 4321,
- "customer_id": 1024,
- "billType_id": 1,
- "printer_id": 1,
- "printingProfile_id": 1,
- "invoice_printCount": 2,
- "invoice_textBeforeItemsTable": "Some text",
- "invoice_text": "Some text",
- "invoice_externalReferenceNumber": "REF-1234",
- "invoice_totalTip": 1.5,
- "invoice_priceBase": "gross or net",
- "invoice_testMode": false,
- "createPDF": false,
- "pdfFormat": "A4, 80mm or 58mm",
- "invoice_showRecipient": false,
- "invoice_dueDate": "2019-01-15",
- "items": [
- {
- "item_quantity": 3,
- "item_name": "MyProductName",
- "item_comment": "MyProductDescription",
- "item_price": 12,
- "item_vatRate": 20,
- "item_vatId": 12345,
- "item_priceBase": "brutto or netto",
- "product_id": 1234,
- "discount_id": 1234,
- "discount_value": 0,
- "discount_unit": "percent or currency",
- "item_variations": [
- {
- "product_id": 1,
- "variation_name": "Schnitzel with chips and mayo",
- "variation_price": 15.2
}
]
}
], - "orderItem_ids": [
- 1,
- 2,
- 3
], - "address": [
- {
- "company": "ready2order GmbH",
- "vatId": "ATU12341234",
- "leitweg_id": 1234,
- "supplier_number": 1234,
- "salutation": "Mr/Mrs",
- "title": "Professor",
- "firstName": "Chris",
- "lastName": "Muster",
- "street": "SomeStreet 1234",
- "city": "Vienna",
- "zip": 1030,
- "country": "AT",
- "email": "dummy@email.com",
- "phone": "+43 1234 12312341234"
}
], - "invoice_discounts": [
- {
- "invoice_discountId": 1234,
- "invoice_discountValue": -5.5,
- "invoice_discountUnit": "percent or currency"
}
], - "order_enablePrinting": true,
- "priceLevel_id": 255,
- "invoice_roundToSmallestCurrencyUnit": "0.05, 0.1"
}{- "invoice_id": 1234,
- "invoice_reference_id": 1233,
- "invoice_timestamp": "2019-01-01 00:00:00",
- "invoice_number": 1,
- "invoice_numberFull": "RG2019/1",
- "invoice_total": 12,
- "invoice_totalNet": 10,
- "invoice_totalVat": 2,
- "invoice_totalTip": 0,
- "invoice_address_company": "ready2order GmbH",
- "invoice_address_vatId": "ATU12341234",
- "invoice_address_salutation": "Mr/Ms",
- "invoice_address_title": "Professor",
- "invoice_address_firstName": "Chris",
- "invoice_address_lastName": "Fox",
- "invoice_address_street": "Hintere Zollamtsstraße 17",
- "invoice_address_city": "Vienna",
- "invoice_address_zip": 1030,
- "invoice_address_country": "AT",
- "invoice_address_email": "dux@fox.com",
- "invoice_address_phone": "+43 664 1234 1234 1234",
- "invoice_inPrinterQueue": false,
- "invoice_priceBase": "brutto",
- "invoice_deleted_at": "2019-01-01 00:00:00",
- "invoice_deletedReason": "Some reason",
- "invoice_textBeforeItemsTable": "Some text",
- "invoice_text": "Some text",
- "invoice_locked": true,
- "invoice_externalReferenceNumber": "REF-1234",
- "invoice_internalInvoiceReferenceNumber": 1233,
- "invoice_dueDate": "2019-01-05",
- "invoice_deliveryDate": "2019-01-01",
- "invoice_paid": true,
- "invoice_paidDate": "2019-01-01",
- "invoice_offlineTimestamp": "2019-01-01 00:00:00",
- "invoice_offlineNumber": "2A26A8D9/1",
- "invoice_testMode": true,
- "invoice_formatVersion": 2,
- "customer_id": 1234,
- "customerCategory_id": 1023,
- "table_id": 1234,
- "tableArea_id": 67,
- "paymentMethod_id": 1234,
- "user_id": 1234,
- "printer_id": 23,
- "billType_id": 1,
- "currency_id": 1,
- "items": [
- {
- "item_id": 76234,
- "item_timestamp": "2019-01-01 00:00:00",
- "item_quantity": 1,
- "item_retour": false,
- "item_number": 1,
- "item_serialNumber": "some-serial-number",
- "item_expirationDate": "2019-01-01 00:00:00",
- "item_name": "MyProductName",
- "item_comment": "my-optional-comment",
- "item_price": 12,
- "item_priceNet": 10,
- "item_priceBase": false,
- "item_total": 12,
- "item_totalNet": 10,
- "item_vat": 2,
- "item_vatRate": 20,
- "item_vatCompensation": 0,
- "item_undiscountedSumBeforeLineDiscount": 0,
- "item_undiscountedSumBeforeInvoiceDiscount": 0,
- "item_lineDiscountId": 1234,
- "item_lineDiscountGroupId": 1234,
- "item_lineDiscountName": "SomeDiscountName",
- "item_lineDiscountPercent": 0,
- "item_lineDiscountNet": 0,
- "item_lineDiscountGross": 0,
- "item_invoiceDiscountNet": 0,
- "item_invoiceDiscountGross": 0,
- "item_discountable": true,
- "paymentMethod_id": 1234,
- "item_updatedStock": true,
- "product_id": 1234,
- "productgroup_name": "My product group",
- "productGroup_id": 1234,
- "customer_id": 1234,
- "user_id": 1234,
- "user_name": "SomeUser",
- "invoice_id": 1234,
- "deliveryBill_id": 1234,
- "dailyReport_id": 1234,
- "productUnit_id": 1,
- "table_id": 1234,
- "table_name": "SomeTableName",
- "payment_id": 431,
- "retourInvoice_id": 1233,
- "item_accountingCode": 4000,
- "item_testMode": false,
- "item_product_price": 12,
- "item_product_priceNet": 10,
- "item_product_vat": 2,
- "item_qty": 1,
- "item_product_vatRate": 20,
- "item_product_vatCompensation": 0,
- "item_product_priceNetPerUnit": 10,
- "item_product_pricePerUnit": 12,
- "item_product_discountable": true
}
], - "address": {
- "company": "ready2order GmbH",
- "vatId": "ATU12341234",
- "salutation": "Mr/Ms",
- "title": "Professor",
- "firstName": "Chris",
- "lastName": "Muster",
- "street": "SomeStreet 1234",
- "city": "Vienna",
- "zip": 1030,
- "country": "AT",
- "email": "dummy@email.com",
- "phone": "+43 1234 12312341234"
}, - "type": {
- "billType_id": 1,
- "billType_name": "Rechnung",
- "billType_symbol": "RG"
}, - "payment": [
- {
- "billPayment_id": 9999,
- "billPayment_name": "Cash",
- "billPayment_value": 12,
- "payment_id": 431,
- "referenced_bill_id": 1234
}
], - "transaction": {
- "id": "TFRG4C6NG2",
- "tx_id": "string",
- "customer_receipt": "string",
- "amount": "string",
- "r2o_id": "U1JGILYS"
}, - "discounts": [
- {
- "billDiscount_id": 9999,
- "billDiscount_name": "SomeDiscountName",
- "billDiscount_value": 0,
- "billDiscount_percent": 0,
- "billDiscount_discount_id": 9999,
- "billDiscount_discountGroup_id": 9999,
- "billDiscount_created_at": "2019-01-01 00:00:00",
- "billDiscount_updated_at": "2019-01-01 00:00:00"
}
]
}| id required | integer Example: 123456 Bill ID to find |
{- "invoice_id": 1234,
- "invoice_reference_id": 1233,
- "invoice_timestamp": "2019-01-01 00:00:00",
- "invoice_number": 1,
- "invoice_numberFull": "RG2019/1",
- "invoice_total": 12,
- "invoice_totalNet": 10,
- "invoice_totalVat": 2,
- "invoice_totalTip": 0,
- "invoice_address_company": "ready2order GmbH",
- "invoice_address_vatId": "ATU12341234",
- "invoice_address_salutation": "Mr/Ms",
- "invoice_address_title": "Professor",
- "invoice_address_firstName": "Chris",
- "invoice_address_lastName": "Fox",
- "invoice_address_street": "Hintere Zollamtsstraße 17",
- "invoice_address_city": "Vienna",
- "invoice_address_zip": 1030,
- "invoice_address_country": "AT",
- "invoice_address_email": "dux@fox.com",
- "invoice_address_phone": "+43 664 1234 1234 1234",
- "invoice_inPrinterQueue": false,
- "invoice_priceBase": "brutto",
- "invoice_deleted_at": "2019-01-01 00:00:00",
- "invoice_deletedReason": "Some reason",
- "invoice_textBeforeItemsTable": "Some text",
- "invoice_text": "Some text",
- "invoice_locked": true,
- "invoice_externalReferenceNumber": "REF-1234",
- "invoice_internalInvoiceReferenceNumber": 1233,
- "invoice_dueDate": "2019-01-05",
- "invoice_deliveryDate": "2019-01-01",
- "invoice_paid": true,
- "invoice_paidDate": "2019-01-01",
- "invoice_offlineTimestamp": "2019-01-01 00:00:00",
- "invoice_offlineNumber": "2A26A8D9/1",
- "invoice_testMode": true,
- "invoice_formatVersion": 2,
- "customer_id": 1234,
- "customerCategory_id": 1023,
- "table_id": 1234,
- "tableArea_id": 67,
- "paymentMethod_id": 1234,
- "user_id": 1234,
- "printer_id": 23,
- "billType_id": 1,
- "currency_id": 1,
- "items": [
- {
- "item_id": 76234,
- "item_timestamp": "2019-01-01 00:00:00",
- "item_quantity": 1,
- "item_retour": false,
- "item_number": 1,
- "item_serialNumber": "some-serial-number",
- "item_expirationDate": "2019-01-01 00:00:00",
- "item_name": "MyProductName",
- "item_comment": "my-optional-comment",
- "item_price": 12,
- "item_priceNet": 10,
- "item_priceBase": false,
- "item_total": 12,
- "item_totalNet": 10,
- "item_vat": 2,
- "item_vatRate": 20,
- "item_vatCompensation": 0,
- "item_undiscountedSumBeforeLineDiscount": 0,
- "item_undiscountedSumBeforeInvoiceDiscount": 0,
- "item_lineDiscountId": 1234,
- "item_lineDiscountGroupId": 1234,
- "item_lineDiscountName": "SomeDiscountName",
- "item_lineDiscountPercent": 0,
- "item_lineDiscountNet": 0,
- "item_lineDiscountGross": 0,
- "item_invoiceDiscountNet": 0,
- "item_invoiceDiscountGross": 0,
- "item_discountable": true,
- "paymentMethod_id": 1234,
- "item_updatedStock": true,
- "product_id": 1234,
- "productgroup_name": "My product group",
- "productGroup_id": 1234,
- "customer_id": 1234,
- "user_id": 1234,
- "user_name": "SomeUser",
- "invoice_id": 1234,
- "deliveryBill_id": 1234,
- "dailyReport_id": 1234,
- "productUnit_id": 1,
- "table_id": 1234,
- "table_name": "SomeTableName",
- "payment_id": 431,
- "retourInvoice_id": 1233,
- "item_accountingCode": 4000,
- "item_testMode": false,
- "item_product_price": 12,
- "item_product_priceNet": 10,
- "item_product_vat": 2,
- "item_qty": 1,
- "item_product_vatRate": 20,
- "item_product_vatCompensation": 0,
- "item_product_priceNetPerUnit": 10,
- "item_product_pricePerUnit": 12,
- "item_product_discountable": true
}
], - "address": {
- "company": "ready2order GmbH",
- "vatId": "ATU12341234",
- "salutation": "Mr/Ms",
- "title": "Professor",
- "firstName": "Chris",
- "lastName": "Muster",
- "street": "SomeStreet 1234",
- "city": "Vienna",
- "zip": 1030,
- "country": "AT",
- "email": "dummy@email.com",
- "phone": "+43 1234 12312341234"
}, - "type": {
- "billType_id": 1,
- "billType_name": "Rechnung",
- "billType_symbol": "RG"
}, - "payment": [
- {
- "billPayment_id": 9999,
- "billPayment_name": "Cash",
- "billPayment_value": 12,
- "payment_id": 431,
- "referenced_bill_id": 1234
}
], - "transaction": {
- "id": "TFRG4C6NG2",
- "tx_id": "string",
- "customer_receipt": "string",
- "amount": "string",
- "r2o_id": "U1JGILYS"
}, - "discounts": [
- {
- "billDiscount_id": 9999,
- "billDiscount_name": "SomeDiscountName",
- "billDiscount_value": 0,
- "billDiscount_percent": 0,
- "billDiscount_discount_id": 9999,
- "billDiscount_discountGroup_id": 9999,
- "billDiscount_created_at": "2019-01-01 00:00:00",
- "billDiscount_updated_at": "2019-01-01 00:00:00"
}
]
}Cancels an invoice by creating a cancellation (storno) bill that reverses its items and payments. By default the cancellation is paid back with the original invoice's payment method. An explicit paymentMethod_id and/or partPayments can be given to pay the cancellation back differently - see the description of those parameters for details.
| id required | integer Example: 123456 ID of the invoice that should be cancelled |
| storno_id required | integer ID of the storno reason that justifies this cancellation. See |
| storno_reason required | string Free-text comment explaining why this specific invoice was cancelled. Stored on the cancellation bill alongside the storno reason referenced by |
| invoice_externalReferenceNumber | string External reference number to store on the cancellation bill. |
| paymentMethod_id | integer PaymentMethod ID to cancel the invoice with. If |
Array of objects List of part-payments to split the cancellation amount across multiple payment methods, analogous to |
{- "storno_id": 9823,
- "storno_reason": "Correction",
- "invoice_externalReferenceNumber": "REF-1234",
- "paymentMethod_id": 123456,
- "partPayments": [
- {
- "paymentMethod_id": 123456,
- "amount": 5,
- "tip": 1,
- "couponIdentifier": "COUPON-123"
}
]
}{- "invoice_id": 1234,
- "invoice_reference_id": 1233,
- "invoice_timestamp": "2019-01-01 00:00:00",
- "invoice_number": 1,
- "invoice_numberFull": "RG2019/1",
- "invoice_total": 12,
- "invoice_totalNet": 10,
- "invoice_totalVat": 2,
- "invoice_totalTip": 0,
- "invoice_address_company": "ready2order GmbH",
- "invoice_address_vatId": "ATU12341234",
- "invoice_address_salutation": "Mr/Ms",
- "invoice_address_title": "Professor",
- "invoice_address_firstName": "Chris",
- "invoice_address_lastName": "Fox",
- "invoice_address_street": "Hintere Zollamtsstraße 17",
- "invoice_address_city": "Vienna",
- "invoice_address_zip": 1030,
- "invoice_address_country": "AT",
- "invoice_address_email": "dux@fox.com",
- "invoice_address_phone": "+43 664 1234 1234 1234",
- "invoice_inPrinterQueue": false,
- "invoice_priceBase": "brutto",
- "invoice_deleted_at": "2019-01-01 00:00:00",
- "invoice_deletedReason": "Some reason",
- "invoice_textBeforeItemsTable": "Some text",
- "invoice_text": "Some text",
- "invoice_locked": true,
- "invoice_externalReferenceNumber": "REF-1234",
- "invoice_internalInvoiceReferenceNumber": 1233,
- "invoice_dueDate": "2019-01-05",
- "invoice_deliveryDate": "2019-01-01",
- "invoice_paid": true,
- "invoice_paidDate": "2019-01-01",
- "invoice_offlineTimestamp": "2019-01-01 00:00:00",
- "invoice_offlineNumber": "2A26A8D9/1",
- "invoice_testMode": true,
- "invoice_formatVersion": 2,
- "customer_id": 1234,
- "customerCategory_id": 1023,
- "table_id": 1234,
- "tableArea_id": 67,
- "paymentMethod_id": 1234,
- "user_id": 1234,
- "printer_id": 23,
- "billType_id": 1,
- "currency_id": 1,
- "items": [
- {
- "item_id": 76234,
- "item_timestamp": "2019-01-01 00:00:00",
- "item_quantity": 1,
- "item_retour": false,
- "item_number": 1,
- "item_serialNumber": "some-serial-number",
- "item_expirationDate": "2019-01-01 00:00:00",
- "item_name": "MyProductName",
- "item_comment": "my-optional-comment",
- "item_price": 12,
- "item_priceNet": 10,
- "item_priceBase": false,
- "item_total": 12,
- "item_totalNet": 10,
- "item_vat": 2,
- "item_vatRate": 20,
- "item_vatCompensation": 0,
- "item_undiscountedSumBeforeLineDiscount": 0,
- "item_undiscountedSumBeforeInvoiceDiscount": 0,
- "item_lineDiscountId": 1234,
- "item_lineDiscountGroupId": 1234,
- "item_lineDiscountName": "SomeDiscountName",
- "item_lineDiscountPercent": 0,
- "item_lineDiscountNet": 0,
- "item_lineDiscountGross": 0,
- "item_invoiceDiscountNet": 0,
- "item_invoiceDiscountGross": 0,
- "item_discountable": true,
- "paymentMethod_id": 1234,
- "item_updatedStock": true,
- "product_id": 1234,
- "productgroup_name": "My product group",
- "productGroup_id": 1234,
- "customer_id": 1234,
- "user_id": 1234,
- "user_name": "SomeUser",
- "invoice_id": 1234,
- "deliveryBill_id": 1234,
- "dailyReport_id": 1234,
- "productUnit_id": 1,
- "table_id": 1234,
- "table_name": "SomeTableName",
- "payment_id": 431,
- "retourInvoice_id": 1233,
- "item_accountingCode": 4000,
- "item_testMode": false,
- "item_product_price": 12,
- "item_product_priceNet": 10,
- "item_product_vat": 2,
- "item_qty": 1,
- "item_product_vatRate": 20,
- "item_product_vatCompensation": 0,
- "item_product_priceNetPerUnit": 10,
- "item_product_pricePerUnit": 12,
- "item_product_discountable": true
}
], - "address": {
- "company": "ready2order GmbH",
- "vatId": "ATU12341234",
- "salutation": "Mr/Ms",
- "title": "Professor",
- "firstName": "Chris",
- "lastName": "Muster",
- "street": "SomeStreet 1234",
- "city": "Vienna",
- "zip": 1030,
- "country": "AT",
- "email": "dummy@email.com",
- "phone": "+43 1234 12312341234"
}, - "type": {
- "billType_id": 1,
- "billType_name": "Rechnung",
- "billType_symbol": "RG"
}, - "payment": [
- {
- "billPayment_id": 9999,
- "billPayment_name": "Cash",
- "billPayment_value": 12,
- "payment_id": 431,
- "referenced_bill_id": 1234
}
], - "transaction": {
- "id": "TFRG4C6NG2",
- "tx_id": "string",
- "customer_receipt": "string",
- "amount": "string",
- "r2o_id": "U1JGILYS"
}, - "discounts": [
- {
- "billDiscount_id": 9999,
- "billDiscount_name": "SomeDiscountName",
- "billDiscount_value": 0,
- "billDiscount_percent": 0,
- "billDiscount_discount_id": 9999,
- "billDiscount_discountGroup_id": 9999,
- "billDiscount_created_at": "2019-01-01 00:00:00",
- "billDiscount_updated_at": "2019-01-01 00:00:00"
}
]
}Add bill to printer queue for specific printer
| id required | integer Example: 123456 Bill ID to find |
| printer_id | integer Printer ID where to print the bill |
| printingProfile_id | integer PrintingProfile ID on which the bill should be printed. |
{- "printer_id": 2394,
- "printingProfile_id": 1
}{- "error": false,
- "msg": "Bill was added to printer queue"
}Returns signed S3 URL. Optionally regenerates pdf if regeneratePDF is set to true
| id required | integer Example: 12345 User ID to delete |
| regeneratePDF | boolean Example: regeneratePDF=true Regenerate an existing PDF |
| format | string Default: "A4" Example: format=A4, 80mm or 58mm PDF Format |
{- "error": false,
- "format": "A4"
}| page | integer Example: page=1 Page you want to display |
| limit | integer Example: limit=25 Items per page |
[- {
- "storno_id": 1234,
- "storno_name": "cancellation",
- "storno_description": "storno reason 1234",
- "storno_created_at": "2019-01-01 12:00:00"
}
]| storno_name required | string Storno name |
| storno_description | string Storno description |
{- "storno_name": "cancellation",
- "storno_description": "storno reason 1234"
}{- "storno_id": 1234,
- "storno_name": "cancellation",
- "storno_description": "storno reason 1234",
- "storno_created_at": "2019-01-01 12:00:00"
}| id required | integer Example: 1234 storno id |
| storno_name required | string Storno name |
| storno_description | string Storno description |
{- "storno_name": "cancellation",
- "storno_description": "storno reason 1234"
}{- "storno_id": 1234,
- "storno_name": "cancellation",
- "storno_description": "storno reason 1234",
- "storno_created_at": "2019-01-01 12:00:00"
}| payment_description | string The description of the payment method |
| payment_markAsPaid | boolean Mark payment method as paid |
| paymentType_id required | integer The payment type id of the payment method |
| payment_accountingCode | string The accounting code of the payment method |
| payment_name required | string The name of the payment method |
{- "payment_description": "Paying in cash",
- "payment_markAsPaid": true,
- "paymentType_id": 1,
- "payment_accountingCode": 1234,
- "payment_name": "Barzahlung"
}{- "payment_id": 74890,
- "payment_name": "Barzahlung",
- "payment_description": "just a description",
- "payment_accountingCode": 2700,
- "payment_markAsPaid": true,
- "paymentType_id": 1
}| id required | integer Example: 123456 ID to find |
{- "payment_id": 74890,
- "payment_name": "Barzahlung",
- "payment_description": "just a description",
- "payment_accountingCode": 2700,
- "payment_markAsPaid": true,
- "paymentType_id": 1
}| id required | integer Example: 123456 ID to find |
| payment_description | string The description of the payment method |
| payment_markAsPaid | boolean Mark payment method as paid |
| paymentType_id | integer The payment type id of the payment method |
| payment_accountingCode | string The accounting code of the payment method |
| payment_name | string The name of the payment method |
{- "payment_description": "Paying in cash",
- "payment_markAsPaid": true,
- "paymentType_id": 1,
- "payment_accountingCode": 1234,
- "payment_name": "Barzahlung"
}{- "payment_id": 74890,
- "payment_name": "Barzahlung",
- "payment_description": "just a description",
- "payment_accountingCode": 2700,
- "payment_markAsPaid": true,
- "paymentType_id": 1
}Coupons are gift cards and vouchers that merchants sell and later accept as payment at the point of sale. The coupon_value field always holds the current remaining balance.
Balance and Lifecycle
You create a coupon with an initial value. From there you can charge it (add value) or redeem it (deduct value). Partial redemptions work fine; the coupon stays active until the balance reaches zero.
Coupon Purpose
coupon_purpose determines when VAT is due. We distinguish between two voucher types:
| Purpose | When VAT is due | coupon_containsVat |
|---|---|---|
single |
At issuance (place of supply and tax rate are known at creation) | The applicable rate, e.g. 20 |
multi |
At redemption (the POS applies the right rate per item) | Must be 0 |
Single-purpose suits vouchers for specific goods at a fixed rate, such as a drink voucher tied to a particular product.
Multi-purpose fits general gift cards redeemable for anything or across multiple locations.
Check with your tax advisor which type applies to your situation.
Identifier
coupon_identifier is the numeric code printed on physical voucher cards. If you leave it out, an EAN-13 code is generated automatically. Pass it as the identifier query parameter on GET /coupons to look up a coupon by barcode scan.
Returns a paginated list of coupons. Filter by identifier to look up a coupon by its code (e.g. scanned from a barcode).
| page | integer Example: page=1 Page you want to display |
| limit | integer Example: limit=25 Items per page |
| identifier | string Example: identifier=9995071228303 Identifier/Code of coupon |
| trainingMode | boolean Example: trainingMode=false Trainingmode |
[- {
- "coupon_id": 1234,
- "coupon_name": "Christmas Coupon",
- "coupon_containsVat": 20,
- "coupon_purpose": "single|multi",
- "coupon_identifier": 9995071228303,
- "coupon_testMode": true,
- "coupon_validUntil": "2020-01-31 00:49:39",
- "coupon_issuedAt": "2018-01-31 00:49:39",
- "couponCategory_id": 4,
- "vat_id": 1234,
- "product_id": 1234,
- "customer_id": 7455,
- "coupon_created_at": "2018-01-31 00:49:39",
- "coupon_updated_at": "2018-01-31 04:49:39"
}
]Creates a new coupon. coupon_identifier is auto-generated as an EAN-13 code if omitted. Set coupon_purpose to "single" or "multi" to control when VAT is due: at issuance or at redemption.
| coupon_name required | string |
| coupon_value required | string |
| couponCategory_id | integer |
| coupon_containsVat | string |
| customer_id | integer |
| coupon_type | string Value: "coupon" |
| coupon_purpose | string Enum: "single" "multi" |
| coupon_validUntil | string |
| coupon_issuedAt | string |
| coupon_testMode | boolean |
| coupon_identifier | string |
{- "coupon_name": "MyCoupon",
- "coupon_value": 5,
- "couponCategory_id": 123,
- "coupon_containsVat": 3,
- "customer_id": 450,
- "coupon_type": "coupon",
- "coupon_purpose": "single|multi",
- "coupon_validUntil": "2030-01-02",
- "coupon_issuedAt": "2025-01-02",
- "coupon_testMode": false,
- "coupon_identifier": "AABBCC"
}{- "coupon_id": 1234,
- "coupon_name": "Christmas Coupon",
- "coupon_containsVat": 20,
- "coupon_purpose": "single|multi",
- "coupon_identifier": 9995071228303,
- "coupon_testMode": true,
- "coupon_validUntil": "2020-01-31 00:49:39",
- "coupon_issuedAt": "2018-01-31 00:49:39",
- "couponCategory_id": 4,
- "vat_id": 1234,
- "product_id": 1234,
- "customer_id": 7455,
- "coupon_created_at": "2018-01-31 00:49:39",
- "coupon_updated_at": "2018-01-31 04:49:39"
}Returns a single coupon by its ID, including its current balance in coupon_value.
| id required | integer Example: 123456 Coupon ID to find |
{- "coupon_id": 1234,
- "coupon_name": "Christmas Coupon",
- "coupon_containsVat": 20,
- "coupon_purpose": "single|multi",
- "coupon_identifier": 9995071228303,
- "coupon_testMode": true,
- "coupon_validUntil": "2020-01-31 00:49:39",
- "coupon_issuedAt": "2018-01-31 00:49:39",
- "couponCategory_id": 4,
- "vat_id": 1234,
- "product_id": 1234,
- "customer_id": 7455,
- "coupon_created_at": "2018-01-31 00:49:39",
- "coupon_updated_at": "2018-01-31 04:49:39"
}Updates coupon metadata such as name, validity dates, category, or customer assignment. To adjust the balance, use the charge or redeem endpoints instead.
| id required | integer Example: 12345 Coupon ID to update |
| coupon_name | string |
| coupon_value | string |
| couponCategory_id | integer |
| coupon_containsVat | string |
| customer_id | integer |
| coupon_type | string Value: "coupon" |
| coupon_purpose | string Enum: "single" "multi" |
| coupon_validUntil | string |
| coupon_issuedAt | string |
| coupon_testMode | boolean |
| coupon_identifier | string |
{- "coupon_name": "MyCoupon",
- "coupon_value": 5,
- "couponCategory_id": 123,
- "coupon_containsVat": 3,
- "customer_id": 450,
- "coupon_type": "coupon",
- "coupon_purpose": "single|multi",
- "coupon_validUntil": "2030-01-02",
- "coupon_issuedAt": "2025-01-02",
- "coupon_testMode": false,
- "coupon_identifier": "AABBCC"
}{- "coupon_id": 1234,
- "coupon_name": "Christmas Coupon",
- "coupon_containsVat": 20,
- "coupon_purpose": "single|multi",
- "coupon_identifier": 9995071228303,
- "coupon_testMode": true,
- "coupon_validUntil": "2020-01-31 00:49:39",
- "coupon_issuedAt": "2018-01-31 00:49:39",
- "couponCategory_id": 4,
- "vat_id": 1234,
- "product_id": 1234,
- "customer_id": 7455,
- "coupon_created_at": "2018-01-31 00:49:39",
- "coupon_updated_at": "2018-01-31 04:49:39"
}Adds value to an existing coupon's balance, for example when a customer tops up a voucher card.
| id required | integer Example: 1234 Coupon ID to charge |
| value required | string Charge value |
{- "value": 12
}{- "coupon_id": 1234,
- "coupon_name": "Christmas Coupon",
- "coupon_containsVat": 20,
- "coupon_purpose": "single|multi",
- "coupon_identifier": 9995071228303,
- "coupon_testMode": true,
- "coupon_validUntil": "2020-01-31 00:49:39",
- "coupon_issuedAt": "2018-01-31 00:49:39",
- "couponCategory_id": 4,
- "vat_id": 1234,
- "product_id": 1234,
- "customer_id": 7455,
- "coupon_created_at": "2018-01-31 00:49:39",
- "coupon_updated_at": "2018-01-31 04:49:39"
}Deducts the specified value from the coupon's balance. Partial redemptions are supported. Returns the updated coupon with the new balance in coupon_value.
| id required | integer Example: 1234 Coupon ID to redeem |
| value required | string Redemption value |
{- "value": 12
}{- "coupon_id": 1234,
- "coupon_name": "Christmas Coupon",
- "coupon_containsVat": 20,
- "coupon_purpose": "single|multi",
- "coupon_identifier": 9995071228303,
- "coupon_testMode": true,
- "coupon_validUntil": "2020-01-31 00:49:39",
- "coupon_issuedAt": "2018-01-31 00:49:39",
- "couponCategory_id": 4,
- "vat_id": 1234,
- "product_id": 1234,
- "customer_id": 7455,
- "coupon_created_at": "2018-01-31 00:49:39",
- "coupon_updated_at": "2018-01-31 04:49:39"
}Returns a paginated list of coupon categories for the authenticated account.
| page | integer Example: page=1 Page you want to display |
| limit | integer Example: limit=25 Items per page |
[- {
- "couponCategory_id": 123,
- "couponCategory_name": "my coupon category",
- "couponCategory_description": "my great coupon category"
}
]Creates a new coupon category. Categories are used to organise coupons and have no effect on coupon behaviour or fiscal treatment.
| couponCategory_name required | string |
| couponCategory_description | string |
{- "couponCategory_name": "string",
- "couponCategory_description": "string"
}{- "couponCategory_id": 123,
- "couponCategory_name": "my coupon category",
- "couponCategory_description": "my great coupon category"
}Returns a single coupon category by its ID.
| id required | integer Example: 123456 Coupon Category ID to find |
{- "couponCategory_id": 123,
- "couponCategory_name": "my coupon category",
- "couponCategory_description": "my great coupon category"
}Updates the name and description of an existing coupon category.
| id required | integer Example: 12345 Coupon Category ID to update |
| couponCategory_name required | string |
| couponCategory_description | string |
{- "couponCategory_name": "string",
- "couponCategory_description": "string"
}{- "couponCategory_id": 123,
- "couponCategory_name": "my coupon category",
- "couponCategory_description": "my great coupon category"
}Deletes a coupon category. Fails if coupons are still assigned to it; reassign or delete those coupons first.
| id required | integer Example: 123456 Coupon Category ID to find |
{- "error": false,
- "success": true,
- "msg": "Coupon Category was successfully deleted!"
}Discounts are preset price reductions that cashiers can apply at the point of sale. Unlike coupons, they are not financial instruments; they simply reduce the sale price, with VAT calculated on the reduced amount.
Every discount belongs to a group via discountGroup_id. The group determines how discounts are organised and presented at the POS. You need at least one discount group before you can create a discount.
Discount unit
discount_unit controls how the reduction is calculated:
| Unit | Behaviour | discount_value |
|---|---|---|
percent |
Reduces the price by a percentage | 0–100 |
currency |
Reduces the price by a fixed amount | Any positive number |
custom |
The cashier enters the amount at checkout | Not required |
Visibility and ordering
Set discount_active to false to hide a discount at the POS without deleting it. discount_order controls the position in the list shown to cashiers.
Returns all discounts for the account, including inactive ones.
[- {
- "discount_id": 123,
- "discount_name": "Discount",
- "discount_description": "A discount description",
- "discount_value": 30,
- "discount_unit": "custom",
- "discount_active": true,
- "discount_order": 0,
- "discountGroup_id": 116,
- "discount_created_at": "2018-12-20 11:00:00",
- "discount_updated_at": "2018-12-20 11:15:00"
}
]Creates a new discount.
| discount_name required | string The name of the discount |
| discountGroup_id required | integer The id of the discount group |
| discount_unit required | string Enum: "percent" "currency" "custom" The unit of the discount |
| discount_order | integer The order of the discount |
| discount_description | string The description of the discount |
| discount_active | boolean Whether the discount is active or not |
| discount_value required | string The value of the discount |
{- "discount_name": "Discount",
- "discountGroup_id": 116,
- "discount_unit": "custom",
- "discount_order": 9999,
- "discount_description": "A discount description",
- "discount_active": true,
- "discount_value": 30
}{- "discount_id": 123,
- "discount_name": "Discount",
- "discount_description": "A discount description",
- "discount_value": 30,
- "discount_unit": "custom",
- "discount_active": true,
- "discount_order": 0,
- "discountGroup_id": 116,
- "discount_created_at": "2018-12-20 11:00:00",
- "discount_updated_at": "2018-12-20 11:15:00"
}Returns a single discount by its ID.
| id required | integer Example: 123456 ID to find |
{- "discount_id": 123,
- "discount_name": "Discount",
- "discount_description": "A discount description",
- "discount_value": 30,
- "discount_unit": "custom",
- "discount_active": true,
- "discount_order": 0,
- "discountGroup_id": 116,
- "discount_created_at": "2018-12-20 11:00:00",
- "discount_updated_at": "2018-12-20 11:15:00"
}Updates an existing discount.
| id required | integer Example: 123456 ID to find |
| discount_name | string The name of the discount |
| discountGroup_id | integer The id of the discount group |
| discount_unit | string Enum: "percent" "currency" "custom" The unit of the discount |
| discount_order | integer The order of the discount |
| discount_description | string The description of the discount |
| discount_active | boolean Whether the discount is active or not |
| discount_value | string The value of the discount |
{- "discount_name": "Discount",
- "discountGroup_id": 116,
- "discount_unit": "custom",
- "discount_order": 9999,
- "discount_description": "A discount description",
- "discount_active": true,
- "discount_value": 30
}{- "discount_id": 123,
- "discount_name": "Discount",
- "discount_description": "A discount description",
- "discount_value": 30,
- "discount_unit": "custom",
- "discount_active": true,
- "discount_order": 0,
- "discountGroup_id": 116,
- "discount_created_at": "2018-12-20 11:00:00",
- "discount_updated_at": "2018-12-20 11:15:00"
}Discount groups organise discounts into named collections. Every discount must belong to a group, so you need at least one group before you can create discounts.
Setting discountGroup_active to false hides all discounts in the group at the POS, which is useful for seasonal or temporarily suspended promotions.
A group cannot be deleted while it still contains discounts. Delete or move the discounts out of the group first.
Returns all discount groups for the account, including inactive ones.
[- {
- "discountGroup_id": 74890,
- "discountGroup_name": "Barzahlung",
- "discountGroup_description": "just a description",
- "discountGroup_active": true
}
]Creates a new discount group. You need at least one group before you can create discounts.
| discountGroup_description | string The description of the discount group |
| discountGroup_active | boolean Whether the discount group is active or not |
| discountGroup_name required | string The name of the discount group |
{- "discountGroup_description": "description example",
- "discountGroup_active": true,
- "discountGroup_name": "Sales"
}{- "discountGroup_id": 74890,
- "discountGroup_name": "Barzahlung",
- "discountGroup_description": "just a description",
- "discountGroup_active": true
}Returns a single discount group by its ID.
| id required | integer Example: 123456 ID to find |
{- "discountGroup_id": 74890,
- "discountGroup_name": "Barzahlung",
- "discountGroup_description": "just a description",
- "discountGroup_active": true
}Updates an existing discount group.
| id required | integer Example: 123456 ID to find |
| discountGroup_description | string The description of the discount group |
| discountGroup_active | boolean Whether the discount group is active or not |
| discountGroup_name | string The name of the discount group |
{- "discountGroup_description": "description example",
- "discountGroup_active": true,
- "discountGroup_name": "Sales"
}{- "discountGroup_id": 74890,
- "discountGroup_name": "Barzahlung",
- "discountGroup_description": "just a description",
- "discountGroup_active": true
}Deletes a discount group. Fails if the group still contains discounts; delete or reassign those first.
| id required | integer Example: 123456 ID to find |
{- "error": false,
- "success": true,
- "msg": "DiscountGroup was successfully deleted!"
}| page | integer Example: page=1 Page you want to display |
| limit | integer Example: limit=25 Items per page |
[- {
- "customer_id": 9999,
- "customer_number": 9999,
- "customer_name": "Maxi's custom name",
- "vatId": "ATU1234567",
- "customer_notes": "Some custom notes",
- "customerCategory_id": 9999,
- "customer_birthday": "1991-09-20",
- "address": [
- {
- "invoice": [
- {
- "salutation": "Herr",
- "title": "Professor",
- "customer_company": "Maxi Gmbh",
- "lastName": "Muster",
- "firstName": "Max",
- "zip": 1030,
- "city": "WIen",
- "street": "Straße 1",
- "country": "AT",
- "email": "example@ready2order.com",
- "phone": "+43 664 12345678"
}
]
}
]
}
]| customerCategory_id required | integer |
| birthday | string |
| city | string |
| company | string |
string | |
| firstName | string |
| lastName | string |
| customer_name | string |
| notes | string |
| customer_number | integer |
| phone | string |
| salutation | string |
| street | string |
| title | string |
| uid | string |
| zip | string |
Array of items |
{- "customerCategory_id": 1126,
- "birthday": "1991-09-20",
- "city": "Wien",
- "company": "Maxi Gmbh",
- "email": "example@ready2order.com",
- "firstName": "Max",
- "lastName": "Muster",
- "customer_name": "string",
- "notes": "Some custom notes",
- "customer_number": 9999,
- "phone": "+43 12345678",
- "salutation": "Herr",
- "street": "Straße 1",
- "title": "Herr",
- "uid": "ATU1234567",
- "zip": 1030,
- "address": [
- null
]
}{- "customer_id": 9999,
- "customer_number": 9999,
- "customer_name": "Maxi's custom name",
- "vatId": "ATU1234567",
- "customer_notes": "Some custom notes",
- "customerCategory_id": 9999,
- "customer_birthday": "1991-09-20",
- "address": [
- {
- "invoice": [
- {
- "salutation": "Herr",
- "title": "Professor",
- "customer_company": "Maxi Gmbh",
- "lastName": "Muster",
- "firstName": "Max",
- "zip": 1030,
- "city": "WIen",
- "street": "Straße 1",
- "country": "AT",
- "email": "example@ready2order.com",
- "phone": "+43 664 12345678"
}
]
}
]
}| id required | integer Example: 123456 Customer ID to find |
{- "customer_id": 9999,
- "customer_number": 9999,
- "customer_name": "Maxi's custom name",
- "vatId": "ATU1234567",
- "customer_notes": "Some custom notes",
- "customerCategory_id": 9999,
- "customer_birthday": "1991-09-20",
- "address": [
- {
- "invoice": [
- {
- "salutation": "Herr",
- "title": "Professor",
- "customer_company": "Maxi Gmbh",
- "lastName": "Muster",
- "firstName": "Max",
- "zip": 1030,
- "city": "WIen",
- "street": "Straße 1",
- "country": "AT",
- "email": "example@ready2order.com",
- "phone": "+43 664 12345678"
}
]
}
]
}| id required | integer Example: 12345 Customer ID to update |
| customerCategory_id | integer |
| birthday | string |
| city | string |
| company | string |
string | |
| firstName | string |
| lastName | string |
| customer_name | string |
| notes | string |
| customer_number | integer |
| phone | string |
| salutation | string |
| street | string |
| title | string |
| uid | string |
| zip | string |
Array of items |
{- "customerCategory_id": 1126,
- "birthday": "1991-09-20",
- "city": "Wien",
- "company": "Maxi Gmbh",
- "email": "example@ready2order.com",
- "firstName": "Max",
- "lastName": "Muster",
- "customer_name": "string",
- "notes": "Some custom notes",
- "customer_number": 9999,
- "phone": "+43 12345678",
- "salutation": "Herr",
- "street": "Straße 1",
- "title": "Herr",
- "uid": "ATU1234567",
- "zip": 1030,
- "address": [
- null
]
}{- "customer_id": 9999,
- "customer_number": 9999,
- "customer_name": "Maxi's custom name",
- "vatId": "ATU1234567",
- "customer_notes": "Some custom notes",
- "customerCategory_id": 9999,
- "customer_birthday": "1991-09-20",
- "address": [
- {
- "invoice": [
- {
- "salutation": "Herr",
- "title": "Professor",
- "customer_company": "Maxi Gmbh",
- "lastName": "Muster",
- "firstName": "Max",
- "zip": 1030,
- "city": "WIen",
- "street": "Straße 1",
- "country": "AT",
- "email": "example@ready2order.com",
- "phone": "+43 664 12345678"
}
]
}
]
}| masterCustomer required | integer Customer into which the list of customerIds should be merged into. |
| customerIds required | Array of integers List of customers which shall be merged into masterCustomer. |
{- "masterCustomer": 5924,
- "customerIds": [
- 1,
- 2,
- 3,
- 4
]
}{- "error": false,
- "success": true,
- "msg": "Merged successfully!"
}| page | integer Example: page=1 Page you want to display |
| limit | integer Example: limit=25 Items per page |
| groupBy | string Enum: "table_id" "product_id" Example: groupBy=table_id allowed values: table_id or product_id or both |
| trainingsMode | string Enum: "0" "1" "true" "false" Example: trainingsMode=true retrieve results for trainingsMode or liveMode |
| table_id | integer Example: table_id=123 table id |
| product_id | integer Example: product_id=123 product id |
[- {
- "order_id": 123,
- "order_quantity": 123,
- "order_priceGross": 123.12,
- "order_priceNet": 123.12,
- "order_vat": 10,
- "order_discount_valueGross": 10,
- "order_discount_valueNet": 10,
- "order_vatRate": 10,
- "order_product_priceGrossPerUnit": 123,
- "order_product_priceNetPerUnit": 123,
- "order_discount_name": "discountA",
- "order_discountable": true,
- "order_mergeable": true,
- "order_retour": false,
- "order_number": 123,
- "order_group": 123,
- "order_product_name": "productA",
- "order_product_itemnumber": 123,
- "order_product_serialnumber": 1231234,
- "order_course": 1,
- "order_status": 1,
- "order_comment": "very long text",
- "table_id": 123456,
- "product_id": 123456,
- "user_id": 123456,
- "productgroup_type_id": 123456,
- "order_created_at": "2019-01-01"
}
]| table_id required | integer Table on which the orders are booked |
| price_base | string Enum: "0" "1" "brutto" "netto" "gross" "net" 'gross' or 'net' |
| training_mode | boolean Whether to place the order in training- or normal-mode |
required | Array of objects List of items |
{- "table_id": 1234,
- "price_base": "gross",
- "training_mode": false,
- "items": [ ]
}[- {
- "order_id": 123,
- "order_quantity": 123,
- "order_priceGross": 123.12,
- "order_priceNet": 123.12,
- "order_vat": 10,
- "order_discount_valueGross": 10,
- "order_discount_valueNet": 10,
- "order_vatRate": 10,
- "order_product_priceGrossPerUnit": 123,
- "order_product_priceNetPerUnit": 123,
- "order_discount_name": "discountA",
- "order_discountable": true,
- "order_mergeable": true,
- "order_retour": false,
- "order_number": 123,
- "order_group": 123,
- "order_product_name": "productA",
- "order_product_itemnumber": 123,
- "order_product_serialnumber": 1231234,
- "order_course": 1,
- "order_status": 1,
- "order_comment": "very long text",
- "table_id": 123456,
- "product_id": 123456,
- "user_id": 123456,
- "productgroup_type_id": 123456,
- "order_created_at": "2019-01-01"
}
]Transfers unbilled order items from one table to another.
Pass specific order_ids to transfer a subset, or omit the field to transfer all unbilled items on the source table.
| source_table_id required | integer ID of the table to transfer order items from |
| target_table_id required | integer ID of the table to transfer order items to |
| target_order_group_id required | integer Order group on the target table to assign transferred items to |
| target_order_group_name | string Name of the target order group (optional) |
| order_ids | Array of integers IDs of the specific order items to transfer. Omit or pass an empty array to transfer every unbilled item on the source table. |
| training_mode | boolean Whether to operate in training mode |
{- "source_table_id": 10,
- "target_table_id": 20,
- "target_order_group_id": 1,
- "target_order_group_name": "Group A",
- "order_ids": [
- 101,
- 102,
- 103
], - "training_mode": false
}[- {
- "order_id": 123,
- "order_quantity": 123,
- "order_priceGross": 123.12,
- "order_priceNet": 123.12,
- "order_vat": 10,
- "order_discount_valueGross": 10,
- "order_discount_valueNet": 10,
- "order_vatRate": 10,
- "order_product_priceGrossPerUnit": 123,
- "order_product_priceNetPerUnit": 123,
- "order_discount_name": "discountA",
- "order_discountable": true,
- "order_mergeable": true,
- "order_retour": false,
- "order_number": 123,
- "order_group": 123,
- "order_product_name": "productA",
- "order_product_itemnumber": 123,
- "order_product_serialnumber": 1231234,
- "order_course": 1,
- "order_status": 1,
- "order_comment": "very long text",
- "table_id": 123456,
- "product_id": 123456,
- "user_id": 123456,
- "productgroup_type_id": 123456,
- "order_created_at": "2019-01-01"
}
]| page | integer Example: page=1 Page you want to display |
| limit | integer Example: limit=25 Items per page |
[- {
- "table_id": 1234,
- "table_name": 1234,
- "table_description": 1234,
- "table_isTemporay": true,
- "table_order": 1,
- "table_checkoutMode": false,
- "tableArea_id": 1,
- "table_created_at": "2019-01-01 12:12:12",
- "table_updated_at": "2019-01-01 12:12:12"
}
]| table_name required | string |
| table_isTemporay | boolean |
| table_checkoutMode | boolean |
| table_order | integer |
| table_description | string |
| tableArea_id | integer |
{- "table_name": 1234,
- "table_isTemporay": true,
- "table_checkoutMode": false,
- "table_order": 1,
- "table_description": 1234,
- "tableArea_id": 1
}{- "table_id": 1234,
- "table_name": 1234,
- "table_description": 1234,
- "table_isTemporay": true,
- "table_order": 1,
- "table_checkoutMode": false,
- "tableArea_id": 1,
- "table_created_at": "2019-01-01 12:12:12",
- "table_updated_at": "2019-01-01 12:12:12"
}| id required | integer Example: 123456 ID to find |
{- "table_id": 1234,
- "table_name": 1234,
- "table_description": 1234,
- "table_isTemporay": true,
- "table_order": 1,
- "table_checkoutMode": false,
- "tableArea_id": 1,
- "table_created_at": "2019-01-01 12:12:12",
- "table_updated_at": "2019-01-01 12:12:12"
}| id required | integer Example: 123456 ID to find |
| table_name | string |
| table_isTemporay | boolean |
| table_checkoutMode | boolean |
| table_order | integer |
| table_description | string |
| tableArea_id | integer |
{- "table_name": 1234,
- "table_isTemporay": true,
- "table_checkoutMode": false,
- "table_order": 1,
- "table_description": 1234,
- "tableArea_id": 1
}{- "table_id": 1234,
- "table_name": 1234,
- "table_description": 1234,
- "table_isTemporay": true,
- "table_order": 1,
- "table_checkoutMode": false,
- "tableArea_id": 1,
- "table_created_at": "2019-01-01 12:12:12",
- "table_updated_at": "2019-01-01 12:12:12"
}| page | integer Example: page=1 Page you want to display |
| limit | integer Example: limit=25 Items per page |
[- {
- "tableArea_id": 1234,
- "tableArea_name": "innen 1",
- "tableArea_shortName": "IN-1",
- "tableArea_order": 1,
- "tableArea_allowTemporaryTables": true,
- "tableArea_active": true,
- "tableArea_intelligentFavourites": 1
}
]| tableArea_name required | string Table name |
| tableArea_shortName | string Table area short name |
| tableArea_order | string Table area order number (sorting) |
| tableArea_allowTemporaryTables | boolean Allow temporary tables |
| tableArea_active | boolean Table is active |
{- "tableArea_name": "innen 1",
- "tableArea_shortName": "IN-1",
- "tableArea_order": 1,
- "tableArea_allowTemporaryTables": true,
- "tableArea_active": true
}{- "tableArea_id": 1234,
- "tableArea_name": "innen 1",
- "tableArea_shortName": "IN-1",
- "tableArea_order": 1,
- "tableArea_allowTemporaryTables": true,
- "tableArea_active": true,
- "tableArea_intelligentFavourites": 1
}| id required | integer Example: 123456 ID to find |
{- "tableArea_id": 1234,
- "tableArea_name": "innen 1",
- "tableArea_shortName": "IN-1",
- "tableArea_order": 1,
- "tableArea_allowTemporaryTables": true,
- "tableArea_active": true,
- "tableArea_intelligentFavourites": 1
}| id required | integer Example: 123456 ID to find |
| tableArea_name required | string Table name |
| tableArea_shortName | string Table area short name |
| tableArea_order | string Table area order number (sorting) |
| tableArea_allowTemporaryTables | boolean Allow temporary tables |
| tableArea_active | boolean Table is active |
{- "tableArea_name": "innen 1",
- "tableArea_shortName": "IN-1",
- "tableArea_order": 1,
- "tableArea_allowTemporaryTables": true,
- "tableArea_active": true
}{- "tableArea_id": 1234,
- "tableArea_name": "innen 1",
- "tableArea_shortName": "IN-1",
- "tableArea_order": 1,
- "tableArea_allowTemporaryTables": true,
- "tableArea_active": true,
- "tableArea_intelligentFavourites": 1
}Printers represent the physical printing devices registered to an account — including receipt printers, mobile printers, and all-in-one terminals. They are configured through the ready2order POS or dashboard; the public API is read-only except for triggering a test print.
Fields
| Field | Description |
|---|---|
printer_id |
System-assigned unique identifier for the printer |
printer_name |
The name assigned to the printer in the account settings |
printer_description |
Optional free-text description |
printer_deviceName |
The OS-level device name used to address the printer |
printer_model |
The hardware model, for example TM-T20II or mC-Print3 |
printer_manufacturer |
The manufacturer, for example epson or star |
printer_ipAddress |
Deprecated. The connection address for the printer: an IP address for network printers, a MAC address for Bluetooth, a device path (e.g. /dev/usb/lp0) for USB, or ready2print for OS-managed printers. null if not yet configured |
printer_characters |
The number of characters per printed line, which determines print width |
printer_doubleHeight |
Whether characters are printed at double height |
printer_createdAt |
Timestamp when the printer record was created |
Printer profiles
A printer profile (see Printer Profile) is a named logical slot that sits between your POS configuration and a physical printer. Assigning print jobs to a profile rather than to a printer directly means you can swap out hardware without reconfiguring the rest of the system. Each profile lists the physical printer IDs it currently maps to in printingProfile_associatedPhysicalPrinterIds.
Cash drawer
Some printers support opening a connected cash drawer via an RJ11 kick signal. This is configured per printer in the account settings. See the create bill endpoint for how to trigger it via the API.
[- {
- "printer_id": 123,
- "printer_name": "kitchen printer",
- "printer_description": "kitchen printer",
- "printer_deviceName": "EPSON-TM-T88V",
- "printer_model": "TM-T20II",
- "printer_manufacturer": "EPSON",
- "printer_ipAddress": "192.168.0.1",
- "printer_characters": 42,
- "printer_doubleHeight": true,
- "printer_createdAt": "2019-01-01 11:11:11"
}
]Returns a single printer by its ID.
| id required | integer Example: 123456 Printer ID to find |
{- "printer_id": 123,
- "printer_name": "kitchen printer",
- "printer_description": "kitchen printer",
- "printer_deviceName": "EPSON-TM-T88V",
- "printer_model": "TM-T20II",
- "printer_manufacturer": "EPSON",
- "printer_ipAddress": "192.168.0.1",
- "printer_characters": 42,
- "printer_doubleHeight": true,
- "printer_createdAt": "2019-01-01 11:11:11"
}Sends a test page to the account's configured default printer. If no default printer is configured, the test is sent to all printers on the account.
{- "error": true,
- "success": false,
- "msg": "Printer not found"
}A printer profile is a named stand-in for a physical printer. The POS targets profiles by name rather than by hardware ID, so you can replace a physical printer in the account settings without any change to your POS configuration.
Each profile can be linked to one or more physical printers. When a job targets a profile, all linked printers receive it simultaneously. The IDs of the linked printers are returned in printingProfile_associatedPhysicalPrinterIds.
Fields
| Field | Description |
|---|---|
printingProfile_id |
System-assigned unique identifier for the printer profile |
printingProfile_name |
The name assigned to this profile, for example Kitchen or Bar |
printingProfile_associatedPhysicalPrinterIds |
The physical printers currently linked to this profile |
Returns all printer profiles for the account, including the IDs of the physical printers currently assigned to each profile.
[- {
- "printingProfile_id": 1,
- "printingProfile_name": "Kitchen printer",
- "printingProfile_associatedPhysicalPrinterIds": [
- {
- "printingProfile_associatedPrinter_id": 9999
}
]
}
]| printJob_content | string |
| printJob_imageURL | string |
| printJob_printLogo required | boolean |
| printer_id | integer |
{- "printJob_content": "string",
- "printJob_imageURL": "string",
- "printJob_printLogo": false,
- "printer_id": 9999
}{- "printJob_id": 9999,
- "printer_id": 9999,
- "printJob_imageURL": "string",
- "printJob_printLogo": false,
- "printJob_createdAt": "string",
- "printJob_printedAt": "string",
- "printJob_content": "string"
}| identifier required | string Value: "readyPay" Example: readyPay Unique identifier for the terminal transaction |
| invoiceData required | string |
| paymentDeviceId required | integer |
{- "invoiceData": "string",
- "paymentDeviceId": 9999
}{- "txId": "87419301-3532-416a-8252-1ad700e7b34d",
- "status": "processing",
- "result": "success",
- "amount": 230,
- "billId": 4231
}| txId required | string Example: 87419301-3532-416a-8252-1ad700e7b34d UUID of the terminal transaction |
{- "txId": "87419301-3532-416a-8252-1ad700e7b34d",
- "status": "processing",
- "result": "success",
- "amount": 230,
- "billId": 4231
}| txId required | string Example: 87419301-3532-416a-8252-1ad700e7b34d UUID of the terminal transaction |
{- "txId": "87419301-3532-416a-8252-1ad700e7b34d",
- "status": "processing",
- "result": "success",
- "amount": 230,
- "billId": 4231
}| txId required | string Example: 87419301-3532-416a-8252-1ad700e7b34d ID of the terminal transaction to abort |
{- "error": false,
- "success": true,
- "msg": "Cancelled successfully",
- "result": "aborted-while-waiting"
}| page | integer Example: page=1 Page you want to display |
| limit | integer Example: limit=25 Items per page |
[- {
- "user_id": 1234,
- "user_firstName": "Christoph",
- "user_lastName": "Müller",
- "user_username": "christoph@some-email.com",
- "user_printAccess": 1234,
- "user_printer": 15,
- "user_lastActionAt": "2018-11-05 01:23:45",
- "user_lastLoginAt": "2018-11-05 01:23:45",
- "user_trainingsMode": true,
- "right_id": 1234,
- "loginLog": {
- "loginLog_lastActionAt": "2018-11-05 01:23:45",
- "loginLog_userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6)"
}
}
]| user_username required | string |
| user_password required | string |
| user_firstName | string |
| user_lastName | string |
| user_trainingsMode | boolean |
| user_printer | integer |
| user_printAccess | integer |
| right_id required | integer |
{- "user_username": "christoph@email.com",
- "user_password": "StrongPassword123!",
- "user_firstName": "Christoph",
- "user_lastName": "Müller",
- "user_trainingsMode": true,
- "user_printer": 123,
- "user_printAccess": 2457,
- "right_id": 1234
}{- "user_id": 1234,
- "user_firstName": "Christoph",
- "user_lastName": "Müller",
- "user_username": "christoph@some-email.com",
- "user_printAccess": 1234,
- "user_printer": 15,
- "user_lastActionAt": "2018-11-05 01:23:45",
- "user_lastLoginAt": "2018-11-05 01:23:45",
- "user_trainingsMode": true,
- "right_id": 1234
}| id required | integer Example: 123456 User ID to find |
{- "user_id": 1234,
- "user_firstName": "Christoph",
- "user_lastName": "Müller",
- "user_username": "christoph@some-email.com",
- "user_printAccess": 1234,
- "user_printer": 15,
- "user_lastActionAt": "2018-11-05 01:23:45",
- "user_lastLoginAt": "2018-11-05 01:23:45",
- "user_trainingsMode": true,
- "right_id": 1234
}| id required | integer Example: 12345 User ID to update |
| user_username | string |
| user_password | string |
| user_firstName | string |
| user_lastName | string |
| user_trainingsMode | boolean |
| user_printer | integer |
| user_printAccess | integer |
| right_id required | integer |
{- "user_username": "christoph@email.com",
- "user_password": "StrongPassword123!",
- "user_firstName": "Christoph",
- "user_lastName": "Müller",
- "user_trainingsMode": true,
- "user_printer": 123,
- "user_printAccess": 2457,
- "right_id": 1234
}{- "user_id": 1234,
- "user_firstName": "Christoph",
- "user_lastName": "Müller",
- "user_username": "christoph@some-email.com",
- "user_printAccess": 1234,
- "user_printer": 15,
- "user_lastActionAt": "2018-11-05 01:23:45",
- "user_lastLoginAt": "2018-11-05 01:23:45",
- "user_trainingsMode": true,
- "right_id": 1234
}| id required | integer Example: 1234 User ID to update password |
| user_password required | string |
{- "user_password": "StrongPassword123!"
}{- "user_id": 1234,
- "user_firstName": "Christoph",
- "user_lastName": "Müller",
- "user_username": "christoph@some-email.com",
- "user_printAccess": 1234,
- "user_printer": 15,
- "user_lastActionAt": "2018-11-05 01:23:45",
- "user_lastLoginAt": "2018-11-05 01:23:45",
- "user_trainingsMode": true,
- "right_id": 1234
}| id required | integer Example: 123456 User ID to generate token |
| expiresIn | integer Example: expiresIn=60 Life-time of token (seconds) |
| crmUserId | string |
{- "crmUserId": "string"
}{- "error": false,
- "token": "AAA.BBBBBBBBBBBB.CCC",
- "issuedAt": "2018-11-05 01:23:45",
- "expiresAt": "2018-11-05 01:24:45",
}| page | integer Example: page=1 Page you want to display |
| limit | integer Example: limit=25 Items per page |
[- {
- "userRight_id": 9999,
- "userRight_name": "string",
- "userRight_description": "string",
- "userRight_allowGastroTransferOrders": false,
- "userRight_allowGastroCancellation": false,
- "userRight_allowGastroCancellationWithoutReceiptPrinting": false,
- "userRight_allowCancellationInvoice": 9999,
- "userRight_allowOrderRetourMode": false,
- "userRight_allowGastroOrder": "string",
- "userRight_allowGastroPayment": "string",
- "userRight_showOwnOrdersOnly": false,
- "userRight_allowOpenDay": false,
- "userRight_allowCloseDay": false,
- "userRight_allowSalesReport": false,
- "userRight_allowSalesReportOwnOnly": false,
- "userRight_allowSalesDailyReports": false,
- "userRight_allowProductPage": false,
- "userRight_allowOrderStop": false,
- "userRight_allowProductSoldOut": false,
- "userRight_allowProductFavorite": false,
- "userRight_allowProductAddSideDish": false,
- "userRight_showProductStock": false,
- "userRight_allowPrintProductStock": false,
- "userRight_allowInvoicePage": false,
- "userRight_invoicePageShowOwnInvoicesOnly": false,
- "userRight_allowCashBook": false,
- "userRight_allowCashBookInsert": false,
- "userRight_allowCashBookPdfExport": false,
- "userRight_showCashBookBalance": false,
- "userRight_allowBackendLogin": false,
- "userRight_allowPrinterPage": false,
- "userRight_allowPrinterDiscovery": false,
- "userRight_allowLogoutAllUsers": false,
- "userRight_allowOpenShiftAgain": false,
- "userRight_allowProductDiscount": false,
- "userRight_allowSelectedProductPriceChange": false
}
]A daily report represents a business day at the point of sale. Opening one starts a new sales period; closing it finalises the day's transactions and triggers the end-of-day summary.
Only one daily report can be open at a time. Closing is required before the next day can be opened.
| id required | integer Example: 1 ID to find |
{- "accountingFinancialYear_id": 1,
- "accountingFinancialYear_number": 477415141,
- "accountingFinancialYear_active": false,
- "accountingFinancialYear_trunkYear": false
}| dateFrom required | string Example: dateFrom=2021-08-01 |
| dateTo required | string Example: dateTo=2021-08-31 |
| fileFormat required | string Enum: "excel" "pdf" Example: fileFormat=pdf |
{- "jobStatus_id": 123,
- "jobStatus_status": "finished",
- "jobStatus_startedAt": "2019-08-02 08:08:13",
- "jobStatus_finishedAt": "2019-08-02 08:08:14"
}| format required | string Example: format=datev Use one of the possible export formats: bmd, bmd-ntcs, datev, sap, rzl |
| year | integer Example: year=2019 Year for which the export should be generated (optional) |
| month | integer Example: month=1 Month for which the export should be generated (optional) |
| day | integer Example: day=31 Day for which the export should be generated (optional) |
| exportCashbook | boolean Example: exportCashbook=true Whether to include cashbook transactions in the export |
| dataSource required | string Example: dataSource=invoice Type of data-aggregation to use. Possible value are: invoice, eachItem, dailyReport_productGroups, dailyReport_accountingCode |
| financialYear | integer Example: financialYear=2019 If format is datev the number of the financialYear has to be provided. See GET /accounting/financialYears |
| from | string Example: from=2019-01-01 If format is datev the start date of the financialYear has to be provided. See GET /accounting/financialYears |
| to | string Example: to=2019-12-31 If format is datev the end date of the financialYear has to be provided. See GET /accounting/financialYears |
{- "filename": 1234,
- "error": false
}| year | integer Example: year=2019 |
| month | integer Example: month=1 |
| day | integer Example: day=31 |
| dateFrom | string Example: dateFrom=2021-08-01
|
| dateTo | string Example: dateTo=2021-08-31
|
{- "filename": 1234,
- "error": false
}| month required | integer |
| year required | integer |
| filter | Array of integers Filter your data |
{- "month": 1,
- "year": 2019,
- "filter": [
- 0
]
}{- "error": false,
- "success": true,
- "msg": "success",
- "jobStatus_id": 123
}| customerCategory_name required | string |
| customerCategory_description | string |
{- "customerCategory_name": "string",
- "customerCategory_description": "string"
}{- "customerCategory_id": 123,
- "customerCategory_name": "a customer group",
- "customerCategory_description": "a customer group description"
}| id required | integer Example: 123456 Customer Group ID to find |
{- "customerCategory_id": 123,
- "customerCategory_name": "a customer group",
- "customerCategory_description": "a customer group description"
}| id required | integer Example: 12345 Customer Group ID to update |
| customerCategory_name required | string |
| customerCategory_description | string |
{- "customerCategory_name": "string",
- "customerCategory_description": "string"
}{- "customerCategory_id": 123,
- "customerCategory_name": "a customer group",
- "customerCategory_description": "a customer group description"
}| authorizationCallbackUri | string The callback to which the merchant will be redirected if access will be granted. |
{
}{- "error": false,
- "success": true,
- "expiresAt": 1641546585,
- "grantAccessToken": "abcdef_token (JWT token)",
- "status": "pending"
}Webhooks push events to your application automatically — no polling required.
Available Events
| Event | Description | Payload |
|---|---|---|
coupon.created |
A new voucher or gift card is issued | Full object |
coupon.updated |
A voucher's properties change (value, validity, linked customer, etc.) | Full object |
couponTransaction.created |
A transaction is recorded on a voucher (charge, redeem, correction, bonus, payout) | Full transaction object |
customer.created |
A new customer profile is added to the account | Full object |
customer.updated |
A customer profile's details are updated (name, address, contact info, etc.) | Full object |
customer.deleted |
A customer profile is deleted from the account | Resource ID |
invoice.created |
An invoice or receipt is finalised — also fires for the storno document when an invoice is cancelled | Full object |
invoice.cancelled |
Fired for the original invoice when it is cancelled — use this to mark the original as cancelled in your system; use invoice.created to receive the storno document |
Full object |
orderItem.created |
One or more items are placed on an open table order | Resource IDs |
orderItem.cancelled |
One or more open table order items are voided before billing | Resource IDs |
orderItem.transferred |
Open table order items are moved from one table to another | Transfer metadata (source/target table, order IDs) |
product.created |
A new product is added to the catalogue | Full object |
product.updated |
A product's details change — not triggered by product_sortIndex updates |
Full object |
product.deleted |
A product is removed from the catalogue | Resource ID |
productGroup.created |
A new product category is created | Full object |
productGroup.updated |
A product category's properties change (name, description, sort order, etc.) | Full object |
productGroup.deleted |
A product category is removed | Resource ID |
Processing Webhooks
Respond to webhook requests with HTTP 202 and process the payload asynchronously in a background worker. This keeps your endpoint fast and avoids delivery failures from timeouts, which may trigger retries.
Setup
{
}| addEvent | string
|
| removeEvent | string
|
{- "addEvent": "string",
- "removeEvent": "string"
}{- "error": true,
- "success": false,
- "msg": "Your now receiving webhooks for the event <name>"
}