{ "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": [] }