{
 "openapi": "3.0.0",
 "info": {
  "title": "ready2order Public API",
  "contact": {
   "name": "support@ready2order.com"
  },
  "license": {
   "name": "proprietary"
  },
  "version": "R2-2026.30.2",
  "description": "# First Steps\n\n## Authorization\n\nThe 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.\n\nEvery API request to account data must include:\n\n```http\nAuthorization: Bearer <ACCOUNT_TOKEN>\n```\n\n| Token | Scope | Lifetime |\n|-------|-------|----------|\n| **Developer Token** | Identifies your integration | Permanent |\n| **Grant Access Token** | One-time permission request | 10 minutes |\n| **Account Token** | Access to a ready2order account | Until revoked |\n\n---\n\n## Setup\n\nThis is a one-time process per account you want to integrate with.\n\n### Step 1 \u2014 Get your Developer Token\n\nRegister at [https://api.ready2order.com](https://api.ready2order.com). Your Developer Token will be emailed to you.\n\nStore it securely \u2014 it identifies your integration across all accounts.\n\n---\n\n### Step 2 \u2014 Request a Grant Access Token\n\nCall this endpoint using your Developer Token:\n\n```http\nPOST /v1/developerToken/grantAccessToken\nAuthorization: Bearer <DEVELOPER_TOKEN>\n```\n\n```json\n{\n  \"callbackUri\": \"https://your-app.com/callback\"\n}\n```\n\n`callbackUri` is optional but strongly recommended (see Step 3).\n\n**Response:**\n\n```json\n{\n  \"grantAccessToken\": \"...\",\n  \"grantAccessUri\": \"https://app.ready2order.com/...\"\n}\n```\n\n---\n\n### Step 3 \u2014 Account owner approves access\n\nRedirect the account owner to the `grantAccessUri`. They will log in to their ready2order account and click **Approve**.\n\n**With `callbackUri`** \u2014 after approval, ready2order redirects the account owner back to your URL:\n\n```\nhttps://your-app.com/callback?accountToken=<ACCOUNT_TOKEN>&grantAccessToken=<GRANT_ACCESS_TOKEN>&status=approved\n```\n\nThe `accountToken` in that redirect is what you store and use for all future requests.\n\n**Without `callbackUri`** \u2014 poll for the result instead:\n\n```http\nGET /v1/developerToken/grantAccessToken/{grantAccessToken}\nAuthorization: Bearer <DEVELOPER_TOKEN>\n```\n\nThe response will include `accountToken` once the account owner has approved.\n\n> 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.\n\n---\n\n## Training Mode\n\nSome 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.\n\nWhen 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.\n\n---\n\n## Error Responses\n\n| Status | Likely cause |\n|--------|-------------|\n| `401 Unauthorized` | Wrong token type, or `Authorization` header missing |\n| `403 Forbidden` | Developer Token used where Account Token is required (or vice versa) |\n| `429 Too Many Requests` | Rate limit exceeded \u2014 max 60 requests per minute per Account Token |\n"
 },
 "servers": [
  {
   "url": "https://api.ready2order.com/v1"
  }
 ],
 "paths": {
  "/access/revoke": {
   "post": {
    "tags": [
     "Account Token"
    ],
    "summary": "Revoke Account Token",
    "description": "This endpoint can be used to revoke the currently used API Account Token.",
    "operationId": "accountTokenRevoke",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "Access was revoked successfully"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/accounting/financialYears": {
   "get": {
    "tags": [
     "Accounting Financial Year"
    ],
    "summary": "List all Accounting Financial Years",
    "description": "",
    "operationId": "accountingFinancialYearGetAll",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "accountingFinancialYear_id": {
            "type": "integer",
            "example": 1
           },
           "accountingFinancialYear_number": {
            "type": "integer",
            "example": 477415141
           },
           "accountingFinancialYear_active": {
            "type": "boolean",
            "example": false
           },
           "accountingFinancialYear_trunkYear": {
            "type": "boolean",
            "example": false
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/accounting/financialYears/{id}": {
   "get": {
    "tags": [
     "Accounting Financial Year"
    ],
    "summary": "Find Accounting Financial Year by Id",
    "description": "",
    "operationId": "accountingFinancialYearFindById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 1
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "accountingFinancialYear_id": {
           "type": "integer",
           "example": 1
          },
          "accountingFinancialYear_number": {
           "type": "integer",
           "example": 477415141
          },
          "accountingFinancialYear_active": {
           "type": "boolean",
           "example": false
          },
          "accountingFinancialYear_trunkYear": {
           "type": "boolean",
           "example": false
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/billTypes": {
   "get": {
    "tags": [
     "Bill Type"
    ],
    "summary": "List all Bill Types",
    "description": "",
    "operationId": "billTypeGetAll",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "billType_id": {
            "type": "integer",
            "example": 1
           },
           "billType_name": {
            "type": "string",
            "example": "Rechnung"
           },
           "billType_symbol": {
            "type": "string",
            "example": "RG"
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/billTypes/{id}": {
   "get": {
    "tags": [
     "Bill Type"
    ],
    "summary": "Find Bill Type by Id",
    "description": "",
    "operationId": "billTypeFindById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "billType_id": {
           "type": "integer",
           "example": 1
          },
          "billType_name": {
           "type": "string",
           "example": "Rechnung"
          },
          "billType_symbol": {
           "type": "string",
           "example": "RG"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/cashbook/export": {
   "get": {
    "tags": [
     "Export"
    ],
    "summary": "Export Cashbook",
    "description": "",
    "operationId": "exportExportCashbookV3",
    "parameters": [
     {
      "name": "dateFrom",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "example": "2021-08-01"
      }
     },
     {
      "name": "dateTo",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "example": "2021-08-31"
      }
     },
     {
      "name": "fileFormat",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "enum": [
        "excel",
        "pdf"
       ],
       "example": "pdf"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "jobStatus_id": {
           "type": "integer",
           "example": 123
          },
          "jobStatus_status": {
           "type": "string",
           "example": "finished"
          },
          "jobStatus_startedAt": {
           "type": "string",
           "example": "2019-08-02 08:08:13"
          },
          "jobStatus_finishedAt": {
           "type": "string",
           "example": "2019-08-02 08:08:14"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/export/accountancy": {
   "get": {
    "tags": [
     "Export"
    ],
    "summary": "Export Accountancy",
    "description": "",
    "operationId": "exportExportAccountancy",
    "parameters": [
     {
      "name": "format",
      "in": "query",
      "description": "Use one of the possible export formats: bmd, bmd-ntcs, datev, sap, rzl",
      "required": true,
      "schema": {
       "type": "string",
       "example": "datev"
      }
     },
     {
      "name": "year",
      "in": "query",
      "description": "Year for which the export should be generated (optional)",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 2019
      }
     },
     {
      "name": "month",
      "in": "query",
      "description": "Month for which the export should be generated (optional)",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 1
      }
     },
     {
      "name": "day",
      "in": "query",
      "description": "Day for which the export should be generated (optional)",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 31
      }
     },
     {
      "name": "exportCashbook",
      "in": "query",
      "description": "Whether to include cashbook transactions in the export",
      "required": false,
      "schema": {
       "type": "boolean",
       "example": true
      }
     },
     {
      "name": "dataSource",
      "in": "query",
      "description": "Type of data-aggregation to use. Possible value are: invoice, eachItem, dailyReport_productGroups, dailyReport_accountingCode",
      "required": true,
      "schema": {
       "type": "string",
       "example": "invoice"
      }
     },
     {
      "name": "financialYear",
      "in": "query",
      "description": "If format is datev the number of the financialYear has to be provided. See GET /accounting/financialYears <br><br> _* Required when `format` is `datev`._",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 2019
      }
     },
     {
      "name": "from",
      "in": "query",
      "description": "If format is datev the start date of the financialYear has to be provided. See GET /accounting/financialYears <br><br> _* Required when `financialYear` is provided._",
      "required": false,
      "schema": {
       "type": "string",
       "example": "2019-01-01"
      }
     },
     {
      "name": "to",
      "in": "query",
      "description": "If format is datev the end date of the financialYear has to be provided. See GET /accounting/financialYears <br><br> _* Required when `financialYear` is provided._",
      "required": false,
      "schema": {
       "type": "string",
       "example": "2019-12-31"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "file": {
           "type": "string",
           "example": "https://abc.cde.com"
          },
          "filename": {
           "type": "string",
           "example": 1234
          },
          "error": {
           "type": "boolean",
           "example": false
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/export/accountancy/cashbook": {
   "get": {
    "tags": [
     "Export"
    ],
    "summary": "Export Cashbook",
    "description": "",
    "operationId": "exportExportCashbook",
    "parameters": [
     {
      "name": "year",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 2019
      }
     },
     {
      "name": "month",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 1
      }
     },
     {
      "name": "day",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 31
      }
     },
     {
      "name": "dateFrom",
      "in": "query",
      "description": "<br><br> _* Required when `dateTo` is provided._",
      "required": false,
      "schema": {
       "type": "string",
       "example": "2021-08-01"
      }
     },
     {
      "name": "dateTo",
      "in": "query",
      "description": "<br><br> _* Required when `dateFrom` is provided._",
      "required": false,
      "schema": {
       "type": "string",
       "example": "2021-08-31"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "file": {
           "type": "string",
           "example": "https://abc.cde.com"
          },
          "filename": {
           "type": "string",
           "example": 1234
          },
          "error": {
           "type": "boolean",
           "example": false
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/export/sales": {
   "post": {
    "tags": [
     "Export"
    ],
    "summary": "Export Sales",
    "description": "",
    "operationId": "exportExportSales",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "month",
         "year"
        ],
        "properties": {
         "month": {
          "type": "integer",
          "example": 1
         },
         "year": {
          "type": "integer",
          "example": 2019
         },
         "filter": {
          "description": "Filter your data",
          "type": "array",
          "items": {
           "type": "integer"
          }
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "success"
          },
          "jobStatus_id": {
           "type": "integer",
           "example": 123
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/countries": {
   "get": {
    "tags": [
     "Country"
    ],
    "summary": "List all Countries",
    "description": "",
    "operationId": "countryGetAll",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "country_id": {
            "type": "integer",
            "example": 123
           },
           "country_code": {
            "type": "string",
            "example": "AT"
           },
           "country_name": {
            "type": "string",
            "example": "Austria"
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/countries/{id}": {
   "get": {
    "tags": [
     "Country"
    ],
    "summary": "Find Country by Id",
    "description": "",
    "operationId": "countryFindById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Country id to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "country_id": {
           "type": "integer",
           "example": 123
          },
          "country_code": {
           "type": "string",
           "example": "AT"
          },
          "country_name": {
           "type": "string",
           "example": "Austria"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/couponCategories": {
   "get": {
    "tags": [
     "Coupon Category"
    ],
    "summary": "List coupon categories",
    "description": "Returns a paginated list of coupon categories for the authenticated account.",
    "operationId": "couponCategoryGetPaginated",
    "parameters": [
     {
      "name": "page",
      "in": "query",
      "description": "Page you want to display",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 1
      }
     },
     {
      "name": "limit",
      "in": "query",
      "description": "Items per page",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 25
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "couponCategory_id": {
            "type": "integer",
            "example": 123
           },
           "couponCategory_name": {
            "type": "string",
            "example": "my coupon category"
           },
           "couponCategory_description": {
            "type": "string",
            "example": "my great coupon category"
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "post": {
    "tags": [
     "Coupon Category"
    ],
    "summary": "Create a coupon category",
    "description": "Creates a new coupon category. Categories are used to organise coupons and have no effect on coupon behaviour or fiscal treatment.",
    "operationId": "couponCategoryCreate",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "couponCategory_name"
        ],
        "properties": {
         "couponCategory_name": {
          "type": "string"
         },
         "couponCategory_description": {
          "type": "string"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "couponCategory_id": {
           "type": "integer",
           "example": 123
          },
          "couponCategory_name": {
           "type": "string",
           "example": "my coupon category"
          },
          "couponCategory_description": {
           "type": "string",
           "example": "my great coupon category"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/couponCategories/{id}": {
   "get": {
    "tags": [
     "Coupon Category"
    ],
    "summary": "Get a coupon category",
    "description": "Returns a single coupon category by its ID.",
    "operationId": "couponCategoryFindById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Coupon Category ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "couponCategory_id": {
           "type": "integer",
           "example": 123
          },
          "couponCategory_name": {
           "type": "string",
           "example": "my coupon category"
          },
          "couponCategory_description": {
           "type": "string",
           "example": "my great coupon category"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "put": {
    "tags": [
     "Coupon Category"
    ],
    "summary": "Update a coupon category",
    "description": "Updates the name and description of an existing coupon category.",
    "operationId": "couponCategoryUpdate",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Coupon Category ID to update",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 12345
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "couponCategory_name"
        ],
        "properties": {
         "couponCategory_name": {
          "type": "string"
         },
         "couponCategory_description": {
          "type": "string"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "couponCategory_id": {
           "type": "integer",
           "example": 123
          },
          "couponCategory_name": {
           "type": "string",
           "example": "my coupon category"
          },
          "couponCategory_description": {
           "type": "string",
           "example": "my great coupon category"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "delete": {
    "tags": [
     "Coupon Category"
    ],
    "summary": "Delete a coupon category",
    "description": "Deletes a coupon category. Fails if coupons are still assigned to it; reassign or delete those coupons first.",
    "operationId": "couponCategoryDeleteById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Coupon Category ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "Coupon Category was successfully deleted!"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/coupons": {
   "get": {
    "tags": [
     "Coupon"
    ],
    "summary": "List coupons",
    "description": "Returns a paginated list of coupons. Filter by `identifier` to look up a coupon by its code (e.g. scanned from a barcode).",
    "operationId": "couponGetAll",
    "parameters": [
     {
      "name": "page",
      "in": "query",
      "description": "Page you want to display",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 1
      }
     },
     {
      "name": "limit",
      "in": "query",
      "description": "Items per page",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 25
      }
     },
     {
      "name": "identifier",
      "in": "query",
      "description": "Identifier/Code of coupon",
      "required": false,
      "schema": {
       "type": "string",
       "example": "9995071228303"
      }
     },
     {
      "name": "trainingMode",
      "in": "query",
      "description": "Trainingmode",
      "required": false,
      "schema": {
       "type": "boolean",
       "example": false
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "coupon_id": {
            "type": "integer",
            "example": 1234
           },
           "coupon_name": {
            "type": "string",
            "example": "Christmas Coupon"
           },
           "coupon_containsVat": {
            "type": "string",
            "example": 20
           },
           "coupon_purpose": {
            "type": "string",
            "example": "single|multi"
           },
           "coupon_identifier": {
            "type": "string",
            "example": 9995071228303
           },
           "coupon_testMode": {
            "type": "boolean",
            "example": true
           },
           "coupon_validUntil": {
            "type": "string",
            "example": "2020-01-31 00:49:39"
           },
           "coupon_issuedAt": {
            "type": "string",
            "example": "2018-01-31 00:49:39"
           },
           "couponCategory_id": {
            "type": "integer",
            "example": 4
           },
           "vat_id": {
            "type": "integer",
            "example": 1234
           },
           "product_id": {
            "type": "integer",
            "example": 1234
           },
           "customer_id": {
            "type": "integer",
            "example": 7455
           },
           "coupon_created_at": {
            "type": "string",
            "example": "2018-01-31 00:49:39"
           },
           "coupon_updated_at": {
            "type": "string",
            "example": "2018-01-31 04:49:39"
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "post": {
    "tags": [
     "Coupon"
    ],
    "summary": "Create a coupon",
    "description": "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.",
    "operationId": "couponCreate",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "coupon_name",
         "coupon_value"
        ],
        "properties": {
         "coupon_name": {
          "type": "string",
          "example": "MyCoupon"
         },
         "coupon_value": {
          "type": "string",
          "example": 5
         },
         "couponCategory_id": {
          "type": "integer",
          "example": 123
         },
         "coupon_containsVat": {
          "type": "string",
          "example": 3
         },
         "customer_id": {
          "type": "integer",
          "example": 450
         },
         "coupon_type": {
          "type": "string",
          "enum": [
           "coupon"
          ],
          "example": "coupon"
         },
         "coupon_purpose": {
          "type": "string",
          "enum": [
           "single",
           "multi"
          ],
          "example": "single|multi"
         },
         "coupon_validUntil": {
          "type": "string",
          "example": "2030-01-02"
         },
         "coupon_issuedAt": {
          "type": "string",
          "example": "2025-01-02"
         },
         "coupon_testMode": {
          "type": "boolean",
          "example": false
         },
         "coupon_identifier": {
          "type": "string",
          "example": "AABBCC"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "coupon_id": {
           "type": "integer",
           "example": 1234
          },
          "coupon_name": {
           "type": "string",
           "example": "Christmas Coupon"
          },
          "coupon_containsVat": {
           "type": "string",
           "example": 20
          },
          "coupon_purpose": {
           "type": "string",
           "example": "single|multi"
          },
          "coupon_identifier": {
           "type": "string",
           "example": 9995071228303
          },
          "coupon_testMode": {
           "type": "boolean",
           "example": true
          },
          "coupon_validUntil": {
           "type": "string",
           "example": "2020-01-31 00:49:39"
          },
          "coupon_issuedAt": {
           "type": "string",
           "example": "2018-01-31 00:49:39"
          },
          "couponCategory_id": {
           "type": "integer",
           "example": 4
          },
          "vat_id": {
           "type": "integer",
           "example": 1234
          },
          "product_id": {
           "type": "integer",
           "example": 1234
          },
          "customer_id": {
           "type": "integer",
           "example": 7455
          },
          "coupon_created_at": {
           "type": "string",
           "example": "2018-01-31 00:49:39"
          },
          "coupon_updated_at": {
           "type": "string",
           "example": "2018-01-31 04:49:39"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/coupons/{id}": {
   "get": {
    "tags": [
     "Coupon"
    ],
    "summary": "Get a coupon",
    "description": "Returns a single coupon by its ID, including its current balance in coupon_value.",
    "operationId": "couponFindById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Coupon ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "coupon_id": {
           "type": "integer",
           "example": 1234
          },
          "coupon_name": {
           "type": "string",
           "example": "Christmas Coupon"
          },
          "coupon_containsVat": {
           "type": "string",
           "example": 20
          },
          "coupon_purpose": {
           "type": "string",
           "example": "single|multi"
          },
          "coupon_identifier": {
           "type": "string",
           "example": 9995071228303
          },
          "coupon_testMode": {
           "type": "boolean",
           "example": true
          },
          "coupon_validUntil": {
           "type": "string",
           "example": "2020-01-31 00:49:39"
          },
          "coupon_issuedAt": {
           "type": "string",
           "example": "2018-01-31 00:49:39"
          },
          "couponCategory_id": {
           "type": "integer",
           "example": 4
          },
          "vat_id": {
           "type": "integer",
           "example": 1234
          },
          "product_id": {
           "type": "integer",
           "example": 1234
          },
          "customer_id": {
           "type": "integer",
           "example": 7455
          },
          "coupon_created_at": {
           "type": "string",
           "example": "2018-01-31 00:49:39"
          },
          "coupon_updated_at": {
           "type": "string",
           "example": "2018-01-31 04:49:39"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "put": {
    "tags": [
     "Coupon"
    ],
    "summary": "Update a coupon",
    "description": "Updates coupon metadata such as name, validity dates, category, or customer assignment. To adjust the balance, use the charge or redeem endpoints instead.",
    "operationId": "couponUpdateById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Coupon ID to update",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 12345
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "properties": {
         "coupon_name": {
          "type": "string",
          "example": "MyCoupon"
         },
         "coupon_value": {
          "type": "string",
          "example": 5
         },
         "couponCategory_id": {
          "type": "integer",
          "example": 123
         },
         "coupon_containsVat": {
          "type": "string",
          "example": 3
         },
         "customer_id": {
          "type": "integer",
          "example": 450
         },
         "coupon_type": {
          "type": "string",
          "enum": [
           "coupon"
          ],
          "example": "coupon"
         },
         "coupon_purpose": {
          "type": "string",
          "enum": [
           "single",
           "multi"
          ],
          "example": "single|multi"
         },
         "coupon_validUntil": {
          "type": "string",
          "example": "2030-01-02"
         },
         "coupon_issuedAt": {
          "type": "string",
          "example": "2025-01-02"
         },
         "coupon_testMode": {
          "type": "boolean",
          "example": false
         },
         "coupon_identifier": {
          "type": "string",
          "example": "AABBCC"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "coupon_id": {
           "type": "integer",
           "example": 1234
          },
          "coupon_name": {
           "type": "string",
           "example": "Christmas Coupon"
          },
          "coupon_containsVat": {
           "type": "string",
           "example": 20
          },
          "coupon_purpose": {
           "type": "string",
           "example": "single|multi"
          },
          "coupon_identifier": {
           "type": "string",
           "example": 9995071228303
          },
          "coupon_testMode": {
           "type": "boolean",
           "example": true
          },
          "coupon_validUntil": {
           "type": "string",
           "example": "2020-01-31 00:49:39"
          },
          "coupon_issuedAt": {
           "type": "string",
           "example": "2018-01-31 00:49:39"
          },
          "couponCategory_id": {
           "type": "integer",
           "example": 4
          },
          "vat_id": {
           "type": "integer",
           "example": 1234
          },
          "product_id": {
           "type": "integer",
           "example": 1234
          },
          "customer_id": {
           "type": "integer",
           "example": 7455
          },
          "coupon_created_at": {
           "type": "string",
           "example": "2018-01-31 00:49:39"
          },
          "coupon_updated_at": {
           "type": "string",
           "example": "2018-01-31 04:49:39"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "delete": {
    "tags": [
     "Coupon"
    ],
    "summary": "Delete a coupon",
    "description": "Deletes a coupon.",
    "operationId": "couponDeleteById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Coupon ID to delete",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 12345
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "Coupon was successfully deleted!"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/coupons/{id}/charge": {
   "post": {
    "tags": [
     "Coupon"
    ],
    "summary": "Charge a coupon",
    "description": "Adds value to an existing coupon's balance, for example when a customer tops up a voucher card.",
    "operationId": "couponChargeById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Coupon ID to charge",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 1234
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "value"
        ],
        "properties": {
         "value": {
          "description": "Charge value",
          "type": "string",
          "example": 12
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "coupon_id": {
           "type": "integer",
           "example": 1234
          },
          "coupon_name": {
           "type": "string",
           "example": "Christmas Coupon"
          },
          "coupon_containsVat": {
           "type": "string",
           "example": 20
          },
          "coupon_purpose": {
           "type": "string",
           "example": "single|multi"
          },
          "coupon_identifier": {
           "type": "string",
           "example": 9995071228303
          },
          "coupon_testMode": {
           "type": "boolean",
           "example": true
          },
          "coupon_validUntil": {
           "type": "string",
           "example": "2020-01-31 00:49:39"
          },
          "coupon_issuedAt": {
           "type": "string",
           "example": "2018-01-31 00:49:39"
          },
          "couponCategory_id": {
           "type": "integer",
           "example": 4
          },
          "vat_id": {
           "type": "integer",
           "example": 1234
          },
          "product_id": {
           "type": "integer",
           "example": 1234
          },
          "customer_id": {
           "type": "integer",
           "example": 7455
          },
          "coupon_created_at": {
           "type": "string",
           "example": "2018-01-31 00:49:39"
          },
          "coupon_updated_at": {
           "type": "string",
           "example": "2018-01-31 04:49:39"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/coupons/{id}/redeem": {
   "post": {
    "tags": [
     "Coupon"
    ],
    "summary": "Redeem a coupon",
    "description": "Deducts the specified value from the coupon's balance. Partial redemptions are supported. Returns the updated coupon with the new balance in `coupon_value`.",
    "operationId": "couponRedeemById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Coupon ID to redeem",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 1234
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "value"
        ],
        "properties": {
         "value": {
          "description": "Redemption value",
          "type": "string",
          "example": 12
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "coupon_id": {
           "type": "integer",
           "example": 1234
          },
          "coupon_name": {
           "type": "string",
           "example": "Christmas Coupon"
          },
          "coupon_containsVat": {
           "type": "string",
           "example": 20
          },
          "coupon_purpose": {
           "type": "string",
           "example": "single|multi"
          },
          "coupon_identifier": {
           "type": "string",
           "example": 9995071228303
          },
          "coupon_testMode": {
           "type": "boolean",
           "example": true
          },
          "coupon_validUntil": {
           "type": "string",
           "example": "2020-01-31 00:49:39"
          },
          "coupon_issuedAt": {
           "type": "string",
           "example": "2018-01-31 00:49:39"
          },
          "couponCategory_id": {
           "type": "integer",
           "example": 4
          },
          "vat_id": {
           "type": "integer",
           "example": 1234
          },
          "product_id": {
           "type": "integer",
           "example": 1234
          },
          "customer_id": {
           "type": "integer",
           "example": 7455
          },
          "coupon_created_at": {
           "type": "string",
           "example": "2018-01-31 00:49:39"
          },
          "coupon_updated_at": {
           "type": "string",
           "example": "2018-01-31 04:49:39"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/currencies": {
   "get": {
    "tags": [
     "Currency"
    ],
    "summary": "Get Currencies",
    "description": "",
    "operationId": "currencyGetCurrencies",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "currency_id": {
            "type": "integer",
            "example": 1
           },
           "currency_name": {
            "type": "string",
            "example": "Euro"
           },
           "currency_short": {
            "type": "string",
            "example": "EUR"
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/currencies/{id}": {
   "get": {
    "tags": [
     "Currency"
    ],
    "summary": "Get Currency",
    "description": "",
    "operationId": "currencyGetCurrency",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Currency ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "currency_id": {
           "type": "integer",
           "example": 1
          },
          "currency_name": {
           "type": "string",
           "example": "Euro"
          },
          "currency_short": {
           "type": "string",
           "example": "EUR"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/customerCategories": {
   "get": {
    "tags": [
     "Customer Group"
    ],
    "summary": "Get All Customer Groups",
    "description": "",
    "operationId": "customerGroupGetAllCustomerGroups",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "customerCategory_id": {
            "type": "integer",
            "example": 123
           },
           "customerCategory_name": {
            "type": "string",
            "example": "a customer group"
           },
           "customerCategory_description": {
            "type": "string",
            "example": "a customer group description"
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "post": {
    "tags": [
     "Customer Group"
    ],
    "summary": "Create Customer Group",
    "description": "",
    "operationId": "customerGroupCreateCustomerGroup",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "customerCategory_name"
        ],
        "properties": {
         "customerCategory_name": {
          "type": "string"
         },
         "customerCategory_description": {
          "type": "string"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "customerCategory_id": {
           "type": "integer",
           "example": 123
          },
          "customerCategory_name": {
           "type": "string",
           "example": "a customer group"
          },
          "customerCategory_description": {
           "type": "string",
           "example": "a customer group description"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/customerCategories/{id}": {
   "get": {
    "tags": [
     "Customer Group"
    ],
    "summary": "Get Customer Group By Id",
    "description": "",
    "operationId": "customerGroupGetCustomerGroupById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Customer Group ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "customerCategory_id": {
           "type": "integer",
           "example": 123
          },
          "customerCategory_name": {
           "type": "string",
           "example": "a customer group"
          },
          "customerCategory_description": {
           "type": "string",
           "example": "a customer group description"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "put": {
    "tags": [
     "Customer Group"
    ],
    "summary": "Update Customer Group",
    "description": "",
    "operationId": "customerGroupUpdateCustomerGroup",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Customer Group ID to update",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 12345
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "customerCategory_name"
        ],
        "properties": {
         "customerCategory_name": {
          "type": "string"
         },
         "customerCategory_description": {
          "type": "string"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "customerCategory_id": {
           "type": "integer",
           "example": 123
          },
          "customerCategory_name": {
           "type": "string",
           "example": "a customer group"
          },
          "customerCategory_description": {
           "type": "string",
           "example": "a customer group description"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "delete": {
    "tags": [
     "Customer Group"
    ],
    "summary": "Delete Customer Group",
    "description": "",
    "operationId": "customerGroupDeleteCustomerGroup",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Customer Group ID to delete",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 12345
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "CustomerCategory was successfully deleted."
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/customers": {
   "get": {
    "tags": [
     "Customer"
    ],
    "summary": "List all Customers",
    "description": "",
    "operationId": "customerGetAll",
    "parameters": [
     {
      "name": "page",
      "in": "query",
      "description": "Page you want to display",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 1
      }
     },
     {
      "name": "limit",
      "in": "query",
      "description": "Items per page",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 25
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "customer_id": {
            "type": "integer",
            "example": 9999
           },
           "customer_number": {
            "type": "integer",
            "example": 9999
           },
           "customer_name": {
            "type": "string",
            "example": "Maxi's custom name"
           },
           "vatId": {
            "type": "string",
            "example": "ATU1234567"
           },
           "customer_notes": {
            "type": "string",
            "example": "Some custom notes"
           },
           "customerCategory_id": {
            "type": "integer",
            "example": 9999
           },
           "customer_birthday": {
            "type": "string",
            "example": "1991-09-20"
           },
           "address": {
            "type": "array",
            "items": {
             "properties": {
              "invoice": {
               "type": "array",
               "items": {
                "properties": {
                 "salutation": {
                  "type": "string",
                  "example": "Herr"
                 },
                 "title": {
                  "type": "string",
                  "example": "Professor"
                 },
                 "customer_company": {
                  "type": "string",
                  "example": "Maxi Gmbh"
                 },
                 "lastName": {
                  "type": "string",
                  "example": "Muster"
                 },
                 "firstName": {
                  "type": "string",
                  "example": "Max"
                 },
                 "zip": {
                  "type": "string",
                  "example": 1030
                 },
                 "city": {
                  "type": "string",
                  "example": "WIen"
                 },
                 "street": {
                  "type": "string",
                  "example": "Stra\u00dfe 1"
                 },
                 "country": {
                  "type": "string",
                  "example": "AT"
                 },
                 "email": {
                  "type": "string",
                  "example": "example@ready2order.com"
                 },
                 "phone": {
                  "type": "string",
                  "example": "+43 664 12345678"
                 }
                },
                "type": "object"
               }
              }
             },
             "type": "object"
            }
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "post": {
    "tags": [
     "Customer"
    ],
    "summary": "Create a new Customer",
    "description": "",
    "operationId": "customerCreate",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "customerCategory_id"
        ],
        "properties": {
         "customerCategory_id": {
          "type": "integer",
          "example": 1126
         },
         "birthday": {
          "type": "string",
          "example": "1991-09-20"
         },
         "city": {
          "type": "string",
          "example": "Wien"
         },
         "company": {
          "type": "string",
          "example": "Maxi Gmbh"
         },
         "email": {
          "type": "string",
          "example": "example@ready2order.com"
         },
         "firstName": {
          "type": "string",
          "example": "Max"
         },
         "lastName": {
          "type": "string",
          "example": "Muster"
         },
         "customer_name": {
          "type": "string"
         },
         "notes": {
          "type": "string",
          "example": "Some custom notes"
         },
         "customer_number": {
          "type": "integer",
          "example": 9999
         },
         "phone": {
          "type": "string",
          "example": "+43 12345678"
         },
         "salutation": {
          "type": "string",
          "example": "Herr"
         },
         "street": {
          "type": "string",
          "example": "Stra\u00dfe 1"
         },
         "title": {
          "type": "string",
          "example": "Herr"
         },
         "uid": {
          "type": "string",
          "example": "ATU1234567"
         },
         "zip": {
          "type": "string",
          "example": 1030
         },
         "address": {
          "type": "array",
          "items": []
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "customer_id": {
           "type": "integer",
           "example": 9999
          },
          "customer_number": {
           "type": "integer",
           "example": 9999
          },
          "customer_name": {
           "type": "string",
           "example": "Maxi's custom name"
          },
          "vatId": {
           "type": "string",
           "example": "ATU1234567"
          },
          "customer_notes": {
           "type": "string",
           "example": "Some custom notes"
          },
          "customerCategory_id": {
           "type": "integer",
           "example": 9999
          },
          "customer_birthday": {
           "type": "string",
           "example": "1991-09-20"
          },
          "address": {
           "type": "array",
           "items": {
            "properties": {
             "invoice": {
              "type": "array",
              "items": {
               "properties": {
                "salutation": {
                 "type": "string",
                 "example": "Herr"
                },
                "title": {
                 "type": "string",
                 "example": "Professor"
                },
                "customer_company": {
                 "type": "string",
                 "example": "Maxi Gmbh"
                },
                "lastName": {
                 "type": "string",
                 "example": "Muster"
                },
                "firstName": {
                 "type": "string",
                 "example": "Max"
                },
                "zip": {
                 "type": "string",
                 "example": 1030
                },
                "city": {
                 "type": "string",
                 "example": "WIen"
                },
                "street": {
                 "type": "string",
                 "example": "Stra\u00dfe 1"
                },
                "country": {
                 "type": "string",
                 "example": "AT"
                },
                "email": {
                 "type": "string",
                 "example": "example@ready2order.com"
                },
                "phone": {
                 "type": "string",
                 "example": "+43 664 12345678"
                }
               },
               "type": "object"
              }
             }
            },
            "type": "object"
           }
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/customers/{id}": {
   "get": {
    "tags": [
     "Customer"
    ],
    "summary": "Find Customer by Id",
    "description": "",
    "operationId": "customerFindById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Customer ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "customer_id": {
           "type": "integer",
           "example": 9999
          },
          "customer_number": {
           "type": "integer",
           "example": 9999
          },
          "customer_name": {
           "type": "string",
           "example": "Maxi's custom name"
          },
          "vatId": {
           "type": "string",
           "example": "ATU1234567"
          },
          "customer_notes": {
           "type": "string",
           "example": "Some custom notes"
          },
          "customerCategory_id": {
           "type": "integer",
           "example": 9999
          },
          "customer_birthday": {
           "type": "string",
           "example": "1991-09-20"
          },
          "address": {
           "type": "array",
           "items": {
            "properties": {
             "invoice": {
              "type": "array",
              "items": {
               "properties": {
                "salutation": {
                 "type": "string",
                 "example": "Herr"
                },
                "title": {
                 "type": "string",
                 "example": "Professor"
                },
                "customer_company": {
                 "type": "string",
                 "example": "Maxi Gmbh"
                },
                "lastName": {
                 "type": "string",
                 "example": "Muster"
                },
                "firstName": {
                 "type": "string",
                 "example": "Max"
                },
                "zip": {
                 "type": "string",
                 "example": 1030
                },
                "city": {
                 "type": "string",
                 "example": "WIen"
                },
                "street": {
                 "type": "string",
                 "example": "Stra\u00dfe 1"
                },
                "country": {
                 "type": "string",
                 "example": "AT"
                },
                "email": {
                 "type": "string",
                 "example": "example@ready2order.com"
                },
                "phone": {
                 "type": "string",
                 "example": "+43 664 12345678"
                }
               },
               "type": "object"
              }
             }
            },
            "type": "object"
           }
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "put": {
    "tags": [
     "Customer"
    ],
    "summary": "Update Customer by Id",
    "description": "",
    "operationId": "customerUpdate",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Customer ID to update",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 12345
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "properties": {
         "customerCategory_id": {
          "type": "integer",
          "example": 1126
         },
         "birthday": {
          "type": "string",
          "example": "1991-09-20"
         },
         "city": {
          "type": "string",
          "example": "Wien"
         },
         "company": {
          "type": "string",
          "example": "Maxi Gmbh"
         },
         "email": {
          "type": "string",
          "example": "example@ready2order.com"
         },
         "firstName": {
          "type": "string",
          "example": "Max"
         },
         "lastName": {
          "type": "string",
          "example": "Muster"
         },
         "customer_name": {
          "type": "string"
         },
         "notes": {
          "type": "string",
          "example": "Some custom notes"
         },
         "customer_number": {
          "type": "integer",
          "example": 9999
         },
         "phone": {
          "type": "string",
          "example": "+43 12345678"
         },
         "salutation": {
          "type": "string",
          "example": "Herr"
         },
         "street": {
          "type": "string",
          "example": "Stra\u00dfe 1"
         },
         "title": {
          "type": "string",
          "example": "Herr"
         },
         "uid": {
          "type": "string",
          "example": "ATU1234567"
         },
         "zip": {
          "type": "string",
          "example": 1030
         },
         "address": {
          "type": "array",
          "items": []
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "customer_id": {
           "type": "integer",
           "example": 9999
          },
          "customer_number": {
           "type": "integer",
           "example": 9999
          },
          "customer_name": {
           "type": "string",
           "example": "Maxi's custom name"
          },
          "vatId": {
           "type": "string",
           "example": "ATU1234567"
          },
          "customer_notes": {
           "type": "string",
           "example": "Some custom notes"
          },
          "customerCategory_id": {
           "type": "integer",
           "example": 9999
          },
          "customer_birthday": {
           "type": "string",
           "example": "1991-09-20"
          },
          "address": {
           "type": "array",
           "items": {
            "properties": {
             "invoice": {
              "type": "array",
              "items": {
               "properties": {
                "salutation": {
                 "type": "string",
                 "example": "Herr"
                },
                "title": {
                 "type": "string",
                 "example": "Professor"
                },
                "customer_company": {
                 "type": "string",
                 "example": "Maxi Gmbh"
                },
                "lastName": {
                 "type": "string",
                 "example": "Muster"
                },
                "firstName": {
                 "type": "string",
                 "example": "Max"
                },
                "zip": {
                 "type": "string",
                 "example": 1030
                },
                "city": {
                 "type": "string",
                 "example": "WIen"
                },
                "street": {
                 "type": "string",
                 "example": "Stra\u00dfe 1"
                },
                "country": {
                 "type": "string",
                 "example": "AT"
                },
                "email": {
                 "type": "string",
                 "example": "example@ready2order.com"
                },
                "phone": {
                 "type": "string",
                 "example": "+43 664 12345678"
                }
               },
               "type": "object"
              }
             }
            },
            "type": "object"
           }
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "delete": {
    "tags": [
     "Customer"
    ],
    "summary": "Delete Customer by Id",
    "description": "",
    "operationId": "customerDelete",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Customer ID to delete",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 12345
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "Customer was successfully deleted!"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/customers/merge": {
   "post": {
    "tags": [
     "Customer"
    ],
    "summary": "Merge Customers",
    "description": "",
    "operationId": "customerMergeCustomers",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "masterCustomer",
         "customerIds"
        ],
        "properties": {
         "masterCustomer": {
          "description": "Customer into which the list of customerIds should be merged into.",
          "type": "integer",
          "example": 5924
         },
         "customerIds": {
          "description": "List of customers which shall be merged into masterCustomer.",
          "type": "array",
          "items": {
           "type": "integer"
          },
          "example": [
           1,
           2,
           3,
           4
          ]
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "Merged successfully!"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/dailyReport/open": {
   "put": {
    "tags": [
     "Daily Report"
    ],
    "summary": "Open daily report",
    "description": "Opens a new daily report. Fails if one is already open.",
    "operationId": "dailyReportOpen",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "Day was opened successfully."
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/dailyReport/close": {
   "put": {
    "tags": [
     "Daily Report"
    ],
    "summary": "Close daily report",
    "description": "Closes the currently open daily report and finalises the day's transactions. Fails if no report is open.",
    "operationId": "dailyReportClose",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "Day was closed successfully."
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/dailyReport/status": {
   "get": {
    "tags": [
     "Daily Report"
    ],
    "summary": "Get daily report status",
    "description": "Returns whether a daily report is currently open.",
    "operationId": "dailyReportStatus",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "success"
          },
          "status": {
           "type": "string",
           "example": "open"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/developerToken/grantAccessToken": {
   "post": {
    "tags": [
     "Grant Access Token"
    ],
    "summary": "Create Grant Access Token",
    "description": "",
    "operationId": "grantAccessTokenCreateGrantAccessToken",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "properties": {
         "authorizationCallbackUri": {
          "description": "The callback to which the merchant will be redirected if access will be granted.",
          "type": "string",
          "example": "https://example.com?auth=succeess"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "expiresAt": {
           "type": "string",
           "example": 1641546585
          },
          "grantAccessUri": {
           "type": "string",
           "example": "https://my.ready2order.com/api/grantAccess/abcdef_token"
          },
          "grantAccessToken": {
           "type": "string",
           "example": "abcdef_token (JWT token)"
          },
          "status": {
           "type": "string",
           "example": "pending"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/developerToken/grantAccessToken/{token}": {
   "get": {
    "tags": [
     "Grant Access Token"
    ],
    "summary": "Get Grant Access Token Status",
    "description": "",
    "operationId": "grantAccessTokenGetGrantAccessTokenStatus",
    "parameters": [
     {
      "name": "token",
      "in": "path",
      "description": "Grant-access token",
      "required": true,
      "schema": {
       "type": "string",
       "example": "your-token-to-check"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "example": "pending, expired, granted, denied"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/devices": {
   "get": {
    "tags": [
     "Device"
    ],
    "summary": "List",
    "description": "",
    "operationId": "deviceList",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "id": {
           "type": "integer",
           "example": 9999
          },
          "name": {
           "type": "string"
          },
          "configuredForReadyPayCloudPayments": {
           "type": "boolean",
           "example": false
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/discountGroups": {
   "get": {
    "tags": [
     "Discount Group"
    ],
    "summary": "List discount groups",
    "description": "Returns all discount groups for the account, including inactive ones.",
    "operationId": "discountGroupGetAllDiscountGroups",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "discountGroup_id": {
            "type": "integer",
            "example": 74890
           },
           "discountGroup_name": {
            "type": "string",
            "example": "Barzahlung"
           },
           "discountGroup_description": {
            "type": "string",
            "example": "just a description"
           },
           "discountGroup_active": {
            "type": "boolean",
            "example": true
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "post": {
    "tags": [
     "Discount Group"
    ],
    "summary": "Create a discount group",
    "description": "Creates a new discount group. You need at least one group before you can create discounts.",
    "operationId": "discountGroupCreateDiscountGroup",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "discountGroup_name"
        ],
        "properties": {
         "discountGroup_description": {
          "description": "The description of the discount group",
          "type": "string",
          "example": "description example"
         },
         "discountGroup_active": {
          "description": "Whether the discount group is active or not",
          "type": "boolean",
          "example": true
         },
         "discountGroup_name": {
          "description": "The name of the discount group",
          "type": "string",
          "example": "Sales"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "discountGroup_id": {
           "type": "integer",
           "example": 74890
          },
          "discountGroup_name": {
           "type": "string",
           "example": "Barzahlung"
          },
          "discountGroup_description": {
           "type": "string",
           "example": "just a description"
          },
          "discountGroup_active": {
           "type": "boolean",
           "example": true
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/discountGroups/{id}": {
   "get": {
    "tags": [
     "Discount Group"
    ],
    "summary": "Get a discount group",
    "description": "Returns a single discount group by its ID.",
    "operationId": "discountGroupGetDiscountGroup",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "discountGroup_id": {
           "type": "integer",
           "example": 74890
          },
          "discountGroup_name": {
           "type": "string",
           "example": "Barzahlung"
          },
          "discountGroup_description": {
           "type": "string",
           "example": "just a description"
          },
          "discountGroup_active": {
           "type": "boolean",
           "example": true
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "put": {
    "tags": [
     "Discount Group"
    ],
    "summary": "Update a discount group",
    "description": "Updates an existing discount group.",
    "operationId": "discountGroupUpdateDiscountGroup",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "properties": {
         "discountGroup_description": {
          "description": "The description of the discount group",
          "type": "string",
          "example": "description example"
         },
         "discountGroup_active": {
          "description": "Whether the discount group is active or not",
          "type": "boolean",
          "example": true
         },
         "discountGroup_name": {
          "description": "The name of the discount group",
          "type": "string",
          "example": "Sales"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "discountGroup_id": {
           "type": "integer",
           "example": 74890
          },
          "discountGroup_name": {
           "type": "string",
           "example": "Barzahlung"
          },
          "discountGroup_description": {
           "type": "string",
           "example": "just a description"
          },
          "discountGroup_active": {
           "type": "boolean",
           "example": true
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "delete": {
    "tags": [
     "Discount Group"
    ],
    "summary": "Delete a discount group",
    "description": "Deletes a discount group. Fails if the group still contains discounts; delete or reassign those first.",
    "operationId": "discountGroupDeleteDiscountGroup",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "DiscountGroup was successfully deleted!"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/discounts": {
   "get": {
    "tags": [
     "Discount"
    ],
    "summary": "List discounts",
    "description": "Returns all discounts for the account, including inactive ones.",
    "operationId": "discountGetAll",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "discount_id": {
            "type": "integer",
            "example": 123
           },
           "discount_name": {
            "type": "string",
            "example": "Discount"
           },
           "discount_description": {
            "type": "string",
            "example": "A discount description"
           },
           "discount_value": {
            "type": "string",
            "example": 30
           },
           "discount_unit": {
            "type": "string",
            "example": "custom"
           },
           "discount_active": {
            "type": "boolean",
            "example": true
           },
           "discount_order": {
            "type": "integer",
            "example": 0
           },
           "discountGroup_id": {
            "type": "integer",
            "example": 116
           },
           "discount_created_at": {
            "type": "string",
            "example": "2018-12-20 11:00:00"
           },
           "discount_updated_at": {
            "type": "string",
            "example": "2018-12-20 11:15:00"
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "post": {
    "tags": [
     "Discount"
    ],
    "summary": "Create a discount",
    "description": "Creates a new discount.",
    "operationId": "discountCreate",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "discount_name",
         "discountGroup_id",
         "discount_unit",
         "discount_value"
        ],
        "properties": {
         "discount_name": {
          "description": "The name of the discount",
          "type": "string",
          "example": "Discount"
         },
         "discountGroup_id": {
          "description": "The id of the discount group",
          "type": "integer",
          "example": 116
         },
         "discount_unit": {
          "description": "The unit of the discount",
          "type": "string",
          "enum": [
           "percent",
           "currency",
           "custom"
          ],
          "example": "custom"
         },
         "discount_order": {
          "description": "The order of the discount",
          "type": "integer",
          "example": 9999
         },
         "discount_description": {
          "description": "The description of the discount",
          "type": "string",
          "example": "A discount description"
         },
         "discount_active": {
          "description": "Whether the discount is active or not",
          "type": "boolean",
          "example": true
         },
         "discount_value": {
          "description": "The value of the discount",
          "type": "string",
          "example": 30
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "discount_id": {
           "type": "integer",
           "example": 123
          },
          "discount_name": {
           "type": "string",
           "example": "Discount"
          },
          "discount_description": {
           "type": "string",
           "example": "A discount description"
          },
          "discount_value": {
           "type": "string",
           "example": 30
          },
          "discount_unit": {
           "type": "string",
           "example": "custom"
          },
          "discount_active": {
           "type": "boolean",
           "example": true
          },
          "discount_order": {
           "type": "integer",
           "example": 0
          },
          "discountGroup_id": {
           "type": "integer",
           "example": 116
          },
          "discount_created_at": {
           "type": "string",
           "example": "2018-12-20 11:00:00"
          },
          "discount_updated_at": {
           "type": "string",
           "example": "2018-12-20 11:15:00"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/discounts/{id}": {
   "get": {
    "tags": [
     "Discount"
    ],
    "summary": "Get a discount",
    "description": "Returns a single discount by its ID.",
    "operationId": "discountFindById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "discount_id": {
           "type": "integer",
           "example": 123
          },
          "discount_name": {
           "type": "string",
           "example": "Discount"
          },
          "discount_description": {
           "type": "string",
           "example": "A discount description"
          },
          "discount_value": {
           "type": "string",
           "example": 30
          },
          "discount_unit": {
           "type": "string",
           "example": "custom"
          },
          "discount_active": {
           "type": "boolean",
           "example": true
          },
          "discount_order": {
           "type": "integer",
           "example": 0
          },
          "discountGroup_id": {
           "type": "integer",
           "example": 116
          },
          "discount_created_at": {
           "type": "string",
           "example": "2018-12-20 11:00:00"
          },
          "discount_updated_at": {
           "type": "string",
           "example": "2018-12-20 11:15:00"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "put": {
    "tags": [
     "Discount"
    ],
    "summary": "Update a discount",
    "description": "Updates an existing discount.",
    "operationId": "discountUpdate",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "properties": {
         "discount_name": {
          "description": "The name of the discount",
          "type": "string",
          "example": "Discount"
         },
         "discountGroup_id": {
          "description": "The id of the discount group",
          "type": "integer",
          "example": 116
         },
         "discount_unit": {
          "description": "The unit of the discount",
          "type": "string",
          "enum": [
           "percent",
           "currency",
           "custom"
          ],
          "example": "custom"
         },
         "discount_order": {
          "description": "The order of the discount",
          "type": "integer",
          "example": 9999
         },
         "discount_description": {
          "description": "The description of the discount",
          "type": "string",
          "example": "A discount description"
         },
         "discount_active": {
          "description": "Whether the discount is active or not",
          "type": "boolean",
          "example": true
         },
         "discount_value": {
          "description": "The value of the discount",
          "type": "string",
          "example": 30
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "discount_id": {
           "type": "integer",
           "example": 123
          },
          "discount_name": {
           "type": "string",
           "example": "Discount"
          },
          "discount_description": {
           "type": "string",
           "example": "A discount description"
          },
          "discount_value": {
           "type": "string",
           "example": 30
          },
          "discount_unit": {
           "type": "string",
           "example": "custom"
          },
          "discount_active": {
           "type": "boolean",
           "example": true
          },
          "discount_order": {
           "type": "integer",
           "example": 0
          },
          "discountGroup_id": {
           "type": "integer",
           "example": 116
          },
          "discount_created_at": {
           "type": "string",
           "example": "2018-12-20 11:00:00"
          },
          "discount_updated_at": {
           "type": "string",
           "example": "2018-12-20 11:15:00"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "delete": {
    "tags": [
     "Discount"
    ],
    "summary": "Delete a discount",
    "description": "Deletes a discount.",
    "operationId": "discountDelete",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "Discount was successfully deleted!"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/document/invoice": {
   "get": {
    "tags": [
     "Bill"
    ],
    "summary": "List all Bills",
    "description": "",
    "operationId": "billGetAll",
    "parameters": [
     {
      "name": "offset",
      "in": "query",
      "description": "Offset",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 10
      }
     },
     {
      "name": "limit",
      "in": "query",
      "description": "Items per page",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 255
      }
     },
     {
      "name": "query",
      "in": "query",
      "description": "Search query; the value to search by.",
      "required": false,
      "schema": {
       "type": "string",
       "example": "RG2018/1"
      }
     },
     {
      "name": "tableId",
      "in": "query",
      "description": "Table-Id to filter by.",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 153311
      }
     },
     {
      "name": "customerId",
      "in": "query",
      "description": "Customer-Id to filter by.",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 27268
      }
     },
     {
      "name": "dateField",
      "in": "query",
      "description": "Date field the query should filter by. <br><br> __Values__<br> `daily_report` Filter by the start date of the related Daily Report<br> `bill` Filter by the bill\u2019s creation date",
      "required": false,
      "schema": {
       "type": "string",
       "default": "daily_report",
       "enum": [
        "daily_report",
        "dr_startDate",
        "bill",
        "b_dateTime"
       ],
       "example": "daily_report"
      }
     },
     {
      "name": "dateFrom",
      "in": "query",
      "description": "Marks the start date for filtering. Can be a whole date (account's timestamp is used by default) or a datetime (ISO 8601).<br><br> `2024-10-23` or `2023-12-31T13:00:00Z`",
      "required": false,
      "schema": {
       "type": "string",
       "example": "2024-10-23"
      }
     },
     {
      "name": "dateTo",
      "in": "query",
      "description": "Marks the end date for filtering. Can be a whole date (account's timestamp is used by default) or a datetime (ISO 8601).<br><br> `2024-11-21` or `2023-12-31T13:00:00Z`",
      "required": false,
      "schema": {
       "type": "string",
       "example": "2024-11-21"
      }
     },
     {
      "name": "testMode",
      "in": "query",
      "description": "Training mode on/off.",
      "required": false,
      "schema": {
       "type": "boolean",
       "default": "false",
       "example": false
      }
     },
     {
      "name": "items",
      "in": "query",
      "description": "Include list of items.",
      "required": false,
      "schema": {
       "type": "boolean",
       "default": "false",
       "example": false
      }
     },
     {
      "name": "discounts",
      "in": "query",
      "description": "Include list of discounts.",
      "required": false,
      "schema": {
       "type": "boolean",
       "example": false
      }
     },
     {
      "name": "payments",
      "in": "query",
      "description": "Include list of payments.",
      "required": false,
      "schema": {
       "type": "boolean",
       "example": false
      }
     },
     {
      "name": "payment",
      "in": "query",
      "description": "[DEPRECATED] ~~Include list of payments. (Default: `false`)~~ <br><br> __Alternative__<br> `payments`",
      "required": false,
      "schema": {
       "type": "boolean",
       "example": false
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "invoices": {
           "type": "array",
           "items": {
            "properties": {
             "invoice_id": {
              "type": "integer",
              "example": 1234
             },
             "invoice_reference_id": {
              "type": "integer",
              "example": 1233
             },
             "invoice_timestamp": {
              "type": "string",
              "example": "2019-01-01 00:00:00"
             },
             "invoice_number": {
              "type": "integer",
              "example": 1
             },
             "invoice_numberFull": {
              "type": "string",
              "example": "RG2019/1"
             },
             "invoice_total": {
              "type": "string",
              "example": 12
             },
             "invoice_totalNet": {
              "type": "string",
              "example": 10
             },
             "invoice_totalVat": {
              "type": "string",
              "example": 2
             },
             "invoice_totalTip": {
              "type": "string",
              "example": 0
             },
             "invoice_address_company": {
              "type": "string",
              "example": "ready2order GmbH"
             },
             "invoice_address_vatId": {
              "type": "string",
              "example": "ATU12341234"
             },
             "invoice_address_salutation": {
              "type": "string",
              "example": "Mr/Ms"
             },
             "invoice_address_title": {
              "type": "string",
              "example": "Professor"
             },
             "invoice_address_firstName": {
              "type": "string",
              "example": "Chris"
             },
             "invoice_address_lastName": {
              "type": "string",
              "example": "Fox"
             },
             "invoice_address_street": {
              "type": "string",
              "example": "Hintere Zollamtsstra\u00dfe 17"
             },
             "invoice_address_city": {
              "type": "string",
              "example": "Vienna"
             },
             "invoice_address_zip": {
              "type": "string",
              "example": 1030
             },
             "invoice_address_country": {
              "type": "string",
              "example": "AT"
             },
             "invoice_address_email": {
              "type": "string",
              "example": "dux@fox.com"
             },
             "invoice_address_phone": {
              "type": "string",
              "example": "+43 664 1234 1234 1234"
             },
             "invoice_inPrinterQueue": {
              "type": "boolean",
              "example": false
             },
             "invoice_priceBase": {
              "type": "string",
              "example": "brutto"
             },
             "invoice_deleted_at": {
              "type": "string",
              "example": "2019-01-01 00:00:00"
             },
             "invoice_deletedReason": {
              "type": "string",
              "example": "Some reason"
             },
             "invoice_pdf": {
              "type": "string",
              "example": "http://some.link"
             },
             "invoice_textBeforeItemsTable": {
              "type": "string",
              "example": "Some text"
             },
             "invoice_text": {
              "type": "string",
              "example": "Some text"
             },
             "invoice_locked": {
              "type": "boolean",
              "example": true
             },
             "invoice_externalReferenceNumber": {
              "type": "string",
              "example": "REF-1234"
             },
             "invoice_internalInvoiceReferenceNumber": {
              "type": "string",
              "example": 1233
             },
             "invoice_dueDate": {
              "type": "string",
              "example": "2019-01-05"
             },
             "invoice_deliveryDate": {
              "type": "string",
              "example": "2019-01-01"
             },
             "invoice_paid": {
              "type": "boolean",
              "example": true
             },
             "invoice_paidDate": {
              "type": "string",
              "example": "2019-01-01"
             },
             "invoice_offlineTimestamp": {
              "type": "string",
              "example": "2019-01-01 00:00:00"
             },
             "invoice_offlineNumber": {
              "type": "string",
              "example": "2A26A8D9/1"
             },
             "invoice_testMode": {
              "type": "boolean",
              "example": true
             },
             "invoice_formatVersion": {
              "type": "integer",
              "example": 2
             },
             "customer_id": {
              "type": "integer",
              "example": 1234
             },
             "customerCategory_id": {
              "type": "integer",
              "example": 1023
             },
             "table_id": {
              "type": "integer",
              "example": 1234
             },
             "tableArea_id": {
              "type": "integer",
              "example": 67
             },
             "paymentMethod_id": {
              "type": "integer",
              "example": 1234
             },
             "user_id": {
              "type": "integer",
              "example": 1234
             },
             "printer_id": {
              "type": "integer",
              "example": 23
             },
             "billType_id": {
              "type": "integer",
              "example": 1
             },
             "currency_id": {
              "type": "integer",
              "example": 1
             },
             "items": {
              "type": "array",
              "items": {
               "properties": {
                "item_id": {
                 "type": "integer",
                 "example": 76234
                },
                "item_timestamp": {
                 "type": "string",
                 "example": "2019-01-01 00:00:00"
                },
                "item_quantity": {
                 "type": "string",
                 "example": 1
                },
                "item_retour": {
                 "type": "boolean",
                 "example": false
                },
                "item_number": {
                 "type": "string",
                 "example": 1
                },
                "item_serialNumber": {
                 "type": "string",
                 "example": "some-serial-number"
                },
                "item_expirationDate": {
                 "type": "string",
                 "example": "2019-01-01 00:00:00"
                },
                "item_name": {
                 "type": "string",
                 "example": "MyProductName"
                },
                "item_comment": {
                 "type": "string",
                 "example": "my-optional-comment"
                },
                "item_price": {
                 "type": "string",
                 "example": 12
                },
                "item_priceNet": {
                 "type": "string",
                 "example": 10
                },
                "item_priceBase": {
                 "type": "boolean",
                 "example": false
                },
                "item_total": {
                 "type": "string",
                 "example": 12
                },
                "item_totalNet": {
                 "type": "string",
                 "example": 10
                },
                "item_vat": {
                 "type": "string",
                 "example": 2
                },
                "item_vatRate": {
                 "type": "string",
                 "example": 20
                },
                "item_vatCompensation": {
                 "type": "string",
                 "example": 0
                },
                "item_undiscountedSumBeforeLineDiscount": {
                 "type": "string",
                 "example": 0
                },
                "item_undiscountedSumBeforeInvoiceDiscount": {
                 "type": "string",
                 "example": 0
                },
                "item_lineDiscountId": {
                 "type": "integer",
                 "example": 1234
                },
                "item_lineDiscountGroupId": {
                 "type": "integer",
                 "example": 1234
                },
                "item_lineDiscountName": {
                 "type": "string",
                 "example": "SomeDiscountName"
                },
                "item_lineDiscountPercent": {
                 "type": "string",
                 "example": 0
                },
                "item_lineDiscountNet": {
                 "type": "string",
                 "example": 0
                },
                "item_lineDiscountGross": {
                 "type": "string",
                 "example": 0
                },
                "item_invoiceDiscountNet": {
                 "type": "string",
                 "example": 0
                },
                "item_invoiceDiscountGross": {
                 "type": "string",
                 "example": 0
                },
                "item_discountable": {
                 "type": "boolean",
                 "example": true
                },
                "paymentMethod_id": {
                 "type": "integer",
                 "example": 1234
                },
                "item_updatedStock": {
                 "type": "boolean",
                 "example": true
                },
                "product_id": {
                 "type": "integer",
                 "example": 1234
                },
                "productgroup_name": {
                 "type": "string",
                 "example": "My product group"
                },
                "productGroup_id": {
                 "type": "integer",
                 "example": 1234
                },
                "customer_id": {
                 "type": "integer",
                 "example": 1234
                },
                "user_id": {
                 "type": "integer",
                 "example": 1234
                },
                "user_name": {
                 "type": "string",
                 "example": "SomeUser"
                },
                "invoice_id": {
                 "type": "integer",
                 "example": 1234
                },
                "deliveryBill_id": {
                 "type": "integer",
                 "example": 1234
                },
                "dailyReport_id": {
                 "type": "integer",
                 "example": 1234
                },
                "productUnit_id": {
                 "type": "integer",
                 "example": 1
                },
                "table_id": {
                 "type": "integer",
                 "example": 1234
                },
                "table_name": {
                 "type": "string",
                 "example": "SomeTableName"
                },
                "payment_id": {
                 "type": "integer",
                 "example": 431
                },
                "retourInvoice_id": {
                 "type": "integer",
                 "example": 1233
                },
                "item_accountingCode": {
                 "type": "string",
                 "example": 4000
                },
                "item_testMode": {
                 "type": "boolean",
                 "example": false
                },
                "item_product_price": {
                 "type": "string",
                 "example": 12
                },
                "item_product_priceNet": {
                 "type": "string",
                 "example": 10
                },
                "item_product_vat": {
                 "type": "string",
                 "example": 2
                },
                "item_qty": {
                 "type": "string",
                 "example": 1
                },
                "item_product_vatRate": {
                 "type": "string",
                 "example": 20
                },
                "item_product_vatCompensation": {
                 "type": "string",
                 "example": 0
                },
                "item_product_priceNetPerUnit": {
                 "type": "string",
                 "example": 10
                },
                "item_product_pricePerUnit": {
                 "type": "string",
                 "example": 12
                },
                "item_product_discountable": {
                 "type": "boolean",
                 "example": true
                }
               },
               "type": "object"
              }
             },
             "address": {
              "properties": {
               "company": {
                "type": "string",
                "example": "ready2order GmbH"
               },
               "vatId": {
                "type": "string",
                "example": "ATU12341234"
               },
               "salutation": {
                "type": "string",
                "example": "Mr/Ms"
               },
               "title": {
                "type": "string",
                "example": "Professor"
               },
               "firstName": {
                "type": "string",
                "example": "Chris"
               },
               "lastName": {
                "type": "string",
                "example": "Muster"
               },
               "street": {
                "type": "string",
                "example": "SomeStreet 1234"
               },
               "city": {
                "type": "string",
                "example": "Vienna"
               },
               "zip": {
                "type": "string",
                "example": 1030
               },
               "country": {
                "type": "string",
                "example": "AT"
               },
               "email": {
                "type": "string",
                "example": "dummy@email.com"
               },
               "phone": {
                "type": "string",
                "example": "+43 1234 12312341234"
               }
              },
              "type": "object"
             },
             "type": {
              "properties": {
               "billType_id": {
                "type": "integer",
                "example": 1
               },
               "billType_name": {
                "type": "string",
                "example": "Rechnung"
               },
               "billType_symbol": {
                "type": "string",
                "example": "RG"
               }
              },
              "type": "object"
             },
             "payment": {
              "type": "array",
              "items": {
               "properties": {
                "billPayment_id": {
                 "type": "integer",
                 "example": 9999
                },
                "billPayment_name": {
                 "type": "string",
                 "example": "Cash"
                },
                "billPayment_value": {
                 "type": "string",
                 "example": 12
                },
                "payment_id": {
                 "type": "integer",
                 "example": 431
                },
                "referenced_bill_id": {
                 "type": "integer",
                 "example": 1234
                }
               },
               "type": "object"
              }
             },
             "transaction": {
              "properties": {
               "id": {
                "type": "string",
                "example": "TFRG4C6NG2"
               },
               "tx_id": {
                "type": "string"
               },
               "customer_receipt": {
                "type": "string"
               },
               "amount": {
                "type": "string"
               },
               "r2o_id": {
                "type": "string",
                "example": "U1JGILYS"
               }
              },
              "type": "object"
             },
             "discounts": {
              "type": "array",
              "items": {
               "properties": {
                "billDiscount_id": {
                 "type": "integer",
                 "example": 9999
                },
                "billDiscount_name": {
                 "type": "string",
                 "example": "SomeDiscountName"
                },
                "billDiscount_value": {
                 "type": "string",
                 "example": 0
                },
                "billDiscount_percent": {
                 "type": "string",
                 "example": 0
                },
                "billDiscount_discount_id": {
                 "type": "integer",
                 "example": 9999
                },
                "billDiscount_discountGroup_id": {
                 "type": "integer",
                 "example": 9999
                },
                "billDiscount_created_at": {
                 "type": "string",
                 "example": "2019-01-01 00:00:00"
                },
                "billDiscount_updated_at": {
                 "type": "string",
                 "example": "2019-01-01 00:00:00"
                }
               },
               "type": "object"
              }
             }
            },
            "type": "object"
           }
          },
          "count": {
           "type": "integer",
           "example": 50
          },
          "offset": {
           "type": "integer",
           "example": 0
          },
          "limit": {
           "type": "integer",
           "example": 50
          },
          "dateFrom": {
           "type": "string",
           "example": "2019-01-01"
          },
          "dateTo": {
           "type": "string",
           "example": "2019-12-31"
          },
          "query": {
           "type": "string",
           "example": "some-query"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "post": {
    "tags": [
     "Bill"
    ],
    "summary": "Create Bill",
    "description": "",
    "operationId": "billCreateBill",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "paymentMethod_id",
         "user_id"
        ],
        "properties": {
         "paymentMethod_id": {
          "description": "PaymentMethod ID. Whether the bill is marked as paid depends on the payment method type \u2014 payment methods with markAsPaid=true will automatically mark the bill as paid.",
          "type": "integer",
          "example": 123456
         },
         "user_id": {
          "description": "User ID",
          "type": "integer",
          "example": 123456
         },
         "partPayments": {
          "description": "List of part-payments to split the bill total into multiple payments",
          "type": "array",
          "items": {
           "properties": {
            "paymentMethod_id": {
             "description": "PaymentMethod ID of this payment",
             "type": "integer",
             "example": 123456
            },
            "amount": {
             "description": "Amount paid with this payment method",
             "type": "string",
             "example": 5
            },
            "tip": {
             "description": "Tip paid with this payment method",
             "type": "string",
             "example": 1
            },
            "couponIdentifier": {
             "description": "Identifier of the coupon to redeem (only for payment methods of type coupon)",
             "type": "string",
             "example": "COUPON-123"
            }
           },
           "type": "object"
          }
         },
         "table_id": {
          "description": "Table ID",
          "type": "integer",
          "example": 4321
         },
         "customer_id": {
          "description": "Customer ID",
          "type": "integer",
          "example": 1024
         },
         "billType_id": {
          "description": "BillType ID",
          "type": "integer",
          "example": 1
         },
         "printer_id": {
          "description": "Printer ID on which the bill should be printed",
          "type": "integer",
          "example": 1
         },
         "printingProfile_id": {
          "description": "PrintingProfile ID on which the bill should be printed.",
          "type": "integer",
          "example": 1
         },
         "invoice_printCount": {
          "description": "Number of copies to be printed (where 1 is the original receipt)",
          "type": "integer",
          "example": 2
         },
         "invoice_textBeforeItemsTable": {
          "description": "Text shown before items table on bill PDF",
          "type": "string",
          "example": "Some text"
         },
         "invoice_text": {
          "description": "Text shown after items table on bill PDF",
          "type": "string",
          "example": "Some text"
         },
         "invoice_externalReferenceNumber": {
          "description": "External reference number for the bill",
          "type": "string",
          "example": "REF-1234"
         },
         "invoice_totalTip": {
          "description": "Total tip amount for the invoice.",
          "type": "string",
          "example": 1.5
         },
         "invoice_priceBase": {
          "description": "Pricebase",
          "type": "string",
          "enum": [
           "gross",
           "net"
          ],
          "example": "gross or net"
         },
         "invoice_testMode": {
          "description": "Trainingmode",
          "type": "boolean",
          "example": false
         },
         "createPDF": {
          "description": "Whether to create and return PDF or not",
          "type": "boolean",
          "example": false
         },
         "pdfFormat": {
          "description": "PDF format",
          "type": "string",
          "example": "A4, 80mm or 58mm"
         },
         "invoice_showRecipient": {
          "description": "Show additional lines on invoice receipt",
          "type": "boolean",
          "example": false
         },
         "invoice_dueDate": {
          "description": "Due date",
          "type": "string",
          "example": "2019-01-15"
         },
         "items": {
          "description": "List of items <br><br> _* Required if `orderItem_ids` is not provided._",
          "type": "array",
          "items": {
           "properties": {
            "item_quantity": {
             "type": "string",
             "default": 1,
             "example": 3
            },
            "item_name": {
             "type": "string",
             "example": "MyProductName"
            },
            "item_comment": {
             "type": "string",
             "example": "MyProductDescription"
            },
            "item_price": {
             "type": "string",
             "example": 12
            },
            "item_vatRate": {
             "description": "Please use vatId instead",
             "type": "string",
             "example": 20
            },
            "item_vatId": {
             "type": "integer",
             "example": 12345
            },
            "item_priceBase": {
             "type": "string",
             "example": "brutto or netto"
            },
            "product_id": {
             "type": "integer",
             "example": 1234
            },
            "discount_id": {
             "type": "integer",
             "example": 1234
            },
            "discount_value": {
             "type": "string",
             "example": 0
            },
            "discount_unit": {
             "type": "string",
             "example": "percent or currency"
            },
            "item_variations": {
             "description": "List of product variations",
             "type": "array",
             "items": {
              "properties": {
               "product_id": {
                "description": "Id of product variation",
                "type": "integer",
                "example": 1
               },
               "variation_name": {
                "description": "Product variation name",
                "type": "string",
                "example": "Schnitzel with chips and mayo"
               },
               "variation_price": {
                "description": "Product variation price",
                "type": "string",
                "example": 15.2
               }
              },
              "type": "object"
             }
            }
           },
           "type": "object"
          }
         },
         "orderItem_ids": {
          "description": "List of orderItemIds to process the invoice for <br><br> _* Required if `items` is not provided._",
          "type": "array",
          "items": {
           "type": "integer"
          },
          "example": [
           1,
           2,
           3
          ]
         },
         "address": {
          "description": "Address object",
          "type": "array",
          "items": {
           "properties": {
            "company": {
             "type": "string",
             "example": "ready2order GmbH"
            },
            "vatId": {
             "type": "string",
             "example": "ATU12341234"
            },
            "leitweg_id": {
             "type": "string",
             "example": 1234
            },
            "supplier_number": {
             "type": "string",
             "example": 1234
            },
            "salutation": {
             "type": "string",
             "example": "Mr/Mrs"
            },
            "title": {
             "type": "string",
             "example": "Professor"
            },
            "firstName": {
             "type": "string",
             "example": "Chris"
            },
            "lastName": {
             "type": "string",
             "example": "Muster"
            },
            "street": {
             "type": "string",
             "example": "SomeStreet 1234"
            },
            "city": {
             "type": "string",
             "example": "Vienna"
            },
            "zip": {
             "type": "string",
             "example": 1030
            },
            "country": {
             "type": "string",
             "example": "AT"
            },
            "email": {
             "type": "string",
             "example": "dummy@email.com"
            },
            "phone": {
             "type": "string",
             "example": "+43 1234 12312341234"
            }
           },
           "type": "object"
          }
         },
         "invoice_discounts": {
          "description": "List of invoice-level discounts",
          "type": "array",
          "items": {
           "properties": {
            "invoice_discountId": {
             "description": "Discount ID",
             "type": "integer",
             "example": 1234
            },
            "invoice_discountValue": {
             "description": "Discount value (must be negative)",
             "type": "string",
             "example": -5.5
            },
            "invoice_discountUnit": {
             "description": "Discount unit",
             "type": "string",
             "example": "percent or currency"
            }
           },
           "type": "object"
          }
         },
         "order_enablePrinting": {
          "description": "Whether to print the order receipts (foods, drinks) for the bill (if configured)",
          "type": "boolean",
          "example": true
         },
         "priceLevel_id": {
          "description": "PriceLevel ID",
          "type": "integer",
          "example": 255
         },
         "invoice_roundToSmallestCurrencyUnit": {
          "description": "Rounding to 0.05 or 0.10 cents",
          "type": "string",
          "example": "0.05, 0.1"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "invoice_id": {
           "type": "integer",
           "example": 1234
          },
          "invoice_reference_id": {
           "type": "integer",
           "example": 1233
          },
          "invoice_timestamp": {
           "type": "string",
           "example": "2019-01-01 00:00:00"
          },
          "invoice_number": {
           "type": "integer",
           "example": 1
          },
          "invoice_numberFull": {
           "type": "string",
           "example": "RG2019/1"
          },
          "invoice_total": {
           "type": "string",
           "example": 12
          },
          "invoice_totalNet": {
           "type": "string",
           "example": 10
          },
          "invoice_totalVat": {
           "type": "string",
           "example": 2
          },
          "invoice_totalTip": {
           "type": "string",
           "example": 0
          },
          "invoice_address_company": {
           "type": "string",
           "example": "ready2order GmbH"
          },
          "invoice_address_vatId": {
           "type": "string",
           "example": "ATU12341234"
          },
          "invoice_address_salutation": {
           "type": "string",
           "example": "Mr/Ms"
          },
          "invoice_address_title": {
           "type": "string",
           "example": "Professor"
          },
          "invoice_address_firstName": {
           "type": "string",
           "example": "Chris"
          },
          "invoice_address_lastName": {
           "type": "string",
           "example": "Fox"
          },
          "invoice_address_street": {
           "type": "string",
           "example": "Hintere Zollamtsstra\u00dfe 17"
          },
          "invoice_address_city": {
           "type": "string",
           "example": "Vienna"
          },
          "invoice_address_zip": {
           "type": "string",
           "example": 1030
          },
          "invoice_address_country": {
           "type": "string",
           "example": "AT"
          },
          "invoice_address_email": {
           "type": "string",
           "example": "dux@fox.com"
          },
          "invoice_address_phone": {
           "type": "string",
           "example": "+43 664 1234 1234 1234"
          },
          "invoice_inPrinterQueue": {
           "type": "boolean",
           "example": false
          },
          "invoice_priceBase": {
           "type": "string",
           "example": "brutto"
          },
          "invoice_deleted_at": {
           "type": "string",
           "example": "2019-01-01 00:00:00"
          },
          "invoice_deletedReason": {
           "type": "string",
           "example": "Some reason"
          },
          "invoice_pdf": {
           "type": "string",
           "example": "http://some.link"
          },
          "invoice_textBeforeItemsTable": {
           "type": "string",
           "example": "Some text"
          },
          "invoice_text": {
           "type": "string",
           "example": "Some text"
          },
          "invoice_locked": {
           "type": "boolean",
           "example": true
          },
          "invoice_externalReferenceNumber": {
           "type": "string",
           "example": "REF-1234"
          },
          "invoice_internalInvoiceReferenceNumber": {
           "type": "string",
           "example": 1233
          },
          "invoice_dueDate": {
           "type": "string",
           "example": "2019-01-05"
          },
          "invoice_deliveryDate": {
           "type": "string",
           "example": "2019-01-01"
          },
          "invoice_paid": {
           "type": "boolean",
           "example": true
          },
          "invoice_paidDate": {
           "type": "string",
           "example": "2019-01-01"
          },
          "invoice_offlineTimestamp": {
           "type": "string",
           "example": "2019-01-01 00:00:00"
          },
          "invoice_offlineNumber": {
           "type": "string",
           "example": "2A26A8D9/1"
          },
          "invoice_testMode": {
           "type": "boolean",
           "example": true
          },
          "invoice_formatVersion": {
           "type": "integer",
           "example": 2
          },
          "customer_id": {
           "type": "integer",
           "example": 1234
          },
          "customerCategory_id": {
           "type": "integer",
           "example": 1023
          },
          "table_id": {
           "type": "integer",
           "example": 1234
          },
          "tableArea_id": {
           "type": "integer",
           "example": 67
          },
          "paymentMethod_id": {
           "type": "integer",
           "example": 1234
          },
          "user_id": {
           "type": "integer",
           "example": 1234
          },
          "printer_id": {
           "type": "integer",
           "example": 23
          },
          "billType_id": {
           "type": "integer",
           "example": 1
          },
          "currency_id": {
           "type": "integer",
           "example": 1
          },
          "items": {
           "type": "array",
           "items": {
            "properties": {
             "item_id": {
              "type": "integer",
              "example": 76234
             },
             "item_timestamp": {
              "type": "string",
              "example": "2019-01-01 00:00:00"
             },
             "item_quantity": {
              "type": "string",
              "example": 1
             },
             "item_retour": {
              "type": "boolean",
              "example": false
             },
             "item_number": {
              "type": "string",
              "example": 1
             },
             "item_serialNumber": {
              "type": "string",
              "example": "some-serial-number"
             },
             "item_expirationDate": {
              "type": "string",
              "example": "2019-01-01 00:00:00"
             },
             "item_name": {
              "type": "string",
              "example": "MyProductName"
             },
             "item_comment": {
              "type": "string",
              "example": "my-optional-comment"
             },
             "item_price": {
              "type": "string",
              "example": 12
             },
             "item_priceNet": {
              "type": "string",
              "example": 10
             },
             "item_priceBase": {
              "type": "boolean",
              "example": false
             },
             "item_total": {
              "type": "string",
              "example": 12
             },
             "item_totalNet": {
              "type": "string",
              "example": 10
             },
             "item_vat": {
              "type": "string",
              "example": 2
             },
             "item_vatRate": {
              "type": "string",
              "example": 20
             },
             "item_vatCompensation": {
              "type": "string",
              "example": 0
             },
             "item_undiscountedSumBeforeLineDiscount": {
              "type": "string",
              "example": 0
             },
             "item_undiscountedSumBeforeInvoiceDiscount": {
              "type": "string",
              "example": 0
             },
             "item_lineDiscountId": {
              "type": "integer",
              "example": 1234
             },
             "item_lineDiscountGroupId": {
              "type": "integer",
              "example": 1234
             },
             "item_lineDiscountName": {
              "type": "string",
              "example": "SomeDiscountName"
             },
             "item_lineDiscountPercent": {
              "type": "string",
              "example": 0
             },
             "item_lineDiscountNet": {
              "type": "string",
              "example": 0
             },
             "item_lineDiscountGross": {
              "type": "string",
              "example": 0
             },
             "item_invoiceDiscountNet": {
              "type": "string",
              "example": 0
             },
             "item_invoiceDiscountGross": {
              "type": "string",
              "example": 0
             },
             "item_discountable": {
              "type": "boolean",
              "example": true
             },
             "paymentMethod_id": {
              "type": "integer",
              "example": 1234
             },
             "item_updatedStock": {
              "type": "boolean",
              "example": true
             },
             "product_id": {
              "type": "integer",
              "example": 1234
             },
             "productgroup_name": {
              "type": "string",
              "example": "My product group"
             },
             "productGroup_id": {
              "type": "integer",
              "example": 1234
             },
             "customer_id": {
              "type": "integer",
              "example": 1234
             },
             "user_id": {
              "type": "integer",
              "example": 1234
             },
             "user_name": {
              "type": "string",
              "example": "SomeUser"
             },
             "invoice_id": {
              "type": "integer",
              "example": 1234
             },
             "deliveryBill_id": {
              "type": "integer",
              "example": 1234
             },
             "dailyReport_id": {
              "type": "integer",
              "example": 1234
             },
             "productUnit_id": {
              "type": "integer",
              "example": 1
             },
             "table_id": {
              "type": "integer",
              "example": 1234
             },
             "table_name": {
              "type": "string",
              "example": "SomeTableName"
             },
             "payment_id": {
              "type": "integer",
              "example": 431
             },
             "retourInvoice_id": {
              "type": "integer",
              "example": 1233
             },
             "item_accountingCode": {
              "type": "string",
              "example": 4000
             },
             "item_testMode": {
              "type": "boolean",
              "example": false
             },
             "item_product_price": {
              "type": "string",
              "example": 12
             },
             "item_product_priceNet": {
              "type": "string",
              "example": 10
             },
             "item_product_vat": {
              "type": "string",
              "example": 2
             },
             "item_qty": {
              "type": "string",
              "example": 1
             },
             "item_product_vatRate": {
              "type": "string",
              "example": 20
             },
             "item_product_vatCompensation": {
              "type": "string",
              "example": 0
             },
             "item_product_priceNetPerUnit": {
              "type": "string",
              "example": 10
             },
             "item_product_pricePerUnit": {
              "type": "string",
              "example": 12
             },
             "item_product_discountable": {
              "type": "boolean",
              "example": true
             }
            },
            "type": "object"
           }
          },
          "address": {
           "properties": {
            "company": {
             "type": "string",
             "example": "ready2order GmbH"
            },
            "vatId": {
             "type": "string",
             "example": "ATU12341234"
            },
            "salutation": {
             "type": "string",
             "example": "Mr/Ms"
            },
            "title": {
             "type": "string",
             "example": "Professor"
            },
            "firstName": {
             "type": "string",
             "example": "Chris"
            },
            "lastName": {
             "type": "string",
             "example": "Muster"
            },
            "street": {
             "type": "string",
             "example": "SomeStreet 1234"
            },
            "city": {
             "type": "string",
             "example": "Vienna"
            },
            "zip": {
             "type": "string",
             "example": 1030
            },
            "country": {
             "type": "string",
             "example": "AT"
            },
            "email": {
             "type": "string",
             "example": "dummy@email.com"
            },
            "phone": {
             "type": "string",
             "example": "+43 1234 12312341234"
            }
           },
           "type": "object"
          },
          "type": {
           "properties": {
            "billType_id": {
             "type": "integer",
             "example": 1
            },
            "billType_name": {
             "type": "string",
             "example": "Rechnung"
            },
            "billType_symbol": {
             "type": "string",
             "example": "RG"
            }
           },
           "type": "object"
          },
          "payment": {
           "type": "array",
           "items": {
            "properties": {
             "billPayment_id": {
              "type": "integer",
              "example": 9999
             },
             "billPayment_name": {
              "type": "string",
              "example": "Cash"
             },
             "billPayment_value": {
              "type": "string",
              "example": 12
             },
             "payment_id": {
              "type": "integer",
              "example": 431
             },
             "referenced_bill_id": {
              "type": "integer",
              "example": 1234
             }
            },
            "type": "object"
           }
          },
          "transaction": {
           "properties": {
            "id": {
             "type": "string",
             "example": "TFRG4C6NG2"
            },
            "tx_id": {
             "type": "string"
            },
            "customer_receipt": {
             "type": "string"
            },
            "amount": {
             "type": "string"
            },
            "r2o_id": {
             "type": "string",
             "example": "U1JGILYS"
            }
           },
           "type": "object"
          },
          "discounts": {
           "type": "array",
           "items": {
            "properties": {
             "billDiscount_id": {
              "type": "integer",
              "example": 9999
             },
             "billDiscount_name": {
              "type": "string",
              "example": "SomeDiscountName"
             },
             "billDiscount_value": {
              "type": "string",
              "example": 0
             },
             "billDiscount_percent": {
              "type": "string",
              "example": 0
             },
             "billDiscount_discount_id": {
              "type": "integer",
              "example": 9999
             },
             "billDiscount_discountGroup_id": {
              "type": "integer",
              "example": 9999
             },
             "billDiscount_created_at": {
              "type": "string",
              "example": "2019-01-01 00:00:00"
             },
             "billDiscount_updated_at": {
              "type": "string",
              "example": "2019-01-01 00:00:00"
             }
            },
            "type": "object"
           }
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/document/invoice/count": {
   "get": {
    "tags": [
     "Bill"
    ],
    "summary": "Count All Bills",
    "description": "",
    "operationId": "billCountAllBills",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "count": {
           "type": "integer",
           "example": 1500
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/document/invoice/{id}": {
   "get": {
    "tags": [
     "Bill"
    ],
    "summary": "Find Bill by Id",
    "description": "",
    "operationId": "billFindById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Bill ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "invoice_id": {
           "type": "integer",
           "example": 1234
          },
          "invoice_reference_id": {
           "type": "integer",
           "example": 1233
          },
          "invoice_timestamp": {
           "type": "string",
           "example": "2019-01-01 00:00:00"
          },
          "invoice_number": {
           "type": "integer",
           "example": 1
          },
          "invoice_numberFull": {
           "type": "string",
           "example": "RG2019/1"
          },
          "invoice_total": {
           "type": "string",
           "example": 12
          },
          "invoice_totalNet": {
           "type": "string",
           "example": 10
          },
          "invoice_totalVat": {
           "type": "string",
           "example": 2
          },
          "invoice_totalTip": {
           "type": "string",
           "example": 0
          },
          "invoice_address_company": {
           "type": "string",
           "example": "ready2order GmbH"
          },
          "invoice_address_vatId": {
           "type": "string",
           "example": "ATU12341234"
          },
          "invoice_address_salutation": {
           "type": "string",
           "example": "Mr/Ms"
          },
          "invoice_address_title": {
           "type": "string",
           "example": "Professor"
          },
          "invoice_address_firstName": {
           "type": "string",
           "example": "Chris"
          },
          "invoice_address_lastName": {
           "type": "string",
           "example": "Fox"
          },
          "invoice_address_street": {
           "type": "string",
           "example": "Hintere Zollamtsstra\u00dfe 17"
          },
          "invoice_address_city": {
           "type": "string",
           "example": "Vienna"
          },
          "invoice_address_zip": {
           "type": "string",
           "example": 1030
          },
          "invoice_address_country": {
           "type": "string",
           "example": "AT"
          },
          "invoice_address_email": {
           "type": "string",
           "example": "dux@fox.com"
          },
          "invoice_address_phone": {
           "type": "string",
           "example": "+43 664 1234 1234 1234"
          },
          "invoice_inPrinterQueue": {
           "type": "boolean",
           "example": false
          },
          "invoice_priceBase": {
           "type": "string",
           "example": "brutto"
          },
          "invoice_deleted_at": {
           "type": "string",
           "example": "2019-01-01 00:00:00"
          },
          "invoice_deletedReason": {
           "type": "string",
           "example": "Some reason"
          },
          "invoice_pdf": {
           "type": "string",
           "example": "http://some.link"
          },
          "invoice_textBeforeItemsTable": {
           "type": "string",
           "example": "Some text"
          },
          "invoice_text": {
           "type": "string",
           "example": "Some text"
          },
          "invoice_locked": {
           "type": "boolean",
           "example": true
          },
          "invoice_externalReferenceNumber": {
           "type": "string",
           "example": "REF-1234"
          },
          "invoice_internalInvoiceReferenceNumber": {
           "type": "string",
           "example": 1233
          },
          "invoice_dueDate": {
           "type": "string",
           "example": "2019-01-05"
          },
          "invoice_deliveryDate": {
           "type": "string",
           "example": "2019-01-01"
          },
          "invoice_paid": {
           "type": "boolean",
           "example": true
          },
          "invoice_paidDate": {
           "type": "string",
           "example": "2019-01-01"
          },
          "invoice_offlineTimestamp": {
           "type": "string",
           "example": "2019-01-01 00:00:00"
          },
          "invoice_offlineNumber": {
           "type": "string",
           "example": "2A26A8D9/1"
          },
          "invoice_testMode": {
           "type": "boolean",
           "example": true
          },
          "invoice_formatVersion": {
           "type": "integer",
           "example": 2
          },
          "customer_id": {
           "type": "integer",
           "example": 1234
          },
          "customerCategory_id": {
           "type": "integer",
           "example": 1023
          },
          "table_id": {
           "type": "integer",
           "example": 1234
          },
          "tableArea_id": {
           "type": "integer",
           "example": 67
          },
          "paymentMethod_id": {
           "type": "integer",
           "example": 1234
          },
          "user_id": {
           "type": "integer",
           "example": 1234
          },
          "printer_id": {
           "type": "integer",
           "example": 23
          },
          "billType_id": {
           "type": "integer",
           "example": 1
          },
          "currency_id": {
           "type": "integer",
           "example": 1
          },
          "items": {
           "type": "array",
           "items": {
            "properties": {
             "item_id": {
              "type": "integer",
              "example": 76234
             },
             "item_timestamp": {
              "type": "string",
              "example": "2019-01-01 00:00:00"
             },
             "item_quantity": {
              "type": "string",
              "example": 1
             },
             "item_retour": {
              "type": "boolean",
              "example": false
             },
             "item_number": {
              "type": "string",
              "example": 1
             },
             "item_serialNumber": {
              "type": "string",
              "example": "some-serial-number"
             },
             "item_expirationDate": {
              "type": "string",
              "example": "2019-01-01 00:00:00"
             },
             "item_name": {
              "type": "string",
              "example": "MyProductName"
             },
             "item_comment": {
              "type": "string",
              "example": "my-optional-comment"
             },
             "item_price": {
              "type": "string",
              "example": 12
             },
             "item_priceNet": {
              "type": "string",
              "example": 10
             },
             "item_priceBase": {
              "type": "boolean",
              "example": false
             },
             "item_total": {
              "type": "string",
              "example": 12
             },
             "item_totalNet": {
              "type": "string",
              "example": 10
             },
             "item_vat": {
              "type": "string",
              "example": 2
             },
             "item_vatRate": {
              "type": "string",
              "example": 20
             },
             "item_vatCompensation": {
              "type": "string",
              "example": 0
             },
             "item_undiscountedSumBeforeLineDiscount": {
              "type": "string",
              "example": 0
             },
             "item_undiscountedSumBeforeInvoiceDiscount": {
              "type": "string",
              "example": 0
             },
             "item_lineDiscountId": {
              "type": "integer",
              "example": 1234
             },
             "item_lineDiscountGroupId": {
              "type": "integer",
              "example": 1234
             },
             "item_lineDiscountName": {
              "type": "string",
              "example": "SomeDiscountName"
             },
             "item_lineDiscountPercent": {
              "type": "string",
              "example": 0
             },
             "item_lineDiscountNet": {
              "type": "string",
              "example": 0
             },
             "item_lineDiscountGross": {
              "type": "string",
              "example": 0
             },
             "item_invoiceDiscountNet": {
              "type": "string",
              "example": 0
             },
             "item_invoiceDiscountGross": {
              "type": "string",
              "example": 0
             },
             "item_discountable": {
              "type": "boolean",
              "example": true
             },
             "paymentMethod_id": {
              "type": "integer",
              "example": 1234
             },
             "item_updatedStock": {
              "type": "boolean",
              "example": true
             },
             "product_id": {
              "type": "integer",
              "example": 1234
             },
             "productgroup_name": {
              "type": "string",
              "example": "My product group"
             },
             "productGroup_id": {
              "type": "integer",
              "example": 1234
             },
             "customer_id": {
              "type": "integer",
              "example": 1234
             },
             "user_id": {
              "type": "integer",
              "example": 1234
             },
             "user_name": {
              "type": "string",
              "example": "SomeUser"
             },
             "invoice_id": {
              "type": "integer",
              "example": 1234
             },
             "deliveryBill_id": {
              "type": "integer",
              "example": 1234
             },
             "dailyReport_id": {
              "type": "integer",
              "example": 1234
             },
             "productUnit_id": {
              "type": "integer",
              "example": 1
             },
             "table_id": {
              "type": "integer",
              "example": 1234
             },
             "table_name": {
              "type": "string",
              "example": "SomeTableName"
             },
             "payment_id": {
              "type": "integer",
              "example": 431
             },
             "retourInvoice_id": {
              "type": "integer",
              "example": 1233
             },
             "item_accountingCode": {
              "type": "string",
              "example": 4000
             },
             "item_testMode": {
              "type": "boolean",
              "example": false
             },
             "item_product_price": {
              "type": "string",
              "example": 12
             },
             "item_product_priceNet": {
              "type": "string",
              "example": 10
             },
             "item_product_vat": {
              "type": "string",
              "example": 2
             },
             "item_qty": {
              "type": "string",
              "example": 1
             },
             "item_product_vatRate": {
              "type": "string",
              "example": 20
             },
             "item_product_vatCompensation": {
              "type": "string",
              "example": 0
             },
             "item_product_priceNetPerUnit": {
              "type": "string",
              "example": 10
             },
             "item_product_pricePerUnit": {
              "type": "string",
              "example": 12
             },
             "item_product_discountable": {
              "type": "boolean",
              "example": true
             }
            },
            "type": "object"
           }
          },
          "address": {
           "properties": {
            "company": {
             "type": "string",
             "example": "ready2order GmbH"
            },
            "vatId": {
             "type": "string",
             "example": "ATU12341234"
            },
            "salutation": {
             "type": "string",
             "example": "Mr/Ms"
            },
            "title": {
             "type": "string",
             "example": "Professor"
            },
            "firstName": {
             "type": "string",
             "example": "Chris"
            },
            "lastName": {
             "type": "string",
             "example": "Muster"
            },
            "street": {
             "type": "string",
             "example": "SomeStreet 1234"
            },
            "city": {
             "type": "string",
             "example": "Vienna"
            },
            "zip": {
             "type": "string",
             "example": 1030
            },
            "country": {
             "type": "string",
             "example": "AT"
            },
            "email": {
             "type": "string",
             "example": "dummy@email.com"
            },
            "phone": {
             "type": "string",
             "example": "+43 1234 12312341234"
            }
           },
           "type": "object"
          },
          "type": {
           "properties": {
            "billType_id": {
             "type": "integer",
             "example": 1
            },
            "billType_name": {
             "type": "string",
             "example": "Rechnung"
            },
            "billType_symbol": {
             "type": "string",
             "example": "RG"
            }
           },
           "type": "object"
          },
          "payment": {
           "type": "array",
           "items": {
            "properties": {
             "billPayment_id": {
              "type": "integer",
              "example": 9999
             },
             "billPayment_name": {
              "type": "string",
              "example": "Cash"
             },
             "billPayment_value": {
              "type": "string",
              "example": 12
             },
             "payment_id": {
              "type": "integer",
              "example": 431
             },
             "referenced_bill_id": {
              "type": "integer",
              "example": 1234
             }
            },
            "type": "object"
           }
          },
          "transaction": {
           "properties": {
            "id": {
             "type": "string",
             "example": "TFRG4C6NG2"
            },
            "tx_id": {
             "type": "string"
            },
            "customer_receipt": {
             "type": "string"
            },
            "amount": {
             "type": "string"
            },
            "r2o_id": {
             "type": "string",
             "example": "U1JGILYS"
            }
           },
           "type": "object"
          },
          "discounts": {
           "type": "array",
           "items": {
            "properties": {
             "billDiscount_id": {
              "type": "integer",
              "example": 9999
             },
             "billDiscount_name": {
              "type": "string",
              "example": "SomeDiscountName"
             },
             "billDiscount_value": {
              "type": "string",
              "example": 0
             },
             "billDiscount_percent": {
              "type": "string",
              "example": 0
             },
             "billDiscount_discount_id": {
              "type": "integer",
              "example": 9999
             },
             "billDiscount_discountGroup_id": {
              "type": "integer",
              "example": 9999
             },
             "billDiscount_created_at": {
              "type": "string",
              "example": "2019-01-01 00:00:00"
             },
             "billDiscount_updated_at": {
              "type": "string",
              "example": "2019-01-01 00:00:00"
             }
            },
            "type": "object"
           }
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/document/invoice/{id}/delete": {
   "post": {
    "tags": [
     "Bill"
    ],
    "summary": "Cancel an invoice",
    "description": "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.",
    "operationId": "billDelete",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID of the invoice that should be cancelled",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "storno_id",
         "storno_reason"
        ],
        "properties": {
         "storno_id": {
          "description": "ID of the storno reason that justifies this cancellation. See `GET /storno` for the list of reasons.",
          "type": "integer",
          "example": 9823
         },
         "storno_reason": {
          "description": "Free-text comment explaining why this specific invoice was cancelled. Stored on the cancellation bill alongside the storno reason referenced by `storno_id`.",
          "type": "string",
          "example": "Correction"
         },
         "invoice_externalReferenceNumber": {
          "description": "External reference number to store on the cancellation bill.",
          "type": "string",
          "example": "REF-1234"
         },
         "paymentMethod_id": {
          "description": "PaymentMethod ID to cancel the invoice with. If `partPayments` is also given, this payment method only covers the amount remaining after the part payments; otherwise it covers the entire cancellation amount. Defaults to the original invoice's payment method if not given.",
          "type": "integer",
          "example": 123456
         },
         "partPayments": {
          "description": "List of part-payments to split the cancellation amount across multiple payment methods, analogous to `partPayments` on `PUT /document/invoice`. This defines a new payment breakdown for the cancellation and is independent of how the original invoice was actually paid - whenever `partPayments` and/or `paymentMethod_id` is given, the original invoice's payment breakdown is fully replaced. Any amount not covered by this list is cancelled with `paymentMethod_id` (or the original invoice's payment method, if `paymentMethod_id` is not given).",
          "type": "array",
          "items": {
           "properties": {
            "paymentMethod_id": {
             "description": "PaymentMethod ID this part of the cancellation amount is paid back with",
             "type": "integer",
             "example": 123456
            },
            "amount": {
             "description": "Amount of the cancellation covered by this payment method",
             "type": "string",
             "example": 5
            },
            "tip": {
             "description": "Amount of tip to return via this payment method. The sum of tip across all partPayments must not exceed the original invoice's total tip - any remainder is returned via paymentMethod_id (or the original invoice's payment method, if not given).",
             "type": "string",
             "example": 1
            },
            "couponIdentifier": {
             "description": "Identifier of the coupon this part of the cancellation is redeemed against. Required when `paymentMethod_id` references a payment method of type coupon.",
             "type": "string",
             "example": "COUPON-123"
            }
           },
           "type": "object"
          }
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "invoice_id": {
           "type": "integer",
           "example": 1234
          },
          "invoice_reference_id": {
           "type": "integer",
           "example": 1233
          },
          "invoice_timestamp": {
           "type": "string",
           "example": "2019-01-01 00:00:00"
          },
          "invoice_number": {
           "type": "integer",
           "example": 1
          },
          "invoice_numberFull": {
           "type": "string",
           "example": "RG2019/1"
          },
          "invoice_total": {
           "type": "string",
           "example": 12
          },
          "invoice_totalNet": {
           "type": "string",
           "example": 10
          },
          "invoice_totalVat": {
           "type": "string",
           "example": 2
          },
          "invoice_totalTip": {
           "type": "string",
           "example": 0
          },
          "invoice_address_company": {
           "type": "string",
           "example": "ready2order GmbH"
          },
          "invoice_address_vatId": {
           "type": "string",
           "example": "ATU12341234"
          },
          "invoice_address_salutation": {
           "type": "string",
           "example": "Mr/Ms"
          },
          "invoice_address_title": {
           "type": "string",
           "example": "Professor"
          },
          "invoice_address_firstName": {
           "type": "string",
           "example": "Chris"
          },
          "invoice_address_lastName": {
           "type": "string",
           "example": "Fox"
          },
          "invoice_address_street": {
           "type": "string",
           "example": "Hintere Zollamtsstra\u00dfe 17"
          },
          "invoice_address_city": {
           "type": "string",
           "example": "Vienna"
          },
          "invoice_address_zip": {
           "type": "string",
           "example": 1030
          },
          "invoice_address_country": {
           "type": "string",
           "example": "AT"
          },
          "invoice_address_email": {
           "type": "string",
           "example": "dux@fox.com"
          },
          "invoice_address_phone": {
           "type": "string",
           "example": "+43 664 1234 1234 1234"
          },
          "invoice_inPrinterQueue": {
           "type": "boolean",
           "example": false
          },
          "invoice_priceBase": {
           "type": "string",
           "example": "brutto"
          },
          "invoice_deleted_at": {
           "type": "string",
           "example": "2019-01-01 00:00:00"
          },
          "invoice_deletedReason": {
           "type": "string",
           "example": "Some reason"
          },
          "invoice_pdf": {
           "type": "string",
           "example": "http://some.link"
          },
          "invoice_textBeforeItemsTable": {
           "type": "string",
           "example": "Some text"
          },
          "invoice_text": {
           "type": "string",
           "example": "Some text"
          },
          "invoice_locked": {
           "type": "boolean",
           "example": true
          },
          "invoice_externalReferenceNumber": {
           "type": "string",
           "example": "REF-1234"
          },
          "invoice_internalInvoiceReferenceNumber": {
           "type": "string",
           "example": 1233
          },
          "invoice_dueDate": {
           "type": "string",
           "example": "2019-01-05"
          },
          "invoice_deliveryDate": {
           "type": "string",
           "example": "2019-01-01"
          },
          "invoice_paid": {
           "type": "boolean",
           "example": true
          },
          "invoice_paidDate": {
           "type": "string",
           "example": "2019-01-01"
          },
          "invoice_offlineTimestamp": {
           "type": "string",
           "example": "2019-01-01 00:00:00"
          },
          "invoice_offlineNumber": {
           "type": "string",
           "example": "2A26A8D9/1"
          },
          "invoice_testMode": {
           "type": "boolean",
           "example": true
          },
          "invoice_formatVersion": {
           "type": "integer",
           "example": 2
          },
          "customer_id": {
           "type": "integer",
           "example": 1234
          },
          "customerCategory_id": {
           "type": "integer",
           "example": 1023
          },
          "table_id": {
           "type": "integer",
           "example": 1234
          },
          "tableArea_id": {
           "type": "integer",
           "example": 67
          },
          "paymentMethod_id": {
           "type": "integer",
           "example": 1234
          },
          "user_id": {
           "type": "integer",
           "example": 1234
          },
          "printer_id": {
           "type": "integer",
           "example": 23
          },
          "billType_id": {
           "type": "integer",
           "example": 1
          },
          "currency_id": {
           "type": "integer",
           "example": 1
          },
          "items": {
           "type": "array",
           "items": {
            "properties": {
             "item_id": {
              "type": "integer",
              "example": 76234
             },
             "item_timestamp": {
              "type": "string",
              "example": "2019-01-01 00:00:00"
             },
             "item_quantity": {
              "type": "string",
              "example": 1
             },
             "item_retour": {
              "type": "boolean",
              "example": false
             },
             "item_number": {
              "type": "string",
              "example": 1
             },
             "item_serialNumber": {
              "type": "string",
              "example": "some-serial-number"
             },
             "item_expirationDate": {
              "type": "string",
              "example": "2019-01-01 00:00:00"
             },
             "item_name": {
              "type": "string",
              "example": "MyProductName"
             },
             "item_comment": {
              "type": "string",
              "example": "my-optional-comment"
             },
             "item_price": {
              "type": "string",
              "example": 12
             },
             "item_priceNet": {
              "type": "string",
              "example": 10
             },
             "item_priceBase": {
              "type": "boolean",
              "example": false
             },
             "item_total": {
              "type": "string",
              "example": 12
             },
             "item_totalNet": {
              "type": "string",
              "example": 10
             },
             "item_vat": {
              "type": "string",
              "example": 2
             },
             "item_vatRate": {
              "type": "string",
              "example": 20
             },
             "item_vatCompensation": {
              "type": "string",
              "example": 0
             },
             "item_undiscountedSumBeforeLineDiscount": {
              "type": "string",
              "example": 0
             },
             "item_undiscountedSumBeforeInvoiceDiscount": {
              "type": "string",
              "example": 0
             },
             "item_lineDiscountId": {
              "type": "integer",
              "example": 1234
             },
             "item_lineDiscountGroupId": {
              "type": "integer",
              "example": 1234
             },
             "item_lineDiscountName": {
              "type": "string",
              "example": "SomeDiscountName"
             },
             "item_lineDiscountPercent": {
              "type": "string",
              "example": 0
             },
             "item_lineDiscountNet": {
              "type": "string",
              "example": 0
             },
             "item_lineDiscountGross": {
              "type": "string",
              "example": 0
             },
             "item_invoiceDiscountNet": {
              "type": "string",
              "example": 0
             },
             "item_invoiceDiscountGross": {
              "type": "string",
              "example": 0
             },
             "item_discountable": {
              "type": "boolean",
              "example": true
             },
             "paymentMethod_id": {
              "type": "integer",
              "example": 1234
             },
             "item_updatedStock": {
              "type": "boolean",
              "example": true
             },
             "product_id": {
              "type": "integer",
              "example": 1234
             },
             "productgroup_name": {
              "type": "string",
              "example": "My product group"
             },
             "productGroup_id": {
              "type": "integer",
              "example": 1234
             },
             "customer_id": {
              "type": "integer",
              "example": 1234
             },
             "user_id": {
              "type": "integer",
              "example": 1234
             },
             "user_name": {
              "type": "string",
              "example": "SomeUser"
             },
             "invoice_id": {
              "type": "integer",
              "example": 1234
             },
             "deliveryBill_id": {
              "type": "integer",
              "example": 1234
             },
             "dailyReport_id": {
              "type": "integer",
              "example": 1234
             },
             "productUnit_id": {
              "type": "integer",
              "example": 1
             },
             "table_id": {
              "type": "integer",
              "example": 1234
             },
             "table_name": {
              "type": "string",
              "example": "SomeTableName"
             },
             "payment_id": {
              "type": "integer",
              "example": 431
             },
             "retourInvoice_id": {
              "type": "integer",
              "example": 1233
             },
             "item_accountingCode": {
              "type": "string",
              "example": 4000
             },
             "item_testMode": {
              "type": "boolean",
              "example": false
             },
             "item_product_price": {
              "type": "string",
              "example": 12
             },
             "item_product_priceNet": {
              "type": "string",
              "example": 10
             },
             "item_product_vat": {
              "type": "string",
              "example": 2
             },
             "item_qty": {
              "type": "string",
              "example": 1
             },
             "item_product_vatRate": {
              "type": "string",
              "example": 20
             },
             "item_product_vatCompensation": {
              "type": "string",
              "example": 0
             },
             "item_product_priceNetPerUnit": {
              "type": "string",
              "example": 10
             },
             "item_product_pricePerUnit": {
              "type": "string",
              "example": 12
             },
             "item_product_discountable": {
              "type": "boolean",
              "example": true
             }
            },
            "type": "object"
           }
          },
          "address": {
           "properties": {
            "company": {
             "type": "string",
             "example": "ready2order GmbH"
            },
            "vatId": {
             "type": "string",
             "example": "ATU12341234"
            },
            "salutation": {
             "type": "string",
             "example": "Mr/Ms"
            },
            "title": {
             "type": "string",
             "example": "Professor"
            },
            "firstName": {
             "type": "string",
             "example": "Chris"
            },
            "lastName": {
             "type": "string",
             "example": "Muster"
            },
            "street": {
             "type": "string",
             "example": "SomeStreet 1234"
            },
            "city": {
             "type": "string",
             "example": "Vienna"
            },
            "zip": {
             "type": "string",
             "example": 1030
            },
            "country": {
             "type": "string",
             "example": "AT"
            },
            "email": {
             "type": "string",
             "example": "dummy@email.com"
            },
            "phone": {
             "type": "string",
             "example": "+43 1234 12312341234"
            }
           },
           "type": "object"
          },
          "type": {
           "properties": {
            "billType_id": {
             "type": "integer",
             "example": 1
            },
            "billType_name": {
             "type": "string",
             "example": "Rechnung"
            },
            "billType_symbol": {
             "type": "string",
             "example": "RG"
            }
           },
           "type": "object"
          },
          "payment": {
           "type": "array",
           "items": {
            "properties": {
             "billPayment_id": {
              "type": "integer",
              "example": 9999
             },
             "billPayment_name": {
              "type": "string",
              "example": "Cash"
             },
             "billPayment_value": {
              "type": "string",
              "example": 12
             },
             "payment_id": {
              "type": "integer",
              "example": 431
             },
             "referenced_bill_id": {
              "type": "integer",
              "example": 1234
             }
            },
            "type": "object"
           }
          },
          "transaction": {
           "properties": {
            "id": {
             "type": "string",
             "example": "TFRG4C6NG2"
            },
            "tx_id": {
             "type": "string"
            },
            "customer_receipt": {
             "type": "string"
            },
            "amount": {
             "type": "string"
            },
            "r2o_id": {
             "type": "string",
             "example": "U1JGILYS"
            }
           },
           "type": "object"
          },
          "discounts": {
           "type": "array",
           "items": {
            "properties": {
             "billDiscount_id": {
              "type": "integer",
              "example": 9999
             },
             "billDiscount_name": {
              "type": "string",
              "example": "SomeDiscountName"
             },
             "billDiscount_value": {
              "type": "string",
              "example": 0
             },
             "billDiscount_percent": {
              "type": "string",
              "example": 0
             },
             "billDiscount_discount_id": {
              "type": "integer",
              "example": 9999
             },
             "billDiscount_discountGroup_id": {
              "type": "integer",
              "example": 9999
             },
             "billDiscount_created_at": {
              "type": "string",
              "example": "2019-01-01 00:00:00"
             },
             "billDiscount_updated_at": {
              "type": "string",
              "example": "2019-01-01 00:00:00"
             }
            },
            "type": "object"
           }
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/document/invoice/{id}/print": {
   "post": {
    "tags": [
     "Bill"
    ],
    "summary": "Print a bill",
    "description": "Add bill to printer queue for specific printer",
    "operationId": "billPrint",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Bill ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "properties": {
         "printer_id": {
          "description": "Printer ID where to print the bill <br><br> _* Required if none of `printingProfile_id` are provided._",
          "type": "integer",
          "example": 2394
         },
         "printingProfile_id": {
          "description": "PrintingProfile ID on which the bill should be printed. <br><br> _* Required if none of `printer_id` are provided._",
          "type": "integer",
          "example": 1
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "msg": {
           "type": "string",
           "example": "Bill was added to printer queue"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/document/invoice/{id}/pdf": {
   "get": {
    "tags": [
     "Bill"
    ],
    "summary": "Create PDF for bill",
    "description": "Returns signed S3 URL. Optionally regenerates pdf if `regeneratePDF` is set to `true`",
    "operationId": "billPdf",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "User ID to delete",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 12345
      }
     },
     {
      "name": "regeneratePDF",
      "in": "query",
      "description": "Regenerate an existing PDF",
      "required": false,
      "schema": {
       "type": "boolean",
       "example": true
      }
     },
     {
      "name": "format",
      "in": "query",
      "description": "PDF Format",
      "required": false,
      "schema": {
       "type": "string",
       "default": "A4",
       "example": "A4, 80mm or 58mm"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "uri": {
           "type": "string",
           "example": "https://some.link"
          },
          "format": {
           "type": "string",
           "example": "A4"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/job_status/{id}": {
   "get": {
    "tags": [
     "Job Status"
    ],
    "summary": "Get Status By Id",
    "description": "",
    "operationId": "jobStatusGetStatusById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "jobStatus_id": {
           "type": "integer",
           "example": 123
          },
          "jobStatus_status": {
           "type": "string",
           "example": "finished"
          },
          "jobStatus_startedAt": {
           "type": "string",
           "example": "2019-08-02 08:08:13"
          },
          "jobStatus_finishedAt": {
           "type": "string",
           "example": "2019-08-02 08:08:14"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/languages": {
   "get": {
    "tags": [
     "Language"
    ],
    "summary": "List all Languages",
    "description": "",
    "operationId": "languageGetAll",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "language_id": {
            "type": "integer",
            "example": 1
           },
           "language_name": {
            "type": "string",
            "example": "label_en"
           },
           "language_code": {
            "type": "string",
            "example": "en"
           },
           "language_locale": {
            "type": "string",
            "example": "en_US"
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/languages/{id}": {
   "get": {
    "tags": [
     "Language"
    ],
    "summary": "Find Language by Id",
    "description": "",
    "operationId": "languageFindById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Language ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 1
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "language_id": {
           "type": "integer",
           "example": 1
          },
          "language_name": {
           "type": "string",
           "example": "label_en"
          },
          "language_code": {
           "type": "string",
           "example": "en"
          },
          "language_locale": {
           "type": "string",
           "example": "en_US"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/legalForms": {
   "get": {
    "tags": [
     "Legal Form"
    ],
    "summary": "List all Legal Forms",
    "description": "",
    "operationId": "legalFormGetAll",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "legalForm_id": {
            "type": "integer",
            "example": 1
           },
           "legalForm_name": {
            "type": "string",
            "example": "GmbH"
           },
           "legalForm_identifier": {
            "type": "string",
            "example": "gmbh"
           },
           "legalForm_country_id": {
            "type": "integer",
            "example": 1
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/legalForms/{id}": {
   "get": {
    "tags": [
     "Legal Form"
    ],
    "summary": "Find Legal Form by Id",
    "description": "",
    "operationId": "legalFormFindById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Legal Form ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 1
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "legalForm_id": {
           "type": "integer",
           "example": 1
          },
          "legalForm_name": {
           "type": "string",
           "example": "GmbH"
          },
          "legalForm_identifier": {
           "type": "string",
           "example": "gmbh"
          },
          "legalForm_country_id": {
           "type": "integer",
           "example": 1
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/orders": {
   "get": {
    "tags": [
     "Order"
    ],
    "summary": "List all Orders",
    "description": "",
    "operationId": "orderGetAllPaginated",
    "parameters": [
     {
      "name": "page",
      "in": "query",
      "description": "Page you want to display",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 1
      }
     },
     {
      "name": "limit",
      "in": "query",
      "description": "Items per page",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 25
      }
     },
     {
      "name": "groupBy",
      "in": "query",
      "description": "allowed values: table_id or product_id or both",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "table_id",
        "product_id"
       ],
       "example": "table_id"
      }
     },
     {
      "name": "trainingsMode",
      "in": "query",
      "description": "retrieve results for trainingsMode or liveMode",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "0",
        "1",
        "true",
        "false"
       ],
       "example": "true"
      }
     },
     {
      "name": "table_id",
      "in": "query",
      "description": "table id",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 123
      }
     },
     {
      "name": "product_id",
      "in": "query",
      "description": "product id",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 123
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "order_id": {
            "type": "integer",
            "example": 123
           },
           "order_quantity": {
            "type": "string",
            "example": 123
           },
           "order_priceGross": {
            "type": "string",
            "example": 123.12
           },
           "order_priceNet": {
            "type": "string",
            "example": 123.12
           },
           "order_vat": {
            "type": "string",
            "example": 10
           },
           "order_discount_valueGross": {
            "type": "string",
            "example": 10
           },
           "order_discount_valueNet": {
            "type": "string",
            "example": 10
           },
           "order_vatRate": {
            "type": "string",
            "example": 10
           },
           "order_product_priceGrossPerUnit": {
            "type": "string",
            "example": 123
           },
           "order_product_priceNetPerUnit": {
            "type": "string",
            "example": 123
           },
           "order_discount_name": {
            "type": "string",
            "example": "discountA"
           },
           "order_discountable": {
            "type": "boolean",
            "example": true
           },
           "order_mergeable": {
            "type": "boolean",
            "example": true
           },
           "order_retour": {
            "type": "boolean",
            "example": false
           },
           "order_number": {
            "type": "integer",
            "example": 123
           },
           "order_group": {
            "type": "integer",
            "example": 123
           },
           "order_product_name": {
            "type": "string",
            "example": "productA"
           },
           "order_product_itemnumber": {
            "type": "string",
            "example": 123
           },
           "order_product_serialnumber": {
            "type": "string",
            "example": 1231234
           },
           "order_course": {
            "type": "integer",
            "example": 1
           },
           "order_status": {
            "type": "integer",
            "example": 1
           },
           "order_comment": {
            "type": "string",
            "example": "very long text"
           },
           "table_id": {
            "type": "integer",
            "example": 123456
           },
           "product_id": {
            "type": "integer",
            "example": 123456
           },
           "user_id": {
            "type": "integer",
            "example": 123456
           },
           "productgroup_type_id": {
            "type": "integer",
            "example": 123456
           },
           "order_created_at": {
            "type": "string",
            "example": "2019-01-01"
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "post": {
    "tags": [
     "Order"
    ],
    "summary": "Create a new Order",
    "description": "",
    "operationId": "orderCreate",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "table_id",
         "items"
        ],
        "properties": {
         "table_id": {
          "description": "Table on which the orders are booked",
          "type": "integer",
          "example": 1234
         },
         "price_base": {
          "description": "'gross' or 'net'",
          "type": "string",
          "enum": [
           "0",
           "1",
           "brutto",
           "netto",
           "gross",
           "net"
          ],
          "example": "gross"
         },
         "training_mode": {
          "description": "Whether to place the order in training- or normal-mode",
          "type": "boolean",
          "example": false
         },
         "items": {
          "description": "List of items",
          "type": "array",
          "items": {
           "properties": {
            "item_quantity": {
             "description": "Quantity",
             "type": "string",
             "example": 3
            },
            "item_price": {
             "description": "Price of product",
             "type": "string",
             "example": 25.75
            },
            "item_vatRate": {
             "description": "VAT-rate of product",
             "type": "string",
             "example": 20
            },
            "item_vatId": {
             "type": "integer"
            },
            "item_course": {
             "description": "Menu course",
             "type": "integer",
             "example": 1
            },
            "item_orderGroup": {
             "description": "Order group on the table to book on. Use this if multiple parties are sharing the same table.",
             "type": "integer",
             "example": 1
            },
            "item_discountable": {
             "description": "Whether the product should be applicable to apply discounts on it",
             "type": "boolean",
             "example": true
            },
            "item_mergeable": {
             "description": "Whether the product should be merged into one line on the final invoice.",
             "type": "boolean",
             "example": true
            },
            "product_id": {
             "description": "Id of product",
             "type": "integer",
             "example": 4321
            },
            "item_name": {
             "description": "Name of product (if different)",
             "type": "string",
             "example": "Some custom product name"
            },
            "item_comment": {
             "description": "Custom comment",
             "type": "string",
             "example": "An optional comment"
            },
            "item_variations": {
             "description": "List of product variations",
             "type": "array",
             "items": {
              "properties": {
               "product_id": {
                "description": "Id of product variation",
                "type": "integer",
                "example": 1
               },
               "variation_name": {
                "description": "Product variation name",
                "type": "string",
                "example": "Schnitzel with chips and mayo"
               },
               "variation_price": {
                "description": "Product variation price",
                "type": "string",
                "example": 15.2
               }
              },
              "type": "object"
             }
            }
           },
           "type": "object"
          },
          "example": []
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "order_id": {
            "type": "integer",
            "example": 123
           },
           "order_quantity": {
            "type": "string",
            "example": 123
           },
           "order_priceGross": {
            "type": "string",
            "example": 123.12
           },
           "order_priceNet": {
            "type": "string",
            "example": 123.12
           },
           "order_vat": {
            "type": "string",
            "example": 10
           },
           "order_discount_valueGross": {
            "type": "string",
            "example": 10
           },
           "order_discount_valueNet": {
            "type": "string",
            "example": 10
           },
           "order_vatRate": {
            "type": "string",
            "example": 10
           },
           "order_product_priceGrossPerUnit": {
            "type": "string",
            "example": 123
           },
           "order_product_priceNetPerUnit": {
            "type": "string",
            "example": 123
           },
           "order_discount_name": {
            "type": "string",
            "example": "discountA"
           },
           "order_discountable": {
            "type": "boolean",
            "example": true
           },
           "order_mergeable": {
            "type": "boolean",
            "example": true
           },
           "order_retour": {
            "type": "boolean",
            "example": false
           },
           "order_number": {
            "type": "integer",
            "example": 123
           },
           "order_group": {
            "type": "integer",
            "example": 123
           },
           "order_product_name": {
            "type": "string",
            "example": "productA"
           },
           "order_product_itemnumber": {
            "type": "string",
            "example": 123
           },
           "order_product_serialnumber": {
            "type": "string",
            "example": 1231234
           },
           "order_course": {
            "type": "integer",
            "example": 1
           },
           "order_status": {
            "type": "integer",
            "example": 1
           },
           "order_comment": {
            "type": "string",
            "example": "very long text"
           },
           "table_id": {
            "type": "integer",
            "example": 123456
           },
           "product_id": {
            "type": "integer",
            "example": 123456
           },
           "user_id": {
            "type": "integer",
            "example": 123456
           },
           "productgroup_type_id": {
            "type": "integer",
            "example": 123456
           },
           "order_created_at": {
            "type": "string",
            "example": "2019-01-01"
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/orders/transfer": {
   "post": {
    "tags": [
     "Order"
    ],
    "summary": "Transfer",
    "description": "Transfers unbilled order items from one table to another.<br>Pass specific `order_ids` to transfer a subset, or omit the field to transfer all unbilled items on the source table.",
    "operationId": "orderTransfer",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "source_table_id",
         "target_table_id",
         "target_order_group_id"
        ],
        "properties": {
         "source_table_id": {
          "description": "ID of the table to transfer order items from",
          "type": "integer",
          "example": 10
         },
         "target_table_id": {
          "description": "ID of the table to transfer order items to",
          "type": "integer",
          "example": 20
         },
         "target_order_group_id": {
          "description": "Order group on the target table to assign transferred items to",
          "type": "integer",
          "example": 1
         },
         "target_order_group_name": {
          "description": "Name of the target order group (optional)",
          "type": "string",
          "example": "Group A"
         },
         "order_ids": {
          "description": "IDs of the specific order items to transfer. Omit or pass an empty array to transfer every unbilled item on the source table.",
          "type": "array",
          "items": {
           "type": "integer"
          },
          "example": [
           101,
           102,
           103
          ]
         },
         "training_mode": {
          "description": "Whether to operate in training mode",
          "type": "boolean",
          "example": false
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "order_id": {
            "type": "integer",
            "example": 123
           },
           "order_quantity": {
            "type": "string",
            "example": 123
           },
           "order_priceGross": {
            "type": "string",
            "example": 123.12
           },
           "order_priceNet": {
            "type": "string",
            "example": 123.12
           },
           "order_vat": {
            "type": "string",
            "example": 10
           },
           "order_discount_valueGross": {
            "type": "string",
            "example": 10
           },
           "order_discount_valueNet": {
            "type": "string",
            "example": 10
           },
           "order_vatRate": {
            "type": "string",
            "example": 10
           },
           "order_product_priceGrossPerUnit": {
            "type": "string",
            "example": 123
           },
           "order_product_priceNetPerUnit": {
            "type": "string",
            "example": 123
           },
           "order_discount_name": {
            "type": "string",
            "example": "discountA"
           },
           "order_discountable": {
            "type": "boolean",
            "example": true
           },
           "order_mergeable": {
            "type": "boolean",
            "example": true
           },
           "order_retour": {
            "type": "boolean",
            "example": false
           },
           "order_number": {
            "type": "integer",
            "example": 123
           },
           "order_group": {
            "type": "integer",
            "example": 123
           },
           "order_product_name": {
            "type": "string",
            "example": "productA"
           },
           "order_product_itemnumber": {
            "type": "string",
            "example": 123
           },
           "order_product_serialnumber": {
            "type": "string",
            "example": 1231234
           },
           "order_course": {
            "type": "integer",
            "example": 1
           },
           "order_status": {
            "type": "integer",
            "example": 1
           },
           "order_comment": {
            "type": "string",
            "example": "very long text"
           },
           "table_id": {
            "type": "integer",
            "example": 123456
           },
           "product_id": {
            "type": "integer",
            "example": 123456
           },
           "user_id": {
            "type": "integer",
            "example": 123456
           },
           "productgroup_type_id": {
            "type": "integer",
            "example": 123456
           },
           "order_created_at": {
            "type": "string",
            "example": "2019-01-01"
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/paymentMethods": {
   "get": {
    "tags": [
     "Payment Method"
    ],
    "summary": "List all Payment Methods",
    "description": "",
    "operationId": "paymentMethodGetAll",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "payment_id": {
            "type": "integer",
            "example": 74890
           },
           "payment_name": {
            "type": "string",
            "example": "Barzahlung"
           },
           "payment_description": {
            "type": "string",
            "example": "just a description"
           },
           "payment_accountingCode": {
            "type": "string",
            "example": 2700
           },
           "payment_markAsPaid": {
            "type": "boolean",
            "example": true
           },
           "paymentType_id": {
            "type": "integer",
            "example": 1
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "post": {
    "tags": [
     "Payment Method"
    ],
    "summary": "Create Payment Method",
    "description": "",
    "operationId": "paymentMethodCreatePaymentMethod",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "paymentType_id",
         "payment_name"
        ],
        "properties": {
         "payment_description": {
          "description": "The description of the payment method",
          "type": "string",
          "example": "Paying in cash"
         },
         "payment_markAsPaid": {
          "description": "Mark payment method as paid",
          "type": "boolean",
          "example": true
         },
         "paymentType_id": {
          "description": "The payment type id of the payment method",
          "type": "integer",
          "example": 1
         },
         "payment_accountingCode": {
          "description": "The accounting code of the payment method",
          "type": "string",
          "example": 1234
         },
         "payment_name": {
          "description": "The name of the payment method",
          "type": "string",
          "example": "Barzahlung"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "payment_id": {
           "type": "integer",
           "example": 74890
          },
          "payment_name": {
           "type": "string",
           "example": "Barzahlung"
          },
          "payment_description": {
           "type": "string",
           "example": "just a description"
          },
          "payment_accountingCode": {
           "type": "string",
           "example": 2700
          },
          "payment_markAsPaid": {
           "type": "boolean",
           "example": true
          },
          "paymentType_id": {
           "type": "integer",
           "example": 1
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/paymentMethods/{id}": {
   "get": {
    "tags": [
     "Payment Method"
    ],
    "summary": "Find Payment Method by Id",
    "description": "",
    "operationId": "paymentMethodFindById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "payment_id": {
           "type": "integer",
           "example": 74890
          },
          "payment_name": {
           "type": "string",
           "example": "Barzahlung"
          },
          "payment_description": {
           "type": "string",
           "example": "just a description"
          },
          "payment_accountingCode": {
           "type": "string",
           "example": 2700
          },
          "payment_markAsPaid": {
           "type": "boolean",
           "example": true
          },
          "paymentType_id": {
           "type": "integer",
           "example": 1
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "put": {
    "tags": [
     "Payment Method"
    ],
    "summary": "Update Payment Method",
    "description": "",
    "operationId": "paymentMethodUpdatePaymentMethod",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "properties": {
         "payment_description": {
          "description": "The description of the payment method",
          "type": "string",
          "example": "Paying in cash"
         },
         "payment_markAsPaid": {
          "description": "Mark payment method as paid",
          "type": "boolean",
          "example": true
         },
         "paymentType_id": {
          "description": "The payment type id of the payment method",
          "type": "integer",
          "example": 1
         },
         "payment_accountingCode": {
          "description": "The accounting code of the payment method",
          "type": "string",
          "example": 1234
         },
         "payment_name": {
          "description": "The name of the payment method",
          "type": "string",
          "example": "Barzahlung"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "payment_id": {
           "type": "integer",
           "example": 74890
          },
          "payment_name": {
           "type": "string",
           "example": "Barzahlung"
          },
          "payment_description": {
           "type": "string",
           "example": "just a description"
          },
          "payment_accountingCode": {
           "type": "string",
           "example": 2700
          },
          "payment_markAsPaid": {
           "type": "boolean",
           "example": true
          },
          "paymentType_id": {
           "type": "integer",
           "example": 1
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "delete": {
    "tags": [
     "Payment Method"
    ],
    "summary": "Delete Payment Method",
    "description": "",
    "operationId": "paymentMethodDeletePaymentMethod",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "PaymentMethod was successfully deleted."
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/paymentMethodsType": {
   "get": {
    "tags": [
     "Payment Method Type"
    ],
    "summary": "List all Payment Method Types",
    "description": "",
    "operationId": "paymentMethodTypeGetAll",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "paymentType_id": {
            "type": "integer",
            "example": 1
           },
           "paymentType_identifier": {
            "type": "string",
            "example": "cash"
           },
           "paymentType_name": {
            "type": "string",
            "example": "Bargeld"
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/paymentMethodsType/{id}": {
   "get": {
    "tags": [
     "Payment Method Type"
    ],
    "summary": "Find Payment Method Type by Id",
    "description": "",
    "operationId": "paymentMethodTypeFindById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "paymentType_id": {
           "type": "integer",
           "example": 1
          },
          "paymentType_identifier": {
           "type": "string",
           "example": "cash"
          },
          "paymentType_name": {
           "type": "string",
           "example": "Bargeld"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/print": {
   "get": {
    "tags": [
     "Print Job"
    ],
    "summary": "Get Not Printed",
    "description": "",
    "operationId": "printJobGetNotPrinted",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "printJob_id": {
            "type": "integer",
            "example": 9999
           },
           "printer_id": {
            "type": "integer",
            "example": 9999
           },
           "printJob_imageURL": {
            "type": "string"
           },
           "printJob_printLogo": {
            "type": "boolean",
            "example": false
           },
           "printJob_createdAt": {
            "type": "string"
           },
           "printJob_printedAt": {
            "type": "string"
           },
           "printJob_content": {
            "type": "string"
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "post": {
    "tags": [
     "Print Job"
    ],
    "summary": "Create a new Print Job",
    "description": "",
    "operationId": "printJobCreate",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "printJob_printLogo"
        ],
        "properties": {
         "printJob_content": {
          "type": "string"
         },
         "printJob_imageURL": {
          "type": "string"
         },
         "printJob_printLogo": {
          "type": "boolean",
          "example": false
         },
         "printer_id": {
          "type": "integer",
          "example": 9999
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "printJob_id": {
           "type": "integer",
           "example": 9999
          },
          "printer_id": {
           "type": "integer",
           "example": 9999
          },
          "printJob_imageURL": {
           "type": "string"
          },
          "printJob_printLogo": {
           "type": "boolean",
           "example": false
          },
          "printJob_createdAt": {
           "type": "string"
          },
          "printJob_printedAt": {
           "type": "string"
          },
          "printJob_content": {
           "type": "string"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/print/{id}": {
   "delete": {
    "tags": [
     "Print Job"
    ],
    "summary": "Delete Print Job by Id",
    "description": "",
    "operationId": "printJobDeleteById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Customer ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "Customer was successfully deleted!"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/printer": {
   "get": {
    "tags": [
     "Printer"
    ],
    "summary": "List printers",
    "description": "Returns all printers registered to the account.",
    "operationId": "printerGetAll",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "printer_id": {
            "type": "integer",
            "example": 123
           },
           "printer_name": {
            "type": "string",
            "example": "kitchen printer"
           },
           "printer_description": {
            "type": "string",
            "example": "kitchen printer"
           },
           "printer_deviceName": {
            "type": "string",
            "example": "EPSON-TM-T88V"
           },
           "printer_model": {
            "type": "string",
            "example": "TM-T20II"
           },
           "printer_manufacturer": {
            "type": "string",
            "example": "EPSON"
           },
           "printer_ipAddress": {
            "type": "string",
            "example": "192.168.0.1"
           },
           "printer_characters": {
            "type": "integer",
            "example": 42
           },
           "printer_doubleHeight": {
            "type": "boolean",
            "example": true
           },
           "printer_createdAt": {
            "type": "string",
            "example": "2019-01-01 11:11:11"
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/printer/{id}": {
   "get": {
    "tags": [
     "Printer"
    ],
    "summary": "Get a printer",
    "description": "Returns a single printer by its ID.",
    "operationId": "printerFindById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Printer ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "printer_id": {
           "type": "integer",
           "example": 123
          },
          "printer_name": {
           "type": "string",
           "example": "kitchen printer"
          },
          "printer_description": {
           "type": "string",
           "example": "kitchen printer"
          },
          "printer_deviceName": {
           "type": "string",
           "example": "EPSON-TM-T88V"
          },
          "printer_model": {
           "type": "string",
           "example": "TM-T20II"
          },
          "printer_manufacturer": {
           "type": "string",
           "example": "EPSON"
          },
          "printer_ipAddress": {
           "type": "string",
           "example": "192.168.0.1"
          },
          "printer_characters": {
           "type": "integer",
           "example": 42
          },
          "printer_doubleHeight": {
           "type": "boolean",
           "example": true
          },
          "printer_createdAt": {
           "type": "string",
           "example": "2019-01-01 11:11:11"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/printer/testPrint": {
   "post": {
    "tags": [
     "Printer"
    ],
    "summary": "Send a test print",
    "description": "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.",
    "operationId": "printerTestPrint",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": true
          },
          "success": {
           "type": "boolean",
           "example": false
          },
          "msg": {
           "type": "string",
           "example": "Printer not found"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/printingProfile": {
   "get": {
    "tags": [
     "Printer Profile"
    ],
    "summary": "List printer profiles",
    "description": "Returns all printer profiles for the account, including the IDs of the physical printers currently assigned to each profile.",
    "operationId": "printerProfileGetAll",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "printingProfile_id": {
            "type": "integer",
            "example": 1
           },
           "printingProfile_name": {
            "type": "string",
            "example": "Kitchen printer"
           },
           "printingProfile_associatedPhysicalPrinterIds": {
            "type": "array",
            "items": {
             "properties": {
              "printingProfile_associatedPrinter_id": {
               "type": "integer",
               "example": 9999
              }
             },
             "type": "object"
            }
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/productgroups": {
   "get": {
    "tags": [
     "Product Group"
    ],
    "summary": "List all Product Groups",
    "description": "",
    "operationId": "productGroupGetAllPaginated",
    "parameters": [
     {
      "name": "page",
      "in": "query",
      "description": "Page you want to display",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 1
      }
     },
     {
      "name": "limit",
      "in": "query",
      "description": "Items per page",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 25
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "productgroup_id": {
            "type": "integer",
            "example": 83012
           },
           "productgroup_name": {
            "type": "string",
            "example": "Favorites"
           },
           "productgroup_description": {
            "type": "string",
            "example": "Just a description"
           },
           "productgroup_shortcut": {
            "type": "string",
            "example": "fav"
           },
           "productgroup_active": {
            "type": "boolean",
            "example": true
           },
           "productgroup_sortIndex": {
            "type": "integer",
            "example": -1
           },
           "productgroup_created_at": {
            "type": "string",
            "example": "2019-07-29 08:26:18"
           },
           "productgroup_updated_at": {
            "type": "string",
            "example": "2019-07-29 08:26:18"
           },
           "productgroup_type_id": {
            "type": "integer",
            "example": 2
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "post": {
    "tags": [
     "Product Group"
    ],
    "summary": "Create a new Product Group",
    "description": "",
    "operationId": "productGroupCreate",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "productgroup_name"
        ],
        "properties": {
         "productgroup_name": {
          "type": "string"
         },
         "productgroup_description": {
          "type": "string"
         },
         "productgroup_shortcut": {
          "type": "string"
         },
         "productgroup_active": {
          "type": "boolean",
          "example": false
         },
         "productgroup_parent": {
          "type": "integer",
          "example": 9999
         },
         "productgroup_sortIndex": {
          "type": "integer",
          "example": 9999
         },
         "productgroup_accountingCode": {
          "type": "string"
         },
         "productgroup_accountingCodeName": {
          "type": "string"
         },
         "productgroup_accountingCodeVatRate": {
          "description": "<br><br> _* Required when `productgroup_accountingCodeName` is provided._",
          "type": "string"
         },
         "productgroup_type_id": {
          "type": "integer",
          "example": 9999
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "productgroup_id": {
           "type": "integer",
           "example": 83012
          },
          "productgroup_name": {
           "type": "string",
           "example": "Favorites"
          },
          "productgroup_description": {
           "type": "string",
           "example": "Just a description"
          },
          "productgroup_shortcut": {
           "type": "string",
           "example": "fav"
          },
          "productgroup_active": {
           "type": "boolean",
           "example": true
          },
          "productgroup_sortIndex": {
           "type": "integer",
           "example": -1
          },
          "productgroup_created_at": {
           "type": "string",
           "example": "2019-07-29 08:26:18"
          },
          "productgroup_updated_at": {
           "type": "string",
           "example": "2019-07-29 08:26:18"
          },
          "productgroup_type_id": {
           "type": "integer",
           "example": 2
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/productgroups/{id}": {
   "get": {
    "tags": [
     "Product Group"
    ],
    "summary": "Find Product Group by Id",
    "description": "",
    "operationId": "productGroupFindById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "productgroup_id": {
           "type": "integer",
           "example": 83012
          },
          "productgroup_name": {
           "type": "string",
           "example": "Favorites"
          },
          "productgroup_description": {
           "type": "string",
           "example": "Just a description"
          },
          "productgroup_shortcut": {
           "type": "string",
           "example": "fav"
          },
          "productgroup_active": {
           "type": "boolean",
           "example": true
          },
          "productgroup_sortIndex": {
           "type": "integer",
           "example": -1
          },
          "productgroup_created_at": {
           "type": "string",
           "example": "2019-07-29 08:26:18"
          },
          "productgroup_updated_at": {
           "type": "string",
           "example": "2019-07-29 08:26:18"
          },
          "productgroup_type_id": {
           "type": "integer",
           "example": 2
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "put": {
    "tags": [
     "Product Group"
    ],
    "summary": "Update Product Group by Id",
    "description": "",
    "operationId": "productGroupUpdateById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "properties": {
         "productgroup_name": {
          "type": "string"
         },
         "productgroup_description": {
          "type": "string"
         },
         "productgroup_shortcut": {
          "type": "string"
         },
         "productgroup_active": {
          "type": "boolean",
          "example": false
         },
         "productgroup_parent": {
          "type": "integer",
          "example": 9999
         },
         "productgroup_sortIndex": {
          "type": "integer",
          "example": 9999
         },
         "productgroup_accountingCode": {
          "type": "string"
         },
         "productgroup_accountingCodeName": {
          "type": "string"
         },
         "productgroup_accountingCodeVatRate": {
          "description": "<br><br> _* Required when `productgroup_accountingCodeName` is provided._",
          "type": "string"
         },
         "productgroup_type_id": {
          "type": "integer",
          "example": 9999
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "productgroup_id": {
           "type": "integer",
           "example": 83012
          },
          "productgroup_name": {
           "type": "string",
           "example": "Favorites"
          },
          "productgroup_description": {
           "type": "string",
           "example": "Just a description"
          },
          "productgroup_shortcut": {
           "type": "string",
           "example": "fav"
          },
          "productgroup_active": {
           "type": "boolean",
           "example": true
          },
          "productgroup_sortIndex": {
           "type": "integer",
           "example": -1
          },
          "productgroup_created_at": {
           "type": "string",
           "example": "2019-07-29 08:26:18"
          },
          "productgroup_updated_at": {
           "type": "string",
           "example": "2019-07-29 08:26:18"
          },
          "productgroup_type_id": {
           "type": "integer",
           "example": 2
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "delete": {
    "tags": [
     "Product Group"
    ],
    "summary": "Delete Product Group by Id",
    "description": "",
    "operationId": "productGroupDeleteById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "Productgroup was deleted successfully"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/productgroups/{id}/products": {
   "get": {
    "tags": [
     "Product Group"
    ],
    "summary": "Find With Products By Id",
    "description": "",
    "operationId": "productGroupFindWithProductsById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "productgroup_id": {
           "type": "integer",
           "example": 83012
          },
          "productgroup_name": {
           "type": "string",
           "example": "Favorites"
          },
          "productgroup_description": {
           "type": "string",
           "example": "Just a description"
          },
          "productgroup_shortcut": {
           "type": "string",
           "example": "fav"
          },
          "productgroup_active": {
           "type": "boolean",
           "example": true
          },
          "productgroup_sortIndex": {
           "type": "integer",
           "example": -1
          },
          "productgroup_created_at": {
           "type": "string",
           "example": "2019-07-29 08:26:18"
          },
          "productgroup_updated_at": {
           "type": "string",
           "example": "2019-07-29 08:26:18"
          },
          "productgroup_type_id": {
           "type": "integer",
           "example": 2
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/products/batch": {
   "post": {
    "tags": [
     "Product"
    ],
    "summary": "Create products in bulk",
    "description": "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.",
    "operationId": "productCreateBatch",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "items"
        ],
        "properties": {
         "items": {
          "type": "array",
          "items": {
           "properties": {
            "productgroup_id": {
             "description": "Product group id",
             "type": "integer",
             "example": 1
            },
            "product_name": {
             "description": "Product name",
             "type": "string",
             "example": "Coca cola"
            },
            "product_price": {
             "description": "Product price",
             "type": "string",
             "example": 124.25
            },
            "product_vat": {
             "description": "VAT-Rate in decimals. Provide either product_vat or product_vat_id",
             "type": "string",
             "example": 10.5
            },
            "product_vat_id": {
             "description": "ID of VAT-rate (see /vat-rates). Provide either product_vat or product_vat_id",
             "type": "integer",
             "example": 1234
            },
            "product_itemnumber": {
             "description": "Item number",
             "type": "string",
             "example": "x-123"
            },
            "product_externalReference": {
             "description": "External reference",
             "type": "string",
             "example": "xxx-123"
            },
            "product_barcode": {
             "description": "Barcode",
             "type": "string",
             "example": "12345678"
            },
            "product_description": {
             "description": "Optional description",
             "type": "string",
             "example": "lorem ipsum dolor sit amet"
            },
            "product_priceIncludesVat": {
             "description": "Whether price is provided included or excluding VAT",
             "type": "boolean",
             "example": false
            },
            "product_active": {
             "description": "Is product active",
             "type": "boolean",
             "example": true
            },
            "product_discountable": {
             "description": "Is product discountable",
             "type": "boolean",
             "example": true
            },
            "product_stock_enabled": {
             "description": "Is stock for product enabled",
             "type": "boolean",
             "example": true
            },
            "product_stock_value": {
             "description": "Product stock value",
             "type": "string",
             "example": 10.5
            },
            "product_stock_reorderLevel": {
             "description": "Product stock reorder level",
             "type": "string",
             "example": 2.5
            },
            "product_stock_safetyStock": {
             "description": "Product stock safety level",
             "type": "string",
             "example": 5.1
            },
            "product_stock_unit": {
             "description": "Product stock unit",
             "type": "string",
             "example": "Kg"
            },
            "product_sortIndex": {
             "description": "Product sort index",
             "type": "integer",
             "example": 5
            },
            "product_type": {
             "description": "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'.",
             "type": "string",
             "example": "food, drink or default"
            },
            "product_accountingCode": {
             "description": "Product accounting code",
             "type": "string",
             "example": "XY124"
            },
            "product_accountingCodeName": {
             "description": "Accounting code name",
             "type": "string",
             "example": "code-name-x"
            },
            "product_alternativeNameOnReceipts": {
             "description": "Product alternative name on receipts",
             "type": "string",
             "example": "XXX Cola"
            },
            "product_alternativeNameInPos": {
             "description": "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.",
             "type": "string",
             "example": "POS Cola"
            },
            "product_ingredients_enabled": {
             "description": "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.",
             "type": "boolean",
             "example": true
            },
            "product_variations_enabled": {
             "description": "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.",
             "type": "boolean",
             "example": true
            },
            "product_customPrice": {
             "description": "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.",
             "type": "boolean",
             "example": true
            },
            "product_customQuantity": {
             "description": "Allows the cashier to enter the quantity freely at checkout instead of incrementing by whole units.",
             "type": "boolean",
             "example": true
            },
            "product_soldOut": {
             "description": "Is product sold out",
             "type": "boolean",
             "example": false
            },
            "product_expressMode": {
             "description": "Enables express checkout for this product in the POS. When a cashier taps the product button, a bill is created and closed immediately \u2014 skipping the cart entirely. Useful for single-item, fixed-price sales such as a prepaid coffee or a parking ticket.",
             "type": "boolean",
             "example": true
            },
            "product_highlight": {
             "description": "Highlights the product line on printed receipts and order tickets \u2014 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.",
             "type": "boolean",
             "example": true
            },
            "product_sideDishOrder": {
             "description": "Presents the sidedish list for this product in a fixed order. Only relevant when the product has sidedishes configured.",
             "type": "boolean",
             "example": true
            },
            "product_fav": {
             "description": "Marks the product as a favourite in the POS, making it appear in the favourites section for quicker access.",
             "type": "boolean",
             "example": true
            }
           },
           "type": "object"
          }
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "product_id": {
           "type": "integer",
           "example": 9999
          },
          "product_externalReference": {
           "type": "string"
          },
          "product_itemnumber": {
           "type": "string"
          },
          "product_barcode": {
           "type": "string"
          },
          "product_name": {
           "type": "string"
          },
          "product_description": {
           "type": "string"
          },
          "product_price": {
           "type": "string",
           "example": 0
          },
          "product_priceIncludesVat": {
           "type": "boolean",
           "example": false
          },
          "product_vat": {
           "type": "string",
           "example": 0
          },
          "product_vat_id": {
           "type": "integer",
           "example": 9999
          },
          "product_customPrice": {
           "type": "boolean",
           "example": false
          },
          "product_customQuantity": {
           "type": "boolean",
           "example": false
          },
          "product_fav": {
           "type": "boolean",
           "example": false
          },
          "product_highlight": {
           "type": "boolean",
           "example": false
          },
          "product_expressMode": {
           "type": "boolean",
           "example": false
          },
          "product_stock_enabled": {
           "type": "boolean",
           "example": false
          },
          "product_ingredients_enabled": {
           "type": "boolean",
           "example": false
          },
          "product_variations_enabled": {
           "type": "boolean",
           "example": false
          },
          "product_stock_value": {
           "type": "string",
           "example": 0
          },
          "product_stock_unit": {
           "type": "string"
          },
          "product_stock_reorderLevel": {
           "type": "string",
           "example": 0
          },
          "product_stock_safetyStock": {
           "type": "string",
           "example": 0
          },
          "product_sortIndex": {
           "type": "integer",
           "example": 9999
          },
          "product_soldOut": {
           "type": "boolean",
           "example": false
          },
          "product_sideDishOrder": {
           "type": "boolean",
           "example": false
          },
          "product_discountable": {
           "type": "boolean",
           "example": false
          },
          "product_accountingCode": {
           "type": "string"
          },
          "product_colorClass": {
           "type": "string"
          },
          "productgroup_id": {
           "type": "integer",
           "example": 9999
          },
          "product_type_id": {
           "type": "integer",
           "example": 9999
          },
          "product_type": {
           "type": "string"
          },
          "product_created_at": {
           "type": "string"
          },
          "product_updated_at": {
           "type": "string"
          },
          "product_alternativeNameOnReceipts": {
           "type": "string"
          },
          "product_alternativeNameInPos": {
           "type": "string"
          },
          "productgroup": {
           "properties": {
            "productgroup_id": {
             "type": "integer",
             "example": 9999
            },
            "productgroup_name": {
             "type": "string"
            },
            "productgroup_description": {
             "type": "string"
            },
            "productgroup_shortcut": {
             "type": "string"
            },
            "productgroup_active": {
             "type": "boolean",
             "example": false
            },
            "productgroup_sortIndex": {
             "type": "integer",
             "example": 9999
            },
            "productgroup_created_at": {
             "type": "string"
            },
            "productgroup_updated_at": {
             "type": "string"
            },
            "productgroup_type_id": {
             "type": "integer",
             "example": 9999
            }
           },
           "type": "object"
          },
          "productvariation": {
           "type": "array",
           "items": {
            "properties": {
             "variation_id": {
              "type": "integer",
              "example": 9999
             },
             "variation_name": {
              "type": "string"
             },
             "variation_price": {
              "type": "string"
             },
             "variation_stock": {
              "type": "string",
              "example": 0
             }
            },
            "type": "object"
           }
          },
          "productingredient": {
           "type": "array",
           "items": {
            "properties": {
             "ingredient_id": {
              "type": "integer",
              "example": 9999
             },
             "ingredient_name": {
              "type": "string"
             },
             "ingredient_unit": {
              "type": "string"
             },
             "ingredient_quantity": {
              "type": "string",
              "example": 0
             }
            },
            "type": "object"
           }
          },
          "images": {
           "type": "array",
           "items": {
            "properties": {
             "image_id": {
              "type": "integer",
              "example": 9999
             },
             "image_url": {
              "type": "string"
             }
            },
            "type": "object"
           }
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/products/batch/stock": {
   "post": {
    "tags": [
     "Product"
    ],
    "summary": "Update stock in bulk",
    "description": "Updates stock for multiple products in one request. Each item can be identified by either `product_id` or `product_itemNumber`.",
    "operationId": "productUpdateStockInBatch",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "products"
        ],
        "properties": {
         "products": {
          "description": "List of products",
          "type": "array",
          "items": {
           "properties": {
            "product_stock": {
             "type": "string"
            },
            "product_id": {
             "type": "string"
            },
            "product_itemNumber": {
             "type": "string"
            }
           },
           "type": "object"
          },
          "example": "List of products"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "updatedIds": {
           "properties": {
            "id": {
             "type": "integer",
             "example": 1
            }
           },
           "type": "object"
          },
          "updatedItemNumbers": {
           "properties": {
            "number": {
             "type": "integer",
             "example": 1
            }
           },
           "type": "object"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/products": {
   "get": {
    "tags": [
     "Product"
    ],
    "summary": "List products",
    "description": "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.",
    "operationId": "productGetAll",
    "parameters": [
     {
      "name": "page",
      "in": "query",
      "description": "Page you want to display",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 1
      }
     },
     {
      "name": "limit",
      "in": "query",
      "description": "Items per page",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 25
      }
     },
     {
      "name": "productgroup_id",
      "in": "query",
      "description": "get all products for this productgroup_id",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 1
      }
     },
     {
      "name": "itemNumber",
      "in": "query",
      "description": "search for a product with the given product_itemNumber",
      "required": false,
      "schema": {
       "type": "string",
       "example": "x-123"
      }
     },
     {
      "name": "name",
      "in": "query",
      "description": "search for a product with the given product_name",
      "required": false,
      "schema": {
       "type": "string",
       "example": "coca cola"
      }
     },
     {
      "name": "barcode",
      "in": "query",
      "description": "search for a product with the given product_barcode",
      "required": false,
      "schema": {
       "type": "string",
       "example": "1234567890"
      }
     },
     {
      "name": "q",
      "in": "query",
      "description": "search for a product by keywords",
      "required": false,
      "schema": {
       "type": "string",
       "example": "keyword"
      }
     },
     {
      "name": "includeProductGroup",
      "in": "query",
      "description": "include product group information",
      "required": false,
      "schema": {
       "type": "boolean",
       "example": false
      }
     },
     {
      "name": "includeProductVariations",
      "in": "query",
      "description": "include product variations information",
      "required": false,
      "schema": {
       "type": "boolean",
       "example": false
      }
     },
     {
      "name": "includeProductIngredients",
      "in": "query",
      "description": "include product variations information",
      "required": false,
      "schema": {
       "type": "boolean",
       "example": false
      }
     },
     {
      "name": "updatedAfter",
      "in": "query",
      "description": "Only return list of products which have been updated after a given timestamp",
      "required": false,
      "schema": {
       "type": "string",
       "example": "2021-12-29 04:18:00"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "product_id": {
            "type": "integer",
            "example": 1234
           },
           "product_externalReference": {
            "type": "string",
            "example": "ref-1234"
           },
           "product_itemnumber": {
            "type": "string",
            "example": 1
           },
           "product_barcode": {
            "type": "string",
            "example": "x400467508233"
           },
           "product_name": {
            "type": "string",
            "example": "coca cola"
           },
           "product_description": {
            "type": "string",
            "example": "coca cola - non-alcoholic drink"
           },
           "product_price": {
            "type": "string",
            "example": 10.5
           },
           "product_priceIncludesVat": {
            "type": "boolean",
            "example": false
           },
           "product_vat": {
            "type": "string",
            "example": 2
           },
           "product_vat_id": {
            "type": "integer",
            "example": 2
           },
           "product_customPrice": {
            "type": "boolean",
            "example": true
           },
           "product_customQuantity": {
            "type": "boolean",
            "example": true
           },
           "product_fav": {
            "type": "boolean",
            "example": true
           },
           "product_highlight": {
            "type": "boolean",
            "example": true
           },
           "product_expressMode": {
            "type": "boolean",
            "example": true
           },
           "product_stock_enabled": {
            "type": "boolean",
            "example": true
           },
           "product_ingredients_enabled": {
            "type": "boolean",
            "example": true
           },
           "product_variations_enabled": {
            "type": "boolean",
            "example": true
           },
           "product_stock_value": {
            "type": "string",
            "example": 100
           },
           "product_stock_unit": {
            "type": "string",
            "example": "kg"
           },
           "product_stock_reorderLevel": {
            "type": "string",
            "example": 10
           },
           "product_stock_safetyStock": {
            "type": "string",
            "example": 20
           },
           "product_sortIndex": {
            "type": "integer",
            "example": 5
           },
           "product_soldOut": {
            "type": "boolean",
            "example": true
           },
           "product_sideDishOrder": {
            "type": "boolean",
            "example": true
           },
           "product_discountable": {
            "type": "boolean",
            "example": true
           },
           "product_accountingCode": {
            "type": "string",
            "example": 1000123
           },
           "product_colorClass": {
            "type": "string",
            "example": "bgGreenYellow"
           },
           "productgroup_id": {
            "type": "integer",
            "example": 1
           },
           "product_type_id": {
            "type": "integer",
            "example": 1
           },
           "product_type": {
            "type": "string",
            "example": "standard"
           },
           "product_created_at": {
            "type": "string",
            "example": "2019-01-01 11:11:11"
           },
           "product_updated_at": {
            "type": "string",
            "example": "2019-01-01 11:11:11"
           },
           "product_alternativeNameOnReceipts": {
            "type": "string",
            "example": "xxx cola"
           },
           "product_alternativeNameInPos": {
            "type": "string",
            "example": "yyy cola"
           },
           "productgroup": {
            "properties": {
             "productgroup_id": {
              "type": "integer",
              "example": 1
             },
             "productgroup_name": {
              "type": "string"
             },
             "productgroup_description": {
              "type": "string"
             },
             "productgroup_shortcut": {
              "type": "string"
             },
             "productgroup_active": {
              "type": "boolean",
              "example": false
             },
             "productgroup_sortIndex": {
              "type": "integer",
              "example": 9999
             },
             "productgroup_created_at": {
              "type": "string"
             },
             "productgroup_updated_at": {
              "type": "string"
             },
             "productgroup_type_id": {
              "type": "integer",
              "example": 9999
             }
            },
            "type": "object"
           },
           "productvariation": {
            "type": "array",
            "items": {
             "properties": {
              "variation_id": {
               "type": "integer",
               "example": 1
              },
              "variation_name": {
               "type": "string",
               "example": "schnitzel with chips and mayo"
              },
              "variation_price": {
               "type": "string",
               "example": 15.2
              },
              "variation_stock": {
               "type": "string",
               "example": 10
              }
             },
             "type": "object"
            }
           },
           "productingredient": {
            "type": "array",
            "items": {
             "properties": {
              "ingredient_id": {
               "type": "integer",
               "example": 1
              },
              "ingredient_name": {
               "type": "string",
               "example": "pork meat"
              },
              "ingredient_unit": {
               "type": "string",
               "example": "Kg"
              },
              "ingredient_quantity": {
               "type": "string",
               "example": 0
              }
             },
             "type": "object"
            }
           },
           "images": {
            "type": "array",
            "items": {
             "properties": {
              "image_id": {
               "type": "integer",
               "example": 1
              },
              "image_url": {
               "type": "string",
               "example": "https://cdn.ready2order.at/live/static/cache/images/{hash}.png"
              }
             },
             "type": "object"
            }
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "post": {
    "tags": [
     "Product"
    ],
    "summary": "Create a product",
    "description": "Creates a new product.",
    "operationId": "productCreate",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "product_name",
         "product_price"
        ],
        "properties": {
         "productgroup_id": {
          "description": "Product group id",
          "type": "integer",
          "example": 1
         },
         "product_name": {
          "description": "Product name",
          "type": "string",
          "example": "Coca cola"
         },
         "product_price": {
          "description": "Product price",
          "type": "string",
          "example": 124.25
         },
         "product_vat": {
          "description": "VAT-Rate in decimals. Provide either product_vat or product_vat_id <br><br> _* Required if `product_vat_id` is not provided._",
          "type": "string",
          "example": 10.5
         },
         "product_vat_id": {
          "description": "ID of VAT-rate (see /vat-rates). Provide either product_vat or product_vat_id <br><br> _* Required if `product_vat` is not provided._",
          "type": "integer",
          "example": 1234
         },
         "product_itemnumber": {
          "description": "Item number",
          "type": "string",
          "example": "x-123"
         },
         "product_externalReference": {
          "description": "External reference",
          "type": "string",
          "example": "xxx-123"
         },
         "product_barcode": {
          "description": "Barcode",
          "type": "string",
          "example": "12345678"
         },
         "product_description": {
          "description": "Optional description",
          "type": "string",
          "example": "lorem ipsum dolor sit amet"
         },
         "product_priceIncludesVat": {
          "description": "Whether price is provided included or excluding VAT",
          "type": "boolean",
          "example": false
         },
         "product_active": {
          "description": "Is product active",
          "type": "boolean",
          "example": true
         },
         "product_discountable": {
          "description": "Is product discountable",
          "type": "boolean",
          "example": true
         },
         "product_stock_enabled": {
          "description": "Is stock for product enabled",
          "type": "boolean",
          "example": true
         },
         "product_stock_value": {
          "description": "Product stock value",
          "type": "string",
          "example": 10.5
         },
         "product_stock_reorderLevel": {
          "description": "Product stock reorder level",
          "type": "string",
          "example": 2.5
         },
         "product_stock_safetyStock": {
          "description": "Product stock safety level",
          "type": "string",
          "example": 5.1
         },
         "product_stock_unit": {
          "description": "Product stock unit",
          "type": "string",
          "example": "Kg"
         },
         "product_sortIndex": {
          "description": "Product sort index",
          "type": "integer",
          "example": 5
         },
         "product_type": {
          "description": "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'.",
          "type": "string",
          "example": "food, drink or default"
         },
         "product_accountingCode": {
          "description": "Product accounting code",
          "type": "string",
          "example": "XY124"
         },
         "product_accountingCodeName": {
          "description": "Accounting code name",
          "type": "string",
          "example": "code-name-x"
         },
         "product_alternativeNameOnReceipts": {
          "description": "Product alternative name on receipts",
          "type": "string",
          "example": "XXX Cola"
         },
         "product_alternativeNameInPos": {
          "description": "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.",
          "type": "string",
          "example": "POS Cola"
         },
         "product_ingredients_enabled": {
          "description": "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.",
          "type": "boolean",
          "example": true
         },
         "product_variations_enabled": {
          "description": "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.",
          "type": "boolean",
          "example": true
         },
         "product_customPrice": {
          "description": "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.",
          "type": "boolean",
          "example": true
         },
         "product_customQuantity": {
          "description": "Allows the cashier to enter the quantity freely at checkout instead of incrementing by whole units.",
          "type": "boolean",
          "example": true
         },
         "product_soldOut": {
          "description": "Is product sold out",
          "type": "boolean",
          "example": false
         },
         "product_expressMode": {
          "description": "Enables express checkout for this product in the POS. When a cashier taps the product button, a bill is created and closed immediately \u2014 skipping the cart entirely. Useful for single-item, fixed-price sales such as a prepaid coffee or a parking ticket.",
          "type": "boolean",
          "example": true
         },
         "product_highlight": {
          "description": "Highlights the product line on printed receipts and order tickets \u2014 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.",
          "type": "boolean",
          "example": true
         },
         "product_sideDishOrder": {
          "description": "Presents the sidedish list for this product in a fixed order. Only relevant when the product has sidedishes configured.",
          "type": "boolean",
          "example": true
         },
         "product_fav": {
          "description": "Marks the product as a favourite in the POS, making it appear in the favourites section for quicker access.",
          "type": "boolean",
          "example": true
         },
         "productgroup": {
          "properties": {
           "productgroup_id": {
            "type": "integer"
           }
          },
          "type": "object"
         },
         "product_base": {
          "properties": {
           "product_id": {
            "description": "You can create a product variation for a certain product by setting the product_base-object with the product_id of the base-product. To UPDATE or DELETE a product variation use the /products endpoint as a product variation is like normal product.",
            "type": "integer",
            "example": 1002
           }
          },
          "type": "object"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "product_id": {
           "type": "integer",
           "example": 1234
          },
          "product_externalReference": {
           "type": "string",
           "example": "ref-1234"
          },
          "product_itemnumber": {
           "type": "string",
           "example": 1
          },
          "product_barcode": {
           "type": "string",
           "example": "x400467508233"
          },
          "product_name": {
           "type": "string",
           "example": "coca cola"
          },
          "product_description": {
           "type": "string",
           "example": "coca cola - non-alcoholic drink"
          },
          "product_price": {
           "type": "string",
           "example": 10.5
          },
          "product_priceIncludesVat": {
           "type": "boolean",
           "example": false
          },
          "product_vat": {
           "type": "string",
           "example": 2
          },
          "product_vat_id": {
           "type": "integer",
           "example": 2
          },
          "product_customPrice": {
           "type": "boolean",
           "example": true
          },
          "product_customQuantity": {
           "type": "boolean",
           "example": true
          },
          "product_fav": {
           "type": "boolean",
           "example": true
          },
          "product_highlight": {
           "type": "boolean",
           "example": true
          },
          "product_expressMode": {
           "type": "boolean",
           "example": true
          },
          "product_stock_enabled": {
           "type": "boolean",
           "example": true
          },
          "product_ingredients_enabled": {
           "type": "boolean",
           "example": true
          },
          "product_variations_enabled": {
           "type": "boolean",
           "example": true
          },
          "product_stock_value": {
           "type": "string",
           "example": 100
          },
          "product_stock_unit": {
           "type": "string",
           "example": "kg"
          },
          "product_stock_reorderLevel": {
           "type": "string",
           "example": 10
          },
          "product_stock_safetyStock": {
           "type": "string",
           "example": 20
          },
          "product_sortIndex": {
           "type": "integer",
           "example": 5
          },
          "product_soldOut": {
           "type": "boolean",
           "example": true
          },
          "product_sideDishOrder": {
           "type": "boolean",
           "example": true
          },
          "product_discountable": {
           "type": "boolean",
           "example": true
          },
          "product_accountingCode": {
           "type": "string",
           "example": 1000123
          },
          "product_colorClass": {
           "type": "string",
           "example": "bgGreenYellow"
          },
          "productgroup_id": {
           "type": "integer",
           "example": 1
          },
          "product_type_id": {
           "type": "integer",
           "example": 1
          },
          "product_type": {
           "type": "string",
           "example": "standard"
          },
          "product_created_at": {
           "type": "string",
           "example": "2019-01-01 11:11:11"
          },
          "product_updated_at": {
           "type": "string",
           "example": "2019-01-01 11:11:11"
          },
          "product_alternativeNameOnReceipts": {
           "type": "string",
           "example": "xxx cola"
          },
          "product_alternativeNameInPos": {
           "type": "string",
           "example": "yyy cola"
          },
          "productgroup": {
           "properties": {
            "productgroup_id": {
             "type": "integer",
             "example": 1
            },
            "productgroup_name": {
             "type": "string"
            },
            "productgroup_description": {
             "type": "string"
            },
            "productgroup_shortcut": {
             "type": "string"
            },
            "productgroup_active": {
             "type": "boolean",
             "example": false
            },
            "productgroup_sortIndex": {
             "type": "integer",
             "example": 9999
            },
            "productgroup_created_at": {
             "type": "string"
            },
            "productgroup_updated_at": {
             "type": "string"
            },
            "productgroup_type_id": {
             "type": "integer",
             "example": 9999
            }
           },
           "type": "object"
          },
          "productvariation": {
           "type": "array",
           "items": {
            "properties": {
             "variation_id": {
              "type": "integer",
              "example": 1
             },
             "variation_name": {
              "type": "string",
              "example": "schnitzel with chips and mayo"
             },
             "variation_price": {
              "type": "string",
              "example": 15.2
             },
             "variation_stock": {
              "type": "string",
              "example": 10
             }
            },
            "type": "object"
           }
          },
          "productingredient": {
           "type": "array",
           "items": {
            "properties": {
             "ingredient_id": {
              "type": "integer",
              "example": 1
             },
             "ingredient_name": {
              "type": "string",
              "example": "pork meat"
             },
             "ingredient_unit": {
              "type": "string",
              "example": "Kg"
             },
             "ingredient_quantity": {
              "type": "string",
              "example": 0
             }
            },
            "type": "object"
           }
          },
          "images": {
           "type": "array",
           "items": {
            "properties": {
             "image_id": {
              "type": "integer",
              "example": 1
             },
             "image_url": {
              "type": "string",
              "example": "https://cdn.ready2order.at/live/static/cache/images/{hash}.png"
             }
            },
            "type": "object"
           }
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/products/{id}": {
   "get": {
    "tags": [
     "Product"
    ],
    "summary": "Get a product",
    "description": "Returns a single product by ID.",
    "operationId": "productFindById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Product ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     },
     {
      "name": "includeProductGroup",
      "in": "query",
      "description": "include product group information",
      "required": false,
      "schema": {
       "type": "boolean",
       "example": false
      }
     },
     {
      "name": "includeProductVariations",
      "in": "query",
      "description": "include product variations information",
      "required": false,
      "schema": {
       "type": "boolean",
       "example": false
      }
     },
     {
      "name": "includeProductIngredients",
      "in": "query",
      "description": "include product variations information",
      "required": false,
      "schema": {
       "type": "boolean",
       "example": false
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "product_id": {
           "type": "integer",
           "example": 1234
          },
          "product_externalReference": {
           "type": "string",
           "example": "ref-1234"
          },
          "product_itemnumber": {
           "type": "string",
           "example": 1
          },
          "product_barcode": {
           "type": "string",
           "example": "x400467508233"
          },
          "product_name": {
           "type": "string",
           "example": "coca cola"
          },
          "product_description": {
           "type": "string",
           "example": "coca cola - non-alcoholic drink"
          },
          "product_price": {
           "type": "string",
           "example": 10.5
          },
          "product_priceIncludesVat": {
           "type": "boolean",
           "example": false
          },
          "product_vat": {
           "type": "string",
           "example": 2
          },
          "product_vat_id": {
           "type": "integer",
           "example": 2
          },
          "product_customPrice": {
           "type": "boolean",
           "example": true
          },
          "product_customQuantity": {
           "type": "boolean",
           "example": true
          },
          "product_fav": {
           "type": "boolean",
           "example": true
          },
          "product_highlight": {
           "type": "boolean",
           "example": true
          },
          "product_expressMode": {
           "type": "boolean",
           "example": true
          },
          "product_stock_enabled": {
           "type": "boolean",
           "example": true
          },
          "product_ingredients_enabled": {
           "type": "boolean",
           "example": true
          },
          "product_variations_enabled": {
           "type": "boolean",
           "example": true
          },
          "product_stock_value": {
           "type": "string",
           "example": 100
          },
          "product_stock_unit": {
           "type": "string",
           "example": "kg"
          },
          "product_stock_reorderLevel": {
           "type": "string",
           "example": 10
          },
          "product_stock_safetyStock": {
           "type": "string",
           "example": 20
          },
          "product_sortIndex": {
           "type": "integer",
           "example": 5
          },
          "product_soldOut": {
           "type": "boolean",
           "example": true
          },
          "product_sideDishOrder": {
           "type": "boolean",
           "example": true
          },
          "product_discountable": {
           "type": "boolean",
           "example": true
          },
          "product_accountingCode": {
           "type": "string",
           "example": 1000123
          },
          "product_colorClass": {
           "type": "string",
           "example": "bgGreenYellow"
          },
          "productgroup_id": {
           "type": "integer",
           "example": 1
          },
          "product_type_id": {
           "type": "integer",
           "example": 1
          },
          "product_type": {
           "type": "string",
           "example": "standard"
          },
          "product_created_at": {
           "type": "string",
           "example": "2019-01-01 11:11:11"
          },
          "product_updated_at": {
           "type": "string",
           "example": "2019-01-01 11:11:11"
          },
          "product_alternativeNameOnReceipts": {
           "type": "string",
           "example": "xxx cola"
          },
          "product_alternativeNameInPos": {
           "type": "string",
           "example": "yyy cola"
          },
          "productgroup": {
           "properties": {
            "productgroup_id": {
             "type": "integer",
             "example": 1
            },
            "productgroup_name": {
             "type": "string"
            },
            "productgroup_description": {
             "type": "string"
            },
            "productgroup_shortcut": {
             "type": "string"
            },
            "productgroup_active": {
             "type": "boolean",
             "example": false
            },
            "productgroup_sortIndex": {
             "type": "integer",
             "example": 9999
            },
            "productgroup_created_at": {
             "type": "string"
            },
            "productgroup_updated_at": {
             "type": "string"
            },
            "productgroup_type_id": {
             "type": "integer",
             "example": 9999
            }
           },
           "type": "object"
          },
          "productvariation": {
           "type": "array",
           "items": {
            "properties": {
             "variation_id": {
              "type": "integer",
              "example": 1
             },
             "variation_name": {
              "type": "string",
              "example": "schnitzel with chips and mayo"
             },
             "variation_price": {
              "type": "string",
              "example": 15.2
             },
             "variation_stock": {
              "type": "string",
              "example": 10
             }
            },
            "type": "object"
           }
          },
          "productingredient": {
           "type": "array",
           "items": {
            "properties": {
             "ingredient_id": {
              "type": "integer",
              "example": 1
             },
             "ingredient_name": {
              "type": "string",
              "example": "pork meat"
             },
             "ingredient_unit": {
              "type": "string",
              "example": "Kg"
             },
             "ingredient_quantity": {
              "type": "string",
              "example": 0
             }
            },
            "type": "object"
           }
          },
          "images": {
           "type": "array",
           "items": {
            "properties": {
             "image_id": {
              "type": "integer",
              "example": 1
             },
             "image_url": {
              "type": "string",
              "example": "https://cdn.ready2order.at/live/static/cache/images/{hash}.png"
             }
            },
            "type": "object"
           }
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "put": {
    "tags": [
     "Product"
    ],
    "summary": "Update a product",
    "description": "Updates an existing product. To update stock figures without changing other product data, use the update stock endpoint instead.",
    "operationId": "productUpdate",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "product id",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 1001
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "properties": {
         "product_vat": {
          "description": "VAT-Rate in decimals. Provide either product_vat or product_vat_id",
          "type": "string",
          "example": 10.5
         },
         "product_vat_id": {
          "description": "ID of VAT-rate (see /vat-rates). Provide either product_vat or product_vat_id",
          "type": "integer",
          "example": 1234
         },
         "product_name": {
          "description": "Product name",
          "type": "string",
          "example": "Coca cola"
         },
         "product_itemnumber": {
          "description": "Item number",
          "type": "string",
          "example": "x-123"
         },
         "product_externalReference": {
          "description": "External reference",
          "type": "string",
          "example": "xxx-123"
         },
         "product_barcode": {
          "description": "Barcode",
          "type": "string",
          "example": "12345678"
         },
         "product_description": {
          "description": "Optional description",
          "type": "string",
          "example": "lorem ipsum dolor sit amet"
         },
         "product_price": {
          "description": "Product price",
          "type": "string",
          "example": 124.25
         },
         "product_priceIncludesVat": {
          "description": "Whether price is provided included or excluding VAT",
          "type": "boolean",
          "example": false
         },
         "product_active": {
          "description": "Is product active",
          "type": "boolean",
          "example": true
         },
         "product_discountable": {
          "description": "Is product discountable",
          "type": "boolean",
          "example": true
         },
         "product_stock_enabled": {
          "description": "Is stock for product enabled",
          "type": "boolean",
          "example": true
         },
         "product_stock_value": {
          "description": "Product stock value",
          "type": "string",
          "example": 10.5
         },
         "product_stock_reorderLevel": {
          "description": "Product stock reorder level",
          "type": "string",
          "example": 2.5
         },
         "product_stock_safetyStock": {
          "description": "Product stock safety level",
          "type": "string",
          "example": 5.1
         },
         "product_stock_unit": {
          "description": "Product stock unit",
          "type": "string",
          "example": "Kg"
         },
         "product_sortIndex": {
          "description": "Product sort index",
          "type": "integer",
          "example": 5
         },
         "productgroup_id": {
          "description": "Product group id",
          "type": "integer",
          "example": 1
         },
         "product_type": {
          "description": "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'.",
          "type": "string",
          "example": "food, drink or default"
         },
         "product_accountingCode": {
          "description": "Product accounting code",
          "type": "string",
          "example": "XY124"
         },
         "product_accountingCodeName": {
          "description": "Accounting code name",
          "type": "string",
          "example": "code-name-x"
         },
         "product_alternativeNameOnReceipts": {
          "description": "Product alternative name on receipts",
          "type": "string",
          "example": "XXX Cola"
         },
         "product_alternativeNameInPos": {
          "description": "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.",
          "type": "string",
          "example": "POS Cola"
         },
         "product_ingredients_enabled": {
          "description": "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.",
          "type": "boolean",
          "example": true
         },
         "product_variations_enabled": {
          "description": "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.",
          "type": "boolean",
          "example": true
         },
         "product_customPrice": {
          "description": "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.",
          "type": "boolean",
          "example": true
         },
         "product_customQuantity": {
          "description": "Allows the cashier to enter the quantity freely at checkout instead of incrementing by whole units.",
          "type": "boolean",
          "example": true
         },
         "product_soldOut": {
          "description": "Is product sold out",
          "type": "boolean",
          "example": false
         },
         "product_expressMode": {
          "description": "Enables express checkout for this product in the POS. When a cashier taps the product button, a bill is created and closed immediately \u2014 skipping the cart entirely. Useful for single-item, fixed-price sales such as a prepaid coffee or a parking ticket.",
          "type": "boolean",
          "example": true
         },
         "product_highlight": {
          "description": "Highlights the product line on printed receipts and order tickets \u2014 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.",
          "type": "boolean",
          "example": true
         },
         "product_sideDishOrder": {
          "description": "Presents the sidedish list for this product in a fixed order. Only relevant when the product has sidedishes configured.",
          "type": "boolean",
          "example": true
         },
         "product_fav": {
          "description": "Marks the product as a favourite in the POS, making it appear in the favourites section for quicker access.",
          "type": "boolean",
          "example": true
         },
         "product_base": {
          "properties": {
           "product_id": {
            "description": "You can create a product variation for a certain product by setting the product_base-object with the product_id of the base-product. To UPDATE or DELETE a product variation use the /products endpoint as a product variation is like normal product.",
            "type": "integer",
            "example": 1002
           }
          },
          "type": "object"
         },
         "productgroup": {
          "properties": {
           "productgroup_id": {
            "type": "integer"
           }
          },
          "type": "object"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "product_id": {
           "type": "integer",
           "example": 1234
          },
          "product_externalReference": {
           "type": "string",
           "example": "ref-1234"
          },
          "product_itemnumber": {
           "type": "string",
           "example": 1
          },
          "product_barcode": {
           "type": "string",
           "example": "x400467508233"
          },
          "product_name": {
           "type": "string",
           "example": "coca cola"
          },
          "product_description": {
           "type": "string",
           "example": "coca cola - non-alcoholic drink"
          },
          "product_price": {
           "type": "string",
           "example": 10.5
          },
          "product_priceIncludesVat": {
           "type": "boolean",
           "example": false
          },
          "product_vat": {
           "type": "string",
           "example": 2
          },
          "product_vat_id": {
           "type": "integer",
           "example": 2
          },
          "product_customPrice": {
           "type": "boolean",
           "example": true
          },
          "product_customQuantity": {
           "type": "boolean",
           "example": true
          },
          "product_fav": {
           "type": "boolean",
           "example": true
          },
          "product_highlight": {
           "type": "boolean",
           "example": true
          },
          "product_expressMode": {
           "type": "boolean",
           "example": true
          },
          "product_stock_enabled": {
           "type": "boolean",
           "example": true
          },
          "product_ingredients_enabled": {
           "type": "boolean",
           "example": true
          },
          "product_variations_enabled": {
           "type": "boolean",
           "example": true
          },
          "product_stock_value": {
           "type": "string",
           "example": 100
          },
          "product_stock_unit": {
           "type": "string",
           "example": "kg"
          },
          "product_stock_reorderLevel": {
           "type": "string",
           "example": 10
          },
          "product_stock_safetyStock": {
           "type": "string",
           "example": 20
          },
          "product_sortIndex": {
           "type": "integer",
           "example": 5
          },
          "product_soldOut": {
           "type": "boolean",
           "example": true
          },
          "product_sideDishOrder": {
           "type": "boolean",
           "example": true
          },
          "product_discountable": {
           "type": "boolean",
           "example": true
          },
          "product_accountingCode": {
           "type": "string",
           "example": 1000123
          },
          "product_colorClass": {
           "type": "string",
           "example": "bgGreenYellow"
          },
          "productgroup_id": {
           "type": "integer",
           "example": 1
          },
          "product_type_id": {
           "type": "integer",
           "example": 1
          },
          "product_type": {
           "type": "string",
           "example": "standard"
          },
          "product_created_at": {
           "type": "string",
           "example": "2019-01-01 11:11:11"
          },
          "product_updated_at": {
           "type": "string",
           "example": "2019-01-01 11:11:11"
          },
          "product_alternativeNameOnReceipts": {
           "type": "string",
           "example": "xxx cola"
          },
          "product_alternativeNameInPos": {
           "type": "string",
           "example": "yyy cola"
          },
          "productgroup": {
           "properties": {
            "productgroup_id": {
             "type": "integer",
             "example": 1
            },
            "productgroup_name": {
             "type": "string"
            },
            "productgroup_description": {
             "type": "string"
            },
            "productgroup_shortcut": {
             "type": "string"
            },
            "productgroup_active": {
             "type": "boolean",
             "example": false
            },
            "productgroup_sortIndex": {
             "type": "integer",
             "example": 9999
            },
            "productgroup_created_at": {
             "type": "string"
            },
            "productgroup_updated_at": {
             "type": "string"
            },
            "productgroup_type_id": {
             "type": "integer",
             "example": 9999
            }
           },
           "type": "object"
          },
          "productvariation": {
           "type": "array",
           "items": {
            "properties": {
             "variation_id": {
              "type": "integer",
              "example": 1
             },
             "variation_name": {
              "type": "string",
              "example": "schnitzel with chips and mayo"
             },
             "variation_price": {
              "type": "string",
              "example": 15.2
             },
             "variation_stock": {
              "type": "string",
              "example": 10
             }
            },
            "type": "object"
           }
          },
          "productingredient": {
           "type": "array",
           "items": {
            "properties": {
             "ingredient_id": {
              "type": "integer",
              "example": 1
             },
             "ingredient_name": {
              "type": "string",
              "example": "pork meat"
             },
             "ingredient_unit": {
              "type": "string",
              "example": "Kg"
             },
             "ingredient_quantity": {
              "type": "string",
              "example": 0
             }
            },
            "type": "object"
           }
          },
          "images": {
           "type": "array",
           "items": {
            "properties": {
             "image_id": {
              "type": "integer",
              "example": 1
             },
             "image_url": {
              "type": "string",
              "example": "https://cdn.ready2order.at/live/static/cache/images/{hash}.png"
             }
            },
            "type": "object"
           }
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "delete": {
    "tags": [
     "Product"
    ],
    "summary": "Delete a product",
    "description": "Deletes a product.",
    "operationId": "productDelete",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Product ID to delete",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "Product was deleted successfully."
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/products/itemNumber/{itemNumber}/stock": {
   "get": {
    "tags": [
     "Product"
    ],
    "summary": "Get product stock by item number",
    "description": "Returns stock information for a product looked up by its item number rather than its ID.",
    "operationId": "productGetStockByItemNumber",
    "parameters": [
     {
      "name": "itemNumber",
      "in": "path",
      "description": "Product item number",
      "required": true,
      "schema": {
       "type": "string",
       "example": "X-123"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "product_id": {
           "type": "integer",
           "example": 1234
          },
          "product_stock": {
           "type": "string",
           "example": 10
          },
          "product_reorderLevel": {
           "type": "string",
           "example": 5.2
          },
          "product_safetyStock": {
           "type": "string",
           "example": 2.1
          },
          "product_unit": {
           "type": "string",
           "example": "piece"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/products/{id}/stock": {
   "get": {
    "tags": [
     "Product"
    ],
    "summary": "Get product stock",
    "description": "Returns the current stock level, safety stock, and reorder level for a product.",
    "operationId": "productGetStock",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Product ID",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "product_id": {
           "type": "integer",
           "example": 1234
          },
          "product_stock": {
           "type": "string",
           "example": 10
          },
          "product_reorderLevel": {
           "type": "string",
           "example": 5.2
          },
          "product_safetyStock": {
           "type": "string",
           "example": 2.1
          },
          "product_unit": {
           "type": "string",
           "example": "piece"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "put": {
    "tags": [
     "Product"
    ],
    "summary": "Update product stock",
    "description": "Updates stock for a product. Use `product_stock` to set an absolute value or `product_stockDelta` to add or subtract from the current quantity.",
    "operationId": "productUpdateStock",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Product ID",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "properties": {
         "product_stock": {
          "type": "string"
         },
         "product_reorderLevel": {
          "type": "string"
         },
         "product_safetyStock": {
          "type": "string"
         },
         "product_stockDelta": {
          "type": "string"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "product_id": {
           "type": "integer",
           "example": 1234
          },
          "product_stock": {
           "type": "string",
           "example": 10
          },
          "product_reorderLevel": {
           "type": "string",
           "example": 5.2
          },
          "product_safetyStock": {
           "type": "string",
           "example": 2.1
          },
          "product_unit": {
           "type": "string",
           "example": "piece"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/products/{id}/price/customer": {
   "get": {
    "tags": [
     "Product"
    ],
    "summary": "List per-customer prices",
    "description": "Returns all per-customer price overrides for a product.",
    "operationId": "productGetAllCustomerProductPrices",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "price_id": {
            "type": "integer",
            "example": 1234
           },
           "price_value": {
            "type": "string",
            "example": 12.45
           },
           "price_valueGross": {
            "type": "string",
            "example": 13.56
           },
           "price_valueNet": {
            "type": "string",
            "example": 12.45
           },
           "price_timestamp": {
            "type": "string",
            "example": 1234
           },
           "product_id": {
            "type": "integer",
            "example": 1234
           },
           "customer_id": {
            "type": "integer",
            "example": 1
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "post": {
    "tags": [
     "Product"
    ],
    "summary": "Set per-customer price",
    "description": "Sets a price override for a specific customer on this product.",
    "operationId": "productAddCustomerProductPrice",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "price_value",
         "customer_id"
        ],
        "properties": {
         "price_value": {
          "type": "string"
         },
         "customer_id": {
          "type": "integer",
          "example": 9999
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "price_id": {
           "type": "integer",
           "example": 1234
          },
          "price_value": {
           "type": "string",
           "example": 12.45
          },
          "price_valueGross": {
           "type": "string",
           "example": 13.56
          },
          "price_valueNet": {
           "type": "string",
           "example": 12.45
          },
          "price_timestamp": {
           "type": "string",
           "example": 1234
          },
          "product_id": {
           "type": "integer",
           "example": 1234
          },
          "customer_id": {
           "type": "integer",
           "example": 1
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/products/{id}/price/customer/{customerId}": {
   "get": {
    "tags": [
     "Product"
    ],
    "summary": "Get per-customer price",
    "description": "Returns the price override for a specific customer.",
    "operationId": "productGetCustomerProductPrice",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     },
     {
      "name": "customerId",
      "in": "path",
      "description": "Customer category ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "price_id": {
           "type": "integer",
           "example": 1234
          },
          "price_value": {
           "type": "string",
           "example": 12.45
          },
          "price_valueGross": {
           "type": "string",
           "example": 13.56
          },
          "price_valueNet": {
           "type": "string",
           "example": 12.45
          },
          "price_timestamp": {
           "type": "string",
           "example": 1234
          },
          "product_id": {
           "type": "integer",
           "example": 1234
          },
          "customer_id": {
           "type": "integer",
           "example": 1
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "put": {
    "tags": [
     "Product"
    ],
    "summary": "Update per-customer price",
    "description": "Updates the price override for a specific customer on this product.",
    "operationId": "productUpdateCustomerProductPrice",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     },
     {
      "name": "customerId",
      "in": "path",
      "description": "customer id",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 1
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "price_value"
        ],
        "properties": {
         "price_value": {
          "type": "string"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "price_id": {
           "type": "integer",
           "example": 1234
          },
          "price_value": {
           "type": "string",
           "example": 12.45
          },
          "price_valueGross": {
           "type": "string",
           "example": 13.56
          },
          "price_valueNet": {
           "type": "string",
           "example": 12.45
          },
          "price_timestamp": {
           "type": "string",
           "example": 1234
          },
          "product_id": {
           "type": "integer",
           "example": 1234
          },
          "customer_id": {
           "type": "integer",
           "example": 1
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "delete": {
    "tags": [
     "Product"
    ],
    "summary": "Remove per-customer price",
    "description": "Removes the price override for a customer, reverting to the product's base price or their category price if one is set.",
    "operationId": "productDeleteCustomerProductPrice",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     },
     {
      "name": "customerId",
      "in": "path",
      "description": "Customer category ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "Product price was deleted successfully."
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/products/{id}/price/customerCategory": {
   "get": {
    "tags": [
     "Product"
    ],
    "summary": "List customer category prices",
    "description": "Returns all customer category price overrides for a product.",
    "operationId": "productGetAllCustomerCategoryProductPrices",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "price_id": {
            "type": "integer",
            "example": 1234
           },
           "price_value": {
            "type": "string",
            "example": 12.45
           },
           "price_valueGross": {
            "type": "string",
            "example": 13.56
           },
           "price_valueNet": {
            "type": "string",
            "example": 12.45
           },
           "price_timestamp": {
            "type": "string",
            "example": 1234
           },
           "product_id": {
            "type": "integer",
            "example": 1234
           },
           "customerCategory_id": {
            "type": "integer",
            "example": 1
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "post": {
    "tags": [
     "Product"
    ],
    "summary": "Set customer category price",
    "description": "Sets a price override for a customer category on this product.",
    "operationId": "productAddCustomerCategoryProductPrice",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "price_value",
         "customerCategory_id"
        ],
        "properties": {
         "price_value": {
          "type": "string"
         },
         "customerCategory_id": {
          "type": "integer",
          "example": 9999
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "price_id": {
           "type": "integer",
           "example": 1234
          },
          "price_value": {
           "type": "string",
           "example": 12.45
          },
          "price_valueGross": {
           "type": "string",
           "example": 13.56
          },
          "price_valueNet": {
           "type": "string",
           "example": 12.45
          },
          "price_timestamp": {
           "type": "string",
           "example": 1234
          },
          "product_id": {
           "type": "integer",
           "example": 1234
          },
          "customerCategory_id": {
           "type": "integer",
           "example": 1
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/products/{id}/price/customerCategory/{customerCategoryId}": {
   "get": {
    "tags": [
     "Product"
    ],
    "summary": "Get customer category price",
    "description": "Returns the price override for a specific customer category.",
    "operationId": "productGetCustomerCategoryProductPrice",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     },
     {
      "name": "customerCategoryId",
      "in": "path",
      "description": "Customer category ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "price_id": {
           "type": "integer",
           "example": 1234
          },
          "price_value": {
           "type": "string",
           "example": 12.45
          },
          "price_valueGross": {
           "type": "string",
           "example": 13.56
          },
          "price_valueNet": {
           "type": "string",
           "example": 12.45
          },
          "price_timestamp": {
           "type": "string",
           "example": 1234
          },
          "product_id": {
           "type": "integer",
           "example": 1234
          },
          "customerCategory_id": {
           "type": "integer",
           "example": 1
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "put": {
    "tags": [
     "Product"
    ],
    "summary": "Update customer category price",
    "description": "Updates the price override for a customer category on this product.",
    "operationId": "productUpdateCustomerCategoryProductPrice",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     },
     {
      "name": "customerCategoryId",
      "in": "path",
      "description": "customer category id",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 1
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "price_value"
        ],
        "properties": {
         "price_value": {
          "type": "string"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "price_id": {
           "type": "integer",
           "example": 1234
          },
          "price_value": {
           "type": "string",
           "example": 12.45
          },
          "price_valueGross": {
           "type": "string",
           "example": 13.56
          },
          "price_valueNet": {
           "type": "string",
           "example": 12.45
          },
          "price_timestamp": {
           "type": "string",
           "example": 1234
          },
          "product_id": {
           "type": "integer",
           "example": 1234
          },
          "customerCategory_id": {
           "type": "integer",
           "example": 1
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "delete": {
    "tags": [
     "Product"
    ],
    "summary": "Remove customer category price",
    "description": "Removes the price override for a customer category, reverting to the product's base price.",
    "operationId": "productDeleteCustomerCategoryProductPrice",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     },
     {
      "name": "customerCategoryId",
      "in": "path",
      "description": "Customer category ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "Product price was deleted successfully."
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/products/units": {
   "get": {
    "tags": [
     "Units"
    ],
    "summary": "List all Units",
    "description": "",
    "operationId": "unitsGetAll",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "identifier": {
            "type": "string",
            "example": "kg|piece|hours|liter|..."
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/storno": {
   "get": {
    "tags": [
     "Storno"
    ],
    "summary": "List all Stornos",
    "description": "",
    "operationId": "stornoGetAll",
    "parameters": [
     {
      "name": "page",
      "in": "query",
      "description": "Page you want to display",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 1
      }
     },
     {
      "name": "limit",
      "in": "query",
      "description": "Items per page",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 25
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "storno_id": {
            "type": "integer",
            "example": 1234
           },
           "storno_name": {
            "type": "string",
            "example": "cancellation"
           },
           "storno_description": {
            "type": "string",
            "example": "storno reason 1234"
           },
           "storno_created_at": {
            "type": "string",
            "example": "2019-01-01 12:00:00"
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "post": {
    "tags": [
     "Storno"
    ],
    "summary": "Create a new Storno",
    "description": "",
    "operationId": "stornoCreate",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "storno_name"
        ],
        "properties": {
         "storno_name": {
          "description": "Storno name",
          "type": "string",
          "example": "cancellation"
         },
         "storno_description": {
          "description": "Storno description",
          "type": "string",
          "example": "storno reason 1234"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "storno_id": {
           "type": "integer",
           "example": 1234
          },
          "storno_name": {
           "type": "string",
           "example": "cancellation"
          },
          "storno_description": {
           "type": "string",
           "example": "storno reason 1234"
          },
          "storno_created_at": {
           "type": "string",
           "example": "2019-01-01 12:00:00"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/storno/{id}": {
   "get": {
    "tags": [
     "Storno"
    ],
    "summary": "Find Storno by Id",
    "description": "",
    "operationId": "stornoFindById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "storno_id": {
           "type": "integer",
           "example": 1234
          },
          "storno_name": {
           "type": "string",
           "example": "cancellation"
          },
          "storno_description": {
           "type": "string",
           "example": "storno reason 1234"
          },
          "storno_created_at": {
           "type": "string",
           "example": "2019-01-01 12:00:00"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "put": {
    "tags": [
     "Storno"
    ],
    "summary": "Update Storno by Id",
    "description": "",
    "operationId": "stornoUpdateById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "storno id",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 1234
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "storno_name"
        ],
        "properties": {
         "storno_name": {
          "description": "Storno name",
          "type": "string",
          "example": "cancellation"
         },
         "storno_description": {
          "description": "Storno description",
          "type": "string",
          "example": "storno reason 1234"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "storno_id": {
           "type": "integer",
           "example": 1234
          },
          "storno_name": {
           "type": "string",
           "example": "cancellation"
          },
          "storno_description": {
           "type": "string",
           "example": "storno reason 1234"
          },
          "storno_created_at": {
           "type": "string",
           "example": "2019-01-01 12:00:00"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "delete": {
    "tags": [
     "Storno"
    ],
    "summary": "Delete Storno by Id",
    "description": "",
    "operationId": "stornoDeleteById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "Storno was successfully deleted!"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/tableAreas": {
   "get": {
    "tags": [
     "Table Area"
    ],
    "summary": "List all Table Areas",
    "description": "",
    "operationId": "tableAreaGetAll",
    "parameters": [
     {
      "name": "page",
      "in": "query",
      "description": "Page you want to display",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 1
      }
     },
     {
      "name": "limit",
      "in": "query",
      "description": "Items per page",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 25
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "tableArea_id": {
            "type": "integer",
            "example": 1234
           },
           "tableArea_name": {
            "type": "string",
            "example": "innen 1"
           },
           "tableArea_shortName": {
            "type": "string",
            "example": "IN-1"
           },
           "tableArea_order": {
            "type": "integer",
            "example": 1
           },
           "tableArea_allowTemporaryTables": {
            "type": "boolean",
            "example": true
           },
           "tableArea_active": {
            "type": "boolean",
            "example": true
           },
           "tableArea_intelligentFavourites": {
            "type": "integer",
            "example": 1
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "post": {
    "tags": [
     "Table Area"
    ],
    "summary": "Create a new Table Area",
    "description": "",
    "operationId": "tableAreaCreate",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "tableArea_name"
        ],
        "properties": {
         "tableArea_name": {
          "description": "Table name",
          "type": "string",
          "example": "innen 1"
         },
         "tableArea_shortName": {
          "description": "Table area short name",
          "type": "string",
          "example": "IN-1"
         },
         "tableArea_order": {
          "description": "Table area order number (sorting)",
          "type": "string",
          "example": 1
         },
         "tableArea_allowTemporaryTables": {
          "description": "Allow temporary tables",
          "type": "boolean",
          "example": true
         },
         "tableArea_active": {
          "description": "Table is active",
          "type": "boolean",
          "example": true
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "tableArea_id": {
           "type": "integer",
           "example": 1234
          },
          "tableArea_name": {
           "type": "string",
           "example": "innen 1"
          },
          "tableArea_shortName": {
           "type": "string",
           "example": "IN-1"
          },
          "tableArea_order": {
           "type": "integer",
           "example": 1
          },
          "tableArea_allowTemporaryTables": {
           "type": "boolean",
           "example": true
          },
          "tableArea_active": {
           "type": "boolean",
           "example": true
          },
          "tableArea_intelligentFavourites": {
           "type": "integer",
           "example": 1
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/tableAreas/{id}": {
   "get": {
    "tags": [
     "Table Area"
    ],
    "summary": "Find Table Area by Id",
    "description": "",
    "operationId": "tableAreaFindById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "tableArea_id": {
           "type": "integer",
           "example": 1234
          },
          "tableArea_name": {
           "type": "string",
           "example": "innen 1"
          },
          "tableArea_shortName": {
           "type": "string",
           "example": "IN-1"
          },
          "tableArea_order": {
           "type": "integer",
           "example": 1
          },
          "tableArea_allowTemporaryTables": {
           "type": "boolean",
           "example": true
          },
          "tableArea_active": {
           "type": "boolean",
           "example": true
          },
          "tableArea_intelligentFavourites": {
           "type": "integer",
           "example": 1
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "put": {
    "tags": [
     "Table Area"
    ],
    "summary": "Update Table Area by Id",
    "description": "",
    "operationId": "tableAreaUpdateById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "tableArea_name"
        ],
        "properties": {
         "tableArea_name": {
          "description": "Table name",
          "type": "string",
          "example": "innen 1"
         },
         "tableArea_shortName": {
          "description": "Table area short name",
          "type": "string",
          "example": "IN-1"
         },
         "tableArea_order": {
          "description": "Table area order number (sorting)",
          "type": "string",
          "example": 1
         },
         "tableArea_allowTemporaryTables": {
          "description": "Allow temporary tables",
          "type": "boolean",
          "example": true
         },
         "tableArea_active": {
          "description": "Table is active",
          "type": "boolean",
          "example": true
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "tableArea_id": {
           "type": "integer",
           "example": 1234
          },
          "tableArea_name": {
           "type": "string",
           "example": "innen 1"
          },
          "tableArea_shortName": {
           "type": "string",
           "example": "IN-1"
          },
          "tableArea_order": {
           "type": "integer",
           "example": 1
          },
          "tableArea_allowTemporaryTables": {
           "type": "boolean",
           "example": true
          },
          "tableArea_active": {
           "type": "boolean",
           "example": true
          },
          "tableArea_intelligentFavourites": {
           "type": "integer",
           "example": 1
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "delete": {
    "tags": [
     "Table Area"
    ],
    "summary": "Delete Table Area by Id",
    "description": "",
    "operationId": "tableAreaDeleteById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "TableArea was successfully deleted!"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/tables": {
   "get": {
    "tags": [
     "Table"
    ],
    "summary": "List all Tables",
    "description": "",
    "operationId": "tableGetAll",
    "parameters": [
     {
      "name": "page",
      "in": "query",
      "description": "Page you want to display",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 1
      }
     },
     {
      "name": "limit",
      "in": "query",
      "description": "Items per page",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 25
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "table_id": {
            "type": "integer",
            "example": 1234
           },
           "table_name": {
            "type": "string",
            "example": 1234
           },
           "table_description": {
            "type": "string",
            "example": 1234
           },
           "table_isTemporay": {
            "type": "boolean",
            "example": true
           },
           "table_order": {
            "type": "integer",
            "example": 1
           },
           "table_checkoutMode": {
            "type": "boolean",
            "example": false
           },
           "tableArea_id": {
            "type": "integer",
            "example": 1
           },
           "table_created_at": {
            "type": "string",
            "example": "2019-01-01 12:12:12"
           },
           "table_updated_at": {
            "type": "string",
            "example": "2019-01-01 12:12:12"
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "post": {
    "tags": [
     "Table"
    ],
    "summary": "Create a new Table",
    "description": "",
    "operationId": "tableCreate",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "table_name"
        ],
        "properties": {
         "table_name": {
          "type": "string",
          "example": 1234
         },
         "table_isTemporay": {
          "type": "boolean",
          "example": true
         },
         "table_checkoutMode": {
          "type": "boolean",
          "example": false
         },
         "table_order": {
          "type": "integer",
          "example": 1
         },
         "table_description": {
          "type": "string",
          "example": 1234
         },
         "tableArea_id": {
          "type": "integer",
          "example": 1
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "table_id": {
           "type": "integer",
           "example": 1234
          },
          "table_name": {
           "type": "string",
           "example": 1234
          },
          "table_description": {
           "type": "string",
           "example": 1234
          },
          "table_isTemporay": {
           "type": "boolean",
           "example": true
          },
          "table_order": {
           "type": "integer",
           "example": 1
          },
          "table_checkoutMode": {
           "type": "boolean",
           "example": false
          },
          "tableArea_id": {
           "type": "integer",
           "example": 1
          },
          "table_created_at": {
           "type": "string",
           "example": "2019-01-01 12:12:12"
          },
          "table_updated_at": {
           "type": "string",
           "example": "2019-01-01 12:12:12"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/tables/{id}": {
   "get": {
    "tags": [
     "Table"
    ],
    "summary": "Find Table by Id",
    "description": "",
    "operationId": "tableFindById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "table_id": {
           "type": "integer",
           "example": 1234
          },
          "table_name": {
           "type": "string",
           "example": 1234
          },
          "table_description": {
           "type": "string",
           "example": 1234
          },
          "table_isTemporay": {
           "type": "boolean",
           "example": true
          },
          "table_order": {
           "type": "integer",
           "example": 1
          },
          "table_checkoutMode": {
           "type": "boolean",
           "example": false
          },
          "tableArea_id": {
           "type": "integer",
           "example": 1
          },
          "table_created_at": {
           "type": "string",
           "example": "2019-01-01 12:12:12"
          },
          "table_updated_at": {
           "type": "string",
           "example": "2019-01-01 12:12:12"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "put": {
    "tags": [
     "Table"
    ],
    "summary": "Update Table by Id",
    "description": "",
    "operationId": "tableUpdateById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "properties": {
         "table_name": {
          "type": "string",
          "example": 1234
         },
         "table_isTemporay": {
          "type": "boolean",
          "example": true
         },
         "table_checkoutMode": {
          "type": "boolean",
          "example": false
         },
         "table_order": {
          "type": "integer",
          "example": 1
         },
         "table_description": {
          "type": "string",
          "example": 1234
         },
         "tableArea_id": {
          "type": "integer",
          "example": 1
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "table_id": {
           "type": "integer",
           "example": 1234
          },
          "table_name": {
           "type": "string",
           "example": 1234
          },
          "table_description": {
           "type": "string",
           "example": 1234
          },
          "table_isTemporay": {
           "type": "boolean",
           "example": true
          },
          "table_order": {
           "type": "integer",
           "example": 1
          },
          "table_checkoutMode": {
           "type": "boolean",
           "example": false
          },
          "tableArea_id": {
           "type": "integer",
           "example": 1
          },
          "table_created_at": {
           "type": "string",
           "example": "2019-01-01 12:12:12"
          },
          "table_updated_at": {
           "type": "string",
           "example": "2019-01-01 12:12:12"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "delete": {
    "tags": [
     "Table"
    ],
    "summary": "Delete Table by Id",
    "description": "",
    "operationId": "tableDeleteById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "Table was deleted successfully."
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/terminalTransactions/init/{identifier}": {
   "post": {
    "tags": [
     "Terminal Transaction"
    ],
    "summary": "Init",
    "description": "",
    "operationId": "terminalTransactionInit",
    "parameters": [
     {
      "name": "identifier",
      "in": "path",
      "description": "Unique identifier for the terminal transaction",
      "required": true,
      "schema": {
       "type": "string",
       "enum": [
        "readyPay"
       ],
       "example": "readyPay"
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "invoiceData",
         "paymentDeviceId"
        ],
        "properties": {
         "invoiceData": {
          "type": "string"
         },
         "paymentDeviceId": {
          "type": "integer",
          "example": 9999
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "txId": {
           "type": "string",
           "example": "87419301-3532-416a-8252-1ad700e7b34d"
          },
          "status": {
           "type": "string",
           "example": "processing"
          },
          "result": {
           "type": "string",
           "example": "success"
          },
          "amount": {
           "type": "string",
           "example": 230
          },
          "billId": {
           "type": "integer",
           "example": 4231
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/terminalTransactions/{txId}/create-bill": {
   "post": {
    "tags": [
     "Terminal Transaction"
    ],
    "summary": "Trigger Bill Creation",
    "description": "",
    "operationId": "terminalTransactionTriggerBillCreation",
    "parameters": [
     {
      "name": "txId",
      "in": "path",
      "description": "UUID of the terminal transaction",
      "required": true,
      "schema": {
       "type": "string",
       "example": "87419301-3532-416a-8252-1ad700e7b34d"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "txId": {
           "type": "string",
           "example": "87419301-3532-416a-8252-1ad700e7b34d"
          },
          "status": {
           "type": "string",
           "example": "processing"
          },
          "result": {
           "type": "string",
           "example": "success"
          },
          "amount": {
           "type": "string",
           "example": 230
          },
          "billId": {
           "type": "integer",
           "example": 4231
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/terminalTransactions/{txId}": {
   "get": {
    "tags": [
     "Terminal Transaction"
    ],
    "summary": "Status",
    "description": "",
    "operationId": "terminalTransactionStatus",
    "parameters": [
     {
      "name": "txId",
      "in": "path",
      "description": "UUID of the terminal transaction",
      "required": true,
      "schema": {
       "type": "string",
       "example": "87419301-3532-416a-8252-1ad700e7b34d"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "txId": {
           "type": "string",
           "example": "87419301-3532-416a-8252-1ad700e7b34d"
          },
          "status": {
           "type": "string",
           "example": "processing"
          },
          "result": {
           "type": "string",
           "example": "success"
          },
          "amount": {
           "type": "string",
           "example": 230
          },
          "billId": {
           "type": "integer",
           "example": 4231
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "delete": {
    "tags": [
     "Terminal Transaction"
    ],
    "summary": "Abort",
    "description": "",
    "operationId": "terminalTransactionAbort",
    "parameters": [
     {
      "name": "txId",
      "in": "path",
      "description": "ID of the terminal transaction to abort",
      "required": true,
      "schema": {
       "type": "string",
       "example": "87419301-3532-416a-8252-1ad700e7b34d"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "Cancelled successfully"
          },
          "result": {
           "type": "string",
           "example": "aborted-while-waiting"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/users": {
   "get": {
    "tags": [
     "User"
    ],
    "summary": "List all Users",
    "description": "",
    "operationId": "userGetAll",
    "parameters": [
     {
      "name": "page",
      "in": "query",
      "description": "Page you want to display",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 1
      }
     },
     {
      "name": "limit",
      "in": "query",
      "description": "Items per page",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 25
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "user_id": {
            "type": "integer",
            "example": 1234
           },
           "user_firstName": {
            "type": "string",
            "example": "Christoph"
           },
           "user_lastName": {
            "type": "string",
            "example": "M\u00fcller"
           },
           "user_username": {
            "type": "string",
            "example": "christoph@some-email.com"
           },
           "user_printAccess": {
            "type": "integer",
            "example": 1234
           },
           "user_printer": {
            "type": "integer",
            "example": 15
           },
           "user_lastActionAt": {
            "type": "string",
            "example": "2018-11-05 01:23:45"
           },
           "user_lastLoginAt": {
            "type": "string",
            "example": "2018-11-05 01:23:45"
           },
           "user_trainingsMode": {
            "type": "boolean",
            "example": true
           },
           "right_id": {
            "type": "integer",
            "example": 1234
           },
           "loginLog": {
            "properties": {
             "loginLog_lastActionAt": {
              "type": "string",
              "example": "2018-11-05 01:23:45"
             },
             "loginLog_userAgent": {
              "type": "string",
              "example": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6)"
             }
            },
            "type": "object"
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "post": {
    "tags": [
     "User"
    ],
    "summary": "Create a new User",
    "description": "",
    "operationId": "userCreate",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "user_username",
         "user_password",
         "right_id"
        ],
        "properties": {
         "user_username": {
          "type": "string",
          "example": "christoph@email.com"
         },
         "user_password": {
          "type": "string",
          "example": "StrongPassword123!"
         },
         "user_firstName": {
          "type": "string",
          "example": "Christoph"
         },
         "user_lastName": {
          "type": "string",
          "example": "M\u00fcller"
         },
         "user_trainingsMode": {
          "type": "boolean",
          "example": true
         },
         "user_printer": {
          "type": "integer",
          "example": 123
         },
         "user_printAccess": {
          "type": "integer",
          "example": 2457
         },
         "right_id": {
          "type": "integer",
          "example": 1234
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "user_id": {
           "type": "integer",
           "example": 1234
          },
          "user_firstName": {
           "type": "string",
           "example": "Christoph"
          },
          "user_lastName": {
           "type": "string",
           "example": "M\u00fcller"
          },
          "user_username": {
           "type": "string",
           "example": "christoph@some-email.com"
          },
          "user_printAccess": {
           "type": "integer",
           "example": 1234
          },
          "user_printer": {
           "type": "integer",
           "example": 15
          },
          "user_lastActionAt": {
           "type": "string",
           "example": "2018-11-05 01:23:45"
          },
          "user_lastLoginAt": {
           "type": "string",
           "example": "2018-11-05 01:23:45"
          },
          "user_trainingsMode": {
           "type": "boolean",
           "example": true
          },
          "right_id": {
           "type": "integer",
           "example": 1234
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/users/{id}": {
   "get": {
    "tags": [
     "User"
    ],
    "summary": "Find User by Id",
    "description": "",
    "operationId": "userFindById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "User ID to find",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "user_id": {
           "type": "integer",
           "example": 1234
          },
          "user_firstName": {
           "type": "string",
           "example": "Christoph"
          },
          "user_lastName": {
           "type": "string",
           "example": "M\u00fcller"
          },
          "user_username": {
           "type": "string",
           "example": "christoph@some-email.com"
          },
          "user_printAccess": {
           "type": "integer",
           "example": 1234
          },
          "user_printer": {
           "type": "integer",
           "example": 15
          },
          "user_lastActionAt": {
           "type": "string",
           "example": "2018-11-05 01:23:45"
          },
          "user_lastLoginAt": {
           "type": "string",
           "example": "2018-11-05 01:23:45"
          },
          "user_trainingsMode": {
           "type": "boolean",
           "example": true
          },
          "right_id": {
           "type": "integer",
           "example": 1234
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "put": {
    "tags": [
     "User"
    ],
    "summary": "Update User by Id",
    "description": "",
    "operationId": "userUpdateById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "User ID to update",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 12345
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "right_id"
        ],
        "properties": {
         "user_username": {
          "type": "string",
          "example": "christoph@email.com"
         },
         "user_password": {
          "type": "string",
          "example": "StrongPassword123!"
         },
         "user_firstName": {
          "type": "string",
          "example": "Christoph"
         },
         "user_lastName": {
          "type": "string",
          "example": "M\u00fcller"
         },
         "user_trainingsMode": {
          "type": "boolean",
          "example": true
         },
         "user_printer": {
          "type": "integer",
          "example": 123
         },
         "user_printAccess": {
          "type": "integer",
          "example": 2457
         },
         "right_id": {
          "type": "integer",
          "example": 1234
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "user_id": {
           "type": "integer",
           "example": 1234
          },
          "user_firstName": {
           "type": "string",
           "example": "Christoph"
          },
          "user_lastName": {
           "type": "string",
           "example": "M\u00fcller"
          },
          "user_username": {
           "type": "string",
           "example": "christoph@some-email.com"
          },
          "user_printAccess": {
           "type": "integer",
           "example": 1234
          },
          "user_printer": {
           "type": "integer",
           "example": 15
          },
          "user_lastActionAt": {
           "type": "string",
           "example": "2018-11-05 01:23:45"
          },
          "user_lastLoginAt": {
           "type": "string",
           "example": "2018-11-05 01:23:45"
          },
          "user_trainingsMode": {
           "type": "boolean",
           "example": true
          },
          "right_id": {
           "type": "integer",
           "example": 1234
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "delete": {
    "tags": [
     "User"
    ],
    "summary": "Delete User by Id",
    "description": "",
    "operationId": "userDeleteById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "User ID to delete",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 12345
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "success": {
           "type": "boolean",
           "example": true
          },
          "msg": {
           "type": "string",
           "example": "User was successfully deleted!"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "patch": {
    "tags": [
     "User"
    ],
    "summary": "Update Password By Id",
    "description": "",
    "operationId": "userUpdatePasswordById",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "User ID to update password",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 1234
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "user_password"
        ],
        "properties": {
         "user_password": {
          "type": "string",
          "example": "StrongPassword123!"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "user_id": {
           "type": "integer",
           "example": 1234
          },
          "user_firstName": {
           "type": "string",
           "example": "Christoph"
          },
          "user_lastName": {
           "type": "string",
           "example": "M\u00fcller"
          },
          "user_username": {
           "type": "string",
           "example": "christoph@some-email.com"
          },
          "user_printAccess": {
           "type": "integer",
           "example": 1234
          },
          "user_printer": {
           "type": "integer",
           "example": 15
          },
          "user_lastActionAt": {
           "type": "string",
           "example": "2018-11-05 01:23:45"
          },
          "user_lastLoginAt": {
           "type": "string",
           "example": "2018-11-05 01:23:45"
          },
          "user_trainingsMode": {
           "type": "boolean",
           "example": true
          },
          "right_id": {
           "type": "integer",
           "example": 1234
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/users/{id}/signInToken": {
   "get": {
    "tags": [
     "User"
    ],
    "summary": "Get Sign In Token",
    "description": "",
    "operationId": "userGetSignInToken",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "User ID to generate token",
      "required": true,
      "schema": {
       "type": "integer",
       "example": 123456
      }
     },
     {
      "name": "expiresIn",
      "in": "query",
      "description": "Life-time of token (seconds)",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 60
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "properties": {
         "crmUserId": {
          "type": "string"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": false
          },
          "token": {
           "type": "string",
           "example": "AAA.BBBBBBBBBBBB.CCC"
          },
          "issuedAt": {
           "type": "string",
           "example": "2018-11-05 01:23:45"
          },
          "expiresAt": {
           "type": "string",
           "example": "2018-11-05 01:24:45"
          },
          "loginURI": {
           "type": "string",
           "example": "https://ur.ready2order.com/sys/login.php?token=AAA.BBBBBBBBBBBB.CCC"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     },
     "404": {
      "description": "Not Found"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/users/rights": {
   "get": {
    "tags": [
     "User Roles"
    ],
    "summary": "List all User Roles",
    "description": "",
    "operationId": "userRolesGetAll",
    "parameters": [
     {
      "name": "page",
      "in": "query",
      "description": "Page you want to display",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 1
      }
     },
     {
      "name": "limit",
      "in": "query",
      "description": "Items per page",
      "required": false,
      "schema": {
       "type": "integer",
       "example": 25
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "userRight_id": {
            "type": "integer",
            "example": 9999
           },
           "userRight_name": {
            "type": "string"
           },
           "userRight_description": {
            "type": "string"
           },
           "userRight_allowGastroTransferOrders": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowGastroCancellation": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowGastroCancellationWithoutReceiptPrinting": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowCancellationInvoice": {
            "type": "integer",
            "example": 9999
           },
           "userRight_allowOrderRetourMode": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowGastroOrder": {
            "type": "string"
           },
           "userRight_allowGastroPayment": {
            "type": "string"
           },
           "userRight_showOwnOrdersOnly": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowOpenDay": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowCloseDay": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowSalesReport": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowSalesReportOwnOnly": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowSalesDailyReports": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowProductPage": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowOrderStop": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowProductSoldOut": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowProductFavorite": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowProductAddSideDish": {
            "type": "boolean",
            "example": false
           },
           "userRight_showProductStock": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowPrintProductStock": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowInvoicePage": {
            "type": "boolean",
            "example": false
           },
           "userRight_invoicePageShowOwnInvoicesOnly": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowCashBook": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowCashBookInsert": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowCashBookPdfExport": {
            "type": "boolean",
            "example": false
           },
           "userRight_showCashBookBalance": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowBackendLogin": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowPrinterPage": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowPrinterDiscovery": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowLogoutAllUsers": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowOpenShiftAgain": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowProductDiscount": {
            "type": "boolean",
            "example": false
           },
           "userRight_allowSelectedProductPriceChange": {
            "type": "boolean",
            "example": false
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/vat-rates": {
   "get": {
    "tags": [
     "Vat Rate"
    ],
    "summary": "List VAT rates",
    "description": "Returns all VAT rates configured for the account.",
    "operationId": "vatRateGetAll",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "properties": {
           "id": {
            "type": "integer",
            "example": 1234
           },
           "value": {
            "type": "string",
            "example": 20
           },
           "code": {
            "type": "string",
            "example": 1
           },
           "description": {
            "type": "string",
            "example": "Allgemeiner Steuersatz"
           },
           "countryId": {
            "type": "integer",
            "example": 1
           }
          },
          "type": "object"
         }
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/webhook": {
   "get": {
    "tags": [
     "Webhook"
    ],
    "summary": "Find",
    "description": "",
    "operationId": "webhookFind",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "webhookUrl": {
           "type": "string",
           "example": "https://ready2order.com"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "put": {
    "tags": [
     "Webhook"
    ],
    "summary": "Update Webhook Url",
    "description": "",
    "operationId": "webhookUpdateWebhookUrl",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "required": [
         "webhookUrl"
        ],
        "properties": {
         "webhookUrl": {
          "type": "string"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "webhookUrl": {
           "type": "string",
           "example": "https://ready2order.com"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  },
  "/webhook/events": {
   "get": {
    "tags": [
     "Webhook"
    ],
    "summary": "Find Webhook Events",
    "description": "",
    "operationId": "webhookFindWebhookEvents",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "activeEvents": {
           "type": "array",
           "items": {
            "type": "integer"
           },
           "example": "invoice.created"
          },
          "availableEvents": {
           "type": "array",
           "items": {
            "type": "integer"
           },
           "example": "[product.created, product.updated]"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   },
   "put": {
    "tags": [
     "Webhook"
    ],
    "summary": "Update Webhook Event",
    "description": "",
    "operationId": "webhookUpdateWebhookEvent",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "properties": {
         "addEvent": {
          "description": "<br><br> _* Required if `removeEvent` is not provided._",
          "type": "string"
         },
         "removeEvent": {
          "description": "<br><br> _* Required if `addEvent` is not provided._",
          "type": "string"
         }
        },
        "type": "object"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "error": {
           "type": "boolean",
           "example": true
          },
          "success": {
           "type": "boolean",
           "example": false
          },
          "msg": {
           "type": "string",
           "example": "Your now receiving webhooks for the event <name>"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Bad Request"
     },
     "401": {
      "description": "Unauthorized"
     },
     "403": {
      "description": "Forbidden"
     }
    },
    "security": [
     {
      "Bearer": []
     }
    ]
   }
  }
 },
 "components": {
  "securitySchemes": {
   "Bearer": {
    "type": "apiKey",
    "description": "Account Token obtained after completing the authorization flow. See First Steps for details.",
    "name": "Authorization",
    "in": "header"
   }
  }
 },
 "tags": [
  {
   "name": "Accounting Financial Year"
  },
  {
   "name": "Bill Type"
  },
  {
   "name": "Bill"
  },
  {
   "name": "Country"
  },
  {
   "name": "Coupon Category",
   "description": "<!-- markdownlint-disable MD041 MD051 github-internal-links relative-links -- tag description snippet, not a standalone document; the tag name serves as the heading in the API docs -->\nCoupon categories let you group coupons under a shared label. The category has no effect on coupon behaviour or tax treatment.\n\nTo assign a coupon to a category, set `couponCategory_id` when [creating](#operation/couponCreate) or [updating](#operation/couponUpdateById) the coupon. You cannot delete a category that still has coupons assigned to it.\n"
  },
  {
   "name": "Coupon",
   "description": "<!-- markdownlint-disable MD041 MD033 MD051 github-internal-links relative-links -- tag description snippet, not a standalone document; the tag name serves as the heading in the API docs -->\nCoupons 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.\n\n**Balance and Lifecycle**\n\nYou create a coupon with an initial value. From there you can [charge it](#operation/couponChargeById) (add value) or [redeem it](#operation/couponRedeemById) (deduct value). Partial redemptions work fine; the coupon stays active until the balance reaches zero.\n\n**Coupon Purpose**\n\n`coupon_purpose` determines when VAT is due. We distinguish between two voucher types:\n\n| Purpose | When VAT is due | `coupon_containsVat` |\n|---------|-----------------|----------------------|\n| `single` | At issuance (place of supply and tax rate are known at creation) | The applicable rate, e.g. `20` |\n| `multi` | At redemption (the POS applies the right rate per item) | Must be `0` |\n\nSingle-purpose suits vouchers for specific goods at a fixed rate, such as a drink voucher tied to a particular product.<br>\nMulti-purpose fits general gift cards redeemable for anything or across multiple locations.\n\nCheck with your tax advisor which type applies to your situation.\n\n**Identifier**\n\n`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](#operation/couponGetAll) to look up a coupon by barcode scan.\n"
  },
  {
   "name": "Currency"
  },
  {
   "name": "Customer Group"
  },
  {
   "name": "Customer"
  },
  {
   "name": "Discount Group",
   "description": "<!-- markdownlint-disable MD041 MD051 github-internal-links relative-links -- tag description snippet, not a standalone document; the tag name serves as the heading in the API docs -->\nDiscount 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.\n\nSetting `discountGroup_active` to `false` hides all discounts in the group at the POS, which is useful for seasonal or temporarily suspended promotions.\n\nA group cannot be deleted while it still contains discounts. [Delete](#operation/discountDelete) or move the discounts out of the group first.\n"
  },
  {
   "name": "Discount",
   "description": "<!-- markdownlint-disable MD041 MD051 github-internal-links relative-links -- tag description snippet, not a standalone document; the tag name serves as the heading in the API docs -->\nDiscounts 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.\n\nEvery 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](#operation/discountGroupCreateDiscountGroup) before you can create a discount.\n\n**Discount unit**\n\n`discount_unit` controls how the reduction is calculated:\n\n| Unit | Behaviour | `discount_value` |\n|------|-----------|-----------------|\n| `percent` | Reduces the price by a percentage | 0\u2013100 |\n| `currency` | Reduces the price by a fixed amount | Any positive number |\n| `custom` | The cashier enters the amount at checkout | Not required |\n\n**Visibility and ordering**\n\nSet `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.\n"
  },
  {
   "name": "Export"
  },
  {
   "name": "Grant Access Token"
  },
  {
   "name": "Job Status"
  },
  {
   "name": "Language"
  },
  {
   "name": "Legal Form"
  },
  {
   "name": "Order"
  },
  {
   "name": "Payment Method Type"
  },
  {
   "name": "Payment Method"
  },
  {
   "name": "Print Job"
  },
  {
   "name": "Printer",
   "description": "<!-- markdownlint-disable MD041 MD051 github-internal-links relative-links -- tag description snippet, not a standalone document; the tag name serves as the heading in the API docs -->\nPrinters represent the physical printing devices registered to an account \u2014 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.\n\n**Fields**\n\n| Field | Description |\n|-------|-------------|\n| `printer_id` | System-assigned unique identifier for the printer |\n| `printer_name` | The name assigned to the printer in the account settings |\n| `printer_description` | Optional free-text description |\n| `printer_deviceName` | The OS-level device name used to address the printer |\n| `printer_model` | The hardware model, for example `TM-T20II` or `mC-Print3` |\n| `printer_manufacturer` | The manufacturer, for example `epson` or `star` |\n| `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 |\n| `printer_characters` | The number of characters per printed line, which determines print width |\n| `printer_doubleHeight` | Whether characters are printed at double height |\n| `printer_createdAt` | Timestamp when the printer record was created |\n\n**Printer profiles**\n\nA printer profile (see [Printer Profile](#tag/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`.\n\n**Cash drawer**\n\nSome 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](#operation/billCreateBill) endpoint for how to trigger it via the API.\n"
  },
  {
   "name": "Product Group"
  },
  {
   "name": "Product",
   "description": "<!-- markdownlint-disable MD041 MD051 github-internal-links relative-links -- tag description snippet, not a standalone document; the tag name serves as the heading in the API docs -->\nProducts 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.\n\n**Identifiers**\n\nA product supports three optional identifiers alongside its system `product_id`:\n\n- `product_itemnumber`: the merchant's own article number, used on labels, in exports, and for stock lookups\n- `product_barcode`: EAN or barcode for scanning at the POS\n- `product_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 side\n\n**Pricing and VAT**\n\n`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 \u2014 supply either `product_vat` as a percentage or `product_vat_id` referencing a [VAT rate](#tag/Vat-Rate).\n\nCustomers and customer categories can have individual price overrides managed via the [per-customer prices](#operation/productGetAllCustomerProductPrices) and [per-category prices](#operation/productGetAllCustomerCategoryProductPrices) endpoints.\n\n**Custom price and quantity**\n\nSet `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.\n\n**Stock**\n\nStock 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](#operation/productGetStock) and [update stock](#operation/productUpdateStock) endpoints to read or update stock figures without touching other product fields.\n\n**Product type**\n\n`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`.\n\n**Variations and ingredients**\n\nVariations (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.\n\n**Keeping a catalogue in sync**\n\nThe recommended approach is to subscribe to [webhooks](#tag/Webhook) for `product.created` and `product.updated` events. This avoids polling and ensures your system is updated in near real-time without unnecessary requests.\n\nIf webhooks are not an option, use the `updatedAfter` query parameter on [list products](#operation/productGetAll) to fetch only products changed since a given timestamp. Use [batch create](#operation/productCreateBatch) to create multiple products in one request.\n    "
  },
  {
   "name": "Storno"
  },
  {
   "name": "Table Area"
  },
  {
   "name": "Table"
  },
  {
   "name": "Terminal Transaction"
  },
  {
   "name": "User Roles"
  },
  {
   "name": "User"
  },
  {
   "name": "Webhook",
   "description": "<!-- markdownlint-disable MD041 MD051 github-internal-links relative-links -- tag description snippet, not a standalone document; the tag name serves as the heading in the API docs -->\nWebhooks push events to your application automatically \u2014 no polling required.\n\n**Available Events**\n\n| Event | Description | Payload |\n|-------|-------------|---------|\n| `coupon.created` | A new voucher or gift card is issued | Full object |\n| `coupon.updated` | A voucher's properties change (value, validity, linked customer, etc.) | Full object |\n| `couponTransaction.created` | A transaction is recorded on a voucher (charge, redeem, correction, bonus, payout) | Full transaction object |\n| `customer.created` | A new customer profile is added to the account | Full object |\n| `customer.updated` | A customer profile's details are updated (name, address, contact info, etc.) | Full object |\n| `customer.deleted` | A customer profile is deleted from the account | Resource ID |\n| `invoice.created` | An invoice or receipt is finalised \u2014 also fires for the storno document when an invoice is cancelled | Full object |\n| `invoice.cancelled` | Fired for the **original** invoice when it is cancelled \u2014 use this to mark the original as cancelled in your system; use `invoice.created` to receive the storno document | Full object |\n| `orderItem.created` | One or more items are placed on an open table order | Resource IDs |\n| `orderItem.cancelled` | One or more open table order items are voided before billing | Resource IDs |\n| `orderItem.transferred` | Open table order items are moved from one table to another | Transfer metadata (source/target table, order IDs) |\n| `product.created` | A new product is added to the catalogue | Full object |\n| `product.updated` | A product's details change \u2014 not triggered by `product_sortIndex` updates | Full object |\n| `product.deleted` | A product is removed from the catalogue | Resource ID |\n| `productGroup.created` | A new product category is created | Full object |\n| `productGroup.updated` | A product category's properties change (name, description, sort order, etc.) | Full object |\n| `productGroup.deleted` | A product category is removed | Resource ID |\n\n**Processing Webhooks**\n\nRespond 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.\n\n**Setup**\n\n1. [Register your webhook URL](#operation/webhookUpdateWebhookUrl)\n2. [Subscribe to events](#operation/webhookUpdateWebhookEvent)\n"
  },
  {
   "name": "Account Token",
   "description": "Account Token"
  },
  {
   "name": "Daily Report",
   "description": "<!-- markdownlint-disable MD041 -- tag description snippet, not a standalone document; the tag name serves as the heading in the API docs -->\nA 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.\n\nOnly one daily report can be open at a time. Closing is required before the next day can be opened.\n"
  },
  {
   "name": "Device",
   "description": "Device"
  },
  {
   "name": "Printer Profile",
   "description": "<!-- markdownlint-disable MD041 MD051 github-internal-links relative-links -- tag description snippet, not a standalone document; the tag name serves as the heading in the API docs -->\nA 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.\n\nEach 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`.\n\n**Fields**\n\n| Field | Description |\n|-------|-------------|\n| `printingProfile_id` | System-assigned unique identifier for the printer profile |\n| `printingProfile_name` | The name assigned to this profile, for example `Kitchen` or `Bar` |\n| `printingProfile_associatedPhysicalPrinterIds` | The [physical printers](#tag/Printer) currently linked to this profile |\n"
  },
  {
   "name": "Units",
   "description": "Units"
  },
  {
   "name": "Vat Rate",
   "description": "<!-- markdownlint-disable MD041 MD051 github-internal-links relative-links -- tag description snippet, not a standalone document; the tag name serves as the heading in the API docs -->\nVAT rates define the tax percentages available for the account. When [creating](#operation/productCreate) or [updating](#operation/productUpdate) a product, you can reference a VAT rate by its `vat_id` via `product_vat_id`, or pass the percentage directly as `product_vat`.\n"
  }
 ],
 "x-tagGroups": [
  {
   "name": "Essentials",
   "tags": [
    "Product",
    "Product Group",
    "Bill",
    "Storno",
    "Payment Method",
    "Payment Method Type",
    "Coupon",
    "Coupon Category",
    "Discount",
    "Discount Group",
    "Customer"
   ]
  },
  {
   "name": "Gastro",
   "tags": [
    "Order",
    "Table",
    "Table Area"
   ]
  },
  {
   "name": "POS",
   "tags": [
    "Printer",
    "Printer Profile",
    "Print Job",
    "Terminal Transaction",
    "User",
    "User Roles"
   ]
  },
  {
   "name": "Reporting",
   "tags": [
    "Daily Report",
    "Accounting Financial Year",
    "Export"
   ]
  },
  {
   "name": "Reference Data",
   "tags": [
    "Bill Type",
    "Customer Group",
    "Currency",
    "Country",
    "Device",
    "Language",
    "Legal Form",
    "Units",
    "Vat Rate"
   ]
  },
  {
   "name": "Integration",
   "tags": [
    "Account Token",
    "Grant Access Token",
    "Developer Token",
    "Webhook",
    "Job Status"
   ]
  },
  {
   "name": "Internal",
   "tags": [
    "Account",
    "Admin",
    "CashboxRegistration",
    "ConfirmableAction",
    "Constant",
    "Item",
    "License",
    "MobileConstant",
    "ReadyPaySellRate",
    "Signup",
    "Tss"
   ]
  }
 ]
}