{
  "openapi": "3.0.3",
  "info": {
    "title": "Porcelain OpenAPI 3.0 API",
    "description": "This is a porcelain OpenAPI API for the My Speidel Cloud",
    "license": {
      "name": "UNLICENSED"
    },
    "version": "1.0"
  },
  "security": [
    {
      "token_auth": []
    }
  ],
  "paths": {
    "/v1.0/account/timeseries/process": {
      "get": {
        "summary": "Get list of all machine processes",
        "description": "Returns list of max. 50 machine process objects, sorted by ts desc",
        "operationId": "getAccountMachineProcess",
        "responses": {
          "200": {
            "description": "JSON list of machine process objects",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/machineProcess"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/http401"
          },
          "404": {
            "$ref": "#/components/responses/http404"
          },
          "default": {
            "$ref": "#/components/responses/default"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/fromTimestamp"
          },
          {
            "$ref": "#/components/parameters/toTimestamp"
          },
          {
            "$ref": "#/components/parameters/processId"
          }
        ],
        "security": [
          {
            "token_auth": []
          }
        ]
      }
    },
    "/v1.0/auth/authentication": {
      "post": {
        "summary": "Retrieve authentication token",
        "description": "Returns authentication token for submitted username and password",
        "operationId": "postAuthentication",
        "responses": {
          "200": {
            "description": "JSON with authentication token and userid",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/tokenAndUserId"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/http400"
          },
          "401": {
            "$ref": "#/components/responses/http401"
          },
          "404": {
            "$ref": "#/components/responses/http404"
          },
          "default": {
            "$ref": "#/components/responses/default"
          }
        },
        "requestBody": {
          "description": "Username and password",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/usernameAndPassword"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/usernameAndPassword"
              }
            }
          },
          "required": true
        },
        "security": []
      }
    },
    "/v1.0/auth/status/token": {
      "post": {
        "summary": "Get status of authentication token",
        "description": "Returns status of submitted authentication token",
        "operationId": "postAuthenticationStatus",
        "responses": {
          "200": {
            "description": "JSON status response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/tokenStatusResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/http400"
          },
          "401": {
            "$ref": "#/components/responses/http401"
          },
          "404": {
            "$ref": "#/components/responses/http404"
          },
          "default": {
            "$ref": "#/components/responses/default"
          }
        },
        "requestBody": {
          "description": "Authentication token",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/tokenStatusRequest"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/tokenStatusRequest"
              }
            }
          },
          "required": true
        },
        "security": []
      }
    },
    "/v1.0/firmware": {
      "get": {
        "summary": "Get list of firmware versions with metadata and download URLs",
        "description": "Returns object with property collection holding an array of objects with metadata for each firmware version. Parameters version and machineId can be used to filter the results. When optional version parameter is set then all firmware versions higher than the given version are returned. When optional machineId parameter is set, then all firmware versions for the given machineId are returned in addition to general results and results for other filter parameters. This Operation works with and without authentication. When used with authentication then all firmware versions for the given My Speidel account are returned in addition to general results and results for other filter parameters.",
        "operationId": "getFirmware",
        "responses": {
          "200": {
            "description": "JSON representing the firmware versions and their metadata",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/http401"
          },
          "default": {
            "$ref": "#/components/responses/default"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/firmwareVersion"
          },
          {
            "$ref": "#/components/parameters/firmwareMachineId"
          },
          {
            "$ref": "#/components/parameters/firmwareType"
          }
        ],
        "security": [
          {},
          {
            "token_auth": []
          }
        ]
      }
    },
    "/v1.0/machine/{uuid}/timeseries/userdata": {
      "post": {
        "summary": "Create machine timeseries user data, such as comments on a process or a ts in a process",
        "description": "Returns stored user data objects id",
        "operationId": "postMachineUserData",
        "responses": {
          "201": {
            "$ref": "#/components/responses/http201UUID"
          },
          "401": {
            "$ref": "#/components/responses/http401"
          },
          "402": {
            "$ref": "#/components/responses/http402"
          },
          "404": {
            "$ref": "#/components/responses/http404"
          }
        },
        "requestBody": {
          "description": "JSON of the user data object",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/machineUserData"
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/machineUuid"
          }
        ],
        "security": [
          {
            "token_auth": []
          }
        ]
      }
    },
    "/v1.0/machine/{uuid}/timeseries/userdata/{userdataid}": {
      "put": {
        "summary": "Update machine timeseries user data, such as comments on a process or a ts in a process",
        "description": "Returns resulting status code of operation",
        "operationId": "putMachineUserData",
        "responses": {
          "200": {
            "$ref": "#/components/responses/http200"
          },
          "401": {
            "$ref": "#/components/responses/http401"
          },
          "402": {
            "$ref": "#/components/responses/http402"
          },
          "404": {
            "$ref": "#/components/responses/http404"
          }
        },
        "requestBody": {
          "description": "JSON of the user data object",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/machineUserDataWithId"
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/machineUuid"
          },
          {
            "$ref": "#/components/parameters/machineUserDataId"
          }
        ],
        "security": [
          {
            "token_auth": []
          }
        ]
      }
    },
    "/v1.0/machine/{uuid}/timeseries/process": {
      "get": {
        "summary": "Get list of machine processes",
        "description": "Returns list of max. 50 machine process objects, sorted by ts desc",
        "operationId": "getMachineProcess",
        "responses": {
          "200": {
            "description": "JSON list of machine process objects",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/machineProcess"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/http401"
          },
          "402": {
            "$ref": "#/components/responses/http402"
          },
          "404": {
            "$ref": "#/components/responses/http404"
          },
          "default": {
            "$ref": "#/components/responses/default"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/machineUuid"
          },
          {
            "$ref": "#/components/parameters/fromTimestamp"
          },
          {
            "$ref": "#/components/parameters/toTimestamp"
          },
          {
            "$ref": "#/components/parameters/processId"
          },
          {
            "$ref": "#/components/parameters/aborted"
          }
        ],
        "security": [
          {
            "token_auth": []
          }
        ]
      }
    },
    "/v1.0/machine/{uuid}/timeseries/phase": {
      "get": {
        "summary": "Get list of machine phases",
        "description": "Returns list of machine phase objects",
        "operationId": "getMachinePhase",
        "responses": {
          "200": {
            "description": "JSON list of machine phase objects",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/machinePhase"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/http401"
          },
          "402": {
            "$ref": "#/components/responses/http402"
          },
          "404": {
            "$ref": "#/components/responses/http404"
          },
          "default": {
            "$ref": "#/components/responses/default"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/machineUuid"
          },
          {
            "$ref": "#/components/parameters/fromTimestamp"
          },
          {
            "$ref": "#/components/parameters/toTimestamp"
          }
        ],
        "security": [
          {
            "token_auth": []
          }
        ]
      }
    },
    "/v1.0/machine/{uuid}/timeseries/sensor": {
      "get": {
        "summary": "Get list of machine sensor readouts",
        "description": "Returns list of machine sensor objects",
        "operationId": "getMachineSensor",
        "responses": {
          "200": {
            "description": "JSON list of machine sensor objects",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/machineSensor"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/http401"
          },
          "402": {
            "$ref": "#/components/responses/http402"
          },
          "404": {
            "$ref": "#/components/responses/http404"
          },
          "default": {
            "$ref": "#/components/responses/default"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/machineUuid"
          },
          {
            "$ref": "#/components/parameters/fromTimestamp"
          },
          {
            "$ref": "#/components/parameters/toTimestamp"
          },
          {
            "$ref": "#/components/parameters/type"
          },
          {
            "$ref": "#/components/parameters/granularity"
          }
        ],
        "security": [
          {
            "token_auth": []
          }
        ]
      }
    },
    "/v1.0/machine/{uuid}/timeseries/actor": {
      "get": {
        "summary": "Get list of machine actor readouts",
        "description": "Returns list of machine actor objects",
        "operationId": "getMachineActor",
        "responses": {
          "200": {
            "description": "JSON list of machine actor objects",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/machineActor"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/http401"
          },
          "402": {
            "$ref": "#/components/responses/http402"
          },
          "404": {
            "$ref": "#/components/responses/http404"
          },
          "default": {
            "$ref": "#/components/responses/default"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/machineUuid"
          },
          {
            "$ref": "#/components/parameters/fromTimestamp"
          },
          {
            "$ref": "#/components/parameters/toTimestamp"
          }
        ],
        "security": [
          {
            "token_auth": []
          }
        ]
      }
    },
    "/v1.0/recipe/{uuid}": {
      "get": {
        "summary": "Get recipe",
        "description": "Returns recipe for given UUID",
        "operationId": "getRecipe",
        "responses": {
          "200": {
            "description": "JSON representing the recipe. Always returns the recipe in latest schema version. Existing clients are supposed to ignore additional fields.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/recipe_v5"
                },
                "examples": {
                  "recipe": {
                    "$ref": "#/components/examples/recipe"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/http400"
          },
          "401": {
            "$ref": "#/components/responses/http401"
          },
          "404": {
            "$ref": "#/components/responses/http404"
          },
          "default": {
            "$ref": "#/components/responses/default"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/uuid"
          }
        ]
      },
      "put": {
        "summary": "Put recipe",
        "description": "Updates existing recipe",
        "operationId": "putRecipe",
        "responses": {
          "200": {
            "$ref": "#/components/responses/http200NormalOrDryRun"
          },
          "400": {
            "$ref": "#/components/responses/http400"
          },
          "401": {
            "$ref": "#/components/responses/http401"
          },
          "404": {
            "$ref": "#/components/responses/http404"
          },
          "default": {
            "$ref": "#/components/responses/default"
          }
        },
        "requestBody": {
          "description": "JSON representing a new version of an existing recipe. All schema versions from version 4 on are supported to provide backwards compatibility to all client versions that existed at time of introduction of putRecipe operation.",
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/recipe_v4"
                  },
                  {
                    "$ref": "#/components/schemas/recipe_v5"
                  }
                ]
              },
              "examples": {
                "recipe": {
                  "$ref": "#/components/examples/recipe"
                }
              }
            }
          },
          "required": true
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/uuid"
          },
          {
            "$ref": "#/components/parameters/dryRun"
          }
        ]
      }
    },
    "/v1.0/propfind/recipe": {
      "get": {
        "summary": "Get list of recipes with metadata",
        "description": "Returns object with property collection holding an array of objects with metadata for each recipe",
        "operationId": "propfindRecipe",
        "responses": {
          "200": {
            "description": "JSON representing the recipe metadata",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/propfind_recipe"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/http400"
          },
          "401": {
            "$ref": "#/components/responses/http401"
          },
          "404": {
            "$ref": "#/components/responses/http404"
          },
          "default": {
            "$ref": "#/components/responses/default"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/machineSize"
          },
          {
            "$ref": "#/components/parameters/includePublic"
          },
          {
            "$ref": "#/components/parameters/recipeType"
          }
        ]
      }
    },
    "/v1.0/recipe": {
      "post": {
        "summary": "Post recipe",
        "description": "Writes recipe",
        "operationId": "postRecipe",
        "responses": {
          "200": {
            "$ref": "#/components/responses/http200DryRun"
          },
          "201": {
            "$ref": "#/components/responses/http201"
          },
          "400": {
            "$ref": "#/components/responses/http400"
          },
          "401": {
            "$ref": "#/components/responses/http401"
          },
          "404": {
            "$ref": "#/components/responses/http404"
          },
          "default": {
            "$ref": "#/components/responses/default"
          }
        },
        "requestBody": {
          "description": "JSON representing the recipe. All schema versions from version 2 on are supported to provide backwards compatibility to all client versions that existed at time of introduction of postRecipe operation.",
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/recipe"
                  },
                  {
                    "$ref": "#/components/schemas/recipe_v3"
                  },
                  {
                    "$ref": "#/components/schemas/recipe_v4"
                  },
                  {
                    "$ref": "#/components/schemas/recipe_v5"
                  }
                ]
              },
              "examples": {
                "recipe": {
                  "$ref": "#/components/examples/recipe"
                }
              }
            }
          },
          "required": true
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/dryRun"
          }
        ]
      }
    },
    "/v1.0/user/{uuid}": {
      "put": {
        "summary": "Put user",
        "description": "Updates existing user",
        "operationId": "putUser",
        "responses": {
          "200": {
            "description": "JSON reprensenting the version resulting from the operation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/user"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/http400"
          },
          "401": {
            "$ref": "#/components/responses/http401"
          },
          "404": {
            "$ref": "#/components/responses/http404"
          },
          "default": {
            "$ref": "#/components/responses/default"
          }
        },
        "requestBody": {
          "description": "JSON representing a new version of an existing user.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/user"
              }
            }
          },
          "required": true
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/uuid"
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "acid": {
        "type": "number",
        "format": "double",
        "nullable": true
      },
      "amount": {
        "type": "number",
        "format": "double"
      },
      "color": {
        "type": "number",
        "format": "double",
        "nullable": true
      },
      "contentVersion": {
        "type": "integer",
        "minimum": 1,
        "maximum": 99999999999
      },
      "creationDate": {
        "type": "string",
        "format": "date-time"
      },
      "deleted": {
        "type": "integer",
        "minimum": 0,
        "maximum": 1
      },
      "duration": {
        "type": "number",
        "format": "double"
      },
      "extra": {
        "type": "object"
      },
      "fermentationStep": {
        "type": "object",
        "required": [
          "uuid",
          "sorting",
          "temperature",
          "duration",
          "time",
          "creation_date",
          "update_on",
          "schema_version"
        ],
        "additionalProperties": false,
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "sorting": {
            "$ref": "#/components/schemas/sorting"
          },
          "temperature": {
            "$ref": "#/components/schemas/temperature"
          },
          "duration": {
            "$ref": "#/components/schemas/duration"
          },
          "time": {
            "$ref": "#/components/schemas/duration"
          },
          "creation_date": {
            "$ref": "#/components/schemas/creationDate"
          },
          "update_on": {
            "$ref": "#/components/schemas/updateDate"
          },
          "content_version": {
            "$ref": "#/components/schemas/contentVersion"
          },
          "schema_version": {
            "$ref": "#/components/schemas/schemaVersion"
          },
          "extra": {
            "$ref": "#/components/schemas/extra"
          }
        }
      },
      "hopBoilingAdd": {
        "type": "object",
        "required": [
          "uuid",
          "hop_uuid",
          "amount",
          "acid",
          "hopping_step_number",
          "creation_date",
          "update_on",
          "content_version",
          "schema_version"
        ],
        "additionalProperties": false,
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "hop_uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "amount": {
            "$ref": "#/components/schemas/amount"
          },
          "acid": {
            "$ref": "#/components/schemas/acid"
          },
          "hopping_step_number": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10
          },
          "creation_date": {
            "$ref": "#/components/schemas/creationDate"
          },
          "update_on": {
            "$ref": "#/components/schemas/updateDate"
          },
          "content_version": {
            "$ref": "#/components/schemas/contentVersion"
          },
          "schema_version": {
            "$ref": "#/components/schemas/schemaVersion"
          },
          "extra": {
            "$ref": "#/components/schemas/extra"
          }
        }
      },
      "hopFermentationAdd": {
        "type": "object",
        "required": [
          "uuid",
          "hop_uuid",
          "amount",
          "time",
          "creation_date",
          "update_on",
          "schema_version"
        ],
        "additionalProperties": false,
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "hop_uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "sorting": {
            "$ref": "#/components/schemas/sorting"
          },
          "amount": {
            "$ref": "#/components/schemas/amount"
          },
          "time": {
            "type": "string",
            "maxLength": 50
          },
          "creation_date": {
            "$ref": "#/components/schemas/creationDate"
          },
          "update_on": {
            "$ref": "#/components/schemas/updateDate"
          },
          "content_version": {
            "$ref": "#/components/schemas/contentVersion"
          },
          "schema_version": {
            "$ref": "#/components/schemas/schemaVersion"
          },
          "extra": {
            "$ref": "#/components/schemas/extra"
          }
        }
      },
      "hop": {
        "type": "object",
        "required": [
          "uuid",
          "name",
          "acid",
          "color",
          "owner_uuid",
          "public",
          "deleted",
          "creation_date",
          "update_on",
          "content_version",
          "schema_version"
        ],
        "additionalProperties": false,
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "acid": {
            "$ref": "#/components/schemas/acid"
          },
          "color": {
            "$ref": "#/components/schemas/color"
          },
          "owner_uuid": {
            "$ref": "#/components/schemas/uuid_nullable"
          },
          "public": {
            "$ref": "#/components/schemas/public"
          },
          "deleted": {
            "$ref": "#/components/schemas/deleted"
          },
          "creation_date": {
            "$ref": "#/components/schemas/creationDate"
          },
          "update_on": {
            "$ref": "#/components/schemas/updateDate"
          },
          "content_version": {
            "$ref": "#/components/schemas/contentVersion"
          },
          "schema_version": {
            "$ref": "#/components/schemas/schemaVersion"
          }
        }
      },
      "ingredientBoilingAdd": {
        "type": "object",
        "required": [
          "uuid",
          "ingredient_uuid",
          "amount",
          "acid",
          "hopping_step_number",
          "creation_date",
          "update_on",
          "content_version",
          "schema_version"
        ],
        "additionalProperties": false,
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "ingredient_uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "amount": {
            "$ref": "#/components/schemas/amount"
          },
          "acid": {
            "$ref": "#/components/schemas/acid"
          },
          "hopping_step_number": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10
          },
          "creation_date": {
            "$ref": "#/components/schemas/creationDate"
          },
          "update_on": {
            "$ref": "#/components/schemas/updateDate"
          },
          "content_version": {
            "$ref": "#/components/schemas/contentVersion"
          },
          "schema_version": {
            "$ref": "#/components/schemas/schemaVersion"
          },
          "extra": {
            "$ref": "#/components/schemas/extra"
          }
        }
      },
      "ingredientFermentationAdd": {
        "type": "object",
        "required": [
          "uuid",
          "ingredient_uuid",
          "amount",
          "time",
          "creation_date",
          "update_on",
          "schema_version"
        ],
        "additionalProperties": false,
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "ingredient_uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "sorting": {
            "$ref": "#/components/schemas/sorting"
          },
          "amount": {
            "$ref": "#/components/schemas/amount"
          },
          "time": {
            "type": "string",
            "maxLength": 50
          },
          "creation_date": {
            "$ref": "#/components/schemas/creationDate"
          },
          "update_on": {
            "$ref": "#/components/schemas/updateDate"
          },
          "content_version": {
            "$ref": "#/components/schemas/contentVersion"
          },
          "schema_version": {
            "$ref": "#/components/schemas/schemaVersion"
          },
          "extra": {
            "$ref": "#/components/schemas/extra"
          }
        }
      },
      "ingredient": {
        "type": "object",
        "required": [
          "uuid",
          "name",
          "owner_uuid",
          "public",
          "deleted",
          "creation_date",
          "update_on",
          "content_version",
          "schema_version"
        ],
        "additionalProperties": false,
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "owner_uuid": {
            "$ref": "#/components/schemas/uuid_nullable"
          },
          "public": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1
          },
          "deleted": {
            "$ref": "#/components/schemas/deleted"
          },
          "creation_date": {
            "$ref": "#/components/schemas/creationDate"
          },
          "update_on": {
            "$ref": "#/components/schemas/updateDate"
          },
          "content_version": {
            "$ref": "#/components/schemas/contentVersion"
          },
          "schema_version": {
            "$ref": "#/components/schemas/schemaVersion"
          }
        }
      },
      "machineActor": {
        "type": "object",
        "required": [
          "id",
          "type",
          "ts",
          "values"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "$ref": "#/components/schemas/machineTimeseriesId"
          },
          "type": {
            "$ref": "#/components/schemas/machineActorType"
          },
          "ts": {
            "type": "string",
            "format": "date-time"
          },
          "values": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "machineActorType": {
        "type": "string",
        "maxLength": 255,
        "minLength": 1
      },
      "machinePhaseMetadata": {
        "type": "object",
        "additionalProperties": true
      },
      "machinePhase": {
        "type": "object",
        "required": [
          "id",
          "type",
          "start"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "$ref": "#/components/schemas/machineTimeseriesId"
          },
          "type": {
            "$ref": "#/components/schemas/machinePhaseType"
          },
          "start": {
            "type": "string",
            "format": "date-time"
          },
          "end": {
            "type": "string",
            "format": "date-time"
          },
          "metadata": {
            "$ref": "#/components/schemas/machinePhaseMetadata"
          }
        }
      },
      "machinePhaseType": {
        "type": "string",
        "maxLength": 255,
        "minLength": 1
      },
      "machineProcessBrewMetadata": {
        "type": "object",
        "additionalProperties": true
      },
      "machineProcessFermentMetadata": {
        "type": "object",
        "additionalProperties": true
      },
      "machineProcess": {
        "type": "object",
        "required": [
          "id",
          "type",
          "status",
          "start"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "$ref": "#/components/schemas/machineTimeseriesId"
          },
          "type": {
            "$ref": "#/components/schemas/machineProcessType"
          },
          "status": {
            "$ref": "#/components/schemas/machineProcessStatus"
          },
          "start": {
            "type": "string",
            "format": "date-time"
          },
          "end": {
            "type": "string",
            "format": "date-time"
          },
          "phases": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/machinePhase"
            }
          },
          "metadata": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/machineProcessBrewMetadata"
              },
              {
                "$ref": "#/components/schemas/machineProcessFermentMetadata"
              },
              {
                "$ref": "#/components/schemas/nullType"
              }
            ]
          },
          "userdata": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/machineUserDataWithId"
            }
          }
        }
      },
      "machineProcessStatus": {
        "type": "string",
        "enum": [
          "running",
          "unknown",
          "finished",
          "aborted",
          "user abort"
        ]
      },
      "machineProcessType": {
        "type": "string",
        "maxLength": 255,
        "minLength": 1
      },
      "machineSensor": {
        "type": "object",
        "required": [
          "id",
          "type",
          "ts",
          "values"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "$ref": "#/components/schemas/machineTimeseriesId"
          },
          "type": {
            "$ref": "#/components/schemas/machineSensorType"
          },
          "ts": {
            "type": "string",
            "format": "date-time"
          },
          "values": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "machineSensorType": {
        "type": "string",
        "maxLength": 255,
        "minLength": 1
      },
      "machineTimeseriesId": {
        "type": "string",
        "maxLength": 255,
        "minLength": 7
      },
      "machineType": {
        "type": "object",
        "required": [
          "uuid",
          "text",
          "size"
        ],
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "text": {
            "type": "string",
            "maxLength": 255,
            "nullable": true
          },
          "size": {
            "type": "integer",
            "minimum": 1,
            "maximum": 99999999999,
            "nullable": true
          },
          "extra": {
            "$ref": "#/components/schemas/extra"
          }
        },
        "additionalProperties": false
      },
      "machineUserData": {
        "type": "object",
        "required": [
          "process_uuid",
          "name"
        ],
        "properties": {
          "process_uuid": {
            "$ref": "#/components/schemas/machineTimeseriesId"
          },
          "object_type": {
            "type": "string",
            "enum": [
              "phase",
              "actor",
              "sensor"
            ]
          },
          "object_uuid": {
            "$ref": "#/components/schemas/machineTimeseriesId"
          },
          "ts": {
            "type": "string",
            "format": "date-time"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "additional_data": {
            "type": "object"
          }
        }
      },
      "machineUserDataWithId": {
        "allOf": [
          {
            "$ref": "#/components/schemas/machineUserData"
          },
          {
            "type": "object",
            "required": [
              "uuid"
            ],
            "properties": {
              "uuid": {
                "$ref": "#/components/schemas/machineTimeseriesId"
              }
            }
          }
        ]
      },
      "maltAdd": {
        "type": "object",
        "required": [
          "uuid",
          "malt_uuid",
          "amount",
          "color",
          "creation_date",
          "update_on",
          "content_version",
          "schema_version"
        ],
        "additionalProperties": false,
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "malt_uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "amount": {
            "$ref": "#/components/schemas/amount"
          },
          "color": {
            "$ref": "#/components/schemas/color"
          },
          "creation_date": {
            "$ref": "#/components/schemas/creationDate"
          },
          "update_on": {
            "$ref": "#/components/schemas/updateDate"
          },
          "content_version": {
            "$ref": "#/components/schemas/contentVersion"
          },
          "schema_version": {
            "$ref": "#/components/schemas/schemaVersion"
          },
          "extra": {
            "$ref": "#/components/schemas/extra"
          }
        }
      },
      "malt": {
        "type": "object",
        "required": [
          "uuid",
          "name",
          "acid",
          "color",
          "owner_uuid",
          "public",
          "deleted",
          "creation_date",
          "update_on",
          "content_version",
          "schema_version"
        ],
        "additionalProperties": false,
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "acid": {
            "$ref": "#/components/schemas/acid"
          },
          "color": {
            "$ref": "#/components/schemas/color"
          },
          "owner_uuid": {
            "$ref": "#/components/schemas/uuid_nullable"
          },
          "public": {
            "$ref": "#/components/schemas/public"
          },
          "deleted": {
            "$ref": "#/components/schemas/deleted"
          },
          "creation_date": {
            "$ref": "#/components/schemas/creationDate"
          },
          "update_on": {
            "$ref": "#/components/schemas/updateDate"
          },
          "content_version": {
            "$ref": "#/components/schemas/contentVersion"
          },
          "schema_version": {
            "$ref": "#/components/schemas/schemaVersion"
          }
        }
      },
      "maturationStep": {
        "type": "object",
        "required": [
          "uuid",
          "sorting",
          "temperature",
          "duration",
          "pressure",
          "creation_date",
          "update_on",
          "content_version",
          "schema_version"
        ],
        "additionalProperties": false,
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "sorting": {
            "$ref": "#/components/schemas/sorting"
          },
          "temperature": {
            "$ref": "#/components/schemas/temperature"
          },
          "duration": {
            "$ref": "#/components/schemas/duration"
          },
          "pressure": {
            "$ref": "#/components/schemas/pressure"
          },
          "creation_date": {
            "$ref": "#/components/schemas/creationDate"
          },
          "update_on": {
            "$ref": "#/components/schemas/updateDate"
          },
          "content_version": {
            "$ref": "#/components/schemas/contentVersion"
          },
          "schema_version": {
            "$ref": "#/components/schemas/schemaVersion"
          },
          "extra": {
            "$ref": "#/components/schemas/extra"
          }
        }
      },
      "millisecondsTimestamp": {
        "type": "integer",
        "minimum": -8640000000000000,
        "maximum": 8640000000000000,
        "nullable": true
      },
      "nullType": {
        "title": "OpenAPI 3.0 null-type ref",
        "description": "for adding nullability to a ref",
        "enum": [
          null
        ]
      },
      "pressure": {
        "type": "number",
        "format": "double"
      },
      "propfind_recipe": {
        "type": "object",
        "required": [
          "collection"
        ],
        "additionalProperties": false,
        "properties": {
          "collection": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "uuid",
                "parent_uuid",
                "owner_uuid",
                "name",
                "description",
                "created_on",
                "style",
                "machine_type",
                "update_on",
                "content_version",
                "public",
                "schema_version"
              ],
              "additionalProperties": false,
              "properties": {
                "uuid": {
                  "$ref": "#/components/schemas/uuid"
                },
                "parent_uuid": {
                  "$ref": "#/components/schemas/uuid_nullable"
                },
                "owner_uuid": {
                  "$ref": "#/components/schemas/uuid_nullable"
                },
                "name": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 255
                },
                "description": {
                  "type": "string"
                },
                "style": {
                  "type": "string",
                  "maxLength": 255,
                  "nullable": true
                },
                "machine_type": {
                  "type": "object",
                  "required": [
                    "uuid",
                    "text",
                    "size"
                  ],
                  "properties": {
                    "uuid": {
                      "$ref": "#/components/schemas/uuid_nullable"
                    },
                    "text": {
                      "type": "string",
                      "maxLength": 255,
                      "nullable": true
                    },
                    "size": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 99999999999,
                      "nullable": true
                    },
                    "extra": {
                      "$ref": "#/components/schemas/extra"
                    }
                  },
                  "additionalProperties": false
                },
                "created_on": {
                  "type": "string",
                  "format": "date-time"
                },
                "update_on": {
                  "$ref": "#/components/schemas/updateDate"
                },
                "content_version": {
                  "$ref": "#/components/schemas/contentVersion"
                },
                "public": {
                  "$ref": "#/components/schemas/public"
                },
                "schema_version": {
                  "$ref": "#/components/schemas/schemaVersion"
                }
              }
            }
          }
        }
      },
      "public": {
        "type": "integer",
        "minimum": 0,
        "maximum": 1
      },
      "recipe_v3": {
        "type": "object",
        "required": [
          "uuid",
          "parent_uuid",
          "name",
          "description",
          "comments",
          "style",
          "bitterness",
          "color",
          "water_recast",
          "water_specific_gravity",
          "brewing_set_active",
          "country",
          "created_on",
          "update_on",
          "content_version",
          "public",
          "machine_type",
          "owner",
          "brewer",
          "schema_version",
          "phases",
          "mashing",
          "rest",
          "boil",
          "fermentation",
          "maturation",
          "references"
        ],
        "additionalProperties": false,
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "parent_uuid": {
            "$ref": "#/components/schemas/uuid_nullable"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255
          },
          "description": {
            "type": "string"
          },
          "comments": {
            "type": "string",
            "maxLength": 999
          },
          "style": {
            "type": "string",
            "maxLength": 255,
            "nullable": true
          },
          "bitterness": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "color": {
            "$ref": "#/components/schemas/color"
          },
          "water_recast": {
            "type": "integer",
            "minimum": 0,
            "maximum": 99999999999,
            "nullable": true
          },
          "water_specific_gravity": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "brewing_set_active": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1,
            "nullable": true
          },
          "country": {
            "type": "string",
            "pattern": "^(A(D|E|F|G|I|L|M|N|O|R|S|T|Q|U|W|X|Z)|B(A|B|D|E|F|G|H|I|J|L|M|N|O|R|S|T|V|W|Y|Z)|C(A|C|D|F|G|H|I|K|L|M|N|O|R|U|V|X|Y|Z)|D(E|J|K|M|O|Z)|E(C|E|G|H|R|S|T)|F(I|J|K|M|O|R)|G(A|B|D|E|F|G|H|I|L|M|N|P|Q|R|S|T|U|W|Y)|H(K|M|N|R|T|U)|I(D|E|Q|L|M|N|O|R|S|T)|J(E|M|O|P)|K(E|G|H|I|M|N|P|R|W|Y|Z)|L(A|B|C|I|K|R|S|T|U|V|Y)|M(A|C|D|E|F|G|H|K|L|M|N|O|Q|P|R|S|T|U|V|W|X|Y|Z)|N(A|C|E|F|G|I|L|O|P|R|U|Z)|OM|P(A|E|F|G|H|K|L|M|N|R|S|T|W|Y)|QA|R(E|O|S|U|W)|S(A|B|C|D|E|G|H|I|J|K|L|M|N|O|R|T|V|Y|Z)|T(C|D|F|G|H|J|K|L|M|N|O|R|T|V|W|Z)|U(A|G|M|S|Y|Z)|V(A|C|E|G|I|N|U)|W(F|S)|Y(E|T)|Z(A|M|W))$",
            "nullable": true
          },
          "created_on": {
            "type": "string",
            "format": "date-time"
          },
          "update_on": {
            "$ref": "#/components/schemas/updateDate"
          },
          "content_version": {
            "$ref": "#/components/schemas/contentVersion"
          },
          "public": {
            "$ref": "#/components/schemas/public"
          },
          "machine_type": {
            "$ref": "#/components/schemas/machineType"
          },
          "owner": {
            "$ref": "#/components/schemas/userReference"
          },
          "brewer": {
            "$ref": "#/components/schemas/userReference"
          },
          "schema_version": {
            "$ref": "#/components/schemas/schemaVersion"
          },
          "extra": {
            "$ref": "#/components/schemas/extra"
          },
          "phases": {
            "type": "object",
            "required": [
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "additionalProperties": false,
            "properties": {
              "1": {
                "type": "string",
                "enum": [
                  "mashing"
                ]
              },
              "2": {
                "type": "string",
                "enum": [
                  "rest"
                ]
              },
              "3": {
                "type": "string",
                "enum": [
                  "boil"
                ]
              },
              "4": {
                "type": "string",
                "enum": [
                  "fermentation"
                ]
              },
              "5": {
                "type": "string",
                "enum": [
                  "maturation"
                ]
              }
            }
          },
          "mashing": {
            "type": "object",
            "required": [
              "temperature",
              "adds"
            ],
            "additionalProperties": false,
            "properties": {
              "temperature": {
                "$ref": "#/components/schemas/temperature"
              },
              "adds": {
                "type": "object",
                "required": [
                  "water"
                ],
                "additionalProperties": false,
                "properties": {
                  "water": {
                    "type": "object",
                    "required": [
                      "uuid",
                      "water_amount_start"
                    ],
                    "properties": {
                      "uuid": {
                        "$ref": "#/components/schemas/uuid_nullable"
                      },
                      "water_amount_start": {
                        "type": "number",
                        "format": "double"
                      },
                      "extra": {
                        "$ref": "#/components/schemas/extra"
                      }
                    }
                  },
                  "malts": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/maltAdd"
                    }
                  },
                  "extra": {
                    "$ref": "#/components/schemas/extra"
                  }
                }
              },
              "extra": {
                "$ref": "#/components/schemas/extra"
              }
            }
          },
          "rest": {
            "type": "object",
            "required": [
              "water_amount_addition",
              "steps"
            ],
            "additionalProperties": false,
            "properties": {
              "water_amount_addition": {
                "$ref": "#/components/schemas/amount"
              },
              "steps": {
                "type": "array",
                "maxItems": 10,
                "items": {
                  "type": "object",
                  "required": [
                    "duration",
                    "temperature"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "duration": {
                      "$ref": "#/components/schemas/duration"
                    },
                    "temperature": {
                      "$ref": "#/components/schemas/temperature"
                    },
                    "extra": {
                      "$ref": "#/components/schemas/extra"
                    }
                  }
                }
              },
              "extra": {
                "$ref": "#/components/schemas/extra"
              }
            }
          },
          "boil": {
            "type": "object",
            "required": [
              "boiling_duration",
              "boiling_temperature",
              "steps"
            ],
            "additionalProperties": false,
            "properties": {
              "boiling_duration": {
                "$ref": "#/components/schemas/duration"
              },
              "boiling_temperature": {
                "$ref": "#/components/schemas/temperature"
              },
              "steps": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "duration",
                    "adds"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "duration": {
                      "$ref": "#/components/schemas/duration"
                    },
                    "adds": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "hops": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/hopBoilingAdd"
                          }
                        },
                        "ingredients": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ingredientBoilingAdd"
                          }
                        }
                      }
                    },
                    "extra": {
                      "$ref": "#/components/schemas/extra"
                    }
                  }
                }
              },
              "extra": {
                "$ref": "#/components/schemas/extra"
              }
            }
          },
          "fermentation": {
            "type": "object",
            "required": [
              "steps",
              "adds"
            ],
            "properties": {
              "steps": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/fermentationStep"
                }
              },
              "adds": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "yeasts": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/yeastFermentationAdd"
                    }
                  },
                  "hops": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/hopFermentationAdd"
                    }
                  },
                  "ingredients": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/ingredientFermentationAdd"
                    }
                  },
                  "extra": {
                    "$ref": "#/components/schemas/extra"
                  }
                }
              },
              "extra": {
                "$ref": "#/components/schemas/extra"
              }
            }
          },
          "maturation": {
            "type": "object",
            "required": [
              "steps"
            ],
            "additionalProperties": false,
            "properties": {
              "steps": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/maturationStep"
                }
              },
              "extra": {
                "$ref": "#/components/schemas/extra"
              }
            }
          },
          "references": {
            "description": "references has keys water_types, malts, hops etc. Each key holds a map of objects of that type. malts for example holds a map of malt uuids as keys and malt objects as values. Restrictions on the keys are not possible in OpenAPI version 3.0.3, so that the malt uuid key is allowed to be any string. Example how references should be structured: references water_types: [...] malts 26960: # No restrictions possible on key 34585 uuid: 26960 property: value property2: value2 26961: # No restrictions possible on key 34585 uuid: 26961 property: value property2: value2",
            "type": "object",
            "properties": {
              "water_types": {
                "type": "object",
                "maxProperties": 1,
                "additionalProperties": {
                  "$ref": "#/components/schemas/waterType"
                }
              },
              "malts": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/malt"
                }
              },
              "hops": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/hop"
                }
              },
              "ingredients": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/ingredient"
                }
              },
              "yeasts": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/yeast"
                }
              }
            }
          }
        }
      },
      "recipe_v4": {
        "type": "object",
        "required": [
          "uuid",
          "parent_uuid",
          "name",
          "description",
          "comments",
          "style",
          "bitterness",
          "color",
          "water_recast",
          "water_plato",
          "water_specific_gravity",
          "brewing_set_active",
          "country",
          "created_on",
          "update_on",
          "content_version",
          "public",
          "machine_type",
          "owner",
          "brewer",
          "schema_version",
          "phases",
          "mashing",
          "rest",
          "boil",
          "fermentation",
          "maturation",
          "references"
        ],
        "additionalProperties": false,
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "parent_uuid": {
            "$ref": "#/components/schemas/uuid_nullable"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255
          },
          "description": {
            "type": "string"
          },
          "comments": {
            "type": "string",
            "maxLength": 999
          },
          "style": {
            "type": "string",
            "maxLength": 255,
            "nullable": true
          },
          "bitterness": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "color": {
            "$ref": "#/components/schemas/color"
          },
          "water_recast": {
            "type": "integer",
            "minimum": 0,
            "maximum": 99999999999,
            "nullable": true
          },
          "water_plato": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "water_specific_gravity": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "brewing_set_active": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1,
            "nullable": true
          },
          "country": {
            "type": "string",
            "pattern": "^(A(D|E|F|G|I|L|M|N|O|R|S|T|Q|U|W|X|Z)|B(A|B|D|E|F|G|H|I|J|L|M|N|O|R|S|T|V|W|Y|Z)|C(A|C|D|F|G|H|I|K|L|M|N|O|R|U|V|X|Y|Z)|D(E|J|K|M|O|Z)|E(C|E|G|H|R|S|T)|F(I|J|K|M|O|R)|G(A|B|D|E|F|G|H|I|L|M|N|P|Q|R|S|T|U|W|Y)|H(K|M|N|R|T|U)|I(D|E|Q|L|M|N|O|R|S|T)|J(E|M|O|P)|K(E|G|H|I|M|N|P|R|W|Y|Z)|L(A|B|C|I|K|R|S|T|U|V|Y)|M(A|C|D|E|F|G|H|K|L|M|N|O|Q|P|R|S|T|U|V|W|X|Y|Z)|N(A|C|E|F|G|I|L|O|P|R|U|Z)|OM|P(A|E|F|G|H|K|L|M|N|R|S|T|W|Y)|QA|R(E|O|S|U|W)|S(A|B|C|D|E|G|H|I|J|K|L|M|N|O|R|T|V|Y|Z)|T(C|D|F|G|H|J|K|L|M|N|O|R|T|V|W|Z)|U(A|G|M|S|Y|Z)|V(A|C|E|G|I|N|U)|W(F|S)|Y(E|T)|Z(A|M|W))$",
            "nullable": true
          },
          "created_on": {
            "type": "string",
            "format": "date-time"
          },
          "update_on": {
            "$ref": "#/components/schemas/updateDate"
          },
          "content_version": {
            "$ref": "#/components/schemas/contentVersion"
          },
          "public": {
            "$ref": "#/components/schemas/public"
          },
          "machine_type": {
            "$ref": "#/components/schemas/machineType"
          },
          "owner": {
            "$ref": "#/components/schemas/userReference"
          },
          "brewer": {
            "$ref": "#/components/schemas/userReference"
          },
          "schema_version": {
            "$ref": "#/components/schemas/schemaVersion"
          },
          "extra": {
            "$ref": "#/components/schemas/extra"
          },
          "phases": {
            "type": "object",
            "required": [
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "additionalProperties": false,
            "properties": {
              "1": {
                "type": "string",
                "enum": [
                  "mashing"
                ]
              },
              "2": {
                "type": "string",
                "enum": [
                  "rest"
                ]
              },
              "3": {
                "type": "string",
                "enum": [
                  "boil"
                ]
              },
              "4": {
                "type": "string",
                "enum": [
                  "fermentation"
                ]
              },
              "5": {
                "type": "string",
                "enum": [
                  "maturation"
                ]
              }
            }
          },
          "mashing": {
            "type": "object",
            "required": [
              "temperature",
              "adds"
            ],
            "additionalProperties": false,
            "properties": {
              "temperature": {
                "$ref": "#/components/schemas/temperature"
              },
              "adds": {
                "type": "object",
                "required": [
                  "water"
                ],
                "additionalProperties": false,
                "properties": {
                  "water": {
                    "type": "object",
                    "required": [
                      "uuid",
                      "water_amount_start"
                    ],
                    "properties": {
                      "uuid": {
                        "$ref": "#/components/schemas/uuid_nullable"
                      },
                      "water_amount_start": {
                        "type": "number",
                        "format": "double"
                      },
                      "extra": {
                        "$ref": "#/components/schemas/extra"
                      }
                    }
                  },
                  "malts": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/maltAdd"
                    }
                  },
                  "extra": {
                    "$ref": "#/components/schemas/extra"
                  }
                }
              },
              "extra": {
                "$ref": "#/components/schemas/extra"
              }
            }
          },
          "rest": {
            "type": "object",
            "required": [
              "water_amount_addition",
              "steps"
            ],
            "additionalProperties": false,
            "properties": {
              "water_amount_addition": {
                "$ref": "#/components/schemas/amount"
              },
              "steps": {
                "type": "array",
                "maxItems": 10,
                "items": {
                  "type": "object",
                  "required": [
                    "duration",
                    "temperature"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "duration": {
                      "$ref": "#/components/schemas/duration"
                    },
                    "temperature": {
                      "$ref": "#/components/schemas/temperature"
                    },
                    "extra": {
                      "$ref": "#/components/schemas/extra"
                    }
                  }
                }
              },
              "extra": {
                "$ref": "#/components/schemas/extra"
              }
            }
          },
          "boil": {
            "type": "object",
            "required": [
              "boiling_duration",
              "boiling_temperature",
              "steps"
            ],
            "additionalProperties": false,
            "properties": {
              "boiling_duration": {
                "$ref": "#/components/schemas/duration"
              },
              "boiling_temperature": {
                "$ref": "#/components/schemas/temperature"
              },
              "steps": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "duration",
                    "adds"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "duration": {
                      "$ref": "#/components/schemas/duration"
                    },
                    "adds": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "hops": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/hopBoilingAdd"
                          }
                        },
                        "ingredients": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ingredientBoilingAdd"
                          }
                        }
                      }
                    },
                    "extra": {
                      "$ref": "#/components/schemas/extra"
                    }
                  }
                }
              },
              "extra": {
                "$ref": "#/components/schemas/extra"
              }
            }
          },
          "fermentation": {
            "type": "object",
            "required": [
              "steps",
              "adds"
            ],
            "properties": {
              "steps": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/fermentationStep"
                }
              },
              "adds": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "yeasts": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/yeastFermentationAdd"
                    }
                  },
                  "hops": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/hopFermentationAdd"
                    }
                  },
                  "ingredients": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/ingredientFermentationAdd"
                    }
                  },
                  "extra": {
                    "$ref": "#/components/schemas/extra"
                  }
                }
              },
              "extra": {
                "$ref": "#/components/schemas/extra"
              }
            }
          },
          "maturation": {
            "type": "object",
            "required": [
              "steps"
            ],
            "additionalProperties": false,
            "properties": {
              "steps": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/maturationStep"
                }
              },
              "extra": {
                "$ref": "#/components/schemas/extra"
              }
            }
          },
          "references": {
            "description": "references has keys water_types, malts, hops etc. Each key holds a map of objects of that type. malts for example holds a map of malt uuids as keys and malt objects as values. Restrictions on the keys are not possible in OpenAPI version 3.0.3, so that the malt uuid key is allowed to be any string. Example how references should be structured: references water_types: [...] malts 26960: # No restrictions possible on key 34585 uuid: 26960 property: value property2: value2 26961: # No restrictions possible on key 34585 uuid: 26961 property: value property2: value2",
            "type": "object",
            "properties": {
              "water_types": {
                "type": "object",
                "maxProperties": 1,
                "additionalProperties": {
                  "$ref": "#/components/schemas/waterType"
                }
              },
              "malts": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/malt"
                }
              },
              "hops": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/hop"
                }
              },
              "ingredients": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/ingredient"
                }
              },
              "yeasts": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/yeast"
                }
              }
            }
          }
        }
      },
      "recipe_v5": {
        "type": "object",
        "required": [
          "uuid",
          "parent_uuid",
          "name",
          "description",
          "comments",
          "style",
          "bitterness",
          "color",
          "water_recast",
          "water_plato",
          "water_specific_gravity",
          "brewing_set_active",
          "country",
          "created_on",
          "update_on",
          "content_version",
          "public",
          "recipe_type",
          "machine_type",
          "owner",
          "brewer",
          "schema_version",
          "phases",
          "mashing",
          "rest",
          "boil",
          "fermentation",
          "maturation",
          "references"
        ],
        "additionalProperties": false,
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "parent_uuid": {
            "$ref": "#/components/schemas/uuid_nullable"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255
          },
          "description": {
            "type": "string"
          },
          "comments": {
            "type": "string",
            "maxLength": 999
          },
          "style": {
            "type": "string",
            "maxLength": 255,
            "nullable": true
          },
          "bitterness": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "color": {
            "$ref": "#/components/schemas/color"
          },
          "water_recast": {
            "type": "integer",
            "minimum": 0,
            "maximum": 99999999999,
            "nullable": true
          },
          "water_plato": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "water_specific_gravity": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "brewing_set_active": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1,
            "nullable": true
          },
          "country": {
            "type": "string",
            "pattern": "^(A(D|E|F|G|I|L|M|N|O|R|S|T|Q|U|W|X|Z)|B(A|B|D|E|F|G|H|I|J|L|M|N|O|R|S|T|V|W|Y|Z)|C(A|C|D|F|G|H|I|K|L|M|N|O|R|U|V|X|Y|Z)|D(E|J|K|M|O|Z)|E(C|E|G|H|R|S|T)|F(I|J|K|M|O|R)|G(A|B|D|E|F|G|H|I|L|M|N|P|Q|R|S|T|U|W|Y)|H(K|M|N|R|T|U)|I(D|E|Q|L|M|N|O|R|S|T)|J(E|M|O|P)|K(E|G|H|I|M|N|P|R|W|Y|Z)|L(A|B|C|I|K|R|S|T|U|V|Y)|M(A|C|D|E|F|G|H|K|L|M|N|O|Q|P|R|S|T|U|V|W|X|Y|Z)|N(A|C|E|F|G|I|L|O|P|R|U|Z)|OM|P(A|E|F|G|H|K|L|M|N|R|S|T|W|Y)|QA|R(E|O|S|U|W)|S(A|B|C|D|E|G|H|I|J|K|L|M|N|O|R|T|V|Y|Z)|T(C|D|F|G|H|J|K|L|M|N|O|R|T|V|W|Z)|U(A|G|M|S|Y|Z)|V(A|C|E|G|I|N|U)|W(F|S)|Y(E|T)|Z(A|M|W))$",
            "nullable": true
          },
          "created_on": {
            "type": "string",
            "format": "date-time"
          },
          "update_on": {
            "$ref": "#/components/schemas/updateDate"
          },
          "content_version": {
            "$ref": "#/components/schemas/contentVersion"
          },
          "public": {
            "$ref": "#/components/schemas/public"
          },
          "recipe_type": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1
          },
          "machine_type": {
            "$ref": "#/components/schemas/machineType"
          },
          "owner": {
            "$ref": "#/components/schemas/userReference"
          },
          "brewer": {
            "$ref": "#/components/schemas/userReference"
          },
          "schema_version": {
            "$ref": "#/components/schemas/schemaVersion"
          },
          "extra": {
            "$ref": "#/components/schemas/extra"
          },
          "phases": {
            "type": "object",
            "required": [
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "additionalProperties": false,
            "properties": {
              "1": {
                "type": "string",
                "enum": [
                  "mashing"
                ]
              },
              "2": {
                "type": "string",
                "enum": [
                  "rest"
                ]
              },
              "3": {
                "type": "string",
                "enum": [
                  "boil"
                ]
              },
              "4": {
                "type": "string",
                "enum": [
                  "fermentation"
                ]
              },
              "5": {
                "type": "string",
                "enum": [
                  "maturation"
                ]
              }
            }
          },
          "mashing": {
            "type": "object",
            "required": [
              "temperature",
              "adds"
            ],
            "additionalProperties": false,
            "properties": {
              "temperature": {
                "$ref": "#/components/schemas/temperature"
              },
              "adds": {
                "type": "object",
                "required": [
                  "water"
                ],
                "additionalProperties": false,
                "properties": {
                  "water": {
                    "type": "object",
                    "required": [
                      "uuid",
                      "water_amount_start"
                    ],
                    "properties": {
                      "uuid": {
                        "$ref": "#/components/schemas/uuid_nullable"
                      },
                      "water_amount_start": {
                        "type": "number",
                        "format": "double"
                      },
                      "extra": {
                        "$ref": "#/components/schemas/extra"
                      }
                    }
                  },
                  "malts": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/maltAdd"
                    }
                  },
                  "extra": {
                    "$ref": "#/components/schemas/extra"
                  }
                }
              },
              "extra": {
                "$ref": "#/components/schemas/extra"
              }
            }
          },
          "rest": {
            "type": "object",
            "required": [
              "water_amount_addition",
              "steps"
            ],
            "additionalProperties": false,
            "properties": {
              "water_amount_addition": {
                "$ref": "#/components/schemas/amount"
              },
              "steps": {
                "type": "array",
                "maxItems": 10,
                "items": {
                  "type": "object",
                  "required": [
                    "duration",
                    "temperature"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "duration": {
                      "$ref": "#/components/schemas/duration"
                    },
                    "temperature": {
                      "$ref": "#/components/schemas/temperature"
                    },
                    "extra": {
                      "$ref": "#/components/schemas/extra"
                    }
                  }
                }
              },
              "extra": {
                "$ref": "#/components/schemas/extra"
              }
            }
          },
          "boil": {
            "type": "object",
            "required": [
              "boiling_duration",
              "boiling_temperature",
              "steps"
            ],
            "additionalProperties": false,
            "properties": {
              "boiling_duration": {
                "$ref": "#/components/schemas/duration"
              },
              "boiling_temperature": {
                "$ref": "#/components/schemas/temperature"
              },
              "steps": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "duration",
                    "adds"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "duration": {
                      "$ref": "#/components/schemas/duration"
                    },
                    "adds": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "hops": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/hopBoilingAdd"
                          }
                        },
                        "ingredients": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ingredientBoilingAdd"
                          }
                        }
                      }
                    },
                    "extra": {
                      "$ref": "#/components/schemas/extra"
                    }
                  }
                }
              },
              "extra": {
                "$ref": "#/components/schemas/extra"
              }
            }
          },
          "fermentation": {
            "type": "object",
            "required": [
              "steps",
              "adds"
            ],
            "properties": {
              "steps": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/fermentationStep"
                }
              },
              "adds": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "yeasts": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/yeastFermentationAdd"
                    }
                  },
                  "hops": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/hopFermentationAdd"
                    }
                  },
                  "ingredients": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/ingredientFermentationAdd"
                    }
                  },
                  "extra": {
                    "$ref": "#/components/schemas/extra"
                  }
                }
              },
              "extra": {
                "$ref": "#/components/schemas/extra"
              }
            }
          },
          "maturation": {
            "type": "object",
            "required": [
              "steps"
            ],
            "additionalProperties": false,
            "properties": {
              "steps": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/maturationStep"
                }
              },
              "extra": {
                "$ref": "#/components/schemas/extra"
              }
            }
          },
          "references": {
            "description": "references has keys water_types, malts, hops etc. Each key holds a map of objects of that type. malts for example holds a map of malt uuids as keys and malt objects as values. Restrictions on the keys are not possible in OpenAPI version 3.0.3, so that the malt uuid key is allowed to be any string. Example how references should be structured: references water_types: [...] malts 26960: # No restrictions possible on key 34585 uuid: 26960 property: value property2: value2 26961: # No restrictions possible on key 34585 uuid: 26961 property: value property2: value2",
            "type": "object",
            "properties": {
              "water_types": {
                "type": "object",
                "maxProperties": 1,
                "additionalProperties": {
                  "$ref": "#/components/schemas/waterType"
                }
              },
              "malts": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/malt"
                }
              },
              "hops": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/hop"
                }
              },
              "ingredients": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/ingredient"
                }
              },
              "yeasts": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/yeast"
                }
              }
            }
          }
        }
      },
      "recipe": {
        "type": "object",
        "required": [
          "uuid",
          "parent_uuid",
          "name",
          "description",
          "comments",
          "style",
          "bitterness",
          "color",
          "water_recast",
          "water_specific_gravity",
          "brewing_set_active",
          "country",
          "created_on",
          "update_on",
          "content_version",
          "machine_type",
          "owner",
          "brewer",
          "schema_version",
          "phases",
          "mashing",
          "rest",
          "boil",
          "fermentation",
          "maturation",
          "references"
        ],
        "additionalProperties": false,
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "parent_uuid": {
            "$ref": "#/components/schemas/uuid_nullable"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255
          },
          "description": {
            "type": "string"
          },
          "comments": {
            "type": "string",
            "maxLength": 999
          },
          "style": {
            "type": "string",
            "maxLength": 255,
            "nullable": true
          },
          "bitterness": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "color": {
            "$ref": "#/components/schemas/color"
          },
          "water_recast": {
            "type": "integer",
            "minimum": 0,
            "maximum": 99999999999,
            "nullable": true
          },
          "water_specific_gravity": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "brewing_set_active": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1,
            "nullable": true
          },
          "country": {
            "type": "string",
            "pattern": "^(A(D|E|F|G|I|L|M|N|O|R|S|T|Q|U|W|X|Z)|B(A|B|D|E|F|G|H|I|J|L|M|N|O|R|S|T|V|W|Y|Z)|C(A|C|D|F|G|H|I|K|L|M|N|O|R|U|V|X|Y|Z)|D(E|J|K|M|O|Z)|E(C|E|G|H|R|S|T)|F(I|J|K|M|O|R)|G(A|B|D|E|F|G|H|I|L|M|N|P|Q|R|S|T|U|W|Y)|H(K|M|N|R|T|U)|I(D|E|Q|L|M|N|O|R|S|T)|J(E|M|O|P)|K(E|G|H|I|M|N|P|R|W|Y|Z)|L(A|B|C|I|K|R|S|T|U|V|Y)|M(A|C|D|E|F|G|H|K|L|M|N|O|Q|P|R|S|T|U|V|W|X|Y|Z)|N(A|C|E|F|G|I|L|O|P|R|U|Z)|OM|P(A|E|F|G|H|K|L|M|N|R|S|T|W|Y)|QA|R(E|O|S|U|W)|S(A|B|C|D|E|G|H|I|J|K|L|M|N|O|R|T|V|Y|Z)|T(C|D|F|G|H|J|K|L|M|N|O|R|T|V|W|Z)|U(A|G|M|S|Y|Z)|V(A|C|E|G|I|N|U)|W(F|S)|Y(E|T)|Z(A|M|W))$",
            "nullable": true
          },
          "created_on": {
            "type": "string",
            "format": "date-time"
          },
          "update_on": {
            "$ref": "#/components/schemas/updateDate"
          },
          "content_version": {
            "$ref": "#/components/schemas/contentVersion"
          },
          "machine_type": {
            "$ref": "#/components/schemas/machineType"
          },
          "owner": {
            "$ref": "#/components/schemas/userReference"
          },
          "brewer": {
            "$ref": "#/components/schemas/userReference"
          },
          "schema_version": {
            "$ref": "#/components/schemas/schemaVersion"
          },
          "extra": {
            "$ref": "#/components/schemas/extra"
          },
          "phases": {
            "type": "object",
            "required": [
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "additionalProperties": false,
            "properties": {
              "1": {
                "type": "string",
                "enum": [
                  "mashing"
                ]
              },
              "2": {
                "type": "string",
                "enum": [
                  "rest"
                ]
              },
              "3": {
                "type": "string",
                "enum": [
                  "boil"
                ]
              },
              "4": {
                "type": "string",
                "enum": [
                  "fermentation"
                ]
              },
              "5": {
                "type": "string",
                "enum": [
                  "maturation"
                ]
              }
            }
          },
          "mashing": {
            "type": "object",
            "required": [
              "temperature",
              "adds"
            ],
            "additionalProperties": false,
            "properties": {
              "temperature": {
                "$ref": "#/components/schemas/temperature"
              },
              "adds": {
                "type": "object",
                "required": [
                  "water"
                ],
                "additionalProperties": false,
                "properties": {
                  "water": {
                    "type": "object",
                    "required": [
                      "uuid",
                      "water_amount_start"
                    ],
                    "properties": {
                      "uuid": {
                        "$ref": "#/components/schemas/uuid_nullable"
                      },
                      "water_amount_start": {
                        "type": "number",
                        "format": "double"
                      },
                      "extra": {
                        "$ref": "#/components/schemas/extra"
                      }
                    }
                  },
                  "malts": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/maltAdd"
                    }
                  },
                  "extra": {
                    "$ref": "#/components/schemas/extra"
                  }
                }
              },
              "extra": {
                "$ref": "#/components/schemas/extra"
              }
            }
          },
          "rest": {
            "type": "object",
            "required": [
              "water_amount_addition",
              "steps"
            ],
            "additionalProperties": false,
            "properties": {
              "water_amount_addition": {
                "$ref": "#/components/schemas/amount"
              },
              "steps": {
                "type": "array",
                "maxItems": 10,
                "items": {
                  "type": "object",
                  "required": [
                    "duration",
                    "temperature"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "duration": {
                      "$ref": "#/components/schemas/duration"
                    },
                    "temperature": {
                      "$ref": "#/components/schemas/temperature"
                    },
                    "extra": {
                      "$ref": "#/components/schemas/extra"
                    }
                  }
                }
              },
              "extra": {
                "$ref": "#/components/schemas/extra"
              }
            }
          },
          "boil": {
            "type": "object",
            "required": [
              "boiling_duration",
              "boiling_temperature",
              "steps"
            ],
            "additionalProperties": false,
            "properties": {
              "boiling_duration": {
                "$ref": "#/components/schemas/duration"
              },
              "boiling_temperature": {
                "$ref": "#/components/schemas/temperature"
              },
              "steps": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "duration",
                    "adds"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "duration": {
                      "$ref": "#/components/schemas/duration"
                    },
                    "adds": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "hops": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/hopBoilingAdd"
                          }
                        },
                        "ingredients": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ingredientBoilingAdd"
                          }
                        }
                      }
                    },
                    "extra": {
                      "$ref": "#/components/schemas/extra"
                    }
                  }
                }
              },
              "extra": {
                "$ref": "#/components/schemas/extra"
              }
            }
          },
          "fermentation": {
            "type": "object",
            "required": [
              "steps",
              "adds"
            ],
            "properties": {
              "steps": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/fermentationStep"
                }
              },
              "adds": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "yeasts": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/yeastFermentationAdd"
                    }
                  },
                  "hops": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/hopFermentationAdd"
                    }
                  },
                  "ingredients": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/ingredientFermentationAdd"
                    }
                  },
                  "extra": {
                    "$ref": "#/components/schemas/extra"
                  }
                }
              },
              "extra": {
                "$ref": "#/components/schemas/extra"
              }
            }
          },
          "maturation": {
            "type": "object",
            "required": [
              "steps"
            ],
            "additionalProperties": false,
            "properties": {
              "steps": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/maturationStep"
                }
              },
              "extra": {
                "$ref": "#/components/schemas/extra"
              }
            }
          },
          "references": {
            "description": "references has keys water_types, malts, hops etc. Each key holds a map of objects of that type. malts for example holds a map of malt uuids as keys and malt objects as values. Restrictions on the keys are not possible in OpenAPI version 3.0.3, so that the malt uuid key is allowed to be any string. Example how references should be structured: references water_types: [...] malts 26960: # No restrictions possible on key 34585 uuid: 26960 property: value property2: value2 26961: # No restrictions possible on key 34585 uuid: 26961 property: value property2: value2",
            "type": "object",
            "properties": {
              "water_types": {
                "type": "object",
                "maxProperties": 1,
                "additionalProperties": {
                  "$ref": "#/components/schemas/waterType"
                }
              },
              "malts": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/malt"
                }
              },
              "hops": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/hop"
                }
              },
              "ingredients": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/ingredient"
                }
              },
              "yeasts": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/yeast"
                }
              }
            }
          }
        }
      },
      "schemaVersion": {
        "type": "integer",
        "minimum": 1,
        "maximum": 99999999999
      },
      "sorting": {
        "type": "integer",
        "minimum": 0,
        "maximum": 99999999999
      },
      "temperature": {
        "type": "number",
        "format": "double"
      },
      "tokenAndUserId": {
        "type": "object",
        "required": [
          "token",
          "userid",
          "uuid",
          "username",
          "name",
          "familyname",
          "subscription_id",
          "subscription_end"
        ],
        "properties": {
          "token": {
            "$ref": "#/components/schemas/token"
          },
          "userid": {
            "type": "integer",
            "minimum": 0,
            "maximum": 99999999999
          },
          "uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "username": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "name": {
            "type": "string",
            "maxLength": 255,
            "nullable": true
          },
          "familyname": {
            "type": "string",
            "maxLength": 255,
            "nullable": true
          },
          "subscription_id": {
            "type": "string",
            "maxLength": 128,
            "nullable": true
          },
          "subscription_end": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "token": {
        "type": "string",
        "minLength": 1
      },
      "tokenStatusRequest": {
        "type": "object",
        "required": [
          "token"
        ],
        "properties": {
          "token": {
            "$ref": "#/components/schemas/token"
          }
        },
        "additionalProperties": false
      },
      "tokenStatusResponse": {
        "type": "object",
        "required": [
          "status",
          "userid",
          "has_valid_subscription",
          "validation_date"
        ],
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "valid"
            ]
          },
          "userid": {
            "type": "integer",
            "minimum": 0,
            "maximum": 99999999999
          },
          "has_valid_subscription": {
            "type": "boolean"
          },
          "validation_date": {
            "$ref": "#/components/schemas/millisecondsTimestamp"
          }
        },
        "additionalProperties": false
      },
      "updateDate": {
        "type": "string",
        "format": "date-time"
      },
      "usernameAndPassword": {
        "type": "object",
        "required": [
          "username",
          "pass"
        ],
        "properties": {
          "username": {
            "type": "string",
            "minLength": 1
          },
          "pass": {
            "type": "string",
            "minLength": 1
          }
        },
        "additionalProperties": false
      },
      "userReference": {
        "type": "object",
        "required": [
          "uuid",
          "username",
          "name",
          "familyname"
        ],
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "username": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "name": {
            "type": "string",
            "maxLength": 255,
            "nullable": true
          },
          "familyname": {
            "type": "string",
            "maxLength": 255,
            "nullable": true
          },
          "extra": {
            "$ref": "#/components/schemas/extra"
          }
        },
        "additionalProperties": false
      },
      "user": {
        "type": "object",
        "required": [
          "id",
          "username",
          "name",
          "familyname",
          "created_on",
          "creation_date",
          "update_on",
          "content_version",
          "uuid",
          "subscription_id",
          "subscription_end",
          "schema_version"
        ],
        "properties": {
          "id": {
            "type": "integer",
            "minimum": 0,
            "maximum": 99999999999
          },
          "username": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "name": {
            "type": "string",
            "maxLength": 255,
            "nullable": true
          },
          "familyname": {
            "type": "string",
            "maxLength": 255,
            "nullable": true
          },
          "created_on": {
            "$ref": "#/components/schemas/creationDate"
          },
          "creation_date": {
            "$ref": "#/components/schemas/creationDate"
          },
          "update_on": {
            "$ref": "#/components/schemas/updateDate"
          },
          "content_version": {
            "$ref": "#/components/schemas/contentVersion"
          },
          "uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "subscription_id": {
            "type": "string",
            "maxLength": 128,
            "nullable": true
          },
          "subscription_end": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "schema_version": {
            "$ref": "#/components/schemas/schemaVersion"
          }
        },
        "additionalProperties": false
      },
      "uuid_nullable": {
        "type": "string",
        "minLength": 36,
        "maxLength": 36,
        "nullable": true
      },
      "uuid": {
        "type": "string",
        "minLength": 36,
        "maxLength": 36
      },
      "waterType": {
        "type": "object",
        "required": [
          "uuid",
          "name",
          "owner_uuid",
          "public",
          "deleted",
          "creation_date",
          "update_on",
          "content_version",
          "schema_version"
        ],
        "additionalProperties": false,
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "owner_uuid": {
            "$ref": "#/components/schemas/uuid_nullable"
          },
          "public": {
            "$ref": "#/components/schemas/public"
          },
          "deleted": {
            "$ref": "#/components/schemas/deleted"
          },
          "creation_date": {
            "$ref": "#/components/schemas/creationDate"
          },
          "update_on": {
            "$ref": "#/components/schemas/updateDate"
          },
          "content_version": {
            "$ref": "#/components/schemas/contentVersion"
          },
          "schema_version": {
            "$ref": "#/components/schemas/schemaVersion"
          }
        }
      },
      "yeastFermentationAdd": {
        "type": "object",
        "required": [
          "uuid",
          "yeast_uuid",
          "sorting",
          "amount",
          "time",
          "creation_date",
          "update_on",
          "schema_version"
        ],
        "additionalProperties": false,
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "yeast_uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "sorting": {
            "$ref": "#/components/schemas/sorting"
          },
          "amount": {
            "$ref": "#/components/schemas/amount"
          },
          "time": {
            "type": "string",
            "maxLength": 50
          },
          "creation_date": {
            "$ref": "#/components/schemas/creationDate"
          },
          "update_on": {
            "$ref": "#/components/schemas/updateDate"
          },
          "content_version": {
            "$ref": "#/components/schemas/contentVersion"
          },
          "schema_version": {
            "$ref": "#/components/schemas/schemaVersion"
          },
          "extra": {
            "$ref": "#/components/schemas/extra"
          }
        }
      },
      "yeast": {
        "type": "object",
        "required": [
          "uuid",
          "name",
          "owner_uuid",
          "public",
          "deleted",
          "creation_date",
          "update_on",
          "content_version",
          "schema_version"
        ],
        "additionalProperties": false,
        "properties": {
          "uuid": {
            "$ref": "#/components/schemas/uuid"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "owner_uuid": {
            "$ref": "#/components/schemas/uuid_nullable"
          },
          "public": {
            "$ref": "#/components/schemas/public"
          },
          "deleted": {
            "$ref": "#/components/schemas/deleted"
          },
          "creation_date": {
            "$ref": "#/components/schemas/creationDate"
          },
          "update_on": {
            "$ref": "#/components/schemas/updateDate"
          },
          "content_version": {
            "$ref": "#/components/schemas/contentVersion"
          },
          "schema_version": {
            "$ref": "#/components/schemas/schemaVersion"
          }
        }
      }
    },
    "parameters": {
      "aborted": {
        "name": "aborted",
        "in": "query",
        "description": "Return aborted processes if set to 1, defaults to 0",
        "required": false,
        "schema": {
          "type": "integer",
          "minimum": 0,
          "maximum": 1
        }
      },
      "dryRun": {
        "name": "dryRun",
        "in": "query",
        "description": "Default when not set is 0. If set to 1 the operation is run as dry run, no data will be persisted. As much code as possible will be executed by the operation until the point is reached where data has to be persisted in order to proceed with the operation. This way input data can be tested and checked.",
        "required": false,
        "schema": {
          "type": "integer",
          "minimum": 0,
          "maximum": 1
        }
      },
      "firmwareMachineId": {
        "name": "machineId",
        "in": "query",
        "description": "ID of a machine",
        "required": false,
        "schema": {
          "type": "string"
        }
      },
      "firmwareType": {
        "name": "type",
        "in": "query",
        "description": "Firmware type string",
        "required": false,
        "schema": {
          "type": "string"
        }
      },
      "firmwareVersion": {
        "name": "version",
        "in": "query",
        "description": "Firmware version string",
        "required": false,
        "schema": {
          "type": "string"
        }
      },
      "fromTimestamp": {
        "name": "from",
        "in": "query",
        "description": "from timestamp",
        "required": false,
        "schema": {
          "type": "string",
          "format": "date-time"
        }
      },
      "granularity": {
        "name": "granularity",
        "in": "query",
        "description": "How much data should be sifted out, 0 or not given means all data, the bigger the value, the lower the resolution",
        "required": false,
        "schema": {
          "type": "integer",
          "minimum": 0
        }
      },
      "includePublic": {
        "name": "includePublic",
        "in": "query",
        "description": "Omit or set to 0 to retrieve all private recipes owned by the current user. Set to 1 to retrieve all private and public recipes owned by the current user as well as all public recipes imported by the user.",
        "required": false,
        "schema": {
          "type": "integer",
          "minimum": 0,
          "maximum": 1
        }
      },
      "machineSize": {
        "name": "size",
        "in": "query",
        "description": "Machine size",
        "required": false,
        "schema": {
          "oneOf": [
            {
              "type": "integer",
              "minimum": 1,
              "maximum": 99999999999
            },
            {
              "type": "string",
              "enum": [
                "null"
              ]
            }
          ]
        }
      },
      "machineUserDataId": {
        "name": "userdataid",
        "in": "path",
        "description": "UUID of the object to fetch",
        "required": true,
        "schema": {
          "$ref": "#/components/schemas/machineTimeseriesId"
        }
      },
      "machineUuid": {
        "name": "uuid",
        "in": "path",
        "description": "UUID of the object to fetch",
        "required": true,
        "schema": {
          "type": "string",
          "minLength": 1,
          "maxLength": 64
        }
      },
      "processId": {
        "name": "id",
        "in": "query",
        "description": "machine process id",
        "required": false,
        "schema": {
          "type": "string"
        }
      },
      "recipeType": {
        "name": "recipeType",
        "in": "query",
        "description": "Comma separated list of recipe type values: \"0\", \"1\" or \"fermentable\". \"0\" and \"1\" are the values of field recipe_type stored for the recipe. Value \"fermentable\" is a virtual value only available in this operation which is used to filter for recipes with fermentation part. This filter is an OR filter, i.e. \"0,fermentable\" returns recipes with recipe_type = \"0\" or with fermentation part.",
        "required": false,
        "style": "form",
        "explode": false,
        "allowReserved": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "0",
              "1",
              "fermentable"
            ]
          }
        }
      },
      "toTimestamp": {
        "name": "to",
        "in": "query",
        "description": "to timestamp",
        "required": false,
        "schema": {
          "type": "string",
          "format": "date-time"
        }
      },
      "type": {
        "name": "type",
        "in": "query",
        "description": "a type",
        "required": false,
        "schema": {
          "type": "string"
        }
      },
      "uuid": {
        "name": "uuid",
        "in": "path",
        "description": "UUID of the object to fetch",
        "required": true,
        "schema": {
          "$ref": "#/components/schemas/uuid"
        }
      }
    },
    "responses": {
      "default": {
        "description": "Something went wrong"
      },
      "http200DryRun": {
        "description": "HTTP 200 OK for succeeded dry run",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "message"
              ],
              "properties": {
                "message": {
                  "type": "string",
                  "enum": [
                    "DRY RUN SUCCEEDED"
                  ]
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "http200NormalOrDryRun": {
        "description": "HTTP 200 OK for normal run or succeeded dry run",
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "type": "object",
                  "required": [
                    "message"
                  ],
                  "properties": {
                    "message": {
                      "type": "string",
                      "enum": [
                        "HTTP 200 OK"
                      ]
                    }
                  },
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "required": [
                    "message"
                  ],
                  "properties": {
                    "message": {
                      "type": "string",
                      "enum": [
                        "DRY RUN SUCCEEDED"
                      ]
                    }
                  },
                  "additionalProperties": false
                }
              ]
            }
          }
        }
      },
      "http200": {
        "description": "HTTP 200 OK",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "message"
              ],
              "properties": {
                "message": {
                  "type": "string",
                  "enum": [
                    "HTTP 200 OK"
                  ]
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "http201": {
        "description": "HTTP 201 Created",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "message"
              ],
              "properties": {
                "message": {
                  "type": "string",
                  "enum": [
                    "HTTP 201 Created"
                  ]
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "http201UUID": {
        "description": "HTTP 201 Created",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "uuid"
              ],
              "properties": {
                "uuid": {
                  "$ref": "#/components/schemas/uuid"
                }
              }
            }
          }
        }
      },
      "http400": {
        "description": "HTTP 400",
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "type": "object",
                  "required": [
                    "message",
                    "errors"
                  ],
                  "properties": {
                    "message": {
                      "type": "string",
                      "minLength": 1
                    },
                    "errors": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "path",
                          "message",
                          "errorCode"
                        ],
                        "properties": {
                          "path": {
                            "type": "string",
                            "minLength": 1
                          },
                          "message": {
                            "type": "string",
                            "minLength": 1
                          },
                          "errorCode": {
                            "type": "string",
                            "pattern": "openapi.validation"
                          }
                        }
                      }
                    }
                  },
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "oneOf": [
                        {
                          "type": "string",
                          "pattern": "^Parsing of dates in incoming user object failed."
                        },
                        {
                          "type": "string",
                          "pattern": "^User UUID from URL path and user UUID from user JSON in body do not match$"
                        },
                        {
                          "type": "string",
                          "pattern": "^User of user object and current user do not match$"
                        },
                        {
                          "type": "string",
                          "pattern": "^User ID in Paypal subscription response does not match MySpeidel user ID$"
                        },
                        {
                          "type": "string",
                          "pattern": "^Resource already exists: Recipe with UUID \"[^ ]+\"$"
                        },
                        {
                          "type": "string",
                          "pattern": "^Resource already exists: Table [^ ]+, UUID \"[^ ]+\"$"
                        },
                        {
                          "type": "string",
                          "pattern": "^Recipe owner and current user do not match$"
                        },
                        {
                          "type": "string",
                          "pattern": "^Owner of one new ingredient and current user do not match$"
                        },
                        {
                          "type": "string",
                          "pattern": "^Existing recipe is not private and cannot be updated$"
                        },
                        {
                          "type": "string",
                          "pattern": "^Current user is not allowed to update at least one ingredient in recipe. Details: Cannot update existing ingredient. Current user is not owner of the ingredient: Record [^ ]+ in table [^ ]+$"
                        },
                        {
                          "type": "string",
                          "pattern": "^Current user is not allowed to update at least one ingredient in recipe. Details: Cannot update existing ingredient. Ingredient is public: Record [^ ]+ in table [^ ]+$"
                        },
                        {
                          "type": "string",
                          "pattern": "^Current user is not allowed to update at least one ingredient in recipe. Details: Cannot update existing ingredient. Ingredient is referenced by more than one recipe: Record [^ ]+ in table [^ ]+$"
                        },
                        {
                          "type": "string",
                          "pattern": "^Recipe UUID from URL path and recipe UUID from recipe JSON in body do not match$"
                        },
                        {
                          "type": "string",
                          "pattern": "^At least one UUID is used more than once for different records. Details: Detected duplicated UUID [^ ]+ for different records in recipe [^ ]+.$"
                        },
                        {
                          "type": "string",
                          "pattern": "^Ingredients integrity error in incoming recipe model: At least one ingredient from references is not used in ingredient add or at least one ingredient add does not reference an ingredient from references. Details: Recipe [^ ]+: Record for table [^ ]+ with UUID [^ ]+ from recipe.references is not used as ingredient add within the recipe.$"
                        },
                        {
                          "type": "string",
                          "pattern": "^Ingredients integrity error in incoming recipe model: At least one ingredient from references is not used in ingredient add or at least one ingredient add does not reference an ingredient from references. Details: Recipe [^ ]+: Ingredient add from table [^ ]+ with UUID [^ ]+ references an record from table [^ ]+ with UUID [^ ]+ that is not included in recipe.references.$"
                        },
                        {
                          "type": "string",
                          "pattern": "^Ingredients integrity error in incoming recipe model: At least one ingredient from references is not used in ingredient add or at least one ingredient add does not reference an ingredient from references. Details: Recipe [^ ]+: Reference for water_type is broken. recipe.mashing.adds.water.uuid does not match record in references.water_types.$"
                        },
                        {
                          "type": "string",
                          "pattern": "^Fermentation recipe \\(recipe_type = 1\\) does not match schema for fermentation recipes: "
                        },
                        {
                          "type": "string",
                          "pattern": "^Existing recipes recipes_type can not be changed. Existing recipe_type: \"(0|1)\". Incoming recipe_type: \"(0|1|undefined)\"$"
                        }
                      ]
                    }
                  },
                  "additionalProperties": false
                }
              ]
            }
          }
        }
      },
      "http401": {
        "description": "HTTP 401 Unauthorized",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "error"
              ],
              "properties": {
                "error": {
                  "type": "string",
                  "enum": [
                    "HTTP 401 Unauthorized"
                  ]
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "http402": {
        "description": "HTTP 402 Payment Required",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "error"
              ],
              "properties": {
                "error": {
                  "type": "string",
                  "enum": [
                    "HTTP 402 Payment Required"
                  ]
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "http404": {
        "description": "HTTP 404 Not found",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "error"
              ],
              "properties": {
                "error": {
                  "type": "string",
                  "enum": [
                    "HTTP 404 Not found"
                  ]
                }
              },
              "additionalProperties": false
            }
          }
        }
      }
    },
    "examples": {
      "recipe": {
        "value": {
          "uuid": 13920,
          "parent_uuid": 34968,
          "name": "TEST",
          "description": "bestes Rezept aller Zeiten",
          "comments": "Toller Kommentar zum gesamten Rezept",
          "style": "IPA",
          "bitterness": 86.7,
          "color": 6.4,
          "water_recast": 6,
          "water_specific_gravity": 13.5,
          "brewing_set_active": 1,
          "country": "DE",
          "created_on": "2020-02-20T00:00:00Z",
          "update_on": "2020-02-24T10:49:23Z",
          "content_version": 7,
          "machine_type": {
            "uuid": 4860,
            "text": "Braumeister 10 Liter",
            "size": 10,
            "extra": {
              "key": "value of any type"
            }
          },
          "owner": {
            "uuid": 13894,
            "username": "mmustermann",
            "name": "Max",
            "familyname": "Mustermann",
            "extra": {
              "key": "value of any type"
            }
          },
          "brewer": {
            "uuid": 13478,
            "username": "ffrisch",
            "name": "Fritz",
            "familyname": "Frisch",
            "extra": {
              "key": "value of any type"
            }
          },
          "schema_version": 1,
          "extra": {
            "key": "value of any type"
          },
          "phases": {
            "1": "mashing",
            "2": "rest",
            "3": "boil",
            "4": "fermentation",
            "5": "maturation"
          },
          "mashing": {
            "temperature": 54,
            "adds": {
              "water": {
                "uuid": 34585,
                "water_amount_start": 20,
                "extra": {
                  "key": "value of any type"
                }
              },
              "malts": [
                {
                  "uuid": 11111,
                  "malt_uuid": 26960,
                  "amount": 12000,
                  "color": 6.3,
                  "creation_date": "2020-02-20T00:00:00Z",
                  "update_on": "2020-02-24T10:49:23Z",
                  "content_version": 7,
                  "schema_version": 1,
                  "extra": {
                    "key": "value of any type"
                  }
                },
                {
                  "uuid": 22222,
                  "malt_uuid": 26961,
                  "amount": 13000,
                  "color": 6.4,
                  "creation_date": "2020-02-20T00:00:00Z",
                  "update_on": "2020-02-24T10:49:23Z",
                  "content_version": 7,
                  "schema_version": 1,
                  "extra": {
                    "key": "value of any type"
                  }
                },
                {
                  "uuid": 33333,
                  "malt_uuid": 26962,
                  "amount": 14000,
                  "color": 6.5,
                  "creation_date": "2020-02-20T00:00:00Z",
                  "update_on": "2020-02-24T10:49:23Z",
                  "content_version": 7,
                  "schema_version": 1,
                  "extra": {
                    "key": "value of any type"
                  }
                }
              ],
              "extra": {
                "key": "value of any type"
              }
            },
            "extra": {
              "key": "value of any type"
            }
          },
          "rest": {
            "water_amount_addition": 5,
            "steps": [
              {
                "duration": 5,
                "temperature": 54,
                "extra": {
                  "key": "value of any type"
                }
              },
              {
                "duration": 1,
                "temperature": 53,
                "extra": {
                  "key": "value of any type"
                }
              },
              {
                "duration": 4,
                "temperature": 58,
                "extra": {
                  "key": "value of any type"
                }
              },
              {
                "duration": 55,
                "temperature": 61,
                "extra": {
                  "key": "value of any type"
                }
              },
              {
                "duration": 54,
                "temperature": 64,
                "extra": {
                  "key": "value of any type"
                }
              }
            ],
            "extra": {
              "key": "value of any type"
            }
          },
          "boil": {
            "boiling_duration": 20,
            "boiling_temperature": 85,
            "steps": [
              {
                "duration": 203,
                "adds": {
                  "hops": [
                    {
                      "uuid": 44444,
                      "hop_uuid": 20437,
                      "amount": 3,
                      "acid": 5,
                      "hopping_step_number": 1,
                      "creation_date": "2020-02-20T00:00:00Z",
                      "update_on": "2020-02-24T10:49:23Z",
                      "content_version": 7,
                      "schema_version": 1,
                      "extra": {
                        "key": "value of any type"
                      }
                    }
                  ]
                },
                "extra": {
                  "key": "value of any type"
                }
              },
              {
                "duration": 120,
                "adds": {
                  "hops": [
                    {
                      "uuid": 55555,
                      "hop_uuid": 20438,
                      "amount": 19,
                      "acid": 9,
                      "hopping_step_number": 2,
                      "creation_date": "2020-02-20T00:00:00Z",
                      "update_on": "2020-02-24T10:49:23Z",
                      "content_version": 7,
                      "schema_version": 1,
                      "extra": {
                        "key": "value of any type"
                      }
                    }
                  ],
                  "ingredients": [
                    {
                      "uuid": 66666,
                      "ingredient_uuid": 18,
                      "amount": 10,
                      "acid": 2,
                      "hopping_step_number": 2,
                      "creation_date": "2020-02-20T00:00:00Z",
                      "update_on": "2020-02-24T10:49:23Z",
                      "content_version": 7,
                      "schema_version": 1,
                      "extra": {
                        "key": "value of any type"
                      }
                    },
                    {
                      "uuid": 77777,
                      "ingredient_uuid": 20,
                      "amount": 11,
                      "acid": 3,
                      "hopping_step_number": 2,
                      "creation_date": "2020-02-20T00:00:00Z",
                      "update_on": "2020-02-24T10:49:23Z",
                      "content_version": 7,
                      "schema_version": 1,
                      "extra": {
                        "key": "value of any type"
                      }
                    }
                  ]
                },
                "extra": {
                  "key": "value of any type"
                }
              },
              {
                "duration": 20,
                "adds": {
                  "hops": [
                    {
                      "uuid": 88888,
                      "hop_uuid": 20436,
                      "amount": 10,
                      "acid": 6,
                      "hopping_step_number": 3,
                      "creation_date": "2020-02-20T00:00:00Z",
                      "update_on": "2020-02-24T10:49:23Z",
                      "content_version": 7,
                      "schema_version": 1,
                      "extra": {
                        "key": "value of any type"
                      }
                    },
                    {
                      "uuid": 99999,
                      "hop_uuid": 20437,
                      "amount": 6,
                      "acid": 7,
                      "hopping_step_number": 3,
                      "creation_date": "2020-02-20T00:00:00Z",
                      "update_on": "2020-02-24T10:49:23Z",
                      "content_version": 7,
                      "schema_version": 1,
                      "extra": {
                        "key": "value of any type"
                      }
                    }
                  ],
                  "ingredients": [
                    {
                      "uuid": 10001,
                      "ingredient_uuid": 18,
                      "amount": 7,
                      "acid": 8,
                      "hopping_step_number": 3,
                      "creation_date": "2020-02-20T00:00:00Z",
                      "update_on": "2020-02-24T10:49:23Z",
                      "content_version": 7,
                      "schema_version": 1,
                      "extra": {
                        "key": "value of any type"
                      }
                    }
                  ]
                },
                "extra": {
                  "key": "value of any type"
                }
              }
            ],
            "extra": {
              "key": "value of any type"
            }
          },
          "fermentation": {
            "steps": [
              {
                "uuid": 10002,
                "sorting": 1,
                "temperature": 21,
                "duration": 120,
                "time": 2880,
                "creation_date": "2020-02-20T00:00:00Z",
                "update_on": "2020-02-24T10:49:23Z",
                "content_version": 7,
                "schema_version": 1,
                "extra": {
                  "key": "value of any type"
                }
              },
              {
                "uuid": 10003,
                "sorting": 2,
                "temperature": 22,
                "duration": 60,
                "time": 1440,
                "creation_date": "2020-02-20T00:00:00Z",
                "update_on": "2020-02-24T10:49:23Z",
                "content_version": 7,
                "schema_version": 1,
                "extra": {
                  "key": "value of any type"
                }
              }
            ],
            "adds": {
              "yeasts": [
                {
                  "uuid": 10004,
                  "yeast_uuid": 10297,
                  "sorting": 1,
                  "amount": 85,
                  "time": "immer",
                  "creation_date": "2020-02-20T00:00:00Z",
                  "update_on": "2020-02-24T10:49:23Z",
                  "content_version": 7,
                  "schema_version": 1,
                  "extra": {
                    "key": "value of any type"
                  }
                },
                {
                  "uuid": 10005,
                  "yeast_uuid": 10297,
                  "sorting": 2,
                  "amount": 5,
                  "time": "demnaechst",
                  "creation_date": "2020-02-20T00:00:00Z",
                  "update_on": "2020-02-24T10:49:23Z",
                  "content_version": 7,
                  "schema_version": 1,
                  "extra": {
                    "key": "value of any type"
                  }
                },
                {
                  "uuid": 10006,
                  "yeast_uuid": 10298,
                  "sorting": 3,
                  "amount": 66,
                  "time": "jetzt",
                  "creation_date": "2020-02-20T00:00:00Z",
                  "update_on": "2020-02-24T10:49:23Z",
                  "content_version": 7,
                  "schema_version": 1,
                  "extra": {
                    "key": "value of any type"
                  }
                }
              ],
              "hops": [
                {
                  "uuid": 10007,
                  "hop_uuid": 20438,
                  "sorting": 1,
                  "amount": 36,
                  "time": "dazwischen",
                  "creation_date": "2020-02-20T00:00:00Z",
                  "update_on": "2020-02-24T10:49:23Z",
                  "content_version": 7,
                  "schema_version": 1,
                  "extra": {
                    "key": "value of any type"
                  }
                },
                {
                  "uuid": 10008,
                  "hop_uuid": 20438,
                  "sorting": 2,
                  "amount": 10,
                  "time": "immer mal wieder",
                  "creation_date": "2020-02-20T00:00:00Z",
                  "update_on": "2020-02-24T10:49:23Z",
                  "content_version": 7,
                  "schema_version": 1,
                  "extra": {
                    "key": "value of any type"
                  }
                }
              ],
              "ingredients": [
                {
                  "uuid": 10009,
                  "ingredient_uuid": 20,
                  "sorting": 1,
                  "amount": 23,
                  "time": "nie",
                  "creation_date": "2020-02-20T00:00:00Z",
                  "update_on": "2020-02-24T10:49:23Z",
                  "content_version": 7,
                  "schema_version": 1,
                  "extra": {
                    "key": "value of any type"
                  }
                },
                {
                  "uuid": 10010,
                  "ingredient_uuid": 19,
                  "sorting": 2,
                  "amount": 26,
                  "time": "ab und an",
                  "creation_date": "2020-02-20T00:00:00Z",
                  "update_on": "2020-02-24T10:49:23Z",
                  "content_version": 7,
                  "schema_version": 1,
                  "extra": {
                    "key": "value of any type"
                  }
                }
              ],
              "extra": {
                "key": "value of any type"
              }
            },
            "extra": {
              "key": "value of any type"
            }
          },
          "maturation": {
            "steps": [
              {
                "uuid": 10011,
                "sorting": 1,
                "temperature": 36,
                "duration": 7200,
                "pressure": 13,
                "creation_date": "2020-02-20T00:00:00Z",
                "update_on": "2020-02-24T10:49:23Z",
                "content_version": 7,
                "schema_version": 1,
                "extra": {
                  "key": "value of any type"
                }
              },
              {
                "uuid": 10012,
                "sorting": 2,
                "temperature": 40,
                "duration": 2880,
                "pressure": 100,
                "creation_date": "2020-02-20T00:00:00Z",
                "update_on": "2020-02-24T10:49:23Z",
                "content_version": 7,
                "schema_version": 1,
                "extra": {
                  "key": "value of any type"
                }
              }
            ],
            "extra": {
              "key": "value of any type"
            }
          },
          "references": {
            "water_types": {
              "34585": {
                "uuid": 34585,
                "name": "Leitungswasser",
                "owner_uuid": 49503,
                "public": 1,
                "deleted": 0,
                "creation_date": "2020-02-20T00:00:00Z",
                "update_on": "2020-02-24T10:49:23Z",
                "content_version": 7,
                "schema_version": 1
              }
            },
            "malts": {
              "26960": {
                "uuid": 26960,
                "name": "neues Malz",
                "acid": 0,
                "color": 6.3,
                "owner_uuid": 49503,
                "public": 1,
                "deleted": 0,
                "creation_date": "2020-02-20T00:00:00Z",
                "update_on": "2020-02-24T10:49:23Z",
                "content_version": 7,
                "schema_version": 1
              },
              "26961": {
                "uuid": 26961,
                "name": "neues Malz 2",
                "acid": 0,
                "color": 6.4,
                "owner_uuid": 49503,
                "public": 1,
                "deleted": 0,
                "creation_date": "2020-02-20T00:00:00Z",
                "update_on": "2020-02-24T10:49:23Z",
                "content_version": 7,
                "schema_version": 1
              },
              "26962": {
                "uuid": 26961,
                "name": "neues Malz 3",
                "acid": 0,
                "color": 6.5,
                "owner_uuid": 49503,
                "public": 1,
                "deleted": 0,
                "creation_date": "2020-02-20T00:00:00Z",
                "update_on": "2020-02-24T10:49:23Z",
                "content_version": 7,
                "schema_version": 1
              }
            },
            "hops": {
              "20436": {
                "uuid": 20436,
                "name": "neuer Hopfen",
                "color": 6.3,
                "acid": 6,
                "owner_uuid": 49503,
                "public": 1,
                "deleted": 0,
                "creation_date": "2020-02-20T00:00:00Z",
                "update_on": "2020-02-24T10:49:23Z",
                "content_version": 7,
                "schema_version": 1
              },
              "20437": {
                "uuid": 20437,
                "name": "neuer Hopfen 1",
                "color": 6.4,
                "acid": 5,
                "owner_uuid": 49503,
                "public": 1,
                "deleted": 0,
                "creation_date": "2020-02-20T00:00:00Z",
                "update_on": "2020-02-24T10:49:23Z",
                "content_version": 7,
                "schema_version": 1
              },
              "20438": {
                "uuid": 20438,
                "name": "neuer Hopfen 2",
                "color": 6.5,
                "acid": 9,
                "owner_uuid": 49503,
                "public": 1,
                "deleted": 0,
                "creation_date": "2020-02-20T00:00:00Z",
                "update_on": "2020-02-24T10:49:23Z",
                "content_version": 7,
                "schema_version": 1
              }
            },
            "ingredients": {
              "18": {
                "uuid": 18,
                "name": "neue Zutat",
                "owner_uuid": 49503,
                "public": 1,
                "deleted": 0,
                "creation_date": "2020-02-20T00:00:00Z",
                "update_on": "2020-02-24T10:49:23Z",
                "content_version": 7,
                "schema_version": 1
              },
              "19": {
                "uuid": 19,
                "name": "coole Zutat",
                "owner_uuid": 49503,
                "public": 1,
                "deleted": 0,
                "creation_date": "2020-02-20T00:00:00Z",
                "update_on": "2020-02-24T10:49:23Z",
                "content_version": 7,
                "schema_version": 1
              },
              "20": {
                "uuid": 20,
                "name": "neue Zutat 1",
                "owner_uuid": 49503,
                "public": 1,
                "deleted": 0,
                "creation_date": "2020-02-20T00:00:00Z",
                "update_on": "2020-02-24T10:49:23Z",
                "content_version": 7,
                "schema_version": 1
              }
            },
            "yeasts": {
              "10297": {
                "uuid": 10297,
                "name": "neue Hefe",
                "owner_uuid": 49503,
                "public": 1,
                "deleted": 0,
                "creation_date": "2020-02-20T00:00:00Z",
                "update_on": "2020-02-24T10:49:23Z",
                "content_version": 7,
                "schema_version": 1
              },
              "10298": {
                "uuid": 10298,
                "name": "neue Hefe 1",
                "owner_uuid": 49503,
                "public": 1,
                "deleted": 0,
                "creation_date": "2020-02-20T00:00:00Z",
                "update_on": "2020-02-24T10:49:23Z",
                "content_version": 7,
                "schema_version": 1
              }
            }
          }
        }
      }
    },
    "securitySchemes": {
      "token_auth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "session_id"
      }
    }
  },
  "tags": []
}