From 5310dec9de24a817175af4d5bb23f1f3ab646118 Mon Sep 17 00:00:00 2001 From: mfal Date: Tue, 19 Mar 2024 00:08:28 +0000 Subject: [PATCH] feat: update generated client --- packages/mittwald/spec/openapi.json | 15716 +++++++++++++------------- 1 file changed, 7859 insertions(+), 7857 deletions(-) diff --git a/packages/mittwald/spec/openapi.json b/packages/mittwald/spec/openapi.json index 55368f5e..4ddf6efb 100644 --- a/packages/mittwald/spec/openapi.json +++ b/packages/mittwald/spec/openapi.json @@ -3897,6 +3897,213 @@ ], "type": "object" }, + "marketplace.Contributor": { + "properties": { + "customerId": { + "format": "uuid", + "type": "string" + }, + "email": { + "type": "string" + }, + "id": { + "format": "uuid", + "type": "string" + }, + "logoRefId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "state": { + "$ref": "#/components/schemas/marketplace.ContributorState" + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "customerId", + "state", + "name" + ], + "type": "object" + }, + "marketplace.ContributorState": { + "enum": [ + "enabled", + "disabled" + ], + "type": "string" + }, + "marketplace.Extension": { + "properties": { + "context": { + "$ref": "#/components/schemas/marketplace.Context" + }, + "contributorId": { + "format": "uuid", + "type": "string" + }, + "description": { + "type": "string" + }, + "id": { + "format": "uuid", + "type": "string" + }, + "name": { + "type": "string" + }, + "scopes": { + "items": { + "$ref": "#/components/schemas/marketplace.Scope" + }, + "type": "array" + }, + "state": { + "$ref": "#/components/schemas/marketplace.ExtensionState" + }, + "support": { + "$ref": "#/components/schemas/marketplace.SupportMeta" + }, + "tags": { + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array" + } + }, + "required": [ + "id", + "contributorId", + "support", + "state", + "name", + "description", + "tags", + "context", + "scopes" + ], + "type": "object" + }, + "marketplace.Context": { + "enum": [ + "project", + "customer" + ], + "type": "string" + }, + "marketplace.ExtensionInstance": { + "properties": { + "aggregateReference": { + "properties": { + "aggregate": { + "type": "string" + }, + "domain": { + "type": "string" + }, + "id": { + "format": "uuid", + "type": "string" + } + }, + "required": [ + "id", + "domain", + "aggregate" + ], + "type": "object" + }, + "consentedScopes": { + "items": { + "$ref": "#/components/schemas/marketplace.Scope" + }, + "type": "array" + }, + "createdAt": { + "format": "date-time", + "type": "string" + }, + "disabled": { + "default": false, + "type": "boolean" + }, + "extensionId": { + "format": "uuid", + "type": "string" + }, + "id": { + "format": "uuid", + "type": "string" + } + }, + "required": [ + "id", + "extensionId", + "disabled", + "consentedScopes", + "aggregateReference" + ], + "type": "object" + }, + "marketplace.Scope": { + "enum": [ + "mail:read", + "mail:write" + ], + "type": "string" + }, + "marketplace.ExtensionState": { + "enum": [ + "enabled", + "blocked", + "disabled" + ], + "type": "string" + }, + "marketplace.PublicKey": { + "properties": { + "algorithm": { + "example": "Ed25519", + "type": "string" + }, + "key": { + "description": "base64 encoded public key", + "format": "byte", + "type": "string" + }, + "serial": { + "format": "uuid", + "type": "string" + } + }, + "required": [ + "serial", + "algorithm", + "key" + ], + "type": "object" + }, + "marketplace.SupportMeta": { + "properties": { + "email": { + "example": "a.lovelace@example.com", + "type": "string" + }, + "phone": { + "type": "string" + } + }, + "type": "object" + }, "file.FileMeta": { "properties": { "friendlyURL": { @@ -5581,7 +5788,7 @@ "mailmigration.MigrationMailboxJobMigrate": { "properties": { "requirements": { - "$ref": "#/components/schemas/mailmigration.MigrateMailAddressCommandRequirements" + "$ref": "#/components/schemas/mailmigration.MigrateMailboxCommandRequirements" } }, "required": [ @@ -5589,6 +5796,31 @@ ], "type": "object" }, + "mailmigration.MigrateMailboxCommandRequirements": { + "properties": { + "mailbox": { + "$ref": "#/components/schemas/mailmigration.Mailbox" + }, + "projectId": { + "type": "string" + } + }, + "required": [ + "projectId" + ], + "type": "object" + }, + "mailmigration.CheckMigrationIsPossibleErrorAlreadyExistingMailAddress": { + "properties": { + "address": { + "type": "string" + } + }, + "required": [ + "address" + ], + "type": "object" + }, "mailmigration.CheckMigrationIsPossibleErrorAmbiguousMailAddressDelivery": { "properties": { "addresses": { @@ -5651,8 +5883,26 @@ ], "type": "object" }, + "mailmigration.CheckMigrationIsPossibleErrorMissingVerifiedIngress": { + "properties": { + "hostname": { + "format": "idn-hostname", + "type": "string" + } + }, + "required": [ + "hostname" + ], + "type": "object" + }, "mailmigration.PossibleCheckErrors": { "properties": { + "alreadyExistingMailAddress": { + "items": { + "$ref": "#/components/schemas/mailmigration.CheckMigrationIsPossibleErrorAlreadyExistingMailAddress" + }, + "type": "array" + }, "ambiguousMailAddressDelivery": { "items": { "$ref": "#/components/schemas/mailmigration.CheckMigrationIsPossibleErrorAmbiguousMailAddressDelivery" @@ -5689,7 +5939,8 @@ "ambiguousMailboxDelivery", "catchAllMissingAddress", "catchAllTargetWithoutAlias", - "missingVerifiedIngress" + "missingVerifiedIngress", + "alreadyExistingMailAddress" ], "type": "object" }, @@ -7749,231 +8000,12 @@ ], "type": "object" }, - "marketplace.Contributor": { + "commons.Address": { + "type": "object", "properties": { - "customerId": { - "format": "uuid", - "type": "string" - }, - "email": { - "type": "string" - }, - "id": { - "format": "uuid", - "type": "string" - }, - "logoRefId": { - "type": "string" - }, - "name": { - "type": "string" - }, - "phone": { - "type": "string" - }, - "state": { - "$ref": "#/components/schemas/marketplace.ContributorState" - }, - "url": { - "type": "string" - } - }, - "required": [ - "id", - "customerId", - "state", - "name" - ], - "type": "object" - }, - "marketplace.SupportMeta": { - "properties": { - "email": { - "example": "a.lovelace@example.com", - "type": "string" - }, - "phone": { - "type": "string" - } - }, - "type": "object" - }, - "marketplace.Context": { - "enum": [ - "project", - "customer" - ], - "type": "string" - }, - "marketplace.ContributorState": { - "enum": [ - "enabled", - "disabled" - ], - "type": "string" - }, - "marketplace.ExtensionState": { - "enum": [ - "enabled", - "blocked", - "disabled" - ], - "type": "string" - }, - "marketplace.Extension": { - "properties": { - "context": { - "$ref": "#/components/schemas/marketplace.Context" - }, - "contributorId": { - "format": "uuid", - "type": "string" - }, - "description": { - "type": "string" - }, - "id": { - "format": "uuid", - "type": "string" - }, - "name": { - "type": "string" - }, - "scopes": { - "items": { - "$ref": "#/components/schemas/marketplace.Scope" - }, - "type": "array" - }, - "state": { - "$ref": "#/components/schemas/marketplace.ExtensionState" - }, - "support": { - "$ref": "#/components/schemas/marketplace.SupportMeta" - }, - "tags": { - "items": { - "type": "string" - }, - "minItems": 0, - "type": "array" - } - }, - "required": [ - "id", - "contributorId", - "support", - "state", - "name", - "description", - "tags", - "context", - "scopes" - ], - "type": "object" - }, - "marketplace.PublicKey": { - "properties": { - "algorithm": { - "example": "Ed25519", - "type": "string" - }, - "key": { - "description": "base64 encoded public key", - "format": "byte", - "type": "string" - }, - "serial": { - "format": "uuid", - "type": "string" - } - }, - "required": [ - "serial", - "algorithm", - "key" - ], - "type": "object" - }, - "marketplace.ExtensionInstance": { - "properties": { - "aggregateReference": { - "properties": { - "aggregate": { - "type": "string" - }, - "domain": { - "type": "string" - }, - "id": { - "format": "uuid", - "type": "string" - } - }, - "required": [ - "id", - "domain", - "aggregate" - ], - "type": "object" - }, - "consentedScopes": { - "items": { - "$ref": "#/components/schemas/marketplace.Scope" - }, - "type": "array" - }, - "createdAt": { - "format": "date-time", - "type": "string" - }, - "disabled": { - "default": false, - "type": "boolean" - }, - "extensionId": { - "format": "uuid", - "type": "string" - }, - "id": { - "format": "uuid", - "type": "string" - } - }, - "required": [ - "id", - "extensionId", - "disabled", - "consentedScopes", - "aggregateReference" - ], - "type": "object" - }, - "marketplace.Scope": { - "enum": [ - "mail:read", - "mail:write" - ], - "type": "string" - }, - "mailmigration.CheckMigrationIsPossibleErrorMissingVerifiedIngress": { - "properties": { - "hostname": { - "format": "idn-hostname", - "type": "string" - } - }, - "required": [ - "hostname" - ], - "type": "object" - }, - "commons.Address": { - "type": "object", - "properties": { - "street": { - "type": "string", - "example": "Königsberger Straße" + "street": { + "type": "string", + "example": "Königsberger Straße" }, "houseNumber": { "type": "string", @@ -11130,16 +11162,6 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - }, - "required": false - }, "responses": { "200": { "content": { @@ -11303,16 +11325,6 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - }, - "required": false - }, "responses": { "200": { "content": { @@ -11373,16 +11385,6 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - }, - "required": false - }, "responses": { "200": { "content": { @@ -20765,16 +20767,15 @@ ] } }, - "/v2/files": { + "/v2/extension-instances/{extensionInstanceId}/tokens": { "post": { - "operationId": "file-create-file", + "operationId": "extension-authenticate-instance", "parameters": [ { - "in": "header", - "name": "Token", + "in": "path", + "name": "extensionInstanceId", "required": true, "schema": { - "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "format": "uuid", "type": "string" } @@ -20782,125 +20783,240 @@ ], "requestBody": { "content": { - "application/octet-stream": { + "application/json": { "schema": { "properties": { - "file": { - "example": "binary", - "format": "binary", + "extensionInstanceSecret": { + "description": "The latest secret an external application received via lifecycle webhooks.\nNamely ExtensionAddedToContext and ExtensionInstanceSecretRotated.\n", "type": "string" } }, "required": [ - "file" + "extensionInstanceSecret" ], "type": "object" } } - } + }, + "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/file.FileMeta" + "properties": { + "expiry": { + "format": "date-time", + "type": "string" + }, + "publicToken": { + "description": "Set this in the 'x-access-token' header when performing domain actions.", + "type": "string" + } + }, + "required": [ + "publicToken", + "expiry" + ], + "type": "object" } } }, - "description": "Created" + "description": "You received a public token with a short expiry. You can now perform domain actions." }, "400": { "$ref": "#/components/responses/commons.ValidationError" }, - "401": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "406": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "422": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "500": { - "$ref": "#/components/responses/commons.DefaultError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "summary": "Create a File.", - "tags": [ - "File" - ] + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Authenticate your external application using the extensionInstanceSecret.", + "tags": [] } }, - "/v2/files/{fileId}/meta": { - "get": { - "operationId": "file-get-file-meta", + "/v2/extension-instances/{extensionInstanceId}/scopes": { + "patch": { + "operationId": "extension-consent-to-extension-scopes", "parameters": [ { - "description": "ID of the File to get the meta for.", "in": "path", - "name": "fileId", + "name": "extensionInstanceId", "required": true, "schema": { - "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "format": "uuid", "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "consentedScopes": { + "items": { + "$ref": "#/components/schemas/marketplace.Scope" + }, + "type": "array" + } + }, + "required": [ + "consentedScopes" + ], + "type": "object" + } + } + }, + "required": true + }, "responses": { - "200": { + "204": { "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/file.FileMeta" - } + "schema": {} } }, - "description": "OK" + "description": "NoContent" }, "400": { "$ref": "#/components/responses/commons.ValidationError" }, - "401": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "403": { + "default": { "$ref": "#/components/responses/commons.DefaultError" + } + }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Consent to extension scopes.", + "tags": [] + } + }, + "/v2/extension-instances": { + "post": { + "operationId": "extension-create-extension-instance", + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "consentedScopes": { + "items": { + "$ref": "#/components/schemas/marketplace.Scope" + }, + "type": "array" + }, + "context": { + "$ref": "#/components/schemas/marketplace.Context" + }, + "contextId": { + "format": "uuid", + "type": "string" + }, + "extensionId": { + "format": "uuid", + "type": "string" + } + }, + "required": [ + "extensionId", + "consentedScopes", + "context", + "contextId" + ], + "type": "object" + } + } }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "format": "uuid", + "type": "string" + } + }, + "required": [ + "id" + ] + } + } + }, + "description": "The ExtensionInstance ID." }, - "422": { + "400": { "$ref": "#/components/responses/commons.ValidationError" }, - "500": { - "$ref": "#/components/responses/commons.DefaultError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "summary": "Get a File's meta.", - "tags": [ - "File" - ] - } - }, - "/v2/file-upload-tokens/{fileUploadToken}/rules": { + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Create an ExtensionInstance.", + "tags": [] + }, "get": { - "operationId": "file-get-file-upload-token-rules", + "operationId": "extension-list-extension-instances", "parameters": [ { - "description": "FileUploadToken to retrieve rules for.", - "in": "path", - "name": "fileUploadToken", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 1000, + "type": "integer" + } + }, + { + "in": "query", + "name": "skip", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "type": "integer" + } + }, + { + "in": "query", + "name": "context", + "required": true, + "schema": { + "$ref": "#/components/schemas/marketplace.Context" + } + }, + { + "description": "The ID of your customer, project or user.", + "in": "query", + "name": "contextId", "required": true, "schema": { - "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "format": "uuid", "type": "string" } @@ -20911,236 +21027,131 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/file.FileUploadRules" + "items": { + "$ref": "#/components/schemas/marketplace.ExtensionInstance" + }, + "type": "array" } } }, "description": "OK" }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" - }, - "500": { - "$ref": "#/components/responses/commons.DefaultError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "summary": "Get a FileUploadToken's rules.", - "tags": [ - "File" - ] - } - }, - "/v2/file-upload-types/{fileUploadType}/rules": { - "get": { - "operationId": "file-get-file-upload-type-rules", - "parameters": [ + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "List ExtensionInstances.", + "tags": [] + } + }, + "/v2/extension-instances/{extensionInstanceId}": { + "delete": { + "operationId": "extension-delete-extension-instance", + "parameters": [ { - "description": "FileUploadType to retrieve rules for.", "in": "path", - "name": "fileUploadType", + "name": "extensionInstanceId", "required": true, "schema": { - "enum": [ - "avatar", - "conversation" - ], - "example": "avatar", + "format": "uuid", "type": "string" } } ], "responses": { - "200": { + "204": { "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/file.FileUploadRules" - } + "schema": {} } }, - "description": "OK" - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" + "description": "NoContent" }, "404": { "$ref": "#/components/responses/commons.NotFoundError" }, - "500": { - "$ref": "#/components/responses/commons.DefaultError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "summary": "Get a FileUploadType's rules.", - "tags": [ - "File" - ] - } - }, - "/v2/files/{fileId}": { + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Delete an ExtensionInstance.", + "tags": [] + }, "get": { - "operationId": "file-get-file", + "operationId": "extension-get-extension-instance", "parameters": [ { - "description": "ID of the File to be retrieved.", "in": "path", - "name": "fileId", + "name": "extensionInstanceId", "required": true, "schema": { - "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "format": "uuid", "type": "string" } - }, - { - "in": "header", - "name": "Accept", - "schema": { - "default": "application/octet-stream", - "enum": [ - "application/octet-stream", - "text/plain;base64" - ], - "example": "application/octet-stream", - "type": "string" - } - }, - { - "in": "header", - "name": "Content-Disposition", - "schema": { - "default": "inline", - "enum": [ - "inline", - "attachment" - ], - "example": "inline", - "type": "string" - } - }, - { - "description": "Only needed for protected Files.", - "in": "header", - "name": "Token", - "required": false, - "schema": { - "example": "jwt", - "type": "string" - } } ], "responses": { "200": { "content": { - "application/octet-stream": { - "schema": { - "type": "string" - } - }, - "text/plain;base64": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/marketplace.ExtensionInstance" } } }, "description": "OK" }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "401": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, "404": { "$ref": "#/components/responses/commons.NotFoundError" }, - "422": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "500": { - "$ref": "#/components/responses/commons.DefaultError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "summary": "Get a File.", - "tags": [ - "File" - ] + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Get an ExtensionInstance.", + "tags": [] } }, - "/v2/ingresses": { + "/v2/extension-instances/{extensionInstanceId}/actions/disable": { "post": { - "operationId": "ingress-create-ingress", - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "hostname": { - "format": "idn-hostname", - "type": "string" - }, - "paths": { - "description": "A list of paths. The default path `/` is always present and cannot be removed.", - "items": { - "$ref": "#/components/schemas/ingress.Path" - }, - "type": "array" - }, - "projectId": { - "format": "uuid", - "type": "string" - } - }, - "required": [ - "hostname", - "projectId", - "paths" - ], - "type": "object" - } + "operationId": "extension-disable-extension-instance", + "parameters": [ + { + "in": "path", + "name": "extensionInstanceId", + "required": true, + "schema": { + "format": "uuid", + "type": "string" } } - }, + ], "responses": { - "201": { + "204": { "content": { "application/json": { - "schema": { - "properties": { - "id": { - "format": "uuid", - "type": "string" - }, - "ownership": { - "$ref": "#/components/schemas/ingress.Ownership" - } - }, - "required": [ - "id", - "ownership" - ], - "type": "object" - } + "schema": {} } }, - "description": "Created" + "description": "NoContent" }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "400": { + "$ref": "#/components/responses/commons.ValidationError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -21151,19 +21162,18 @@ "commons.AccessToken": [] } ], - "summary": "Create an Ingress.", - "tags": [ - "Domain" - ] - }, - "get": { - "operationId": "ingress-list-ingresses", + "summary": "Disable an ExtensionInstance.", + "tags": [] + } + }, + "/v2/extension-instances/{extensionInstanceId}/actions/enable": { + "post": { + "operationId": "extension-enable-extension-instance", "parameters": [ { - "description": "ID of the Project to list Ingresses for.", - "in": "query", - "name": "projectId", - "required": false, + "in": "path", + "name": "extensionInstanceId", + "required": true, "schema": { "format": "uuid", "type": "string" @@ -21171,21 +21181,16 @@ } ], "responses": { - "200": { + "204": { "content": { "application/json": { - "schema": { - "items": { - "$ref": "#/components/schemas/ingress.Ingress" - }, - "type": "array" - } + "schema": {} } }, - "description": "OK" + "description": "NoContent" }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "400": { + "$ref": "#/components/responses/commons.ValidationError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -21196,19 +21201,17 @@ "commons.AccessToken": [] } ], - "summary": "List Ingresses.", - "tags": [ - "Domain" - ] + "summary": "Enable an ExtensionInstance.", + "tags": [] } }, - "/v2/ingresses/{ingressId}": { - "delete": { - "operationId": "ingress-delete-ingress", + "/v2/contributors/{contributorId}": { + "get": { + "operationId": "extension-get-contributor", "parameters": [ { "in": "path", - "name": "ingressId", + "name": "contributorId", "required": true, "schema": { "format": "uuid", @@ -21217,8 +21220,15 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/marketplace.Contributor" + } + } + }, + "description": "OK" }, "404": { "$ref": "#/components/responses/commons.NotFoundError" @@ -21232,18 +21242,17 @@ "commons.AccessToken": [] } ], - "summary": "Delete an Ingress.", - "tags": [ - "Domain" - ] - }, + "summary": "Get a Contributor.", + "tags": [] + } + }, + "/v2/extensions/{extensionId}": { "get": { - "operationId": "ingress-get-ingress", + "operationId": "extension-get-extension", "parameters": [ { - "description": "ID of the Ingress to be retrieved.", "in": "path", - "name": "ingressId", + "name": "extensionId", "required": true, "schema": { "format": "uuid", @@ -21256,15 +21265,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ingress.Ingress" + "$ref": "#/components/schemas/marketplace.Extension" } } }, "description": "OK" }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -21274,23 +21280,21 @@ "commons.AccessToken": [] } ], - "summary": "Get an Ingress.", - "tags": [ - "Domain" - ] + "summary": "Get an Extension.", + "tags": [] } }, - "/v2/ingresses/{ingressId}/actions/verify-ownership": { - "post": { - "operationId": "ingress-ingress-verify-ownership", + "/v2/webhook-public-keys/{serial}": { + "get": { + "operationId": "extension-get-public-key", "parameters": [ { - "description": "UUID of the Ingress to verify the ownership for.", + "description": "The serial id of a specific public key. Use `latest` to get the latest public key.", "in": "path", - "name": "ingressId", + "name": "serial", "required": true, "schema": { - "format": "uuid", + "example": "latest", "type": "string" } } @@ -21300,20 +21304,14 @@ "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/marketplace.PublicKey" } } }, - "description": "OK" - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" + "description": "Use this public key to verify the webhook signature on your end." }, "404": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "412": { - "$ref": "#/components/responses/commons.DefaultError" + "$ref": "#/components/responses/commons.NotFoundError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -21324,25 +21322,39 @@ "commons.AccessToken": [] } ], - "summary": "Verifiy the ownership of an Ingress.", - "tags": [ - "Domain" - ] + "summary": "Get the public key to verify the webhook signature.", + "tags": [] } }, - "/v2/projects/{projectId}/ingresses": { + "/v2/contributors": { "get": { - "operationId": "ingress-list-ingresses-v2-deprecated", - "deprecated": true, + "operationId": "extension-list-contributors", "parameters": [ { - "description": "ID of the Project to list Ingresses for", - "in": "path", - "name": "projectId", - "required": true, + "in": "query", + "name": "limit", + "required": false, "schema": { - "format": "uuid", - "type": "string" + "default": 1000, + "type": "integer" + } + }, + { + "in": "query", + "name": "skip", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "type": "integer" } } ], @@ -21352,7 +21364,7 @@ "application/json": { "schema": { "items": { - "$ref": "#/components/schemas/ingress.Ingress" + "$ref": "#/components/schemas/marketplace.Contributor" }, "type": "array" } @@ -21360,9 +21372,6 @@ }, "description": "OK" }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -21372,45 +21381,63 @@ "commons.AccessToken": [] } ], - "summary": "List Ingresses belonging to a project.", - "tags": [ - "Domain" - ] + "summary": "List Contributors.", + "tags": [] } }, - "/v2/ingresses/{ingressId}/paths": { - "put": { - "operationId": "ingress-paths-deprecated", - "deprecated": true, + "/v2/extensions": { + "get": { + "operationId": "extension-list-extensions", "parameters": [ { - "in": "path", - "name": "ingressId", - "required": true, + "in": "query", + "name": "context", + "required": false, "schema": { - "format": "uuid", - "type": "string" + "$ref": "#/components/schemas/marketplace.Context" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "items": { - "$ref": "#/components/schemas/ingress.Path" - }, - "type": "array" - } + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 1000, + "type": "integer" + } + }, + { + "in": "query", + "name": "skip", + "required": false, + "schema": { + "default": 0, + "type": "integer" + } + }, + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "type": "integer" } } - }, + ], "responses": { - "204": { - "description": "No Content" - }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/marketplace.Extension" + }, + "type": "array" + } + } + }, + "description": "OK" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -21421,19 +21448,20 @@ "commons.AccessToken": [] } ], - "summary": "Update an Ingresses paths.", - "tags": [ - "Domain" - ] - }, - "patch": { - "operationId": "ingress-update-ingress-paths", + "summary": "List Extensions.", + "tags": [] + } + }, + "/v2/files": { + "post": { + "operationId": "file-create-file", "parameters": [ { - "in": "path", - "name": "ingressId", + "in": "header", + "name": "Token", "required": true, "schema": { + "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "format": "uuid", "type": "string" } @@ -21441,208 +21469,175 @@ ], "requestBody": { "content": { - "application/json": { + "application/octet-stream": { "schema": { - "items": { - "$ref": "#/components/schemas/ingress.Path" + "properties": { + "file": { + "example": "binary", + "format": "binary", + "type": "string" + } }, - "type": "array" + "required": [ + "file" + ], + "type": "object" } } } }, "responses": { - "204": { - "description": "No Content" + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/file.FileMeta" + } + } + }, + "description": "Created" }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "401": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "406": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "422": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "500": { + "$ref": "#/components/responses/commons.DefaultError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Update the paths of an Ingress.", + "summary": "Create a File.", "tags": [ - "Domain" + "File" ] } }, - "/v2/ingresses/{ingressId}/actions/request-acme-certificate-issuance": { - "post": { - "operationId": "ingress-request-ingress-acme-certificate-issuance", + "/v2/files/{fileId}/meta": { + "get": { + "operationId": "file-get-file-meta", "parameters": [ { - "description": "UUID of the Ingress to request the issuance for.", + "description": "ID of the File to get the meta for.", "in": "path", - "name": "ingressId", + "name": "fileId", "required": true, "schema": { + "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "format": "uuid", "type": "string" } } ], - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "404": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" - } - }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Request the ACME certificate issuance of an Ingress.", - "tags": [ - "Domain" - ] - } - }, - "/v2/ingresses/{ingressId}/tls": { - "put": { - "operationId": "ingress-tls-deprecated", - "deprecated": true, - "parameters": [ - { - "in": "path", - "name": "ingressId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/ingress.TlsAcme" - }, - { - "$ref": "#/components/schemas/ingress.TlsCertificate" - } - ] - } - } - }, - "description": "" - }, "responses": { "200": { "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/file.FileMeta" } } }, "description": "OK" }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "401": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, "404": { "$ref": "#/components/responses/commons.NotFoundError" }, + "422": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "500": { + "$ref": "#/components/responses/commons.DefaultError" + }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Update an Ingresses tls settings.", + "summary": "Get a File's meta.", "tags": [ - "Domain" + "File" ] - }, - "patch": { - "operationId": "ingress-update-ingress-tls", + } + }, + "/v2/file-upload-tokens/{fileUploadToken}/rules": { + "get": { + "operationId": "file-get-file-upload-token-rules", "parameters": [ { + "description": "FileUploadToken to retrieve rules for.", "in": "path", - "name": "ingressId", + "name": "fileUploadToken", "required": true, "schema": { + "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "format": "uuid", "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/ingress.TlsAcme" - }, - { - "$ref": "#/components/schemas/ingress.TlsCertificate" - } - ] - } - } - }, - "description": "" - }, "responses": { "200": { "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/file.FileUploadRules" } } }, "description": "OK" }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, "404": { "$ref": "#/components/responses/commons.NotFoundError" }, + "500": { + "$ref": "#/components/responses/commons.DefaultError" + }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Update the tls settings of an Ingress.", + "summary": "Get a FileUploadToken's rules.", "tags": [ - "Domain" + "File" ] } }, - "/v2/invoices/{invoiceId}": { + "/v2/file-upload-types/{fileUploadType}/rules": { "get": { - "operationId": "invoice-detail", + "operationId": "file-get-file-upload-type-rules", "parameters": [ { - "example": "154219e9-bf4a-4f41-9c72-0449a98db62f", + "description": "FileUploadType to retrieve rules for.", "in": "path", - "name": "invoiceId", + "name": "fileUploadType", "required": true, "schema": { - "format": "uuid", + "enum": [ + "avatar", + "conversation" + ], + "example": "avatar", "type": "string" } } @@ -21652,11 +21647,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/invoice.Invoice" + "$ref": "#/components/schemas/file.FileUploadRules" } } }, - "description": "" + "description": "OK" }, "400": { "$ref": "#/components/responses/commons.ValidationError" @@ -21664,31 +21659,67 @@ "404": { "$ref": "#/components/responses/commons.NotFoundError" }, + "500": { + "$ref": "#/components/responses/commons.DefaultError" + }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Get details of an Invoice.", + "summary": "Get a FileUploadType's rules.", "tags": [ - "Contract" + "File" ] } }, - "/v2/customers/{customerId}/invoice-settings": { + "/v2/files/{fileId}": { "get": { - "operationId": "invoice-get-detail-of-invoice-settings", + "operationId": "file-get-file", "parameters": [ { - "example": "edefeee4-e8e9-4e2d-ab95-9a2eb6104cfb", + "description": "ID of the File to be retrieved.", "in": "path", - "name": "customerId", + "name": "fileId", "required": true, "schema": { + "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "format": "uuid", + "type": "string" + } + }, + { + "in": "header", + "name": "Accept", + "schema": { + "default": "application/octet-stream", + "enum": [ + "application/octet-stream", + "text/plain;base64" + ], + "example": "application/octet-stream", + "type": "string" + } + }, + { + "in": "header", + "name": "Content-Disposition", + "schema": { + "default": "inline", + "enum": [ + "inline", + "attachment" + ], + "example": "inline", + "type": "string" + } + }, + { + "description": "Only needed for protected Files.", + "in": "header", + "name": "Token", + "required": false, + "schema": { + "example": "jwt", "type": "string" } } @@ -21696,109 +21727,210 @@ "responses": { "200": { "content": { - "application/json": { + "application/octet-stream": { "schema": { - "$ref": "#/components/schemas/invoice.InvoiceSettings" + "type": "string" + } + }, + "text/plain;base64": { + "schema": { + "type": "string" } } }, - "description": "" + "description": "OK" }, "400": { "$ref": "#/components/responses/commons.ValidationError" }, + "401": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, "404": { "$ref": "#/components/responses/commons.NotFoundError" }, + "422": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "500": { + "$ref": "#/components/responses/commons.DefaultError" + }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Get InvoiceSettings of a Customer.", + "summary": "Get a File.", "tags": [ - "Contract" + "File" ] - }, - "put": { - "operationId": "invoice-update-invoice-settings", + } + }, + "/v2/files/{fileId}/{fileName}": { + "get": { + "operationId": "file-get-file-with-name", "parameters": [ { - "example": "edefeee4-e8e9-4e2d-ab95-9a2eb6104cfb", + "description": "ID of the File to be retrieved.", "in": "path", - "name": "customerId", + "name": "fileId", "required": true, "schema": { + "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "format": "uuid", "type": "string" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "additionalEmailRecipients": { - "example": [ - "hallo@test.de" - ], + }, + { + "in": "header", + "name": "Accept", + "schema": { + "default": "application/octet-stream", + "enum": [ + "application/octet-stream", + "text/plain;base64" + ], + "example": "application/octet-stream", + "type": "string" + } + }, + { + "in": "header", + "name": "Content-Disposition", + "schema": { + "default": "inline", + "enum": [ + "inline", + "attachment" + ], + "example": "inline", + "type": "string" + } + }, + { + "description": "Only needed for protected Files.", + "in": "header", + "name": "Token", + "required": false, + "schema": { + "example": "jwt", + "type": "string" + } + }, + { + "description": "Name of the File to be retrieved.", + "in": "path", + "name": "fileName", + "required": true, + "schema": { + "example": "me.jpeg", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/octet-stream": { + "schema": { + "type": "string" + } + }, + "text/plain;base64": { + "schema": { + "type": "string" + } + } + }, + "description": "OK" + }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "401": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "422": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "500": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } + }, + "summary": "Get a File.", + "tags": [ + "File" + ] + } + }, + "/v2/ingresses": { + "post": { + "operationId": "ingress-create-ingress", + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "hostname": { + "format": "idn-hostname", + "type": "string" + }, + "paths": { + "description": "A list of paths. The default path `/` is always present and cannot be removed.", "items": { - "format": "email", - "type": "string" + "$ref": "#/components/schemas/ingress.Path" }, "type": "array" }, - "invoicePeriod": { - "example": 1, - "minimum": 0, - "type": "integer" - }, - "paymentSettings": { - "$ref": "#/components/schemas/invoice.PaymentSettings" - }, - "printedInvoices": { - "type": "boolean" - }, - "recipient": { - "$ref": "#/components/schemas/invoice.Recipient" - }, - "recipientSameAsOwner": { - "type": "boolean" - }, - "targetDay": { - "example": 15, - "maximum": 28, - "minimum": 0, - "type": "integer" + "projectId": { + "format": "uuid", + "type": "string" } }, "required": [ - "invoicePeriod", - "paymentSettings" + "hostname", + "projectId", + "paths" ], "type": "object" } } - }, - "required": true + } }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/invoice.InvoiceSettings" + "properties": { + "id": { + "format": "uuid", + "type": "string" + }, + "ownership": { + "$ref": "#/components/schemas/ingress.Ownership" + } + }, + "required": [ + "id", + "ownership" + ], + "type": "object" } } }, - "description": "" - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" + "description": "Created" }, "404": { "$ref": "#/components/responses/commons.NotFoundError" @@ -21812,30 +21944,19 @@ "commons.AccessToken": [] } ], - "summary": "Update InvoiceSettings of a Customer.", + "summary": "Create an Ingress.", "tags": [ - "Contract" + "Domain" ] - } - }, - "/v2/customers/{customerId}/invoices/{invoiceId}/file-access-token": { + }, "get": { - "operationId": "invoice-get-file-access-token", + "operationId": "ingress-list-ingresses", "parameters": [ { - "example": "edefeee4-e8e9-4e2d-ab95-9a2eb6104cfb", - "in": "path", - "name": "customerId", - "required": true, - "schema": { - "type": "string" - } - }, - { - "example": "154219e9-bf4a-4f41-9c72-0449a98db62f", - "in": "path", - "name": "invoiceId", - "required": true, + "description": "ID of the Project to list Ingresses for.", + "in": "query", + "name": "projectId", + "required": false, "schema": { "format": "uuid", "type": "string" @@ -21847,27 +21968,14 @@ "content": { "application/json": { "schema": { - "properties": { - "accessToken": { - "type": "string" - }, - "expiresAt": { - "format": "date-time", - "type": "string" - } + "items": { + "$ref": "#/components/schemas/ingress.Ingress" }, - "required": [ - "accessToken", - "expiresAt" - ], - "type": "object" + "type": "array" } } }, - "description": "The File Access Token required to access the Invoice file." - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" + "description": "OK" }, "404": { "$ref": "#/components/responses/commons.NotFoundError" @@ -21881,191 +21989,77 @@ "commons.AccessToken": [] } ], - "summary": "Request an Access Token for the Invoice file.", + "summary": "List Ingresses.", "tags": [ - "Contract" + "Domain" ] } }, - "/v2/customers/{customerId}/invoices": { - "get": { - "operationId": "invoice-list-customer-invoices", + "/v2/ingresses/{ingressId}": { + "delete": { + "operationId": "ingress-delete-ingress", "parameters": [ { - "example": "ac3c8bbe-4c44-4f34-b6c7-1e6af48c3a7c", "in": "path", - "name": "customerId", + "name": "ingressId", "required": true, "schema": { + "format": "uuid", "type": "string" } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" }, - { - "example": [ - "REGULAR", - "CORRECTION" - ], - "in": "query", - "name": "invoiceTypes", - "required": false, - "schema": { - "items": { - "enum": [ - "REGULAR", - "REISSUE", - "CORRECTION", - "CANCELLATION" - ], - "type": "string" - }, - "type": "array" - } - }, - { - "example": 1000, - "in": "query", - "name": "limit", - "required": false, - "schema": { - "type": "integer" - } - }, - { - "example": 0, - "in": "query", - "name": "skip", - "required": false, - "schema": { - "type": "integer" - } - }, - { - "example": 1, - "in": "query", - "name": "page", - "required": false, - "schema": { - "type": "integer" - } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "items": { - "$ref": "#/components/schemas/invoice.Invoice" - }, - "type": "array" - } - } - }, - "description": "" - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" - } - }, - "security": [ + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } + }, + "security": [ { "commons.AccessToken": [] } ], - "summary": "List Invoices of a Customer.", + "summary": "Delete an Ingress.", "tags": [ - "Contract" + "Domain" ] - } - }, - "/v2/projects/{projectId}/deliveryboxes": { - "post": { - "parameters": [ - { - "description": "ID of the Project to create the DeliveryBox in.", - "in": "path", - "name": "projectId", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "description": { - "type": "string" - }, - "password": { - "type": "string" - } - }, - "required": [ - "description", - "password" - ], - "type": "object" - } - } - }, - "description": "DeliveryBox" - }, - "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", - "schema": { - "type": "string" - } - } - } - } - }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Create a DeliveryBox.", - "tags": [ - "Mail" - ], - "deprecated": true }, "get": { + "operationId": "ingress-get-ingress", "parameters": [ { - "description": "ID of the Project to list DeliveryBoxes for.", + "description": "ID of the Ingress to be retrieved.", "in": "path", - "name": "projectId", + "name": "ingressId", "required": true, "schema": { + "format": "uuid", "type": "string" } } ], "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "200": { + "content": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ingress.Ingress" } } - } + }, + "description": "OK" + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" } }, "security": [ @@ -22073,63 +22067,32 @@ "commons.AccessToken": [] } ], - "summary": "List DeliveryBoxes belonging to a Project.", + "summary": "Get an Ingress.", "tags": [ - "Mail" - ], - "deprecated": true + "Domain" + ] } }, - "/v2/projects/{projectId}/delivery-boxes": { + "/v2/ingresses/{ingressId}/actions/verify-ownership": { "post": { - "operationId": "mail-create-deliverybox", + "operationId": "ingress-ingress-verify-ownership", "parameters": [ { - "description": "ID of the Project to create the DeliveryBox in.", + "description": "UUID of the Ingress to verify the ownership for.", "in": "path", - "name": "projectId", + "name": "ingressId", "required": true, "schema": { + "format": "uuid", "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "description": { - "type": "string" - }, - "password": { - "type": "string" - } - }, - "required": [ - "description", - "password" - ], - "type": "object" - } - } - }, - "description": "DeliveryBox" - }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "properties": { - "id": { - "format": "uuid", - "type": "string" - } - }, - "required": [ - "id" - ], "type": "object" } } @@ -22139,16 +22102,10 @@ "400": { "$ref": "#/components/responses/commons.ValidationError" }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, "404": { - "$ref": "#/components/responses/commons.NotFoundError" - }, - "500": { - "$ref": "#/components/responses/commons.DefaultError" + "$ref": "#/components/responses/commons.ValidationError" }, - "503": { + "412": { "$ref": "#/components/responses/commons.DefaultError" }, "default": { @@ -22160,20 +22117,24 @@ "commons.AccessToken": [] } ], - "summary": "Create a DeliveryBox.", + "summary": "Verifiy the ownership of an Ingress.", "tags": [ - "Mail" + "Domain" ] - }, + } + }, + "/v2/projects/{projectId}/ingresses": { "get": { - "operationId": "mail-list-delivery-boxes", + "operationId": "ingress-list-ingresses-v2-deprecated", + "deprecated": true, "parameters": [ { - "description": "ID of the Project to list DeliveryBoxes for.", + "description": "ID of the Project to list Ingresses for", "in": "path", "name": "projectId", "required": true, "schema": { + "format": "uuid", "type": "string" } } @@ -22184,7 +22145,7 @@ "application/json": { "schema": { "items": { - "$ref": "#/components/schemas/mail.Deliverybox" + "$ref": "#/components/schemas/ingress.Ingress" }, "type": "array" } @@ -22192,21 +22153,9 @@ }, "description": "OK" }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, "404": { "$ref": "#/components/responses/commons.NotFoundError" }, - "500": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "503": { - "$ref": "#/components/responses/commons.DefaultError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -22216,21 +22165,23 @@ "commons.AccessToken": [] } ], - "summary": "List DeliveryBoxes belonging to a Project.", + "summary": "List Ingresses belonging to a project.", "tags": [ - "Mail" + "Domain" ] } }, - "/v2/projects/{projectId}/mailaddresses": { - "post": { + "/v2/ingresses/{ingressId}/paths": { + "put": { + "operationId": "ingress-paths-deprecated", + "deprecated": true, "parameters": [ { - "description": "ID of the project to create a MailAddress for.", "in": "path", - "name": "projectId", + "name": "ingressId", "required": true, "schema": { + "format": "uuid", "type": "string" } } @@ -22239,29 +22190,23 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/mail.CreateForwardAddress" - }, - { - "$ref": "#/components/schemas/mail.CreateMailAddress" - } - ] + "items": { + "$ref": "#/components/schemas/ingress.Path" + }, + "type": "array" } } } }, "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", - "schema": { - "type": "string" - } - } - } + "204": { + "description": "No Content" + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" } }, "security": [ @@ -22269,59 +22214,109 @@ "commons.AccessToken": [] } ], - "summary": "Create a MailAddress.", + "summary": "Update an Ingresses paths.", "tags": [ - "Mail" - ], - "deprecated": true + "Domain" + ] }, - "get": { + "patch": { + "operationId": "ingress-update-ingress-paths", "parameters": [ { - "description": "ID of the Project to list MailAddresses for.", "in": "path", - "name": "projectId", + "name": "ingressId", "required": true, "schema": { + "format": "uuid", "type": "string" } } ], - "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", - "schema": { - "type": "string" - } + "requestBody": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/ingress.Path" + }, + "type": "array" } } } }, + "responses": { + "204": { + "description": "No Content" + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } + }, "security": [ { "commons.AccessToken": [] } ], - "summary": "List MailAddresses belonging to a Project.", + "summary": "Update the paths of an Ingress.", "tags": [ - "Mail" - ], - "deprecated": true + "Domain" + ] } }, - "/v2/projects/{projectId}/mail-addresses": { + "/v2/ingresses/{ingressId}/actions/request-acme-certificate-issuance": { "post": { - "operationId": "mail-create-mail-address", + "operationId": "ingress-request-ingress-acme-certificate-issuance", "parameters": [ { - "description": "ID of the project to create a MailAddress for.", + "description": "UUID of the Ingress to request the issuance for.", "in": "path", - "name": "projectId", + "name": "ingressId", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "404": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } + }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Request the ACME certificate issuance of an Ingress.", + "tags": [ + "Domain" + ] + } + }, + "/v2/ingresses/{ingressId}/tls": { + "put": { + "operationId": "ingress-tls-deprecated", + "deprecated": true, + "parameters": [ + { + "in": "path", + "name": "ingressId", "required": true, "schema": { + "format": "uuid", "type": "string" } } @@ -22332,51 +22327,31 @@ "schema": { "oneOf": [ { - "$ref": "#/components/schemas/mail.CreateForwardAddress" + "$ref": "#/components/schemas/ingress.TlsAcme" }, { - "$ref": "#/components/schemas/mail.CreateMailAddress" + "$ref": "#/components/schemas/ingress.TlsCertificate" } ] } } - } + }, + "description": "" }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "properties": { - "id": { - "format": "uuid", - "type": "string" - } - }, - "required": [ - "id" - ], "type": "object" } } }, "description": "OK" }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, "404": { "$ref": "#/components/responses/commons.NotFoundError" }, - "500": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "503": { - "$ref": "#/components/responses/commons.DefaultError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -22386,53 +22361,55 @@ "commons.AccessToken": [] } ], - "summary": "Create a MailAddress.", + "summary": "Update an Ingresses tls settings.", "tags": [ - "Mail" + "Domain" ] }, - "get": { - "operationId": "mail-list-mail-addresses", + "patch": { + "operationId": "ingress-update-ingress-tls", "parameters": [ { - "description": "ID of the Project to list MailAddresses for.", "in": "path", - "name": "projectId", + "name": "ingressId", "required": true, "schema": { + "format": "uuid", "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/ingress.TlsAcme" + }, + { + "$ref": "#/components/schemas/ingress.TlsCertificate" + } + ] + } + } + }, + "description": "" + }, "responses": { "200": { "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/mail.MailAddress" - }, - "type": "array" + "type": "object" } } }, "description": "OK" }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, "404": { "$ref": "#/components/responses/commons.NotFoundError" }, - "500": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "503": { - "$ref": "#/components/responses/commons.DefaultError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -22442,19 +22419,20 @@ "commons.AccessToken": [] } ], - "summary": "List MailAddresses belonging to a Project.", + "summary": "Update the tls settings of an Ingress.", "tags": [ - "Mail" + "Domain" ] } }, - "/v2/deliveryboxes/{deliveryBoxId}": { - "delete": { + "/v2/invoices/{invoiceId}": { + "get": { + "operationId": "invoice-detail", "parameters": [ { - "description": "ID of the DeliveryBox to be deleted.", + "example": "154219e9-bf4a-4f41-9c72-0449a98db62f", "in": "path", - "name": "deliveryBoxId", + "name": "invoiceId", "required": true, "schema": { "format": "uuid", @@ -22463,16 +22441,24 @@ } ], "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "200": { + "content": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/invoice.Invoice" } } - } + }, + "description": "" + }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" } }, "security": [ @@ -22480,84 +22466,43 @@ "commons.AccessToken": [] } ], - "summary": "Delete a DeliveryBox.", + "summary": "Get details of an Invoice.", "tags": [ - "Mail" - ], - "deprecated": true - }, + "Contract" + ] + } + }, + "/v2/customers/{customerId}/invoice-settings": { "get": { + "operationId": "invoice-get-detail-of-invoice-settings", "parameters": [ { - "description": "ID of the DeliveryBox to be retrieved.", + "example": "edefeee4-e8e9-4e2d-ab95-9a2eb6104cfb", "in": "path", - "name": "deliveryBoxId", + "name": "customerId", "required": true, "schema": { - "format": "uuid", "type": "string" } } ], "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "200": { + "content": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/invoice.InvoiceSettings" } } - } - } - }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Get a DeliveryBox.", - "tags": [ - "Mail" - ], - "deprecated": true - } - }, - "/v2/delivery-boxes/{deliveryBoxId}": { - "delete": { - "operationId": "mail-delete-delivery-box", - "parameters": [ - { - "description": "ID of the DeliveryBox to be deleted.", - "in": "path", - "name": "deliveryBoxId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "OK" + }, + "description": "" }, "400": { "$ref": "#/components/responses/commons.ValidationError" }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, "404": { "$ref": "#/components/responses/commons.NotFoundError" }, - "500": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "503": { - "$ref": "#/components/responses/commons.DefaultError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -22567,51 +22512,90 @@ "commons.AccessToken": [] } ], - "summary": "Delete a DeliveryBox.", + "summary": "Get InvoiceSettings of a Customer.", "tags": [ - "Mail" + "Contract" ] }, - "get": { - "operationId": "mail-get-delivery-box", + "put": { + "operationId": "invoice-update-invoice-settings", "parameters": [ { - "description": "ID of the DeliveryBox to be retrieved.", + "example": "edefeee4-e8e9-4e2d-ab95-9a2eb6104cfb", "in": "path", - "name": "deliveryBoxId", + "name": "customerId", "required": true, "schema": { - "format": "uuid", "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "additionalEmailRecipients": { + "example": [ + "hallo@test.de" + ], + "items": { + "format": "email", + "type": "string" + }, + "type": "array" + }, + "invoicePeriod": { + "example": 1, + "minimum": 0, + "type": "integer" + }, + "paymentSettings": { + "$ref": "#/components/schemas/invoice.PaymentSettings" + }, + "printedInvoices": { + "type": "boolean" + }, + "recipient": { + "$ref": "#/components/schemas/invoice.Recipient" + }, + "recipientSameAsOwner": { + "type": "boolean" + }, + "targetDay": { + "example": 15, + "maximum": 28, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "invoicePeriod", + "paymentSettings" + ], + "type": "object" + } + } + }, + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mail.Deliverybox" + "$ref": "#/components/schemas/invoice.InvoiceSettings" } } }, - "description": "OK" + "description": "" }, "400": { "$ref": "#/components/responses/commons.ValidationError" }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, "404": { "$ref": "#/components/responses/commons.NotFoundError" }, - "500": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "503": { - "$ref": "#/components/responses/commons.DefaultError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -22621,56 +22605,29 @@ "commons.AccessToken": [] } ], - "summary": "Get a DeliveryBox.", + "summary": "Update InvoiceSettings of a Customer.", "tags": [ - "Mail" + "Contract" ] } }, - "/v2/mailaddresses/{mailAddressId}": { - "delete": { + "/v2/customers/{customerId}/invoices/{invoiceId}/file-access-token": { + "get": { + "operationId": "invoice-get-file-access-token", "parameters": [ { - "description": "ID of the MailAddress to be deleted.", + "example": "edefeee4-e8e9-4e2d-ab95-9a2eb6104cfb", "in": "path", - "name": "mailAddressId", + "name": "customerId", "required": true, "schema": { - "format": "uuid", "type": "string" } - } - ], - "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", - "schema": { - "type": "string" - } - } - } - } - }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Delete a MailAddress.", - "tags": [ - "Mail" - ], - "deprecated": true - }, - "get": { - "parameters": [ + }, { - "description": "ID of the MailAddress to be retrieved.", + "example": "154219e9-bf4a-4f41-9c72-0449a98db62f", "in": "path", - "name": "mailAddressId", + "name": "invoiceId", "required": true, "schema": { "format": "uuid", @@ -22679,64 +22636,35 @@ } ], "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "200": { + "content": { + "application/json": { "schema": { - "type": "string" + "properties": { + "accessToken": { + "type": "string" + }, + "expiresAt": { + "format": "date-time", + "type": "string" + } + }, + "required": [ + "accessToken", + "expiresAt" + ], + "type": "object" } } - } - } - }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Get a MailAddress.", - "tags": [ - "Mail" - ], - "deprecated": true - } - }, - "/v2/mail-addresses/{mailAddressId}": { - "delete": { - "operationId": "mail-delete-mail-address", - "parameters": [ - { - "description": "ID of the MailAddress to be deleted.", - "in": "path", - "name": "mailAddressId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "OK" + }, + "description": "The File Access Token required to access the Invoice file." }, "400": { "$ref": "#/components/responses/commons.ValidationError" }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, "404": { "$ref": "#/components/responses/commons.NotFoundError" }, - "500": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "503": { - "$ref": "#/components/responses/commons.DefaultError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -22746,51 +22674,94 @@ "commons.AccessToken": [] } ], - "summary": "Delete a MailAddress.", + "summary": "Request an Access Token for the Invoice file.", "tags": [ - "Mail" + "Contract" ] - }, + } + }, + "/v2/customers/{customerId}/invoices": { "get": { - "operationId": "mail-get-mail-address", + "operationId": "invoice-list-customer-invoices", "parameters": [ { - "description": "ID of the MailAddress to be retrieved.", + "example": "ac3c8bbe-4c44-4f34-b6c7-1e6af48c3a7c", "in": "path", - "name": "mailAddressId", + "name": "customerId", "required": true, "schema": { - "format": "uuid", "type": "string" } - } - ], - "responses": { + }, + { + "example": [ + "REGULAR", + "CORRECTION" + ], + "in": "query", + "name": "invoiceTypes", + "required": false, + "schema": { + "items": { + "enum": [ + "REGULAR", + "REISSUE", + "CORRECTION", + "CANCELLATION" + ], + "type": "string" + }, + "type": "array" + } + }, + { + "example": 1000, + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "example": 0, + "in": "query", + "name": "skip", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "example": 1, + "in": "query", + "name": "page", + "required": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mail.MailAddress" + "items": { + "$ref": "#/components/schemas/invoice.Invoice" + }, + "type": "array" } } }, - "description": "OK" + "description": "" }, "400": { "$ref": "#/components/responses/commons.ValidationError" }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, "404": { "$ref": "#/components/responses/commons.NotFoundError" }, - "500": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "503": { - "$ref": "#/components/responses/commons.DefaultError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -22800,24 +22771,21 @@ "commons.AccessToken": [] } ], - "summary": "Get a MailAddress.", + "summary": "List Invoices of a Customer.", "tags": [ - "Mail" + "Contract" ] } }, - "/v2/deliveryboxes/{id}/description": { - "put": { - "operationId": "mail-deliverybox-update-description-deprecated", - "deprecated": true, + "/v2/projects/{projectId}/deliveryboxes": { + "post": { "parameters": [ { - "description": "ID of the deliverybox", + "description": "ID of the Project to create the DeliveryBox in.", "in": "path", - "name": "id", + "name": "projectId", "required": true, "schema": { - "format": "uuid", "type": "string" } } @@ -22829,91 +22797,32 @@ "properties": { "description": { "type": "string" - } - }, - "required": [ - "description" - ] - } - } - }, - "description": "Description of the deliverybox" - }, - "responses": { - "200": { - "description": "OK" - }, - "403": { - "description": "You do not have the permissions to access this content" - }, - "404": { - "description": "A deliverybox with the specified id was not found" - }, - "500": { - "description": "Internal server error" - }, - "503": { - "description": "The service is unavailable." - } - }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Update the description of an deliverybox", - "tags": [ - "Mail" - ] - } - }, - "/v2/deliveryboxes/{id}/password": { - "put": { - "operationId": "mail-deliverybox-update-password-deprecated", - "deprecated": true, - "parameters": [ - { - "description": "ID of the deliverybox", - "in": "path", - "name": "id", - "required": true, - "schema": { - "format": "uuid", - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { + }, "password": { "type": "string" } }, "required": [ + "description", "password" - ] + ], + "type": "object" } } - } + }, + "description": "DeliveryBox" }, "responses": { - "200": { - "description": "OK" - }, - "403": { - "description": "You do not have the permissions to access this content" - }, - "404": { - "description": "A deliverybox with the specified id was not found" - }, - "500": { - "description": "Internal server error" - }, - "503": { - "description": "The service is unavailable." + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "schema": { + "type": "string" + } + } + } } }, "security": [ @@ -22921,17 +22830,16 @@ "commons.AccessToken": [] } ], - "summary": "Update the password for a specific deliverybox", + "summary": "Create a DeliveryBox.", "tags": [ "Mail" - ] - } - }, - "/v2/projects/{projectId}/mailsettings": { + ], + "deprecated": true + }, "get": { "parameters": [ { - "description": "ID of the Project to list mail settings for.", + "description": "ID of the Project to list DeliveryBoxes for.", "in": "path", "name": "projectId", "required": true, @@ -22958,19 +22866,19 @@ "commons.AccessToken": [] } ], - "summary": "List mail settings of a Project.", + "summary": "List DeliveryBoxes belonging to a Project.", "tags": [ "Mail" ], "deprecated": true } }, - "/v2/projects/{projectId}/mail-settings": { - "get": { - "operationId": "mail-list-project-mail-settings", + "/v2/projects/{projectId}/delivery-boxes": { + "post": { + "operationId": "mail-create-deliverybox", "parameters": [ { - "description": "ID of the Project to list mail settings for.", + "description": "ID of the Project to create the DeliveryBox in.", "in": "path", "name": "projectId", "required": true, @@ -22979,34 +22887,41 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "description": { + "type": "string" + }, + "password": { + "type": "string" + } + }, + "required": [ + "description", + "password" + ], + "type": "object" + } + } + }, + "description": "DeliveryBox" + }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { "properties": { - "blacklist": { - "items": { - "format": "email", - "type": "string" - }, - "type": "array" - }, - "projectId": { + "id": { + "format": "uuid", "type": "string" - }, - "whitelist": { - "items": { - "format": "email", - "type": "string" - }, - "type": "array" } }, "required": [ - "projectId", - "blacklist", - "whitelist" + "id" ], "type": "object" } @@ -23038,61 +22953,55 @@ "commons.AccessToken": [] } ], - "summary": "List mail settings of a Project.", + "summary": "Create a DeliveryBox.", "tags": [ "Mail" ] - } - }, - "/v2/mailaddresses/{id}/address": { - "put": { - "operationId": "mail-mailaddress-update-address-deprecated", - "deprecated": true, + }, + "get": { + "operationId": "mail-list-delivery-boxes", "parameters": [ { - "description": "ID of the mail address", + "description": "ID of the Project to list DeliveryBoxes for.", "in": "path", - "name": "id", + "name": "projectId", "required": true, "schema": { - "format": "uuid", "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "address": { - "format": "email", - "type": "string" - } - }, - "required": [ - "address" - ] - } - } - }, - "description": "set mail-address" - }, "responses": { "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/mail.Deliverybox" + }, + "type": "array" + } + } + }, "description": "OK" }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, "403": { - "description": "You do not have the permissions to access this content" + "$ref": "#/components/responses/commons.DefaultError" }, "404": { - "description": "A mailaddress with the specified id was not found" + "$ref": "#/components/responses/commons.NotFoundError" }, "500": { - "description": "Internal server error" + "$ref": "#/components/responses/commons.DefaultError" }, "503": { - "description": "The service is unavailable." + "$ref": "#/components/responses/commons.DefaultError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" } }, "security": [ @@ -23100,19 +23009,17 @@ "commons.AccessToken": [] } ], - "summary": "Update mail-address", + "summary": "List DeliveryBoxes belonging to a Project.", "tags": [ "Mail" ] } }, - "/v2/projects/{projectId}/mailsettings/blacklist": { - "put": { - "operationId": "mail-projectsetting-update-blacklist-deprecated", - "deprecated": true, + "/v2/projects/{projectId}/mailaddresses": { + "post": { "parameters": [ { - "description": "ID of the project you want to update blacklist for", + "description": "ID of the project to create a MailAddress for.", "in": "path", "name": "projectId", "required": true, @@ -23125,38 +23032,29 @@ "content": { "application/json": { "schema": { - "properties": { - "blacklist": { - "items": { - "format": "email", - "type": "string" - }, - "type": "array" + "oneOf": [ + { + "$ref": "#/components/schemas/mail.CreateForwardAddress" + }, + { + "$ref": "#/components/schemas/mail.CreateMailAddress" } - }, - "required": [ - "blacklist" - ], - "type": "object" + ] } } } }, "responses": { - "200": { - "description": "OK" - }, - "403": { - "description": "You do not have the permissions to access this content" - }, - "404": { - "description": "A projectsetting with the specified id was not found" - }, - "500": { - "description": "Internal server error" - }, - "503": { - "description": "The service is unavailable." + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "schema": { + "type": "string" + } + } + } } }, "security": [ @@ -23164,19 +23062,16 @@ "commons.AccessToken": [] } ], - "summary": "Update blacklist for a given project ID", + "summary": "Create a MailAddress.", "tags": [ "Mail" - ] - } - }, - "/v2/projects/{projectId}/mailsettings/whitelist": { - "put": { - "operationId": "mail-projectsetting-update-whitelist-deprecated", - "deprecated": true, + ], + "deprecated": true + }, + "get": { "parameters": [ { - "description": "ID of the project you want to update whitelist for", + "description": "ID of the Project to list MailAddresses for.", "in": "path", "name": "projectId", "required": true, @@ -23185,66 +23080,41 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "whitelist": { - "items": { - "format": "email", - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "whitelist" - ], - "type": "object" + "responses": { + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "schema": { + "type": "string" + } } } } }, - "responses": { - "200": { - "description": "OK" - }, - "403": { - "description": "You do not have the permissions to access this content" - }, - "404": { - "description": "A projectsetting with the specified id was not found" - }, - "500": { - "description": "Internal server error" - }, - "503": { - "description": "The service is unavailable." - } - }, "security": [ { "commons.AccessToken": [] } ], - "summary": "Update whitelist for a given project ID", + "summary": "List MailAddresses belonging to a Project.", "tags": [ "Mail" - ] + ], + "deprecated": true } }, - "/v2/delivery-boxes/{deliveryBoxId}/description": { - "patch": { - "operationId": "mail-update-delivery-box-description", + "/v2/projects/{projectId}/mail-addresses": { + "post": { + "operationId": "mail-create-mail-address", "parameters": [ { - "description": "ID of the DeliveryBox to update the description for.", + "description": "ID of the project to create a MailAddress for.", "in": "path", - "name": "deliveryBoxId", + "name": "projectId", "required": true, "schema": { - "format": "uuid", "type": "string" } } @@ -23253,21 +23123,36 @@ "content": { "application/json": { "schema": { - "properties": { - "description": { - "type": "string" + "oneOf": [ + { + "$ref": "#/components/schemas/mail.CreateForwardAddress" + }, + { + "$ref": "#/components/schemas/mail.CreateMailAddress" } - }, - "required": [ - "description" ] } } - }, - "description": "Description of the DeliveryBox." + } }, "responses": { - "204": { + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "format": "uuid", + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + } + } + }, "description": "OK" }, "400": { @@ -23294,45 +23179,36 @@ "commons.AccessToken": [] } ], - "summary": "Update the description of a DeliveryBox.", + "summary": "Create a MailAddress.", "tags": [ "Mail" ] - } - }, - "/v2/delivery-boxes/{deliveryBoxId}/password": { - "patch": { - "operationId": "mail-update-delivery-box-password", + }, + "get": { + "operationId": "mail-list-mail-addresses", "parameters": [ { - "description": "ID of the DeliveryBox to update the password for.", + "description": "ID of the Project to list MailAddresses for.", "in": "path", - "name": "deliveryBoxId", + "name": "projectId", "required": true, "schema": { - "format": "uuid", "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "password": { - "type": "string" - } - }, - "required": [ - "password" - ] - } - } - } - }, "responses": { - "204": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/mail.MailAddress" + }, + "type": "array" + } + } + }, "description": "OK" }, "400": { @@ -23359,20 +23235,19 @@ "commons.AccessToken": [] } ], - "summary": "Update the password of a DeliveryBox.", + "summary": "List MailAddresses belonging to a Project.", "tags": [ "Mail" ] } }, - "/v2/mail-addresses/{mailAddressId}/address": { - "patch": { - "operationId": "mail-update-mail-address-address", + "/v2/deliveryboxes/{deliveryBoxId}": { + "delete": { "parameters": [ { - "description": "ID of the MailAddress to update the address for.", + "description": "ID of the DeliveryBox to be deleted.", "in": "path", - "name": "mailAddressId", + "name": "deliveryBoxId", "required": true, "schema": { "format": "uuid", @@ -23380,44 +23255,54 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "address": { - "format": "email", - "type": "string" - } - }, - "required": [ - "address" - ] + "responses": { + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "schema": { + "type": "string" + } } } } }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Delete a DeliveryBox.", + "tags": [ + "Mail" + ], + "deprecated": true + }, + "get": { + "parameters": [ + { + "description": "ID of the DeliveryBox to be retrieved.", + "in": "path", + "name": "deliveryBoxId", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + } + ], "responses": { - "204": { - "description": "OK" - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" - }, - "500": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "503": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "schema": { + "type": "string" + } + } + } } }, "security": [ @@ -23425,20 +23310,21 @@ "commons.AccessToken": [] } ], - "summary": "Update a MailAddress.", + "summary": "Get a DeliveryBox.", "tags": [ "Mail" - ] + ], + "deprecated": true } }, - "/v2/mail-addresses/{mailAddressId}/autoresponder": { - "patch": { - "operationId": "mail-update-mail-address-autoresponder", + "/v2/delivery-boxes/{deliveryBoxId}": { + "delete": { + "operationId": "mail-delete-delivery-box", "parameters": [ { - "description": "ID of the MailAddress to update the autoresponder for.", + "description": "ID of the DeliveryBox to be deleted.", "in": "path", - "name": "mailAddressId", + "name": "deliveryBoxId", "required": true, "schema": { "format": "uuid", @@ -23446,44 +23332,6 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "autoResponder": { - "nullable": true, - "properties": { - "active": { - "type": "boolean" - }, - "expiresAt": { - "format": "date-time", - "type": "string" - }, - "message": { - "type": "string" - }, - "startsAt": { - "format": "date-time", - "type": "string" - } - }, - "required": [ - "message", - "active" - ], - "type": "object" - } - }, - "required": [ - "autoResponder" - ] - } - } - }, - "description": "Autoresponder for the MailAddress." - }, "responses": { "204": { "description": "OK" @@ -23512,19 +23360,18 @@ "commons.AccessToken": [] } ], - "summary": "Update the autoresponder of a MailAddress.", + "summary": "Delete a DeliveryBox.", "tags": [ "Mail" ] }, - "put": { - "operationId": "mail-update-mail-address-autoresponder-v2-deprecated", - "deprecated": true, + "get": { + "operationId": "mail-get-delivery-box", "parameters": [ { - "description": "ID of the MailAddress to update the autoresponder for.", + "description": "ID of the DeliveryBox to be retrieved.", "in": "path", - "name": "mailAddressId", + "name": "deliveryBoxId", "required": true, "schema": { "format": "uuid", @@ -23532,46 +23379,15 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "autoResponder": { - "nullable": true, - "properties": { - "active": { - "type": "boolean" - }, - "expiresAt": { - "format": "date-time", - "type": "string" - }, - "message": { - "type": "string" - }, - "startsAt": { - "format": "date-time", - "type": "string" - } - }, - "required": [ - "message", - "active" - ], - "type": "object" - } - }, - "required": [ - "autoResponder" - ] - } - } - }, - "description": "Autoresponder for the MailAddress." - }, "responses": { "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mail.Deliverybox" + } + } + }, "description": "OK" }, "400": { @@ -23598,18 +23414,17 @@ "commons.AccessToken": [] } ], - "summary": "Update the autoresponder of a MailAddress.", + "summary": "Get a DeliveryBox.", "tags": [ "Mail" ] } }, - "/v2/mailaddresses/{mailAddressId}/autoResponder": { - "put": { - "deprecated": true, + "/v2/mailaddresses/{mailAddressId}": { + "delete": { "parameters": [ { - "description": "ID of the MailAddress to update the autoresponder for.", + "description": "ID of the MailAddress to be deleted.", "in": "path", "name": "mailAddressId", "required": true, @@ -23619,44 +23434,6 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "autoResponder": { - "nullable": true, - "properties": { - "active": { - "type": "boolean" - }, - "expiresAt": { - "format": "date-time", - "type": "string" - }, - "message": { - "type": "string" - }, - "startsAt": { - "format": "date-time", - "type": "string" - } - }, - "required": [ - "message", - "active" - ], - "type": "object" - } - }, - "required": [ - "autoResponder" - ] - } - } - }, - "description": "Autoresponder for the MailAddress." - }, "responses": { "308": { "description": "This route is deprecated, and will redirect you to another URL.", @@ -23675,18 +23452,16 @@ "commons.AccessToken": [] } ], - "summary": "Update the autoresponder of a MailAddress.", + "summary": "Delete a MailAddress.", "tags": [ "Mail" - ] - } - }, - "/v2/mail-addresses/{mailAddressId}/catch-all": { - "patch": { - "operationId": "mail-update-mail-address-catch-all", + ], + "deprecated": true + }, + "get": { "parameters": [ { - "description": "ID of the MailAddress to update the catchall for.", + "description": "ID of the MailAddress to be retrieved.", "in": "path", "name": "mailAddressId", "required": true, @@ -23696,23 +23471,46 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "active": { - "type": "boolean" - } - }, - "required": [ - "active" - ] + "responses": { + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "schema": { + "type": "string" + } } } - }, - "description": "Catchall of the MailAddress." + } }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Get a MailAddress.", + "tags": [ + "Mail" + ], + "deprecated": true + } + }, + "/v2/mail-addresses/{mailAddressId}": { + "delete": { + "operationId": "mail-delete-mail-address", + "parameters": [ + { + "description": "ID of the MailAddress to be deleted.", + "in": "path", + "name": "mailAddressId", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + } + ], "responses": { "204": { "description": "OK" @@ -23741,18 +23539,16 @@ "commons.AccessToken": [] } ], - "summary": "Update the catchall of a MailAddress.", + "summary": "Delete a MailAddress.", "tags": [ "Mail" ] - } - }, - "/v2/mailaddresses/{mailAddressId}/catchAll": { - "put": { - "deprecated": true, + }, + "get": { + "operationId": "mail-get-mail-address", "parameters": [ { - "description": "ID of the MailAddress to update the catchall for.", + "description": "ID of the MailAddress to be retrieved.", "in": "path", "name": "mailAddressId", "required": true, @@ -23762,82 +23558,15 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "active": { - "type": "boolean" - } - }, - "required": [ - "active" - ] - } - } - }, - "description": "Catchall of the MailAddress." - }, "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "200": { + "content": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/mail.MailAddress" } } - } - } - }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Update the catchall of a MailAddress.", - "tags": [ - "Mail" - ] - } - }, - "/v2/mail-addresses/{mailAddressId}/catchall": { - "put": { - "operationId": "mail-update-mail-address-catchall-v2-deprecated", - "deprecated": true, - "parameters": [ - { - "description": "ID of the MailAddress to update the catchall for.", - "in": "path", - "name": "mailAddressId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "active": { - "type": "boolean" - } - }, - "required": [ - "active" - ] - } - } - }, - "description": "Catchall of the MailAddress." - }, - "responses": { - "200": { + }, "description": "OK" }, "400": { @@ -23864,20 +23593,21 @@ "commons.AccessToken": [] } ], - "summary": "Update the catchall of a MailAddress.", + "summary": "Get a MailAddress.", "tags": [ "Mail" ] } }, - "/v2/mail-addresses/{mailAddressId}/forward-addresses": { - "patch": { - "operationId": "mail-update-mail-address-forward-addresses", + "/v2/deliveryboxes/{id}/description": { + "put": { + "operationId": "mail-deliverybox-update-description-deprecated", + "deprecated": true, "parameters": [ { - "description": "ID of the MailAddress to update the forward addresses for.", + "description": "ID of the deliverybox", "in": "path", - "name": "mailAddressId", + "name": "id", "required": true, "schema": { "format": "uuid", @@ -23890,42 +23620,33 @@ "application/json": { "schema": { "properties": { - "forwardAddresses": { - "items": { - "format": "email", - "type": "string" - }, - "type": "array" + "description": { + "type": "string" } }, "required": [ - "forwardAddresses" + "description" ] } } - } + }, + "description": "Description of the deliverybox" }, "responses": { - "204": { + "200": { "description": "OK" }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, "403": { - "$ref": "#/components/responses/commons.DefaultError" + "description": "You do not have the permissions to access this content" }, "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "description": "A deliverybox with the specified id was not found" }, "500": { - "$ref": "#/components/responses/commons.DefaultError" + "description": "Internal server error" }, "503": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" + "description": "The service is unavailable." } }, "security": [ @@ -23933,19 +23654,21 @@ "commons.AccessToken": [] } ], - "summary": "Update the forward addresses of a MailAddresses.", + "summary": "Update the description of an deliverybox", "tags": [ "Mail" ] - }, + } + }, + "/v2/deliveryboxes/{id}/password": { "put": { - "operationId": "mail-update-mail-address-forward-addresses-v2-deprecated", + "operationId": "mail-deliverybox-update-password-deprecated", "deprecated": true, "parameters": [ { - "description": "ID of the MailAddress to update the forward addresses for.", + "description": "ID of the deliverybox", "in": "path", - "name": "mailAddressId", + "name": "id", "required": true, "schema": { "format": "uuid", @@ -23958,16 +23681,12 @@ "application/json": { "schema": { "properties": { - "forwardAddresses": { - "items": { - "format": "email", - "type": "string" - }, - "type": "array" + "password": { + "type": "string" } }, "required": [ - "forwardAddresses" + "password" ] } } @@ -23977,23 +23696,17 @@ "200": { "description": "OK" }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, "403": { - "$ref": "#/components/responses/commons.DefaultError" + "description": "You do not have the permissions to access this content" }, "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "description": "A deliverybox with the specified id was not found" }, "500": { - "$ref": "#/components/responses/commons.DefaultError" + "description": "Internal server error" }, "503": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" + "description": "The service is unavailable." } }, "security": [ @@ -24001,47 +23714,25 @@ "commons.AccessToken": [] } ], - "summary": "Update the forward addresses of a MailAddresses.", + "summary": "Update the password for a specific deliverybox", "tags": [ "Mail" ] } }, - "/v2/mailaddresses/{mailAddressId}/forwardaddresses": { - "put": { - "deprecated": true, + "/v2/projects/{projectId}/mailsettings": { + "get": { "parameters": [ { - "description": "ID of the MailAddress to update the forward addresses for.", + "description": "ID of the Project to list mail settings for.", "in": "path", - "name": "mailAddressId", + "name": "projectId", "required": true, "schema": { - "format": "uuid", "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "forwardAddresses": { - "items": { - "format": "email", - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "forwardAddresses" - ] - } - } - } - }, "responses": { "308": { "description": "This route is deprecated, and will redirect you to another URL.", @@ -24060,45 +23751,60 @@ "commons.AccessToken": [] } ], - "summary": "Update the forward addresses of a MailAddresses.", + "summary": "List mail settings of a Project.", "tags": [ "Mail" - ] + ], + "deprecated": true } }, - "/v2/mail-addresses/{mailAddressId}/password": { - "patch": { - "operationId": "mail-update-mail-address-password", + "/v2/projects/{projectId}/mail-settings": { + "get": { + "operationId": "mail-list-project-mail-settings", "parameters": [ { - "description": "ID of the MailAddress to update the password for.", + "description": "ID of the Project to list mail settings for.", "in": "path", - "name": "mailAddressId", + "name": "projectId", "required": true, "schema": { - "format": "uuid", "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "password": { - "type": "string" - } - }, - "required": [ - "password" - ] - } - } - } - }, "responses": { - "204": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "blacklist": { + "items": { + "format": "email", + "type": "string" + }, + "type": "array" + }, + "projectId": { + "type": "string" + }, + "whitelist": { + "items": { + "format": "email", + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "projectId", + "blacklist", + "whitelist" + ], + "type": "object" + } + } + }, "description": "OK" }, "400": { @@ -24125,19 +23831,21 @@ "commons.AccessToken": [] } ], - "summary": "Update the password for a MailAddress.", + "summary": "List mail settings of a Project.", "tags": [ "Mail" ] - }, + } + }, + "/v2/mailaddresses/{id}/address": { "put": { - "operationId": "mail-update-mail-address-password-v2-deprecated", + "operationId": "mail-mailaddress-update-address-deprecated", "deprecated": true, "parameters": [ { - "description": "ID of the MailAddress to update the password for.", + "description": "ID of the mail address", "in": "path", - "name": "mailAddressId", + "name": "id", "required": true, "schema": { "format": "uuid", @@ -24150,38 +23858,34 @@ "application/json": { "schema": { "properties": { - "password": { + "address": { + "format": "email", "type": "string" } }, "required": [ - "password" + "address" ] } } - } + }, + "description": "set mail-address" }, "responses": { "200": { "description": "OK" }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, "403": { - "$ref": "#/components/responses/commons.DefaultError" + "description": "You do not have the permissions to access this content" }, "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "description": "A mailaddress with the specified id was not found" }, "500": { - "$ref": "#/components/responses/commons.DefaultError" + "description": "Internal server error" }, "503": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" + "description": "The service is unavailable." } }, "security": [ @@ -24189,23 +23893,23 @@ "commons.AccessToken": [] } ], - "summary": "Update the password for a MailAddress.", + "summary": "Update mail-address", "tags": [ "Mail" ] } }, - "/v2/mailaddresses/{mailAddressId}/password": { + "/v2/projects/{projectId}/mailsettings/blacklist": { "put": { + "operationId": "mail-projectsetting-update-blacklist-deprecated", "deprecated": true, "parameters": [ { - "description": "ID of the MailAddress to update the password for.", + "description": "ID of the project you want to update blacklist for", "in": "path", - "name": "mailAddressId", + "name": "projectId", "required": true, "schema": { - "format": "uuid", "type": "string" } } @@ -24215,49 +23919,122 @@ "application/json": { "schema": { "properties": { - "password": { - "type": "string" + "blacklist": { + "items": { + "format": "email", + "type": "string" + }, + "type": "array" } }, "required": [ - "password" - ] + "blacklist" + ], + "type": "object" } } } }, "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", - "schema": { - "type": "string" - } + "200": { + "description": "OK" + }, + "403": { + "description": "You do not have the permissions to access this content" + }, + "404": { + "description": "A projectsetting with the specified id was not found" + }, + "500": { + "description": "Internal server error" + }, + "503": { + "description": "The service is unavailable." + } + }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Update blacklist for a given project ID", + "tags": [ + "Mail" + ] + } + }, + "/v2/projects/{projectId}/mailsettings/whitelist": { + "put": { + "operationId": "mail-projectsetting-update-whitelist-deprecated", + "deprecated": true, + "parameters": [ + { + "description": "ID of the project you want to update whitelist for", + "in": "path", + "name": "projectId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "whitelist": { + "items": { + "format": "email", + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "whitelist" + ], + "type": "object" } } } }, + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "You do not have the permissions to access this content" + }, + "404": { + "description": "A projectsetting with the specified id was not found" + }, + "500": { + "description": "Internal server error" + }, + "503": { + "description": "The service is unavailable." + } + }, "security": [ { "commons.AccessToken": [] } ], - "summary": "Update the password for a MailAddress.", + "summary": "Update whitelist for a given project ID", "tags": [ "Mail" ] } }, - "/v2/mail-addresses/{mailAddressId}/quota": { + "/v2/delivery-boxes/{deliveryBoxId}/description": { "patch": { - "operationId": "mail-update-mail-address-quota", + "operationId": "mail-update-delivery-box-description", "parameters": [ { - "description": "ID of the MailAddress to update the quota for.", + "description": "ID of the DeliveryBox to update the description for.", "in": "path", - "name": "mailAddressId", + "name": "deliveryBoxId", "required": true, "schema": { "format": "uuid", @@ -24270,17 +24047,17 @@ "application/json": { "schema": { "properties": { - "quotaInBytes": { - "minimum": -1, - "type": "number" + "description": { + "type": "string" } }, "required": [ - "quotaInBytes" + "description" ] } } - } + }, + "description": "Description of the DeliveryBox." }, "responses": { "204": { @@ -24310,19 +24087,20 @@ "commons.AccessToken": [] } ], - "summary": "Update the quota of a MailAddress.", + "summary": "Update the description of a DeliveryBox.", "tags": [ "Mail" ] - }, - "put": { - "operationId": "mail-update-mail-address-quota-v2-deprecated", - "deprecated": true, + } + }, + "/v2/delivery-boxes/{deliveryBoxId}/password": { + "patch": { + "operationId": "mail-update-delivery-box-password", "parameters": [ { - "description": "ID of the MailAddress to update the quota for.", + "description": "ID of the DeliveryBox to update the password for.", "in": "path", - "name": "mailAddressId", + "name": "deliveryBoxId", "required": true, "schema": { "format": "uuid", @@ -24335,20 +24113,19 @@ "application/json": { "schema": { "properties": { - "quotaInBytes": { - "minimum": -1, - "type": "number" + "password": { + "type": "string" } }, "required": [ - "quotaInBytes" + "password" ] } } } }, "responses": { - "200": { + "204": { "description": "OK" }, "400": { @@ -24375,18 +24152,18 @@ "commons.AccessToken": [] } ], - "summary": "Update the quota of a MailAddress.", + "summary": "Update the password of a DeliveryBox.", "tags": [ "Mail" ] } }, - "/v2/mailaddresses/{mailAddressId}/quota": { - "put": { - "deprecated": true, + "/v2/mail-addresses/{mailAddressId}/address": { + "patch": { + "operationId": "mail-update-mail-address-address", "parameters": [ { - "description": "ID of the MailAddress to update the quota for.", + "description": "ID of the MailAddress to update the address for.", "in": "path", "name": "mailAddressId", "required": true, @@ -24401,29 +24178,39 @@ "application/json": { "schema": { "properties": { - "quotaInBytes": { - "minimum": -1, - "type": "number" + "address": { + "format": "email", + "type": "string" } }, "required": [ - "quotaInBytes" + "address" ] } } } }, "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", - "schema": { - "type": "string" - } - } - } + "204": { + "description": "OK" + }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "500": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "503": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" } }, "security": [ @@ -24431,18 +24218,18 @@ "commons.AccessToken": [] } ], - "summary": "Update the quota of a MailAddress.", + "summary": "Update a MailAddress.", "tags": [ "Mail" ] } }, - "/v2/mail-addresses/{mailAddressId}/spam-protection": { + "/v2/mail-addresses/{mailAddressId}/autoresponder": { "patch": { - "operationId": "mail-update-mail-address-spam-protection", + "operationId": "mail-update-mail-address-autoresponder", "parameters": [ { - "description": "ID of the MailAddress to update the spam protection for.", + "description": "ID of the MailAddress to update the autoresponder for.", "in": "path", "name": "mailAddressId", "required": true, @@ -24457,41 +24244,38 @@ "application/json": { "schema": { "properties": { - "spamProtection": { + "autoResponder": { + "nullable": true, "properties": { "active": { "type": "boolean" }, - "autoDeleteSpam": { - "type": "boolean" + "expiresAt": { + "format": "date-time", + "type": "string" }, - "folder": { - "enum": [ - "inbox", - "spam" - ], + "message": { "type": "string" }, - "relocationMinSpamScore": { - "maximum": 10, - "type": "integer" + "startsAt": { + "format": "date-time", + "type": "string" } }, "required": [ - "active", - "folder", - "relocationMinSpamScore", - "autoDeleteSpam" + "message", + "active" ], "type": "object" } }, "required": [ - "spamProtection" + "autoResponder" ] } } - } + }, + "description": "Autoresponder for the MailAddress." }, "responses": { "204": { @@ -24521,17 +24305,17 @@ "commons.AccessToken": [] } ], - "summary": "Update the spam protection of a MailAddress.", + "summary": "Update the autoresponder of a MailAddress.", "tags": [ "Mail" ] }, "put": { - "operationId": "mail-update-mail-address-spam-protection-v2-deprecated", + "operationId": "mail-update-mail-address-autoresponder-v2-deprecated", "deprecated": true, "parameters": [ { - "description": "ID of the MailAddress to update the spam protection for.", + "description": "ID of the MailAddress to update the autoresponder for.", "in": "path", "name": "mailAddressId", "required": true, @@ -24546,41 +24330,38 @@ "application/json": { "schema": { "properties": { - "spamProtection": { + "autoResponder": { + "nullable": true, "properties": { "active": { "type": "boolean" }, - "autoDeleteSpam": { - "type": "boolean" + "expiresAt": { + "format": "date-time", + "type": "string" }, - "folder": { - "enum": [ - "inbox", - "spam" - ], + "message": { "type": "string" }, - "relocationMinSpamScore": { - "maximum": 10, - "type": "integer" + "startsAt": { + "format": "date-time", + "type": "string" } }, "required": [ - "active", - "folder", - "relocationMinSpamScore", - "autoDeleteSpam" + "message", + "active" ], "type": "object" } }, "required": [ - "spamProtection" + "autoResponder" ] } } - } + }, + "description": "Autoresponder for the MailAddress." }, "responses": { "200": { @@ -24610,18 +24391,18 @@ "commons.AccessToken": [] } ], - "summary": "Update the spam protection of a MailAddress.", + "summary": "Update the autoresponder of a MailAddress.", "tags": [ "Mail" ] } }, - "/v2/mailaddresses/{mailAddressId}/spamprotection": { + "/v2/mailaddresses/{mailAddressId}/autoResponder": { "put": { "deprecated": true, "parameters": [ { - "description": "ID of the MailAddress to update the spam protection for.", + "description": "ID of the MailAddress to update the autoresponder for.", "in": "path", "name": "mailAddressId", "required": true, @@ -24636,41 +24417,38 @@ "application/json": { "schema": { "properties": { - "spamProtection": { + "autoResponder": { + "nullable": true, "properties": { "active": { "type": "boolean" }, - "autoDeleteSpam": { - "type": "boolean" + "expiresAt": { + "format": "date-time", + "type": "string" }, - "folder": { - "enum": [ - "inbox", - "spam" - ], + "message": { "type": "string" }, - "relocationMinSpamScore": { - "maximum": 10, - "type": "integer" + "startsAt": { + "format": "date-time", + "type": "string" } }, "required": [ - "active", - "folder", - "relocationMinSpamScore", - "autoDeleteSpam" + "message", + "active" ], "type": "object" } }, "required": [ - "spamProtection" + "autoResponder" ] } } - } + }, + "description": "Autoresponder for the MailAddress." }, "responses": { "308": { @@ -24690,35 +24468,23 @@ "commons.AccessToken": [] } ], - "summary": "Update the spam protection of a MailAddress.", + "summary": "Update the autoresponder of a MailAddress.", "tags": [ "Mail" ] } }, - "/v2/projects/{projectId}/mail-settings/{mailSetting}": { + "/v2/mail-addresses/{mailAddressId}/catch-all": { "patch": { - "operationId": "mail-update-project-mail-setting", + "operationId": "mail-update-mail-address-catch-all", "parameters": [ { - "description": "ID of the Project to update a mail setting for.", - "in": "path", - "name": "projectId", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "The mail setting to update.", + "description": "ID of the MailAddress to update the catchall for.", "in": "path", - "name": "mailSetting", + "name": "mailAddressId", "required": true, "schema": { - "enum": [ - "blacklist", - "whitelist" - ], + "format": "uuid", "type": "string" } } @@ -24727,41 +24493,18 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "properties": { - "blacklist": { - "items": { - "format": "email", - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "blacklist" - ], - "type": "object" - }, - { - "properties": { - "whitelist": { - "items": { - "format": "email", - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "whitelist" - ], - "type": "object" + "properties": { + "active": { + "type": "boolean" } + }, + "required": [ + "active" ] } } - } + }, + "description": "Catchall of the MailAddress." }, "responses": { "204": { @@ -24791,36 +24534,23 @@ "commons.AccessToken": [] } ], - "summary": "Update a mail setting of a Project.", + "summary": "Update the catchall of a MailAddress.", "tags": [ "Mail" ] } }, - "/v2/projects/{projectId}/mail-settings/{setting}": { + "/v2/mailaddresses/{mailAddressId}/catchAll": { "put": { - "operationId": "mail-update-project-mail-setting-v2-deprecated", "deprecated": true, "parameters": [ { - "description": "ID of the Project to update a mail setting for.", - "in": "path", - "name": "projectId", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "The setting to update.", + "description": "ID of the MailAddress to update the catchall for.", "in": "path", - "name": "setting", + "name": "mailAddressId", "required": true, "schema": { - "enum": [ - "blacklist", - "whitelist" - ], + "format": "uuid", "type": "string" } } @@ -24829,42 +24559,76 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "properties": { - "blacklist": { - "items": { - "format": "email", - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "blacklist" - ], - "type": "object" - }, - { - "properties": { - "whitelist": { - "items": { - "format": "email", - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "whitelist" - ], - "type": "object" - } - ] + "properties": { + "active": { + "type": "boolean" + } + }, + "required": [ + "active" + ] + } + } + }, + "description": "Catchall of the MailAddress." + }, + "responses": { + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "schema": { + "type": "string" + } } } } }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Update the catchall of a MailAddress.", + "tags": [ + "Mail" + ] + } + }, + "/v2/mail-addresses/{mailAddressId}/catchall": { + "put": { + "operationId": "mail-update-mail-address-catchall-v2-deprecated", + "deprecated": true, + "parameters": [ + { + "description": "ID of the MailAddress to update the catchall for.", + "in": "path", + "name": "mailAddressId", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "active": { + "type": "boolean" + } + }, + "required": [ + "active" + ] + } + } + }, + "description": "Catchall of the MailAddress." + }, "responses": { "200": { "description": "OK" @@ -24893,44 +24657,65 @@ "commons.AccessToken": [] } ], - "summary": "Update a mail setting of a Project.", + "summary": "Update the catchall of a MailAddress.", "tags": [ "Mail" ] } }, - "/v2/newsletter-subscriptions/self": { - "get": { - "operationId": "newsletter-get-info", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "active": { - "example": true, - "type": "boolean" - }, - "email": { - "example": "a.lovelace@example.com", + "/v2/mail-addresses/{mailAddressId}/forward-addresses": { + "patch": { + "operationId": "mail-update-mail-address-forward-addresses", + "parameters": [ + { + "description": "ID of the MailAddress to update the forward addresses for.", + "in": "path", + "name": "mailAddressId", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "forwardAddresses": { + "items": { + "format": "email", "type": "string" }, - "registered": { - "example": true, - "type": "boolean" - } - }, - "required": [ - "email", - "active", - "registered" - ], - "type": "object" - } + "type": "array" + } + }, + "required": [ + "forwardAddresses" + ] } - }, - "description": "Status information about the subscription." + } + } + }, + "responses": { + "204": { + "description": "OK" + }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "500": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "503": { + "$ref": "#/components/responses/commons.DefaultError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -24941,16 +24726,64 @@ "commons.AccessToken": [] } ], - "summary": "Getting the subscription status of the subscription.", + "summary": "Update the forward addresses of a MailAddresses.", "tags": [ - "Notification" + "Mail" ] }, - "delete": { - "operationId": "newsletter-unsubscribe-user", + "put": { + "operationId": "mail-update-mail-address-forward-addresses-v2-deprecated", + "deprecated": true, + "parameters": [ + { + "description": "ID of the MailAddress to update the forward addresses for.", + "in": "path", + "name": "mailAddressId", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "forwardAddresses": { + "items": { + "format": "email", + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "forwardAddresses" + ] + } + } + } + }, "responses": { - "204": { - "description": "User has been unsubscribed." + "200": { + "description": "OK" + }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "500": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "503": { + "$ref": "#/components/responses/commons.DefaultError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -24961,16 +24794,47 @@ "commons.AccessToken": [] } ], - "summary": "Unsubscribe a user from the mStudio newsletter.", + "summary": "Update the forward addresses of a MailAddresses.", "tags": [ - "Notification" + "Mail" ] } }, - "/v2/notifications/unread-counts": { - "get": { - "description": "The user is determined by the access token used.\nLighter weight route instead of getting all unread notifications and count yourself.\n", - "parameters": [], + "/v2/mailaddresses/{mailAddressId}/forwardaddresses": { + "put": { + "deprecated": true, + "parameters": [ + { + "description": "ID of the MailAddress to update the forward addresses for.", + "in": "path", + "name": "mailAddressId", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "forwardAddresses": { + "items": { + "format": "email", + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "forwardAddresses" + ] + } + } + } + }, "responses": { "308": { "description": "This route is deprecated, and will redirect you to another URL.", @@ -24989,159 +24853,62 @@ "commons.AccessToken": [] } ], - "summary": "Get the counts for unread notifications of the user.", + "summary": "Update the forward addresses of a MailAddresses.", "tags": [ - "Notification" - ], - "deprecated": true - } - }, - "/v2/notification-unread-counts": { - "get": { - "operationId": "notifications-count-unread-notifications", - "description": "The user is determined by the access token used.\nLighter weight route instead of getting all unread notifications and count yourself.\n", - "parameters": [], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "error": { - "minimum": 0, - "type": "integer" - }, - "info": { - "minimum": 0, - "type": "integer" - }, - "success": { - "minimum": 0, - "type": "integer" - }, - "total": { - "minimum": 0, - "type": "integer" - }, - "warning": { - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "total", - "success", - "info", - "warning", - "error" - ], - "type": "object" - } - } - }, - "description": "Counts of unread notifications" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" - } - }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Get the counts for unread notifications of the user.", - "tags": [ - "Notification" + "Mail" ] } }, - "/v2/notifications": { - "get": { - "operationId": "notifications-list-notifications", - "description": "", + "/v2/mail-addresses/{mailAddressId}/password": { + "patch": { + "operationId": "mail-update-mail-address-password", "parameters": [ { - "in": "query", - "name": "status", - "required": false, + "description": "ID of the MailAddress to update the password for.", + "in": "path", + "name": "mailAddressId", + "required": true, "schema": { - "enum": [ - "unread", - "read" - ], + "format": "uuid", "type": "string" } } ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "items": { - "$ref": "#/components/schemas/messaging.Notification" - }, - "type": "array" - } - } - }, - "description": "List of notifications" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" - } - }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "List all unread notifications.", - "tags": [ - "Notification" - ] - } - }, - "/v2/notifications/status": { - "put": { - "operationId": "notifications-read-all-notifications-deprecated", - "deprecated": true, - "description": "Deprecated route. Please use /v2/notifications/actions/read-all instead.", - "parameters": [], "requestBody": { "content": { "application/json": { "schema": { - "type": "object" + "properties": { + "password": { + "type": "string" + } + }, + "required": [ + "password" + ] } } - }, - "description": "", - "required": false + } }, "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "status": { - "$ref": "#/components/schemas/messaging.NotificationStatus" - } - }, - "required": [ - "status" - ], - "type": "object" - } - } - }, + "204": { "description": "OK" }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, "403": { "$ref": "#/components/responses/commons.DefaultError" }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "500": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "503": { + "$ref": "#/components/responses/commons.DefaultError" + }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -25151,50 +24918,61 @@ "commons.AccessToken": [] } ], - "summary": "Mark all notifications as read (deprecated).", + "summary": "Update the password for a MailAddress.", "tags": [ - "Notification" + "Mail" ] - } - }, - "/v2/notifications/actions/read-all": { - "post": { - "operationId": "notifications-read-all-notifications", - "description": "Mark all notifications for the authenticated user as read.", - "parameters": [], + }, + "put": { + "operationId": "mail-update-mail-address-password-v2-deprecated", + "deprecated": true, + "parameters": [ + { + "description": "ID of the MailAddress to update the password for.", + "in": "path", + "name": "mailAddressId", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { "schema": { - "type": "object" + "properties": { + "password": { + "type": "string" + } + }, + "required": [ + "password" + ] } } - }, - "description": "", - "required": false + } }, "responses": { "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "status": { - "$ref": "#/components/schemas/messaging.NotificationStatus" - } - }, - "required": [ - "status" - ], - "type": "object" - } - } - }, "description": "OK" }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, "403": { "$ref": "#/components/responses/commons.DefaultError" }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "500": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "503": { + "$ref": "#/components/responses/commons.DefaultError" + }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -25204,19 +24982,20 @@ "commons.AccessToken": [] } ], - "summary": "Mark all notifications as read.", + "summary": "Update the password for a MailAddress.", "tags": [ - "Notification" + "Mail" ] } }, - "/v2/notifications/{notificationId}/status": { + "/v2/mailaddresses/{mailAddressId}/password": { "put": { - "operationId": "notifications-read-notification", + "deprecated": true, "parameters": [ { + "description": "ID of the MailAddress to update the password for.", "in": "path", - "name": "notificationId", + "name": "mailAddressId", "required": true, "schema": { "format": "uuid", @@ -25229,44 +25008,28 @@ "application/json": { "schema": { "properties": { - "status": { - "$ref": "#/components/schemas/messaging.NotificationStatus" + "password": { + "type": "string" } }, "required": [ - "status" - ], - "type": "object" + "password" + ] } } - }, - "description": "", - "required": true + } }, "responses": { - "200": { - "content": { - "application/json": { + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", "schema": { - "properties": { - "status": { - "$ref": "#/components/schemas/messaging.NotificationStatus" - } - }, - "required": [ - "status" - ], - "type": "object" + "type": "string" } } - }, - "description": "OK" - }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" + } } }, "security": [ @@ -25274,73 +25037,62 @@ "commons.AccessToken": [] } ], - "summary": "Mark notification as read.", + "summary": "Update the password for a MailAddress.", "tags": [ - "Notification" + "Mail" ] } }, - "/v2/orders": { - "post": { - "operationId": "order-create-order", - "description": "", + "/v2/mail-addresses/{mailAddressId}/quota": { + "patch": { + "operationId": "mail-update-mail-address-quota", + "parameters": [ + { + "description": "ID of the MailAddress to update the quota for.", + "in": "path", + "name": "mailAddressId", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { "schema": { "properties": { - "orderData": { - "oneOf": [ - { - "$ref": "#/components/schemas/order.ProjectHostingOrder" - }, - { - "$ref": "#/components/schemas/order.ServerOrder" - }, - { - "$ref": "#/components/schemas/order.DomainOrder" - } - ] - }, - "orderType": { - "enum": [ - "domain", - "projectHosting", - "server" - ], - "type": "string" + "quotaInBytes": { + "minimum": -1, + "type": "number" } }, - "type": "object" + "required": [ + "quotaInBytes" + ] } } - }, - "description": "The Order to create.", - "required": true + } }, "responses": { - "201": { - "content": { - "application/json": { - "schema": { - "properties": { - "orderId": { - "type": "string" - } - }, - "required": [ - "orderId" - ] - } - } - }, - "description": "" + "204": { + "description": "OK" }, "400": { "$ref": "#/components/responses/commons.ValidationError" }, "403": { - "$ref": "#/components/responses/commons.RateLimitError" + "$ref": "#/components/responses/commons.DefaultError" + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "500": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "503": { + "$ref": "#/components/responses/commons.DefaultError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -25351,67 +25103,62 @@ "commons.AccessToken": [] } ], - "summary": "Create an Order.", + "summary": "Update the quota of a MailAddress.", "tags": [ - "Contract" + "Mail" ] - } - }, - "/v2/tariff-changes": { - "post": { - "operationId": "order-create-tariff-change", - "description": "", + }, + "put": { + "operationId": "mail-update-mail-address-quota-v2-deprecated", + "deprecated": true, + "parameters": [ + { + "description": "ID of the MailAddress to update the quota for.", + "in": "path", + "name": "mailAddressId", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { "schema": { "properties": { - "tariffChangeData": { - "oneOf": [ - { - "$ref": "#/components/schemas/order.ProjectHostingTariffChange" - }, - { - "$ref": "#/components/schemas/order.ServerTariffChange" - } - ] - }, - "tariffChangeType": { - "enum": [ - "projectHosting", - "server" - ], - "type": "string" + "quotaInBytes": { + "minimum": -1, + "type": "number" } }, - "type": "object" + "required": [ + "quotaInBytes" + ] } } - }, - "description": "The Order to create.", - "required": true + } }, "responses": { - "201": { - "content": { - "application/json": { - "schema": { - "properties": { - "orderId": { - "type": "string" - } - }, - "required": [ - "orderId" - ] - } - } - }, - "description": "" + "200": { + "description": "OK" }, "400": { "$ref": "#/components/responses/commons.ValidationError" }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "500": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "503": { + "$ref": "#/components/responses/commons.DefaultError" + }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -25421,21 +25168,20 @@ "commons.AccessToken": [] } ], - "summary": "Create TariffChange Order.", + "summary": "Update the quota of a MailAddress.", "tags": [ - "Contract" + "Mail" ] } }, - "/v2/orders/{orderId}": { - "get": { - "operationId": "order-get-order", - "description": "Get details of a single Order, User must have access to the Order/Customer.", + "/v2/mailaddresses/{mailAddressId}/quota": { + "put": { + "deprecated": true, "parameters": [ { - "example": "123e4567-e89b-12d3-a456-426614174000", + "description": "ID of the MailAddress to update the quota for.", "in": "path", - "name": "orderId", + "name": "mailAddressId", "required": true, "schema": { "format": "uuid", @@ -25443,19 +25189,34 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "quotaInBytes": { + "minimum": -1, + "type": "number" + } + }, + "required": [ + "quotaInBytes" + ] + } + } + } + }, "responses": { - "200": { - "content": { - "application/json": { + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", "schema": { - "$ref": "#/components/schemas/order.CustomerOrder" + "type": "string" } } - }, - "description": "" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" + } } }, "security": [ @@ -25463,108 +25224,86 @@ "commons.AccessToken": [] } ], - "summary": "Get Order for Customer.", + "summary": "Update the quota of a MailAddress.", "tags": [ - "Contract" + "Mail" ] } }, - "/v2/customers/{customerId}/orders": { - "get": { - "operationId": "order-list-customer-orders", - "description": "The list of Orders of a Customer the User has access to, can be filtered by orderStatus, articleTemplate and count.", + "/v2/mail-addresses/{mailAddressId}/spam-protection": { + "patch": { + "operationId": "mail-update-mail-address-spam-protection", "parameters": [ { - "example": "154219e9-bf4a-4f41-9c72-0449a98db62f", + "description": "ID of the MailAddress to update the spam protection for.", "in": "path", - "name": "customerId", + "name": "mailAddressId", "required": true, "schema": { + "format": "uuid", "type": "string" } - }, - { - "example": 1000, - "in": "query", - "name": "limit", - "required": false, - "schema": { - "minimum": 0, - "type": "integer" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "spamProtection": { + "properties": { + "active": { + "type": "boolean" + }, + "autoDeleteSpam": { + "type": "boolean" + }, + "folder": { + "enum": [ + "inbox", + "spam" + ], + "type": "string" + }, + "relocationMinSpamScore": { + "maximum": 10, + "type": "integer" + } + }, + "required": [ + "active", + "folder", + "relocationMinSpamScore", + "autoDeleteSpam" + ], + "type": "object" + } + }, + "required": [ + "spamProtection" + ] + } } + } + }, + "responses": { + "204": { + "description": "OK" }, - { - "example": 0, - "in": "query", - "name": "skip", - "required": false, - "schema": { - "minimum": 0, - "type": "integer" - } + "400": { + "$ref": "#/components/responses/commons.ValidationError" }, - { - "example": 1, - "in": "query", - "name": "page", - "required": false, - "schema": { - "minimum": 0, - "type": "integer" - } + "403": { + "$ref": "#/components/responses/commons.DefaultError" }, - { - "example": [], - "in": "query", - "name": "includesStatus", - "required": false, - "schema": { - "items": { - "$ref": "#/components/schemas/order.OrderStatus" - }, - "type": "array" - } + "404": { + "$ref": "#/components/responses/commons.NotFoundError" }, - { - "example": [], - "in": "query", - "name": "excludesStatus", - "required": false, - "schema": { - "items": { - "$ref": "#/components/schemas/order.OrderStatus" - }, - "type": "array" - } + "500": { + "$ref": "#/components/responses/commons.DefaultError" }, - { - "example": [ - "PS23-BASIC-0001" - ], - "in": "query", - "name": "templateNames", - "required": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array" - } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "items": { - "$ref": "#/components/schemas/order.CustomerOrder" - }, - "type": "array" - } - } - }, - "description": "" + "503": { + "$ref": "#/components/responses/commons.DefaultError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -25575,259 +25314,85 @@ "commons.AccessToken": [] } ], - "summary": "Get list of Orders of a Customer.", + "summary": "Update the spam protection of a MailAddress.", "tags": [ - "Contract" + "Mail" ] - } - }, - "/v2/projects/{projectId}/orders": { - "get": { - "operationId": "order-list-project-orders", - "description": "The list of Order of a Project the User has access to, can be filtered by orderStatus, articleTemplate and count.", + }, + "put": { + "operationId": "mail-update-mail-address-spam-protection-v2-deprecated", + "deprecated": true, "parameters": [ { - "example": "e7c4b2e6-e38f-4c9b-8583-08bd627ff4d8", + "description": "ID of the MailAddress to update the spam protection for.", "in": "path", - "name": "projectId", + "name": "mailAddressId", "required": true, "schema": { "format": "uuid", "type": "string" } - }, - { - "example": 1000, - "in": "query", - "name": "limit", - "required": false, - "schema": { - "minimum": 0, - "type": "integer" - } - }, - { - "example": 0, - "in": "query", - "name": "skip", - "required": false, - "schema": { - "minimum": 0, - "type": "integer" - } - }, - { - "example": 1, - "in": "query", - "name": "page", - "required": false, - "schema": { - "minimum": 0, - "type": "integer" - } - }, - { - "example": [], - "in": "query", - "name": "includesStatus", - "required": false, - "schema": { - "items": { - "$ref": "#/components/schemas/order.OrderStatus" - }, - "type": "array" - } - }, - { - "example": [], - "in": "query", - "name": "excludesStatus", - "required": false, - "schema": { - "items": { - "$ref": "#/components/schemas/order.OrderStatus" - }, - "type": "array" - } - }, - { - "example": [ - "PS23-BASIC-0001" - ], - "in": "query", - "name": "templateNames", - "required": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array" - } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "items": { - "$ref": "#/components/schemas/order.CustomerOrder" - }, - "type": "array" - } - } - }, - "description": "" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" - } - }, - "security": [ - { - "commons.AccessToken": [] } ], - "summary": "Get list of Orders of a Project.", - "tags": [ - "Contract" - ] - } - }, - "/v2/order-previews": { - "post": { - "operationId": "order-preview-order", "requestBody": { "content": { "application/json": { "schema": { "properties": { - "orderData": { - "oneOf": [ - { - "$ref": "#/components/schemas/order.ProjectHostingOrderPreview" + "spamProtection": { + "properties": { + "active": { + "type": "boolean" }, - { - "$ref": "#/components/schemas/order.ServerOrderPreview" + "autoDeleteSpam": { + "type": "boolean" }, - { - "$ref": "#/components/schemas/order.DomainOrderPreview" - } - ] - }, - "orderType": { - "enum": [ - "domain", - "projectHosting", - "server" + "folder": { + "enum": [ + "inbox", + "spam" + ], + "type": "string" + }, + "relocationMinSpamScore": { + "maximum": 10, + "type": "integer" + } + }, + "required": [ + "active", + "folder", + "relocationMinSpamScore", + "autoDeleteSpam" ], - "type": "string" + "type": "object" } }, - "type": "object" + "required": [ + "spamProtection" + ] } } - }, - "description": "Your order information", - "required": true + } }, "responses": { "200": { - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/order.HostingOrderPreviewResponse" - }, - { - "$ref": "#/components/schemas/order.DomainOrderPreviewResponse" - } - ] - } - } - }, - "description": "" + "description": "OK" }, "400": { "$ref": "#/components/responses/commons.ValidationError" }, - "default": { + "403": { "$ref": "#/components/responses/commons.DefaultError" - } - }, - "security": [], - "summary": "Preview Order.", - "tags": [ - "Contract" - ] - } - }, - "/v2/tariff-change-previews": { - "post": { - "operationId": "order-preview-tariff-change", - "description": "", - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "tariffChangeData": { - "oneOf": [ - { - "$ref": "#/components/schemas/order.ProjectHostingTariffChange" - }, - { - "$ref": "#/components/schemas/order.ServerTariffChange" - } - ] - }, - "tariffChangeType": { - "enum": [ - "projectHosting", - "server" - ], - "type": "string" - } - }, - "type": "object" - } - } }, - "description": "Your order information", - "required": true - }, - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "machineTypePrice": { - "example": 100, - "type": "number" - }, - "storagePrice": { - "example": 900, - "type": "number" - }, - "totalPrice": { - "example": 1000, - "type": "number" - } - }, - "required": [ - "totalPrice", - "storagePrice", - "machineTypePrice" - ] - } - } - }, - "description": "" + "404": { + "$ref": "#/components/responses/commons.NotFoundError" }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" + "500": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "503": { + "$ref": "#/components/responses/commons.DefaultError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -25838,47 +25403,68 @@ "commons.AccessToken": [] } ], - "summary": "Preview TariffChange.", + "summary": "Update the spam protection of a MailAddress.", "tags": [ - "Contract" + "Mail" ] } }, - "/v2/pageinsights": { - "get": { + "/v2/mailaddresses/{mailAddressId}/spamprotection": { + "put": { + "deprecated": true, "parameters": [ { - "description": "A domain or subdomain.", - "example": "mittwald.de", - "in": "query", - "name": "domain", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "A path of the domain.", - "example": "/", - "in": "query", - "name": "path", + "description": "ID of the MailAddress to update the spam protection for.", + "in": "path", + "name": "mailAddressId", "required": true, "schema": { - "type": "string" - } - }, - { - "description": "Query data for a specific date, defaults to date today.", - "example": "2017-07-21", - "in": "query", - "name": "date", - "required": false, - "schema": { - "format": "date", + "format": "uuid", "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "spamProtection": { + "properties": { + "active": { + "type": "boolean" + }, + "autoDeleteSpam": { + "type": "boolean" + }, + "folder": { + "enum": [ + "inbox", + "spam" + ], + "type": "string" + }, + "relocationMinSpamScore": { + "maximum": 10, + "type": "integer" + } + }, + "required": [ + "active", + "folder", + "relocationMinSpamScore", + "autoDeleteSpam" + ], + "type": "object" + } + }, + "required": [ + "spamProtection" + ] + } + } + } + }, "responses": { "308": { "description": "This route is deprecated, and will redirect you to another URL.", @@ -25897,131 +25483,81 @@ "commons.AccessToken": [] } ], - "summary": "Get detailed performance data for a given domain and path.", + "summary": "Update the spam protection of a MailAddress.", "tags": [ - "Page Insights" - ], - "deprecated": true + "Mail" + ] } }, - "/v2/page-insights": { - "get": { - "operationId": "pageinsights-get-performance-data", + "/v2/projects/{projectId}/mail-settings/{mailSetting}": { + "patch": { + "operationId": "mail-update-project-mail-setting", "parameters": [ { - "description": "A domain or subdomain.", - "example": "mittwald.de", - "in": "query", - "name": "domain", + "description": "ID of the Project to update a mail setting for.", + "in": "path", + "name": "projectId", "required": true, "schema": { "type": "string" } }, { - "description": "A path of the domain.", - "example": "/", - "in": "query", - "name": "path", + "description": "The mail setting to update.", + "in": "path", + "name": "mailSetting", "required": true, "schema": { - "type": "string" - } - }, - { - "description": "Query data for a specific date, defaults to date today.", - "example": "2017-07-21", - "in": "query", - "name": "date", - "required": false, - "schema": { - "format": "date", + "enum": [ + "blacklist", + "whitelist" + ], "type": "string" } } ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "createdAt": { - "format": "date-time", - "type": "string" - }, - "domain": { - "type": "string" - }, - "metrics": { - "items": { - "properties": { - "createdAt": { - "format": "date-time", - "type": "string" - }, - "name": { - "type": "string" - }, - "score": { - "format": "double", - "nullable": true, - "type": "number" - }, - "value": { - "format": "double", - "type": "number" - } + "requestBody": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "blacklist": { + "items": { + "format": "email", + "type": "string" }, - "required": [ - "name", - "value", - "createdAt" - ], - "type": "object" - }, - "type": "array" - }, - "moreDataAvailable": { - "items": { - "format": "date", - "type": "string" - }, - "type": "array" - }, - "path": { - "type": "string" - }, - "performanceScore": { - "format": "double", - "type": "number" + "type": "array" + } }, - "screenshot": { - "properties": { - "createdAt": { - "format": "date-time", + "required": [ + "blacklist" + ], + "type": "object" + }, + { + "properties": { + "whitelist": { + "items": { + "format": "email", "type": "string" }, - "fileRef": { - "type": "string" - } - }, - "required": [ - "fileRef", - "createdAt" - ], - "type": "object" - } - }, - "required": [ - "domain", - "path", - "performanceScore" - ], - "type": "object" - } + "type": "array" + } + }, + "required": [ + "whitelist" + ], + "type": "object" + } + ] } - }, + } + } + }, + "responses": { + "204": { "description": "OK" }, "400": { @@ -26030,6 +25566,15 @@ "403": { "$ref": "#/components/responses/commons.DefaultError" }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "500": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "503": { + "$ref": "#/components/responses/commons.DefaultError" + }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -26039,71 +25584,82 @@ "commons.AccessToken": [] } ], - "summary": "Get detailed performance data for a given domain and path.", + "summary": "Update a mail setting of a Project.", "tags": [ - "Page Insights" + "Mail" ] } }, - "/v2/projects/{projectId}/straces/{straceId}": { - "get": { - "operationId": "pageinsights-get-strace-data", + "/v2/projects/{projectId}/mail-settings/{setting}": { + "put": { + "operationId": "mail-update-project-mail-setting-v2-deprecated", + "deprecated": true, "parameters": [ { - "description": "ID of the strace to get the data for.", + "description": "ID of the Project to update a mail setting for.", "in": "path", - "name": "straceId", + "name": "projectId", "required": true, "schema": { - "format": "uuid", "type": "string" } }, { - "description": "ID of the project the strace belongs to.", + "description": "The setting to update.", "in": "path", - "name": "projectId", + "name": "setting", "required": true, "schema": { - "format": "uuid", + "enum": [ + "blacklist", + "whitelist" + ], "type": "string" } } ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "executedAt": { - "format": "date-time", - "type": "string" - }, - "id": { - "format": "uuid", - "type": "string" - }, - "result": { - "oneOf": [ - { - "$ref": "#/components/schemas/strace.Error" + "requestBody": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "blacklist": { + "items": { + "format": "email", + "type": "string" }, - { - "$ref": "#/components/schemas/strace.Data" - } - ] - } + "type": "array" + } + }, + "required": [ + "blacklist" + ], + "type": "object" }, - "required": [ - "id", - "executedAt", - "result" - ], - "type": "object" - } + { + "properties": { + "whitelist": { + "items": { + "format": "email", + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "whitelist" + ], + "type": "object" + } + ] } - }, + } + } + }, + "responses": { + "200": { "description": "OK" }, "400": { @@ -26112,6 +25668,15 @@ "403": { "$ref": "#/components/responses/commons.DefaultError" }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "500": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "503": { + "$ref": "#/components/responses/commons.DefaultError" + }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -26121,41 +25686,89 @@ "commons.AccessToken": [] } ], - "summary": "Get all data for a given strace.", + "summary": "Update a mail setting of a Project.", "tags": [ - "Page Insights" + "Mail" ] } }, - "/v2/projects/{projectId}/pageinsights": { + "/v2/newsletter-subscriptions/self": { "get": { - "parameters": [ - { - "description": "ID of the Project to list domains for.", - "in": "path", - "name": "projectId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" - } - }, - { - "description": "Filter for a specific domain.", - "example": "mittwald.de", - "in": "query", - "name": "domain", - "required": false, - "schema": { - "type": "string" - } - } - ], + "operationId": "newsletter-get-info", "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "active": { + "example": true, + "type": "boolean" + }, + "email": { + "example": "a.lovelace@example.com", + "type": "string" + }, + "registered": { + "example": true, + "type": "boolean" + } + }, + "required": [ + "email", + "active", + "registered" + ], + "type": "object" + } + } + }, + "description": "Status information about the subscription." + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } + }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Getting the subscription status of the subscription.", + "tags": [ + "Notification" + ] + }, + "delete": { + "operationId": "newsletter-unsubscribe-user", + "responses": { + "204": { + "description": "User has been unsubscribed." + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } + }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Unsubscribe a user from the mStudio newsletter.", + "tags": [ + "Notification" + ] + } + }, + "/v2/notifications/unread-counts": { + "get": { + "description": "The user is determined by the access token used.\nLighter weight route instead of getting all unread notifications and count yourself.\n", + "parameters": [], + "responses": { + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", "schema": { "type": "string" @@ -26169,34 +25782,87 @@ "commons.AccessToken": [] } ], - "summary": "List websites (specified as domain and path) from a project where performance data is available.", + "summary": "Get the counts for unread notifications of the user.", "tags": [ - "Page Insights" + "Notification" ], "deprecated": true } }, - "/v2/projects/{projectId}/page-insights": { + "/v2/notification-unread-counts": { "get": { - "operationId": "pageinsights-list-performance-data-for-project", - "parameters": [ - { - "description": "ID of the Project to list domains for.", - "in": "path", - "name": "projectId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" - } + "operationId": "notifications-count-unread-notifications", + "description": "The user is determined by the access token used.\nLighter weight route instead of getting all unread notifications and count yourself.\n", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "error": { + "minimum": 0, + "type": "integer" + }, + "info": { + "minimum": 0, + "type": "integer" + }, + "success": { + "minimum": 0, + "type": "integer" + }, + "total": { + "minimum": 0, + "type": "integer" + }, + "warning": { + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "total", + "success", + "info", + "warning", + "error" + ], + "type": "object" + } + } + }, + "description": "Counts of unread notifications" }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } + }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Get the counts for unread notifications of the user.", + "tags": [ + "Notification" + ] + } + }, + "/v2/notifications": { + "get": { + "operationId": "notifications-list-notifications", + "description": "", + "parameters": [ { - "description": "Filter for a specific domain.", - "example": "mittwald.de", "in": "query", - "name": "domain", + "name": "status", "required": false, "schema": { + "enum": [ + "unread", + "read" + ], "type": "string" } } @@ -26207,54 +25873,13 @@ "application/json": { "schema": { "items": { - "properties": { - "domain": { - "type": "string" - }, - "paths": { - "items": { - "properties": { - "createdAt": { - "format": "date-time", - "type": "string" - }, - "path": { - "type": "string" - }, - "performanceScore": { - "type": "integer" - }, - "screenshotFileRef": { - "type": "string" - } - }, - "required": [ - "path", - "performanceScore", - "createdAt" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "domain", - "paths" - ], - "type": "object" + "$ref": "#/components/schemas/messaging.Notification" }, "type": "array" } } }, - "description": "OK" - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" + "description": "List of notifications" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -26265,69 +25890,47 @@ "commons.AccessToken": [] } ], - "summary": "List websites (specified as domain and path) from a project where performance data is available.", + "summary": "List all unread notifications.", "tags": [ - "Page Insights" + "Notification" ] } }, - "/v2/projects/{projectId}/straces": { - "post": { - "operationId": "pageinsights-schedule-strace", - "parameters": [ - { - "description": "ID of a project to own the created strace. It must exist a ingress with the same hostname as in the url to be measured.", - "in": "path", - "name": "projectId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" - } - } - ], + "/v2/notifications/status": { + "put": { + "operationId": "notifications-read-all-notifications-deprecated", + "deprecated": true, + "description": "Deprecated route. Please use /v2/notifications/actions/read-all instead.", + "parameters": [], "requestBody": { "content": { "application/json": { "schema": { - "properties": { - "url": { - "description": "A call to this URL is measured via strace.", - "example": "https://example.com", - "type": "string" - } - }, - "required": [ - "url" - ], "type": "object" } } }, - "description": "" + "description": "", + "required": false }, "responses": { - "202": { + "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "format": "uuid", - "type": "string" + "status": { + "$ref": "#/components/schemas/messaging.NotificationStatus" } }, "required": [ - "id" + "status" ], "type": "object" } } }, - "description": "Scheduled" - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" + "description": "OK" }, "403": { "$ref": "#/components/responses/commons.DefaultError" @@ -26341,114 +25944,163 @@ "commons.AccessToken": [] } ], - "summary": "Schedule a strace measurement for a single http request.", + "summary": "Mark all notifications as read (deprecated).", "tags": [ - "Page Insights" + "Notification" ] } }, - "/v2/password-policies/{passwordPolicy}": { - "get": { - "operationId": "password-validation-get-password-policy", - "parameters": [ - { - "description": "The name of the PasswordPolicy to be retrieved.", - "examples": { - "default": { - "description": "The default PasswordPolicy of mittwald.", - "value": "mittwald" - }, - "example": { - "description": "An example policy showcasing possible rule definitions.", - "value": "examplePolicy" + "/v2/notifications/actions/read-all": { + "post": { + "operationId": "notifications-read-all-notifications", + "description": "Mark all notifications for the authenticated user as read.", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object" } - }, - "in": "path", - "name": "passwordPolicy", - "required": true, - "schema": { - "type": "string" } - } - ], + }, + "description": "", + "required": false + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/policy.Policy" + "properties": { + "status": { + "$ref": "#/components/schemas/messaging.NotificationStatus" + } + }, + "required": [ + "status" + ], + "type": "object" } } }, - "description": "The PasswordPolicy to be retrieved." + "description": "OK" + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "summary": "Get a PasswordPolicy.", + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Mark all notifications as read.", "tags": [ - "User" + "Notification" ] } }, - "/v2/password/policies/{path}": { - "get": { - "operationId": "password-validation-get-password-policy-v2-deprecated", - "deprecated": true, + "/v2/notifications/{notificationId}/status": { + "put": { + "operationId": "notifications-read-notification", "parameters": [ { "in": "path", - "name": "path", + "name": "notificationId", "required": true, "schema": { + "format": "uuid", "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "status": { + "$ref": "#/components/schemas/messaging.NotificationStatus" + } + }, + "required": [ + "status" + ], + "type": "object" + } + } + }, + "description": "", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/policy.Policy" + "properties": { + "status": { + "$ref": "#/components/schemas/messaging.NotificationStatus" + } + }, + "required": [ + "status" + ], + "type": "object" } } }, - "description": "The requested password policy" + "description": "OK" + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "summary": "Get a password policy.", + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Mark notification as read.", "tags": [ - "User" + "Notification" ] } }, - "/v2/project-invites/{projectInviteId}/actions/accept": { + "/v2/orders": { "post": { - "operationId": "project-accept-project-invite", - "parameters": [ - { - "description": "ID of the ProjectInvite to be accepted.", - "in": "path", - "name": "projectInviteId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" - } - } - ], + "operationId": "order-create-order", + "description": "", "requestBody": { "content": { "application/json": { "schema": { "properties": { - "invitationToken": { - "description": "Token contained in the invite for authentication.", + "orderData": { + "oneOf": [ + { + "$ref": "#/components/schemas/order.ProjectHostingOrder" + }, + { + "$ref": "#/components/schemas/order.ServerOrder" + }, + { + "$ref": "#/components/schemas/order.DomainOrder" + } + ] + }, + "orderType": { + "enum": [ + "domain", + "projectHosting", + "server" + ], "type": "string" } }, @@ -26456,20 +26108,32 @@ } } }, + "description": "The Order to create.", "required": true }, "responses": { - "204": { + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "orderId": { + "type": "string" + } + }, + "required": [ + "orderId" + ] + } + } + }, "description": "" }, "400": { "$ref": "#/components/responses/commons.ValidationError" }, "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "412": { - "$ref": "#/components/responses/commons.DefaultError" + "$ref": "#/components/responses/commons.RateLimitError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -26480,92 +26144,91 @@ "commons.AccessToken": [] } ], - "summary": "Accept a ProjectInvite.", + "summary": "Create an Order.", "tags": [ - "Project" + "Contract" ] } }, - "/v2/project/{projectId}/invites": { + "/v2/tariff-changes": { "post": { - "parameters": [ - { - "description": "ID of the Project to create a ProjectInvite for.", - "in": "path", - "name": "projectId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" - } - } - ], + "operationId": "order-create-tariff-change", + "description": "", "requestBody": { "content": { "application/json": { "schema": { "properties": { - "mailAddress": { - "description": "Mail-address of the person to be invited.", - "format": "email", - "type": "string" - }, - "membershipExpiresAt": { - "description": "Time the resulting ProjectMembership should expire at.", - "format": "date-time", - "type": "string" + "tariffChangeData": { + "oneOf": [ + { + "$ref": "#/components/schemas/order.ProjectHostingTariffChange" + }, + { + "$ref": "#/components/schemas/order.ServerTariffChange" + } + ] }, - "message": { - "description": "Message contained in the ProjectInvite.", + "tariffChangeType": { + "enum": [ + "projectHosting", + "server" + ], "type": "string" - }, - "role": { - "$ref": "#/components/schemas/membership.ProjectRoles" } }, - "required": [ - "mailAddress", - "role" - ], "type": "object" } } }, + "description": "The Order to create.", "required": true }, "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "201": { + "content": { + "application/json": { "schema": { - "type": "string" + "properties": { + "orderId": { + "type": "string" + } + }, + "required": [ + "orderId" + ] } } - } - } - }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Create a ProjectInvite.", - "tags": [ - "Project" + }, + "description": "" + }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } + }, + "security": [ + { + "commons.AccessToken": [] + } ], - "deprecated": true + "summary": "Create TariffChange Order.", + "tags": [ + "Contract" + ] } }, - "/v2/projects/{projectId}/invites": { - "post": { - "operationId": "project-create-project-invite", + "/v2/orders/{orderId}": { + "get": { + "operationId": "order-get-order", + "description": "Get details of a single Order, User must have access to the Order/Customer.", "parameters": [ { - "description": "ID of the Project to create a ProjectInvite for.", + "example": "123e4567-e89b-12d3-a456-426614174000", "in": "path", - "name": "projectId", + "name": "orderId", "required": true, "schema": { "format": "uuid", @@ -26573,55 +26236,16 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "mailAddress": { - "description": "Mail-address of the person to be invited.", - "format": "email", - "type": "string" - }, - "membershipExpiresAt": { - "description": "Time the resulting ProjectMembership should expire at.", - "format": "date-time", - "type": "string" - }, - "message": { - "description": "Message contained in the ProjectInvite.", - "type": "string" - }, - "role": { - "$ref": "#/components/schemas/membership.ProjectRoles" - } - }, - "required": [ - "mailAddress", - "role" - ], - "type": "object" - } - } - }, - "required": true - }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/membership.ProjectInvite" + "$ref": "#/components/schemas/order.CustomerOrder" } } }, - "description": "Created" - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "409": { - "$ref": "#/components/responses/commons.DefaultError" + "description": "" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -26632,152 +26256,108 @@ "commons.AccessToken": [] } ], - "summary": "Create a ProjectInvite.", + "summary": "Get Order for Customer.", "tags": [ - "Project" + "Contract" ] - }, + } + }, + "/v2/customers/{customerId}/orders": { "get": { - "operationId": "project-list-invites-for-project", + "operationId": "order-list-customer-orders", + "description": "The list of Orders of a Customer the User has access to, can be filtered by orderStatus, articleTemplate and count.", "parameters": [ { - "description": "ID of the Project to list invites for.", + "example": "154219e9-bf4a-4f41-9c72-0449a98db62f", "in": "path", - "name": "projectId", + "name": "customerId", "required": true, "schema": { "type": "string" } }, { + "example": 1000, "in": "query", "name": "limit", "required": false, "schema": { + "minimum": 0, "type": "integer" } }, { + "example": 0, "in": "query", "name": "skip", "required": false, "schema": { + "minimum": 0, "type": "integer" } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "items": { - "$ref": "#/components/schemas/membership.ProjectInvite" - }, - "type": "array" - } - } - }, - "description": "OK", - "headers": { - "X-Pagination-Limit": { - "schema": { - "type": "number" - } - }, - "X-Pagination-Skip": { - "schema": { - "type": "number" - } - }, - "X-Pagination-TotalCount": { - "schema": { - "type": "number" - } - } + }, + { + "example": 1, + "in": "query", + "name": "page", + "required": false, + "schema": { + "minimum": 0, + "type": "integer" } }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" + { + "example": [], + "in": "query", + "name": "includesStatus", + "required": false, + "schema": { + "items": { + "$ref": "#/components/schemas/order.OrderStatus" + }, + "type": "array" + } }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" - } - }, - "security": [ { - "commons.AccessToken": [] - } - ], - "summary": "List Invites belonging to a Project.", - "tags": [ - "Project" - ] - } - }, - "/v2/servers/{serverId}/projects": { - "post": { - "operationId": "project-create-project", - "parameters": [ + "example": [], + "in": "query", + "name": "excludesStatus", + "required": false, + "schema": { + "items": { + "$ref": "#/components/schemas/order.OrderStatus" + }, + "type": "array" + } + }, { - "description": "ID of the Server to create the Project for.", - "in": "path", - "name": "serverId", - "required": true, + "example": [ + "PS23-BASIC-0001" + ], + "in": "query", + "name": "templateNames", + "required": false, "schema": { - "format": "uuid", - "type": "string" + "items": { + "type": "string" + }, + "type": "array" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "description": { - "description": "Name of the Project as it is displayed in the mStudio.", - "example": "My first Project!", - "type": "string" - } - }, - "required": [ - "description" - ], - "type": "object" - } - } - }, - "description": "" - }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "properties": { - "id": { - "format": "uuid", - "type": "string" - } + "items": { + "$ref": "#/components/schemas/order.CustomerOrder" }, - "required": [ - "id" - ], - "type": "object" + "type": "array" } } }, - "description": "Created" - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "412": { - "$ref": "#/components/responses/commons.DefaultError" + "description": "" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -26788,36 +26368,108 @@ "commons.AccessToken": [] } ], - "summary": "Create a Project belonging to a Server.", + "summary": "Get list of Orders of a Customer.", "tags": [ - "Project" + "Contract" ] } }, - "/v2/project-invites/{projectInviteId}/actions/decline": { - "post": { - "operationId": "project-decline-project-invite", + "/v2/projects/{projectId}/orders": { + "get": { + "operationId": "order-list-project-orders", + "description": "The list of Order of a Project the User has access to, can be filtered by orderStatus, articleTemplate and count.", "parameters": [ { - "description": "ID of the ProjectInvite to be declined.", + "example": "e7c4b2e6-e38f-4c9b-8583-08bd627ff4d8", "in": "path", - "name": "projectInviteId", + "name": "projectId", "required": true, "schema": { "format": "uuid", "type": "string" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": {} + }, + { + "example": 1000, + "in": "query", + "name": "limit", + "required": false, + "schema": { + "minimum": 0, + "type": "integer" + } + }, + { + "example": 0, + "in": "query", + "name": "skip", + "required": false, + "schema": { + "minimum": 0, + "type": "integer" + } + }, + { + "example": 1, + "in": "query", + "name": "page", + "required": false, + "schema": { + "minimum": 0, + "type": "integer" + } + }, + { + "example": [], + "in": "query", + "name": "includesStatus", + "required": false, + "schema": { + "items": { + "$ref": "#/components/schemas/order.OrderStatus" + }, + "type": "array" + } + }, + { + "example": [], + "in": "query", + "name": "excludesStatus", + "required": false, + "schema": { + "items": { + "$ref": "#/components/schemas/order.OrderStatus" + }, + "type": "array" + } + }, + { + "example": [ + "PS23-BASIC-0001" + ], + "in": "query", + "name": "templateNames", + "required": false, + "schema": { + "items": { + "type": "string" + }, + "type": "array" } } - }, + ], "responses": { - "204": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/order.CustomerOrder" + }, + "type": "array" + } + } + }, "description": "" }, "default": { @@ -26829,95 +26481,147 @@ "commons.AccessToken": [] } ], - "summary": "Decline a ProjectInvite.", + "summary": "Get list of Orders of a Project.", "tags": [ - "Project" + "Contract" ] } }, - "/v2/projects/{projectId}/avatar": { - "delete": { - "operationId": "project-delete-project-avatar", - "parameters": [ - { - "description": "ID of the Project the avatar should be deleted for.", - "in": "path", - "name": "projectId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" + "/v2/order-previews": { + "post": { + "operationId": "order-preview-order", + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "orderData": { + "oneOf": [ + { + "$ref": "#/components/schemas/order.ProjectHostingOrderPreview" + }, + { + "$ref": "#/components/schemas/order.ServerOrderPreview" + }, + { + "$ref": "#/components/schemas/order.DomainOrderPreview" + } + ] + }, + "orderType": { + "enum": [ + "domain", + "projectHosting", + "server" + ], + "type": "string" + } + }, + "type": "object" + } } - } - ], + }, + "description": "Your order information", + "required": true + }, "responses": { - "204": { - "description": "NoContent" + "200": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/order.HostingOrderPreviewResponse" + }, + { + "$ref": "#/components/schemas/order.DomainOrderPreviewResponse" + } + ] + } + } + }, + "description": "" }, "400": { "$ref": "#/components/responses/commons.ValidationError" }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Delete a Project's avatar.", + "security": [], + "summary": "Preview Order.", "tags": [ - "Project" + "Contract" ] - }, + } + }, + "/v2/tariff-change-previews": { "post": { - "operationId": "project-request-project-avatar-upload", - "parameters": [ - { - "description": "ID of the Project you want to request an avatar upload for.", - "in": "path", - "name": "projectId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" + "operationId": "order-preview-tariff-change", + "description": "", + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "tariffChangeData": { + "oneOf": [ + { + "$ref": "#/components/schemas/order.ProjectHostingTariffChange" + }, + { + "$ref": "#/components/schemas/order.ServerTariffChange" + } + ] + }, + "tariffChangeType": { + "enum": [ + "projectHosting", + "server" + ], + "type": "string" + } + }, + "type": "object" + } } - } - ], + }, + "description": "Your order information", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "refId": { - "format": "uuid", - "type": "string" + "machineTypePrice": { + "example": 100, + "type": "number" }, - "rules": { - "$ref": "#/components/schemas/project.AvatarRules" + "storagePrice": { + "example": 900, + "type": "number" + }, + "totalPrice": { + "example": 1000, + "type": "number" } }, "required": [ - "refId", - "rules" - ], - "type": "object" + "totalPrice", + "storagePrice", + "machineTypePrice" + ] } } }, - "description": "OK" + "description": "" }, "400": { "$ref": "#/components/responses/commons.ValidationError" }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -26927,33 +26631,58 @@ "commons.AccessToken": [] } ], - "summary": "Request a Project avatar upload.", + "summary": "Preview TariffChange.", "tags": [ - "Project" + "Contract" ] } }, - "/v2/project-invites/{projectInviteId}": { - "delete": { - "operationId": "project-delete-project-invite", + "/v2/pageinsights": { + "get": { "parameters": [ { - "description": "ID of the ProjectInvite to be deleted.", - "in": "path", - "name": "projectInviteId", + "description": "A domain or subdomain.", + "example": "mittwald.de", + "in": "query", + "name": "domain", "required": true, "schema": { - "format": "uuid", + "type": "string" + } + }, + { + "description": "A path of the domain.", + "example": "/", + "in": "query", + "name": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Query data for a specific date, defaults to date today.", + "example": "2017-07-21", + "in": "query", + "name": "date", + "required": false, + "schema": { + "format": "date", "type": "string" } } ], "responses": { - "204": { - "description": "" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "schema": { + "type": "string" + } + } + } } }, "security": [ @@ -26961,22 +26690,47 @@ "commons.AccessToken": [] } ], - "summary": "Delete a ProjectInvite.", + "summary": "Get detailed performance data for a given domain and path.", "tags": [ - "Project" - ] - }, + "Page Insights" + ], + "deprecated": true + } + }, + "/v2/page-insights": { "get": { - "operationId": "project-get-project-invite", + "operationId": "pageinsights-get-performance-data", "parameters": [ { - "description": "ID of the ProjectInvite to be retrieved.", - "in": "path", - "name": "projectInviteId", + "description": "A domain or subdomain.", + "example": "mittwald.de", + "in": "query", + "name": "domain", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "A path of the domain.", + "example": "/", + "in": "query", + "name": "path", "required": true, "schema": { "type": "string" } + }, + { + "description": "Query data for a specific date, defaults to date today.", + "example": "2017-07-21", + "in": "query", + "name": "date", + "required": false, + "schema": { + "format": "date", + "type": "string" + } } ], "responses": { @@ -26984,14 +26738,90 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/membership.ProjectInvite" + "properties": { + "createdAt": { + "format": "date-time", + "type": "string" + }, + "domain": { + "type": "string" + }, + "metrics": { + "items": { + "properties": { + "createdAt": { + "format": "date-time", + "type": "string" + }, + "name": { + "type": "string" + }, + "score": { + "format": "double", + "nullable": true, + "type": "number" + }, + "value": { + "format": "double", + "type": "number" + } + }, + "required": [ + "name", + "value", + "createdAt" + ], + "type": "object" + }, + "type": "array" + }, + "moreDataAvailable": { + "items": { + "format": "date", + "type": "string" + }, + "type": "array" + }, + "path": { + "type": "string" + }, + "performanceScore": { + "format": "double", + "type": "number" + }, + "screenshot": { + "properties": { + "createdAt": { + "format": "date-time", + "type": "string" + }, + "fileRef": { + "type": "string" + } + }, + "required": [ + "fileRef", + "createdAt" + ], + "type": "object" + } + }, + "required": [ + "domain", + "path", + "performanceScore" + ], + "type": "object" } } }, "description": "OK" }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -27002,54 +26832,33 @@ "commons.AccessToken": [] } ], - "summary": "Get a ProjectInvite.", + "summary": "Get detailed performance data for a given domain and path.", "tags": [ - "Project" + "Page Insights" ] } }, - "/v2/project-memberships/{projectMembershipId}": { - "delete": { - "operationId": "project-delete-project-membership", + "/v2/projects/{projectId}/straces/{straceId}": { + "get": { + "operationId": "pageinsights-get-strace-data", "parameters": [ { - "description": "ID of the ProjectMembership to be deleted.", + "description": "ID of the strace to get the data for.", "in": "path", - "name": "projectMembershipId", + "name": "straceId", "required": true, "schema": { "format": "uuid", "type": "string" } - } - ], - "responses": { - "204": { - "description": "OK" }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" - } - }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Delete a ProjectMembership.", - "tags": [ - "Project" - ] - }, - "get": { - "operationId": "project-get-project-membership", - "parameters": [ { - "description": "ID of the ProjectMembership to be retrieved.", + "description": "ID of the project the strace belongs to.", "in": "path", - "name": "projectMembershipId", + "name": "projectId", "required": true, "schema": { + "format": "uuid", "type": "string" } } @@ -27059,14 +26868,42 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/membership.ProjectMembership" + "properties": { + "executedAt": { + "format": "date-time", + "type": "string" + }, + "id": { + "format": "uuid", + "type": "string" + }, + "result": { + "oneOf": [ + { + "$ref": "#/components/schemas/strace.Error" + }, + { + "$ref": "#/components/schemas/strace.Data" + } + ] + } + }, + "required": [ + "id", + "executedAt", + "result" + ], + "type": "object" } } }, - "description": "" + "description": "OK" }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -27077,54 +26914,47 @@ "commons.AccessToken": [] } ], - "summary": "Get a ProjectMembership", + "summary": "Get all data for a given strace.", "tags": [ - "Project" + "Page Insights" ] - }, - "patch": { - "operationId": "project-update-project-membership", + } + }, + "/v2/projects/{projectId}/pageinsights": { + "get": { "parameters": [ { - "description": "ID of the ProjectMembership to be updated.", + "description": "ID of the Project to list domains for.", "in": "path", - "name": "projectMembershipId", + "name": "projectId", "required": true, "schema": { "format": "uuid", "type": "string" } + }, + { + "description": "Filter for a specific domain.", + "example": "mittwald.de", + "in": "query", + "name": "domain", + "required": false, + "schema": { + "type": "string" + } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "expiresAt": { - "description": "Time the ProjectMembership should expire at.", - "format": "date-time", - "type": "string" - }, - "role": { - "$ref": "#/components/schemas/membership.ProjectRoles" - } - }, - "required": [ - "role" - ], - "type": "object" + "responses": { + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "schema": { + "type": "string" + } } } - }, - "required": true - }, - "responses": { - "204": { - "description": "" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" } }, "security": [ @@ -27132,66 +26962,34 @@ "commons.AccessToken": [] } ], - "summary": "Update a ProjectMembership.", + "summary": "List websites (specified as domain and path) from a project where performance data is available.", "tags": [ - "Project" - ] + "Page Insights" + ], + "deprecated": true } }, - "/v2/projects/{projectId}": { - "delete": { - "operationId": "project-delete-project", + "/v2/projects/{projectId}/page-insights": { + "get": { + "operationId": "pageinsights-list-performance-data-for-project", "parameters": [ { - "description": "The ID of the Project.", + "description": "ID of the Project to list domains for.", "in": "path", "name": "projectId", "required": true, "schema": { + "format": "uuid", "type": "string" } - } - ], - "responses": { - "204": { - "description": "NoContent" - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "412": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "500": { - "$ref": "#/components/responses/commons.DefaultError" }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" - } - }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Delete a Project.", - "tags": [ - "Project" - ] - }, - "get": { - "operationId": "project-get-project", - "parameters": [ { - "description": "ID of the Project to be retrieved.", - "in": "path", - "name": "projectId", - "required": true, + "description": "Filter for a specific domain.", + "example": "mittwald.de", + "in": "query", + "name": "domain", + "required": false, "schema": { - "format": "uuid", "type": "string" } } @@ -27201,49 +26999,50 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/project.Project" + "items": { + "properties": { + "domain": { + "type": "string" + }, + "paths": { + "items": { + "properties": { + "createdAt": { + "format": "date-time", + "type": "string" + }, + "path": { + "type": "string" + }, + "performanceScore": { + "type": "integer" + }, + "screenshotFileRef": { + "type": "string" + } + }, + "required": [ + "path", + "performanceScore", + "createdAt" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "domain", + "paths" + ], + "type": "object" + }, + "type": "array" } } }, "description": "OK" }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" - } - }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Get a Project.", - "tags": [ - "Project" - ] - } - }, - "/v2/servers/{serverId}/avatar": { - "delete": { - "operationId": "project-delete-server-avatar", - "parameters": [ - { - "description": "ID of the Server to delete the avatar for.", - "in": "path", - "name": "serverId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "NoContent" - }, "400": { "$ref": "#/components/responses/commons.ValidationError" }, @@ -27259,18 +27058,20 @@ "commons.AccessToken": [] } ], - "summary": "Delete a Server's avatar.", + "summary": "List websites (specified as domain and path) from a project where performance data is available.", "tags": [ - "Project" + "Page Insights" ] - }, + } + }, + "/v2/projects/{projectId}/straces": { "post": { - "operationId": "project-request-server-avatar-upload", + "operationId": "pageinsights-schedule-strace", "parameters": [ { - "description": "ID of the Server to request an avatar upload for.", + "description": "ID of a project to own the created strace. It must exist a ingress with the same hostname as in the url to be measured.", "in": "path", - "name": "serverId", + "name": "projectId", "required": true, "schema": { "format": "uuid", @@ -27278,29 +27079,45 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "url": { + "description": "A call to this URL is measured via strace.", + "example": "https://example.com", + "type": "string" + } + }, + "required": [ + "url" + ], + "type": "object" + } + } + }, + "description": "" + }, "responses": { - "200": { + "202": { "content": { "application/json": { "schema": { "properties": { - "refId": { + "id": { "format": "uuid", "type": "string" - }, - "rules": { - "$ref": "#/components/schemas/project.AvatarRules" } }, "required": [ - "refId", - "rules" + "id" ], "type": "object" } } }, - "description": "OK" + "description": "Scheduled" }, "400": { "$ref": "#/components/responses/commons.ValidationError" @@ -27317,176 +27134,69 @@ "commons.AccessToken": [] } ], - "summary": "Request a Server avatar upload.", + "summary": "Schedule a strace measurement for a single http request.", "tags": [ - "Project" + "Page Insights" ] } }, - "/v2/projects/{projectId}/filesystem/directories": { + "/v2/password-policies/{passwordPolicy}": { "get": { + "operationId": "password-validation-get-password-policy", "parameters": [ { - "description": "ID of the Project to list the directories for.", + "description": "The name of the PasswordPolicy to be retrieved.", + "examples": { + "default": { + "description": "The default PasswordPolicy of mittwald.", + "value": "mittwald" + }, + "example": { + "description": "An example policy showcasing possible rule definitions.", + "value": "examplePolicy" + } + }, "in": "path", - "name": "projectId", + "name": "passwordPolicy", "required": true, "schema": { "type": "string" } - }, - { - "description": "The directory to start listing subdirectories from.", - "in": "query", - "name": "directory", - "required": false, - "schema": { - "type": "string" - } - }, - { - "description": "Search for specific filenames, only. The name may be a glob expression.", - "in": "query", - "name": "name", - "required": false, - "schema": { - "type": "string" - } - }, - { - "description": "The nesting depth for recursively listing directory contents.", - "in": "query", - "name": "max_depth", - "required": false, - "schema": { - "type": "integer" - } - }, - { - "description": "One of file or directory (may be specified multiple times), to restrict results to directory items of this specific type.", - "in": "query", - "name": "type", - "required": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - { - "description": "Set to true to constrain search results to executable files.", - "in": "query", - "name": "executable", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "description": "Set to true to include hidden files. (with . prefix in the search results).", - "in": "query", - "name": "hidden", - "required": false, - "schema": { - "type": "boolean" - } } ], "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "200": { + "content": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/policy.Policy" } } - } + }, + "description": "The PasswordPolicy to be retrieved." + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" } }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "List directories belonging to a Project.", + "summary": "Get a PasswordPolicy.", "tags": [ - "Project File System" - ], - "deprecated": true + "User" + ] } }, - "/v2/projects/{projectId}/filesystem-directories": { + "/v2/password/policies/{path}": { "get": { - "operationId": "project-file-system-get-directories", + "operationId": "password-validation-get-password-policy-v2-deprecated", + "deprecated": true, "parameters": [ { - "description": "ID of the Project to list the directories for.", "in": "path", - "name": "projectId", + "name": "path", "required": true, "schema": { "type": "string" } - }, - { - "description": "The directory to start listing subdirectories from.", - "in": "query", - "name": "directory", - "required": false, - "schema": { - "type": "string" - } - }, - { - "description": "Search for specific filenames, only. The name may be a glob expression.", - "in": "query", - "name": "name", - "required": false, - "schema": { - "type": "string" - } - }, - { - "description": "The nesting depth for recursively listing directory contents.", - "in": "query", - "name": "max_depth", - "required": false, - "schema": { - "type": "integer" - } - }, - { - "description": "One of file or directory (may be specified multiple times), to restrict results to directory items of this specific type.", - "in": "query", - "name": "type", - "required": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - { - "description": "Set to true to constrain search results to executable files.", - "in": "query", - "name": "executable", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "description": "Set to true to include hidden files. (with . prefix in the search results).", - "in": "query", - "name": "hidden", - "required": false, - "schema": { - "type": "boolean" - } } ], "responses": { @@ -27494,19 +27204,64 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/project.FilesystemDirectoryListing" + "$ref": "#/components/schemas/policy.Policy" } } }, - "description": "OK" + "description": "The requested password policy" }, - "403": { + "default": { "$ref": "#/components/responses/commons.DefaultError" + } + }, + "summary": "Get a password policy.", + "tags": [ + "User" + ] + } + }, + "/v2/project-invites/{projectInviteId}/actions/accept": { + "post": { + "operationId": "project-accept-project-invite", + "parameters": [ + { + "description": "ID of the ProjectInvite to be accepted.", + "in": "path", + "name": "projectInviteId", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "invitationToken": { + "description": "Token contained in the invite for authentication.", + "type": "string" + } + }, + "type": "object" + } + } }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "required": true + }, + "responses": { + "204": { + "description": "" }, - "503": { + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "412": { "$ref": "#/components/responses/commons.DefaultError" }, "default": { @@ -27518,17 +27273,17 @@ "commons.AccessToken": [] } ], - "summary": "List directories belonging to a Project.", + "summary": "Accept a ProjectInvite.", "tags": [ - "Project File System" + "Project" ] } }, - "/v2/projects/{projectId}/filesystem/usages/disk": { - "get": { + "/v2/project/{projectId}/invites": { + "post": { "parameters": [ { - "description": "ID of the Project.", + "description": "ID of the Project to create a ProjectInvite for.", "in": "path", "name": "projectId", "required": true, @@ -27536,18 +27291,41 @@ "format": "uuid", "type": "string" } - }, - { - "description": "Starting directory for the disk usage calculation.", - "in": "query", - "name": "directory", - "required": false, - "schema": { - "example": "/home/example.log", - "type": "string" - } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "mailAddress": { + "description": "Mail-address of the person to be invited.", + "format": "email", + "type": "string" + }, + "membershipExpiresAt": { + "description": "Time the resulting ProjectMembership should expire at.", + "format": "date-time", + "type": "string" + }, + "message": { + "description": "Message contained in the ProjectInvite.", + "type": "string" + }, + "role": { + "$ref": "#/components/schemas/membership.ProjectRoles" + } + }, + "required": [ + "mailAddress", + "role" + ], + "type": "object" + } + } + }, + "required": true + }, "responses": { "308": { "description": "This route is deprecated, and will redirect you to another URL.", @@ -27566,19 +27344,19 @@ "commons.AccessToken": [] } ], - "summary": "Get a Project directory filesystem usage.", + "summary": "Create a ProjectInvite.", "tags": [ - "Project File System" + "Project" ], "deprecated": true } }, - "/v2/projects/{projectId}/filesystem-disk-usage": { - "get": { - "operationId": "project-file-system-get-disk-usage", + "/v2/projects/{projectId}/invites": { + "post": { + "operationId": "project-create-project-invite", "parameters": [ { - "description": "ID of the Project.", + "description": "ID of the Project to create a ProjectInvite for.", "in": "path", "name": "projectId", "required": true, @@ -27586,36 +27364,56 @@ "format": "uuid", "type": "string" } - }, - { - "description": "Starting directory for the disk usage calculation.", - "in": "query", - "name": "directory", - "required": false, - "schema": { - "example": "/home/example.log", - "type": "string" - } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "mailAddress": { + "description": "Mail-address of the person to be invited.", + "format": "email", + "type": "string" + }, + "membershipExpiresAt": { + "description": "Time the resulting ProjectMembership should expire at.", + "format": "date-time", + "type": "string" + }, + "message": { + "description": "Message contained in the ProjectInvite.", + "type": "string" + }, + "role": { + "$ref": "#/components/schemas/membership.ProjectRoles" + } + }, + "required": [ + "mailAddress", + "role" + ], + "type": "object" + } + } + }, + "required": true + }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/project.FilesystemUsagesDisk" + "$ref": "#/components/schemas/membership.ProjectInvite" } } }, - "description": "OK" - }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" + "description": "Created" }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "400": { + "$ref": "#/components/responses/commons.ValidationError" }, - "503": { + "409": { "$ref": "#/components/responses/commons.DefaultError" }, "default": { @@ -27627,56 +27425,76 @@ "commons.AccessToken": [] } ], - "summary": "Get a Project directory filesystem usage.", + "summary": "Create a ProjectInvite.", "tags": [ - "Project File System" + "Project" ] - } - }, - "/v2/projects/{projectId}/filesystem/files/raw": { + }, "get": { + "operationId": "project-list-invites-for-project", "parameters": [ { - "description": "ID of the Project.", + "description": "ID of the Project to list invites for.", "in": "path", "name": "projectId", "required": true, "schema": { - "format": "uuid", "type": "string" } }, { - "description": "Name of the file.", "in": "query", - "name": "file", + "name": "limit", "required": false, "schema": { - "example": "/home/example.log", - "type": "string" + "type": "integer" } }, { - "description": "Set to true to serve the file with Content-Disposition: inline. Otherwise, it will be served with Content-Disposition: attachment. filename=...", "in": "query", - "name": "inline", + "name": "skip", "required": false, "schema": { - "type": "boolean" + "type": "integer" } } ], "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/membership.ProjectInvite" + }, + "type": "array" + } + } + }, + "description": "OK", "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "X-Pagination-Limit": { "schema": { - "type": "string" + "type": "number" + } + }, + "X-Pagination-Skip": { + "schema": { + "type": "number" + } + }, + "X-Pagination-TotalCount": { + "schema": { + "type": "number" } } } + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" } }, "security": [ @@ -27684,65 +27502,74 @@ "commons.AccessToken": [] } ], - "summary": "Get a Project file's content.", + "summary": "List Invites belonging to a Project.", "tags": [ - "Project File System" - ], - "deprecated": true + "Project" + ] } }, - "/v2/projects/{projectId}/filesystem-file-content": { - "get": { - "operationId": "project-file-system-get-file-content", + "/v2/servers/{serverId}/projects": { + "post": { + "operationId": "project-create-project", "parameters": [ { - "description": "ID of the Project.", + "description": "ID of the Server to create the Project for.", "in": "path", - "name": "projectId", + "name": "serverId", "required": true, "schema": { "format": "uuid", "type": "string" } - }, - { - "description": "Name of the file.", - "in": "query", - "name": "file", - "required": false, - "schema": { - "example": "/home/example.log", - "type": "string" - } - }, - { - "description": "Set to true to serve the file with Content-Disposition: inline. Otherwise, it will be served with Content-Disposition: attachment. filename=...", - "in": "query", - "name": "inline", - "required": false, - "schema": { - "type": "boolean" - } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "description": { + "description": "Name of the Project as it is displayed in the mStudio.", + "example": "My first Project!", + "type": "string" + } + }, + "required": [ + "description" + ], + "type": "object" + } + } + }, + "description": "" + }, "responses": { - "200": { + "201": { "content": { - "text/plain": { + "application/json": { "schema": { - "type": "string" + "properties": { + "id": { + "format": "uuid", + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" } } }, - "description": "OK" + "description": "Created" + }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" }, "403": { "$ref": "#/components/responses/commons.DefaultError" }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" - }, - "503": { + "412": { "$ref": "#/components/responses/commons.DefaultError" }, "default": { @@ -27754,44 +27581,39 @@ "commons.AccessToken": [] } ], - "summary": "Get a Project file's content.", + "summary": "Create a Project belonging to a Server.", "tags": [ - "Project File System" + "Project" ] } }, - "/v2/projects/{projectId}/jwt": { - "get": { - "operationId": "project-file-system-get-jwt", + "/v2/project-invites/{projectInviteId}/actions/decline": { + "post": { + "operationId": "project-decline-project-invite", "parameters": [ { - "description": "ID of the Project to retrieve an authorization token for.", + "description": "ID of the ProjectInvite to be declined.", "in": "path", - "name": "projectId", + "name": "projectInviteId", "required": true, "schema": { + "format": "uuid", "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": {} + } + } + }, "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/project.FsApiJwt" - } - } - }, - "description": "OK" - }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "204": { + "description": "" }, - "503": { + "default": { "$ref": "#/components/responses/commons.DefaultError" } }, @@ -27800,17 +27622,18 @@ "commons.AccessToken": [] } ], - "summary": "Get a Project's file/filesystem authorization token.", + "summary": "Decline a ProjectInvite.", "tags": [ - "Project File System" + "Project" ] } }, - "/v2/projects/{projectId}/filesystem/files": { - "get": { + "/v2/projects/{projectId}/avatar": { + "delete": { + "operationId": "project-delete-project-avatar", "parameters": [ { - "description": "ID of the Project.", + "description": "ID of the Project the avatar should be deleted for.", "in": "path", "name": "projectId", "required": true, @@ -27818,29 +27641,20 @@ "format": "uuid", "type": "string" } - }, - { - "description": "Name of the file to retrieve.", - "in": "query", - "name": "file", - "required": false, - "schema": { - "example": "/home/example.log", - "type": "string" - } } ], "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", - "schema": { - "type": "string" - } - } - } + "204": { + "description": "NoContent" + }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" } }, "security": [ @@ -27848,19 +27662,16 @@ "commons.AccessToken": [] } ], - "summary": "Get a Project file's information.", + "summary": "Delete a Project's avatar.", "tags": [ - "Project File System" - ], - "deprecated": true - } - }, - "/v2/projects/{projectId}/filesystem-files": { - "get": { - "operationId": "project-file-system-list-files", + "Project" + ] + }, + "post": { + "operationId": "project-request-project-avatar-upload", "parameters": [ { - "description": "ID of the Project.", + "description": "ID of the Project you want to request an avatar upload for.", "in": "path", "name": "projectId", "required": true, @@ -27868,16 +27679,6 @@ "format": "uuid", "type": "string" } - }, - { - "description": "Name of the file to retrieve.", - "in": "query", - "name": "file", - "required": false, - "schema": { - "example": "/home/example.log", - "type": "string" - } } ], "responses": { @@ -27885,19 +27686,29 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/project.FilesystemDirectoryListing" + "properties": { + "refId": { + "format": "uuid", + "type": "string" + }, + "rules": { + "$ref": "#/components/schemas/project.AvatarRules" + } + }, + "required": [ + "refId", + "rules" + ], + "type": "object" } } }, "description": "OK" }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "400": { + "$ref": "#/components/responses/commons.ValidationError" }, - "503": { + "403": { "$ref": "#/components/responses/commons.DefaultError" }, "default": { @@ -27909,20 +27720,52 @@ "commons.AccessToken": [] } ], - "summary": "Get a Project file's information.", + "summary": "Request a Project avatar upload.", "tags": [ - "Project File System" + "Project" ] } }, - "/v2/project-token-invite": { + "/v2/project-invites/{projectInviteId}": { + "delete": { + "operationId": "project-delete-project-invite", + "parameters": [ + { + "description": "ID of the ProjectInvite to be deleted.", + "in": "path", + "name": "projectInviteId", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } + }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Delete a ProjectInvite.", + "tags": [ + "Project" + ] + }, "get": { - "operationId": "project-get-project-token-invite", + "operationId": "project-get-project-invite", "parameters": [ { - "description": "Token of the ProjectInvite to be retrieved.", - "in": "header", - "name": "token", + "description": "ID of the ProjectInvite to be retrieved.", + "in": "path", + "name": "projectInviteId", "required": true, "schema": { "type": "string" @@ -27952,43 +27795,31 @@ "commons.AccessToken": [] } ], - "summary": "Get a ProjectInvite by token.", + "summary": "Get a ProjectInvite.", "tags": [ "Project" ] } }, - "/v2/projects/{projectId}/memberships/self": { - "get": { - "operationId": "project-get-self-membership-for-project", + "/v2/project-memberships/{projectMembershipId}": { + "delete": { + "operationId": "project-delete-project-membership", "parameters": [ { - "description": "ID of the Project to get the membership for.", + "description": "ID of the ProjectMembership to be deleted.", "in": "path", - "name": "projectId", + "name": "projectMembershipId", "required": true, "schema": { + "format": "uuid", "type": "string" } } ], "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/membership.ProjectMembership" - } - } - }, + "204": { "description": "OK" }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -27998,20 +27829,18 @@ "commons.AccessToken": [] } ], - "summary": "Get the executing user's membership in a Project.", + "summary": "Delete a ProjectMembership.", "tags": [ "Project" ] - } - }, - "/v2/servers/{serverId}": { + }, "get": { - "operationId": "project-get-server", + "operationId": "project-get-project-membership", "parameters": [ { - "description": "ID of the Server to be retrieved.", + "description": "ID of the ProjectMembership to be retrieved.", "in": "path", - "name": "serverId", + "name": "projectMembershipId", "required": true, "schema": { "type": "string" @@ -28023,14 +27852,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/project.Server" + "$ref": "#/components/schemas/membership.ProjectMembership" } } }, - "description": "OK" - }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" + "description": "" }, "404": { "$ref": "#/components/responses/commons.NotFoundError" @@ -28044,20 +27870,18 @@ "commons.AccessToken": [] } ], - "summary": "Get a Server.", + "summary": "Get a ProjectMembership", "tags": [ "Project" ] - } - }, - "/v2/projects/{projectId}/leave": { - "post": { - "operationId": "project-leave-project", + }, + "patch": { + "operationId": "project-update-project-membership", "parameters": [ { - "description": "ID of the Project to be left.", + "description": "ID of the ProjectMembership to be updated.", "in": "path", - "name": "projectId", + "name": "projectMembershipId", "required": true, "schema": { "format": "uuid", @@ -28068,9 +27892,25 @@ "requestBody": { "content": { "application/json": { - "schema": {} + "schema": { + "properties": { + "expiresAt": { + "description": "Time the ProjectMembership should expire at.", + "format": "date-time", + "type": "string" + }, + "role": { + "$ref": "#/components/schemas/membership.ProjectRoles" + } + }, + "required": [ + "role" + ], + "type": "object" + } } - } + }, + "required": true }, "responses": { "204": { @@ -28085,75 +27925,41 @@ "commons.AccessToken": [] } ], - "summary": "Leave a Project.", + "summary": "Update a ProjectMembership.", "tags": [ "Project" ] } }, - "/v2/projects/{projectId}/memberships": { - "get": { - "operationId": "project-list-memberships-for-project", + "/v2/projects/{projectId}": { + "delete": { + "operationId": "project-delete-project", "parameters": [ { - "description": "ID of the Project to list memberships for.", + "description": "The ID of the Project.", "in": "path", "name": "projectId", "required": true, "schema": { "type": "string" } - }, - { - "in": "query", - "name": "limit", - "required": false, - "schema": { - "type": "integer" - } - }, - { - "in": "query", - "name": "skip", - "required": false, - "schema": { - "type": "integer" - } } ], "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "items": { - "$ref": "#/components/schemas/membership.ProjectMembership" - }, - "type": "array" - } - } - }, - "description": "OK", - "headers": { - "X-Pagination-Limit": { - "schema": { - "type": "number" - } - }, - "X-Pagination-Skip": { - "schema": { - "type": "number" - } - }, - "X-Pagination-TotalCount": { - "schema": { - "type": "number" - } - } - } + "204": { + "description": "NoContent" }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "412": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "500": { + "$ref": "#/components/responses/commons.DefaultError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -28164,30 +27970,22 @@ "commons.AccessToken": [] } ], - "summary": "List Memberships belonging to a Project.", + "summary": "Delete a Project.", "tags": [ "Project" ] - } - }, - "/v2/project-invites": { + }, "get": { - "operationId": "project-list-project-invites", + "operationId": "project-get-project", "parameters": [ { - "in": "query", - "name": "limit", - "required": false, - "schema": { - "type": "integer" - } - }, - { - "in": "query", - "name": "skip", - "required": false, + "description": "ID of the Project to be retrieved.", + "in": "path", + "name": "projectId", + "required": true, "schema": { - "type": "integer" + "format": "uuid", + "type": "string" } } ], @@ -28196,38 +27994,15 @@ "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/membership.ProjectInvite" - }, - "type": "array" + "$ref": "#/components/schemas/project.Project" } } }, - "description": "OK", - "headers": { - "X-Pagination-Limit": { - "schema": { - "type": "number" - } - }, - "X-Pagination-Skip": { - "schema": { - "type": "number" - } - }, - "X-Pagination-TotalCount": { - "schema": { - "type": "number" - } - } - } + "description": "OK" }, "403": { "$ref": "#/components/responses/commons.DefaultError" }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -28237,30 +28012,62 @@ "commons.AccessToken": [] } ], - "summary": "List ProjectInvites belonging to the executing user.", + "summary": "Get a Project.", "tags": [ "Project" ] } }, - "/v2/project-memberships": { - "get": { - "operationId": "project-list-project-memberships", + "/v2/servers/{serverId}/avatar": { + "delete": { + "operationId": "project-delete-server-avatar", "parameters": [ { - "in": "query", - "name": "limit", - "required": false, + "description": "ID of the Server to delete the avatar for.", + "in": "path", + "name": "serverId", + "required": true, "schema": { - "type": "integer" + "format": "uuid", + "type": "string" } + } + ], + "responses": { + "204": { + "description": "NoContent" }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } + }, + "security": [ { - "in": "query", - "name": "skip", - "required": false, + "commons.AccessToken": [] + } + ], + "summary": "Delete a Server's avatar.", + "tags": [ + "Project" + ] + }, + "post": { + "operationId": "project-request-server-avatar-upload", + "parameters": [ + { + "description": "ID of the Server to request an avatar upload for.", + "in": "path", + "name": "serverId", + "required": true, "schema": { - "type": "integer" + "format": "uuid", + "type": "string" } } ], @@ -28269,38 +28076,31 @@ "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/membership.ProjectMembership" + "properties": { + "refId": { + "format": "uuid", + "type": "string" + }, + "rules": { + "$ref": "#/components/schemas/project.AvatarRules" + } }, - "type": "array" + "required": [ + "refId", + "rules" + ], + "type": "object" } } }, - "description": "OK", - "headers": { - "X-Pagination-Limit": { - "schema": { - "type": "number" - } - }, - "X-Pagination-Skip": { - "schema": { - "type": "number" - } - }, - "X-Pagination-TotalCount": { - "schema": { - "type": "number" - } - } - } + "description": "OK" + }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" }, "403": { "$ref": "#/components/responses/commons.DefaultError" }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -28310,136 +28110,93 @@ "commons.AccessToken": [] } ], - "summary": "List ProjectMemberships belonging to the executing user.", + "summary": "Request a Server avatar upload.", "tags": [ "Project" ] } }, - "/v2/projects": { + "/v2/projects/{projectId}/filesystem/directories": { "get": { - "operationId": "project-list-projects", "parameters": [ { - "description": "ID of the Organization to list Projects for.", + "description": "ID of the Project to list the directories for.", + "in": "path", + "name": "projectId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The directory to start listing subdirectories from.", "in": "query", - "name": "customerId", + "name": "directory", "required": false, "schema": { - "example": "15b8a787-8d46-43b0-907e-01af35032c0a", "type": "string" } }, { - "description": "ID of the Server to list Projects for.", + "description": "Search for specific filenames, only. The name may be a glob expression.", "in": "query", - "name": "serverId", + "name": "name", "required": false, "schema": { - "format": "uuid", "type": "string" } + }, + { + "description": "The nesting depth for recursively listing directory contents.", + "in": "query", + "name": "max_depth", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "description": "One of file or directory (may be specified multiple times), to restrict results to directory items of this specific type.", + "in": "query", + "name": "type", + "required": false, + "schema": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + { + "description": "Set to true to constrain search results to executable files.", + "in": "query", + "name": "executable", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Set to true to include hidden files. (with . prefix in the search results).", + "in": "query", + "name": "hidden", + "required": false, + "schema": { + "type": "boolean" + } } ], "responses": { - "200": { - "content": { - "application/json": { + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", "schema": { - "items": { - "properties": { - "createdAt": { - "format": "date-time", - "type": "string" - }, - "customerId": { - "type": "string" - }, - "customerMeta": { - "properties": { - "id": { - "type": "string" - } - }, - "required": [ - "id" - ], - "type": "object" - }, - "description": { - "type": "string" - }, - "disableReason": { - "$ref": "#/components/schemas/project.DisableReason" - }, - "disabledAt": { - "format": "date-time", - "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "id": { - "type": "string" - }, - "imageRefId": { - "type": "string" - }, - "isReady": { - "deprecated": true, - "description": "deprecated", - "type": "boolean" - }, - "projectHostingId": { - "format": "uuid", - "type": "string" - }, - "readiness": { - "$ref": "#/components/schemas/project.DeprecatedProjectReadinessStatus" - }, - "serverId": { - "type": "string" - }, - "shortId": { - "type": "string" - }, - "status": { - "$ref": "#/components/schemas/project.ProjectStatus" - }, - "statusSetAt": { - "format": "date-time", - "type": "string" - } - }, - "required": [ - "id", - "shortId", - "description", - "enabled", - "customerMeta", - "customerId", - "createdAt", - "isReady", - "readiness", - "status", - "statusSetAt" - ], - "type": "object" - }, - "type": "array" + "type": "string" } } - }, - "description": "OK" - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" + } } }, "security": [ @@ -28447,50 +28204,81 @@ "commons.AccessToken": [] } ], - "summary": "List Projects belonging to the executing user.", + "summary": "List directories belonging to a Project.", "tags": [ - "Project" - ] + "Project File System" + ], + "deprecated": true } }, - "/v2/servers": { + "/v2/projects/{projectId}/filesystem-directories": { "get": { - "operationId": "project-list-servers", + "operationId": "project-file-system-get-directories", "parameters": [ { - "description": "ID of the Organization to list PlacementGroups for. If no ID is provided, the ID of the executing User is used instead.", + "description": "ID of the Project to list the directories for.", + "in": "path", + "name": "projectId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The directory to start listing subdirectories from.", "in": "query", - "name": "customerId", + "name": "directory", "required": false, "schema": { "type": "string" } }, { + "description": "Search for specific filenames, only. The name may be a glob expression.", "in": "query", - "name": "limit", + "name": "name", "required": false, "schema": { - "minimum": 0, - "type": "integer" + "type": "string" } }, { + "description": "The nesting depth for recursively listing directory contents.", "in": "query", - "name": "page", + "name": "max_depth", "required": false, "schema": { - "minimum": 0, "type": "integer" } }, { + "description": "One of file or directory (may be specified multiple times), to restrict results to directory items of this specific type.", "in": "query", - "name": "skip", + "name": "type", "required": false, "schema": { - "minimum": 0, - "type": "integer" + "items": { + "type": "string" + }, + "type": "array" + } + }, + { + "description": "Set to true to constrain search results to executable files.", + "in": "query", + "name": "executable", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Set to true to include hidden files. (with . prefix in the search results).", + "in": "query", + "name": "hidden", + "required": false, + "schema": { + "type": "boolean" } } ], @@ -28499,10 +28287,7 @@ "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/project.Server" - }, - "type": "array" + "$ref": "#/components/schemas/project.FilesystemDirectoryListing" } } }, @@ -28511,6 +28296,12 @@ "403": { "$ref": "#/components/responses/commons.DefaultError" }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "503": { + "$ref": "#/components/responses/commons.DefaultError" + }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -28520,43 +28311,47 @@ "commons.AccessToken": [] } ], - "summary": "List Servers belonging to the executing user.", + "summary": "List directories belonging to a Project.", "tags": [ - "Project" + "Project File System" ] } }, - "/v2/project-invites/{projectInviteId}/actions/resend": { - "post": { - "operationId": "project-resend-project-invite-mail", + "/v2/projects/{projectId}/filesystem/usages/disk": { + "get": { "parameters": [ { - "description": "ID of the ProjectInvite to resend the mail for.", + "description": "ID of the Project.", "in": "path", - "name": "projectInviteId", + "name": "projectId", "required": true, "schema": { "format": "uuid", "type": "string" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": {} + }, + { + "description": "Starting directory for the disk usage calculation.", + "in": "query", + "name": "directory", + "required": false, + "schema": { + "example": "/home/example.log", + "type": "string" } } - }, + ], "responses": { - "204": { - "description": "" - }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "schema": { + "type": "string" + } + } + } } }, "security": [ @@ -28564,18 +28359,19 @@ "commons.AccessToken": [] } ], - "summary": "Resend the mail for a ProjectInvite.", + "summary": "Get a Project directory filesystem usage.", "tags": [ - "Project" - ] + "Project File System" + ], + "deprecated": true } }, - "/v2/projects/{projectId}/description": { - "patch": { - "operationId": "project-update-project-description", + "/v2/projects/{projectId}/filesystem-disk-usage": { + "get": { + "operationId": "project-file-system-get-disk-usage", "parameters": [ { - "description": "ID of the Project to update the description for.", + "description": "ID of the Project.", "in": "path", "name": "projectId", "required": true, @@ -28583,33 +28379,36 @@ "format": "uuid", "type": "string" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "description": { - "example": "My new description!", - "type": "string" - } - }, - "required": [ - "description" - ] - } + }, + { + "description": "Starting directory for the disk usage calculation.", + "in": "query", + "name": "directory", + "required": false, + "schema": { + "example": "/home/example.log", + "type": "string" } } - }, + ], "responses": { - "204": { - "description": "NoContent" - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "403": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/project.FilesystemUsagesDisk" + } + } + }, + "description": "OK" + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "503": { "$ref": "#/components/responses/commons.DefaultError" }, "default": { @@ -28621,356 +28420,172 @@ "commons.AccessToken": [] } ], - "summary": "Update a Project's description.", + "summary": "Get a Project directory filesystem usage.", "tags": [ - "Project" + "Project File System" ] } }, - "/v2/servers/{serverId}/description": { - "patch": { - "operationId": "project-update-server-description", + "/v2/projects/{projectId}/filesystem/files/raw": { + "get": { "parameters": [ { - "description": "ID of the Server to update the description of.", + "description": "ID of the Project.", "in": "path", - "name": "serverId", + "name": "projectId", "required": true, "schema": { "format": "uuid", "type": "string" } + }, + { + "description": "Name of the file.", + "in": "query", + "name": "file", + "required": false, + "schema": { + "example": "/home/example.log", + "type": "string" + } + }, + { + "description": "Set to true to serve the file with Content-Disposition: inline. Otherwise, it will be served with Content-Disposition: attachment. filename=...", + "in": "query", + "name": "inline", + "required": false, + "schema": { + "type": "boolean" + } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "description": { - "example": "My first Server!", - "type": "string" - } - }, - "required": [ - "description" - ] + "responses": { + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "schema": { + "type": "string" + } } } } }, - "responses": { - "204": { - "description": "NoContent" - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" - } - }, "security": [ { "commons.AccessToken": [] } ], - "summary": "Update a Servers's description.", + "summary": "Get a Project file's content.", "tags": [ - "Project" - ] + "Project File System" + ], + "deprecated": true } }, - "/v2/legacy-tariff-change": { - "post": { - "operationId": "relocation-create-legacy-tariff-change", - "parameters": [], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "pAccount": { - "pattern": "^[pr][0-9]{2,8}$", - "type": "string" - }, - "targetTariff": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "pAccount", - "targetTariff" - ], - "type": "object" - } + "/v2/projects/{projectId}/filesystem-file-content": { + "get": { + "operationId": "project-file-system-get-file-content", + "parameters": [ + { + "description": "ID of the Project.", + "in": "path", + "name": "projectId", + "required": true, + "schema": { + "format": "uuid", + "type": "string" } }, - "description": "", - "required": true - }, + { + "description": "Name of the file.", + "in": "query", + "name": "file", + "required": false, + "schema": { + "example": "/home/example.log", + "type": "string" + } + }, + { + "description": "Set to true to serve the file with Content-Disposition: inline. Otherwise, it will be served with Content-Disposition: attachment. filename=...", + "in": "query", + "name": "inline", + "required": false, + "schema": { + "type": "boolean" + } + } + ], "responses": { - "201": { + "200": { "content": { - "application/json": { + "text/plain": { "schema": { - "properties": { - "messageId": { - "format": "uuid", - "type": "string" - } - }, - "required": [ - "messageId" - ], - "type": "object" + "type": "string" } } }, - "description": "" + "description": "OK" }, "403": { - "$ref": "#/components/responses/commons.RateLimitError" - }, - "default": { "$ref": "#/components/responses/commons.DefaultError" - } - }, - "security": [], - "summary": "Register a tariff change for a legacy tariff.", - "tags": [ - "Relocation" - ] - } - }, - "/v2/relocation": { - "post": { - "operationId": "relocation-create-relocation", - "description": "Give mittwald access to your Provider and let them move your Project to mittwald.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "allDomains": { - "description": "Should all project releated domains should be transferred to mittwald?", - "type": "boolean" - }, - "allowPasswordChange": { - "description": "Has to be true. Do you accept that our mittwald team can change and get password from your current provider?", - "type": "boolean" - }, - "contact": { - "properties": { - "email": { - "format": "email", - "minLength": 1, - "type": "string" - }, - "firstName": { - "minLength": 1, - "type": "string" - }, - "lastName": { - "minLength": 1, - "type": "string" - }, - "phoneNumber": { - "pattern": "|^\\+([0-9]{2,3}|1)-[0-9]{2,5}-[0-9]+$", - "type": "string" - } - }, - "required": [ - "firstName", - "lastName", - "email" - ], - "type": "object" - }, - "domains": { - "description": "List of domains which should be transferred (when allDomains is not checked).", - "items": { - "$ref": "#/components/schemas/directus.Domain" - }, - "type": "array" - }, - "notes": { - "description": "Anything our customer service needs to know for the relocation process.", - "type": "string" - }, - "provider": { - "properties": { - "loginUrl": { - "description": "Url to the control panel of the provider", - "minLength": 1, - "type": "string" - }, - "name": { - "description": "Name of your provider", - "oneOf": [ - { - "minLength": 1, - "type": "string" - }, - { - "enum": [ - "1und1", - "strato" - ], - "type": "string" - } - ] - }, - "password": { - "minLength": 1, - "type": "string" - }, - "sourceAccount": { - "description": "Which account of your provider should be moved?", - "minLength": 1, - "type": "string" - }, - "userName": { - "description": "Login name to your provider", - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name", - "loginUrl", - "userName", - "password", - "sourceAccount" - ], - "type": "object" - }, - "target": { - "properties": { - "organisation": { - "description": "Your customer or organisation number", - "minLength": 1, - "type": "string" - }, - "product": { - "description": "Help our customer service finding your target account", - "oneOf": [ - { - "minLength": 1, - "type": "string" - }, - { - "enum": [ - "Space-Server", - "proSpace", - "Agentur-Server", - "CMS-Hosting", - "Shop-Hosting" - ], - "type": "string" - } - ], - "type": "string" - }, - "projectName": { - "description": "In which p-account or short project id your project should be moved.", - "minLength": 1, - "type": "string" - }, - "system": { - "description": "Which mittwald system does the targetProject use?", - "enum": [ - "kc", - "mstudio" - ], - "type": "string" - } - }, - "required": [ - "organisation", - "projectName", - "system", - "product" - ], - "type": "object" - } - }, - "required": [ - "provider", - "contact", - "target", - "allowPasswordChange" - ], - "type": "object" - } - } }, - "description": "", - "required": true - }, - "responses": { - "204": { - "description": "No content" + "404": { + "$ref": "#/components/responses/commons.NotFoundError" }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" + "503": { + "$ref": "#/components/responses/commons.DefaultError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "security": [], - "summary": "Relocate an external Project to mittwald.", + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Get a Project file's content.", "tags": [ - "Relocation" + "Project File System" ] } }, - "/v2/service/{accessKeyId}/actions/authenticate": { - "post": { + "/v2/projects/{projectId}/jwt": { + "get": { + "operationId": "project-file-system-get-jwt", "parameters": [ { + "description": "ID of the Project to retrieve an authorization token for.", "in": "path", - "name": "accessKeyId", + "name": "projectId", "required": true, "schema": { "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "secretAccessKey": { - "type": "string" - } - }, - "required": [ - "secretAccessKey" - ], - "type": "object" - } - } - }, - "required": true - }, "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "200": { + "content": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/project.FsApiJwt" } } - } + }, + "description": "OK" + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "503": { + "$ref": "#/components/responses/commons.DefaultError" } }, "security": [ @@ -28978,41 +28593,36 @@ "commons.AccessToken": [] } ], - "summary": "Obtain a service token.", - "tags": [], - "deprecated": true + "summary": "Get a Project's file/filesystem authorization token.", + "tags": [ + "Project File System" + ] } }, - "/internal-v2/services/{accessKeyId}/actions/authenticate": { - "post": { + "/v2/projects/{projectId}/filesystem/files": { + "get": { "parameters": [ { + "description": "ID of the Project.", "in": "path", - "name": "accessKeyId", + "name": "projectId", "required": true, "schema": { + "format": "uuid", + "type": "string" + } + }, + { + "description": "Name of the file to retrieve.", + "in": "query", + "name": "file", + "required": false, + "schema": { + "example": "/home/example.log", "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "secretAccessKey": { - "type": "string" - } - }, - "required": [ - "secretAccessKey" - ], - "type": "object" - } - } - }, - "required": true - }, "responses": { "308": { "description": "This route is deprecated, and will redirect you to another URL.", @@ -29031,96 +28641,100 @@ "commons.AccessToken": [] } ], - "summary": "Obtain a service token.", - "tags": [], + "summary": "Get a Project file's information.", + "tags": [ + "Project File System" + ], "deprecated": true } }, - "/v2/services/{accessKeyId}/actions/authenticate": { - "post": { - "operationId": "servicetoken-authenticate-service", + "/v2/projects/{projectId}/filesystem-files": { + "get": { + "operationId": "project-file-system-list-files", "parameters": [ { + "description": "ID of the Project.", "in": "path", - "name": "accessKeyId", + "name": "projectId", "required": true, "schema": { + "format": "uuid", + "type": "string" + } + }, + { + "description": "Name of the file to retrieve.", + "in": "query", + "name": "file", + "required": false, + "schema": { + "example": "/home/example.log", "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "secretAccessKey": { - "type": "string" - } - }, - "required": [ - "secretAccessKey" - ], - "type": "object" + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/project.FilesystemDirectoryListing" + } } - } + }, + "description": "OK" }, - "required": true + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "503": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Get a Project file's information.", + "tags": [ + "Project File System" + ] + } + }, + "/v2/project-token-invite": { + "get": { + "operationId": "project-get-project-token-invite", + "parameters": [ + { + "description": "Token of the ProjectInvite to be retrieved.", + "in": "header", + "name": "token", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "accessToken": { - "properties": { - "id": { - "type": "string" - }, - "jwtClaims": { - "properties": { - "exp": { - "type": "string" - }, - "iat": { - "type": "string" - }, - "iss": { - "type": "string" - }, - "sub": { - "type": "string" - } - }, - "required": [ - "iat", - "iss", - "sub", - "exp" - ], - "type": "object" - }, - "publicToken": { - "type": "string" - } - }, - "required": [ - "id", - "jwtClaims", - "publicToken" - ], - "type": "object" - } - }, - "required": [ - "accessToken" - ], - "type": "object" + "$ref": "#/components/schemas/membership.ProjectInvite" } } }, - "description": "Authentication has been successful." + "description": "OK" + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -29131,16 +28745,18 @@ "commons.AccessToken": [] } ], - "summary": "Obtain a service token.", - "tags": [] + "summary": "Get a ProjectInvite by token.", + "tags": [ + "Project" + ] } }, - "/v2/projects/{projectId}/sftp-users": { - "post": { - "operationId": "sftp-user-create-sftp-user", + "/v2/projects/{projectId}/memberships/self": { + "get": { + "operationId": "project-get-self-membership-for-project", "parameters": [ { - "description": "ID of the Project to create an SFTPUser for.", + "description": "ID of the Project to get the membership for.", "in": "path", "name": "projectId", "required": true, @@ -29149,64 +28765,23 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "accessLevel": { - "enum": [ - "read", - "full" - ], - "type": "string" - }, - "authentication": { - "$ref": "#/components/schemas/sshuser.Authentication" - }, - "description": { - "type": "string" - }, - "directories": { - "items": { - "type": "string" - }, - "minItems": 1, - "type": "array" - }, - "expiresAt": { - "format": "date-time", - "type": "string" - } - }, - "required": [ - "description", - "authentication", - "directories" - ], - "type": "object" - } - } - }, - "required": true - }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sshuser.SftpUser" + "$ref": "#/components/schemas/membership.ProjectMembership" } } }, - "description": "Created" - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" + "description": "OK" }, "403": { "$ref": "#/components/responses/commons.DefaultError" }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -29216,38 +28791,24 @@ "commons.AccessToken": [] } ], - "summary": "Create an SFTPUser for a Project.", + "summary": "Get the executing user's membership in a Project.", "tags": [ - "SSH/SFTP User" + "Project" ] - }, + } + }, + "/v2/servers/{serverId}": { "get": { - "operationId": "sftp-user-list-sftp-users", + "operationId": "project-get-server", "parameters": [ { - "description": "ID of the Project to request SFTPUsers for.", + "description": "ID of the Server to be retrieved.", "in": "path", - "name": "projectId", + "name": "serverId", "required": true, "schema": { "type": "string" } - }, - { - "in": "query", - "name": "limit", - "required": false, - "schema": { - "type": "integer" - } - }, - { - "in": "query", - "name": "skip", - "required": false, - "schema": { - "type": "integer" - } } ], "responses": { @@ -29255,31 +28816,11 @@ "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/sshuser.SftpUser" - }, - "type": "array" + "$ref": "#/components/schemas/project.Server" } } }, - "description": "OK", - "headers": { - "X-Pagination-Limit": { - "schema": { - "type": "number" - } - }, - "X-Pagination-Skip": { - "schema": { - "type": "number" - } - }, - "X-Pagination-TotalCount": { - "schema": { - "type": "number" - } - } - } + "description": "OK" }, "403": { "$ref": "#/components/responses/commons.DefaultError" @@ -29296,32 +28837,37 @@ "commons.AccessToken": [] } ], - "summary": "Get all SFTPUsers for a Project.", + "summary": "Get a Server.", "tags": [ - "SSH/SFTP User" + "Project" ] } }, - "/v2/sftp-users/{sftpUserId}": { - "delete": { - "operationId": "sftp-user-delete-sftp-user", + "/v2/projects/{projectId}/leave": { + "post": { + "operationId": "project-leave-project", "parameters": [ { - "description": "ID of the SFTPUser to be deleted.", + "description": "ID of the Project to be left.", "in": "path", - "name": "sftpUserId", + "name": "projectId", "required": true, "schema": { + "format": "uuid", "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": {} + } + } + }, "responses": { "204": { - "description": "NoContent" - }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" + "description": "" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -29332,22 +28878,40 @@ "commons.AccessToken": [] } ], - "summary": "Delete an SFTPUser.", + "summary": "Leave a Project.", "tags": [ - "SSH/SFTP User" + "Project" ] - }, + } + }, + "/v2/projects/{projectId}/memberships": { "get": { - "operationId": "sftp-user-get-sftp-user", + "operationId": "project-list-memberships-for-project", "parameters": [ { - "description": "ID of the SFTPUser to get.", + "description": "ID of the Project to list memberships for.", "in": "path", - "name": "sftpUserId", + "name": "projectId", "required": true, "schema": { "type": "string" } + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "in": "query", + "name": "skip", + "required": false, + "schema": { + "type": "integer" + } } ], "responses": { @@ -29355,14 +28919,31 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sshuser.SftpUser" + "items": { + "$ref": "#/components/schemas/membership.ProjectMembership" + }, + "type": "array" } } }, - "description": "OK" - }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" + "description": "OK", + "headers": { + "X-Pagination-Limit": { + "schema": { + "type": "number" + } + }, + "X-Pagination-Skip": { + "schema": { + "type": "number" + } + }, + "X-Pagination-TotalCount": { + "schema": { + "type": "number" + } + } + } }, "404": { "$ref": "#/components/responses/commons.NotFoundError" @@ -29376,78 +28957,70 @@ "commons.AccessToken": [] } ], - "summary": "Get an SFTPUser.", + "summary": "List Memberships belonging to a Project.", "tags": [ - "SSH/SFTP User" + "Project" ] - }, - "patch": { - "operationId": "sftp-user-update-sftp-user", + } + }, + "/v2/project-invites": { + "get": { + "operationId": "project-list-project-invites", "parameters": [ { - "description": "ID of the SFTPUser to be updated.", - "in": "path", - "name": "sftpUserId", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "accessLevel": { - "enum": [ - "read", - "full" - ], - "type": "string" - }, - "active": { - "type": "boolean" - }, - "description": { - "type": "string" - }, - "directories": { - "items": { - "type": "string" - }, - "minItems": 1, - "type": "array" - }, - "expiresAt": { - "format": "date-time", - "type": "string" - }, - "password": { - "type": "string" - }, - "publicKeys": { - "items": { - "$ref": "#/components/schemas/sshuser.PublicKey" - }, - "type": "array" - } - }, - "type": "object" - } + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "in": "query", + "name": "skip", + "required": false, + "schema": { + "type": "integer" } } - }, + ], "responses": { - "204": { - "description": "NoContent" - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/membership.ProjectInvite" + }, + "type": "array" + } + } + }, + "description": "OK", + "headers": { + "X-Pagination-Limit": { + "schema": { + "type": "number" + } + }, + "X-Pagination-Skip": { + "schema": { + "type": "number" + } + }, + "X-Pagination-TotalCount": { + "schema": { + "type": "number" + } + } + } }, "403": { "$ref": "#/components/responses/commons.DefaultError" }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -29457,24 +29030,16 @@ "commons.AccessToken": [] } ], - "summary": "Update an SFTPUser.", + "summary": "List ProjectInvites belonging to the executing user.", "tags": [ - "SSH/SFTP User" + "Project" ] } }, - "/v2/project/{projectId}/sftp-users": { + "/v2/project-memberships": { "get": { + "operationId": "project-list-project-memberships", "parameters": [ - { - "description": "ID of the Project to request SFTPUsers for.", - "in": "path", - "name": "projectId", - "required": true, - "schema": { - "type": "string" - } - }, { "in": "query", "name": "limit", @@ -29493,16 +29058,44 @@ } ], "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/membership.ProjectMembership" + }, + "type": "array" + } + } + }, + "description": "OK", "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "X-Pagination-Limit": { "schema": { - "type": "string" + "type": "number" + } + }, + "X-Pagination-Skip": { + "schema": { + "type": "number" + } + }, + "X-Pagination-TotalCount": { + "schema": { + "type": "number" } } } + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" } }, "security": [ @@ -29510,63 +29103,127 @@ "commons.AccessToken": [] } ], - "summary": "Get all SFTPUsers for a Project.", + "summary": "List ProjectMemberships belonging to the executing user.", "tags": [ - "SSH/SFTP User" - ], - "deprecated": true + "Project" + ] } }, - "/v2/projects/{projectId}/ssh-users": { - "post": { - "operationId": "ssh-user-create-ssh-user", + "/v2/projects": { + "get": { + "operationId": "project-list-projects", "parameters": [ { - "description": "ID of the Project to create an SSHUser for.", - "in": "path", - "name": "projectId", - "required": true, + "description": "ID of the Organization to list Projects for.", + "in": "query", + "name": "customerId", + "required": false, + "schema": { + "example": "15b8a787-8d46-43b0-907e-01af35032c0a", + "type": "string" + } + }, + { + "description": "ID of the Server to list Projects for.", + "in": "query", + "name": "serverId", + "required": false, "schema": { + "format": "uuid", "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "authentication": { - "$ref": "#/components/schemas/sshuser.Authentication" - }, - "description": { - "type": "string" - }, - "expiresAt": { - "format": "date-time", - "type": "string" - } - }, - "required": [ - "description", - "authentication" - ], - "type": "object" - } - } - }, - "required": true - }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sshuser.SshUser" + "items": { + "properties": { + "createdAt": { + "format": "date-time", + "type": "string" + }, + "customerId": { + "type": "string" + }, + "customerMeta": { + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "description": { + "type": "string" + }, + "disableReason": { + "$ref": "#/components/schemas/project.DisableReason" + }, + "disabledAt": { + "format": "date-time", + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "imageRefId": { + "type": "string" + }, + "isReady": { + "deprecated": true, + "description": "deprecated", + "type": "boolean" + }, + "projectHostingId": { + "format": "uuid", + "type": "string" + }, + "readiness": { + "$ref": "#/components/schemas/project.DeprecatedProjectReadinessStatus" + }, + "serverId": { + "type": "string" + }, + "shortId": { + "type": "string" + }, + "status": { + "$ref": "#/components/schemas/project.ProjectStatus" + }, + "statusSetAt": { + "format": "date-time", + "type": "string" + } + }, + "required": [ + "id", + "shortId", + "description", + "enabled", + "customerMeta", + "customerId", + "createdAt", + "isReady", + "readiness", + "status", + "statusSetAt" + ], + "type": "object" + }, + "type": "array" } } }, - "description": "Created" + "description": "OK" }, "400": { "$ref": "#/components/responses/commons.ValidationError" @@ -29583,19 +29240,21 @@ "commons.AccessToken": [] } ], - "summary": "Create an SSHUser for a Project.", + "summary": "List Projects belonging to the executing user.", "tags": [ - "SSH/SFTP User" + "Project" ] - }, + } + }, + "/v2/servers": { "get": { - "operationId": "ssh-user-list-ssh-users", + "operationId": "project-list-servers", "parameters": [ { - "description": "ID of the Project to retrieve SSHUsers for.", - "in": "path", - "name": "projectId", - "required": true, + "description": "ID of the Organization to list PlacementGroups for. If no ID is provided, the ID of the executing User is used instead.", + "in": "query", + "name": "customerId", + "required": false, "schema": { "type": "string" } @@ -29605,6 +29264,16 @@ "name": "limit", "required": false, "schema": { + "minimum": 0, + "type": "integer" + } + }, + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "minimum": 0, "type": "integer" } }, @@ -29613,6 +29282,7 @@ "name": "skip", "required": false, "schema": { + "minimum": 0, "type": "integer" } } @@ -29623,37 +29293,17 @@ "application/json": { "schema": { "items": { - "$ref": "#/components/schemas/sshuser.SshUser" + "$ref": "#/components/schemas/project.Server" }, "type": "array" } } }, - "description": "OK", - "headers": { - "X-Pagination-Limit": { - "schema": { - "type": "number" - } - }, - "X-Pagination-Skip": { - "schema": { - "type": "number" - } - }, - "X-Pagination-TotalCount": { - "schema": { - "type": "number" - } - } - } + "description": "OK" }, "403": { "$ref": "#/components/responses/commons.DefaultError" }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -29663,77 +29313,41 @@ "commons.AccessToken": [] } ], - "summary": "Get all SSHUsers for a Project.", + "summary": "List Servers belonging to the executing user.", "tags": [ - "SSH/SFTP User" + "Project" ] } }, - "/v2/ssh-users/{sshUserId}": { - "delete": { - "operationId": "ssh-user-delete-ssh-user", + "/v2/project-invites/{projectInviteId}/actions/resend": { + "post": { + "operationId": "project-resend-project-invite-mail", "parameters": [ { - "description": "ID of the SSHUser to be deleted.", + "description": "ID of the ProjectInvite to resend the mail for.", "in": "path", - "name": "sshUserId", + "name": "projectInviteId", "required": true, "schema": { + "format": "uuid", "type": "string" } } ], - "responses": { - "204": { - "description": "NoContent" - }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" - } - }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Delete an SSHUser.", - "tags": [ - "SSH/SFTP User" - ] - }, - "get": { - "operationId": "ssh-user-get-ssh-user", - "parameters": [ - { - "description": "ID of the SSHUser to be retrieved.", - "in": "path", - "name": "sshUserId", - "required": true, - "schema": { - "type": "string" + "requestBody": { + "content": { + "application/json": { + "schema": {} } } - ], + }, "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sshuser.SshUser" - } - } - }, - "description": "OK" + "204": { + "description": "" }, "403": { "$ref": "#/components/responses/commons.DefaultError" }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } @@ -29743,20 +29357,23 @@ "commons.AccessToken": [] } ], - "summary": "Get an SSHUser.", + "summary": "Resend the mail for a ProjectInvite.", "tags": [ - "SSH/SFTP User" + "Project" ] - }, + } + }, + "/v2/projects/{projectId}/description": { "patch": { - "operationId": "ssh-user-update-ssh-user", + "operationId": "project-update-project-description", "parameters": [ { - "description": "ID of the SSHUser to be updated.", + "description": "ID of the Project to update the description for.", "in": "path", - "name": "sshUserId", + "name": "projectId", "required": true, "schema": { + "format": "uuid", "type": "string" } } @@ -29766,27 +29383,14 @@ "application/json": { "schema": { "properties": { - "active": { - "type": "boolean" - }, "description": { + "example": "My new description!", "type": "string" - }, - "expiresAt": { - "format": "date-time", - "type": "string" - }, - "password": { - "type": "string" - }, - "publicKeys": { - "items": { - "$ref": "#/components/schemas/sshuser.PublicKey" - }, - "type": "array" } }, - "type": "object" + "required": [ + "description" + ] } } } @@ -29810,21 +29414,23 @@ "commons.AccessToken": [] } ], - "summary": "Update an SSHUser.", + "summary": "Update a Project's description.", "tags": [ - "SSH/SFTP User" + "Project" ] } }, - "/v2/sshusers/{sshUserId}": { + "/v2/servers/{serverId}/description": { "patch": { + "operationId": "project-update-server-description", "parameters": [ { - "description": "ID of the SSHUser to be updated.", + "description": "ID of the Server to update the description of.", "in": "path", - "name": "sshUserId", + "name": "serverId", "required": true, "schema": { + "format": "uuid", "type": "string" } } @@ -29834,121 +29440,26 @@ "application/json": { "schema": { "properties": { - "active": { - "type": "boolean" - }, "description": { - "type": "string" - }, - "expiresAt": { - "format": "date-time", - "type": "string" - }, - "password": { - "type": "string" - }, - "publicKeys": { - "items": { - "$ref": "#/components/schemas/sshuser.PublicKey" - }, - "type": "array" - } - }, - "type": "object" - } - } - } - }, - "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", - "schema": { - "type": "string" - } - } - } - } - }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Update an SSHUser.", - "tags": [ - "SSH/SFTP User" - ], - "deprecated": true - } - }, - "/v2/users/{userId}/phone": { - "post": { - "operationId": "user-add-phone-number", - "parameters": [ - { - "description": "`self` or the id of a user.", - "examples": { - "self": { - "summary": "You", - "value": "self" - }, - "userId": { - "summary": "ID of a user.", - "value": "10203040-1234-5678-abcd-badc0de01234" - } - }, - "in": "path", - "name": "userId", - "required": true, - "schema": { - "oneOf": [ - { - "enum": [ - "self" - ], - "type": "string" - }, - { - "format": "uuid", - "type": "string" - } - ] - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "phoneNumber": { - "format": "phone", + "example": "My first Server!", "type": "string" } }, "required": [ - "phoneNumber" - ], - "type": "object" + "description" + ] } } - }, - "required": true + } }, "responses": { "204": { - "description": "Phone number was added successfully. Now, it can be verified via /v2/users/:userId/actions/verify-phone." + "description": "NoContent" }, "400": { "$ref": "#/components/responses/commons.ValidationError" }, "403": { - "$ref": "#/components/responses/commons.RateLimitError" - }, - "409": { "$ref": "#/components/responses/commons.DefaultError" }, "default": { @@ -29960,149 +29471,281 @@ "commons.AccessToken": [] } ], - "summary": "Add phone number and start verification process.", + "summary": "Update a Servers's description.", "tags": [ - "User" + "Project" ] - }, - "delete": { - "operationId": "user-remove-phone-number", - "parameters": [ - { - "description": "`self` or the id of a user.", - "examples": { - "self": { - "summary": "You", - "value": "self" - }, - "userId": { - "summary": "ID of a user.", - "value": "10203040-1234-5678-abcd-badc0de01234" - } - }, - "in": "path", - "name": "userId", - "required": true, - "schema": { - "oneOf": [ - { - "enum": [ - "self" - ], - "type": "string" + } + }, + "/v2/legacy-tariff-change": { + "post": { + "operationId": "relocation-create-legacy-tariff-change", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "pAccount": { + "pattern": "^[pr][0-9]{2,8}$", + "type": "string" + }, + "targetTariff": { + "minLength": 1, + "type": "string" + } }, - { - "format": "uuid", - "type": "string" - } - ] + "required": [ + "pAccount", + "targetTariff" + ], + "type": "object" + } } - } - ], + }, + "description": "", + "required": true + }, "responses": { - "204": { - "description": "PhoneNumber removal was successful" + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "messageId": { + "format": "uuid", + "type": "string" + } + }, + "required": [ + "messageId" + ], + "type": "object" + } + } + }, + "description": "" }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" + "403": { + "$ref": "#/components/responses/commons.RateLimitError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Remove phone number.", + "security": [], + "summary": "Register a tariff change for a legacy tariff.", "tags": [ - "User" + "Relocation" ] } }, - "/v2/signup/authentication/mfa": { + "/v2/relocation": { "post": { + "operationId": "relocation-create-relocation", + "description": "Give mittwald access to your Provider and let them move your Project to mittwald.", "requestBody": { "content": { "application/json": { "schema": { "properties": { - "email": { - "description": "The email of the user.", - "example": "a.lovelace@example.com", - "format": "email", - "type": "string" + "allDomains": { + "description": "Should all project releated domains should be transferred to mittwald?", + "type": "boolean" }, - "multiFactorCode": { - "description": "The second factor - otp code or recovery code.", - "example": "123456", - "maxLength": 16, - "minLength": 6, - "type": "string" + "allowPasswordChange": { + "description": "Has to be true. Do you accept that our mittwald team can change and get password from your current provider?", + "type": "boolean" }, - "password": { - "description": "The password of the user.", + "contact": { + "properties": { + "email": { + "format": "email", + "minLength": 1, + "type": "string" + }, + "firstName": { + "minLength": 1, + "type": "string" + }, + "lastName": { + "minLength": 1, + "type": "string" + }, + "phoneNumber": { + "pattern": "|^\\+([0-9]{2,3}|1)-[0-9]{2,5}-[0-9]+$", + "type": "string" + } + }, + "required": [ + "firstName", + "lastName", + "email" + ], + "type": "object" + }, + "domains": { + "description": "List of domains which should be transferred (when allDomains is not checked).", + "items": { + "$ref": "#/components/schemas/directus.Domain" + }, + "type": "array" + }, + "notes": { + "description": "Anything our customer service needs to know for the relocation process.", "type": "string" + }, + "provider": { + "properties": { + "loginUrl": { + "description": "Url to the control panel of the provider", + "minLength": 1, + "type": "string" + }, + "name": { + "description": "Name of your provider", + "oneOf": [ + { + "minLength": 1, + "type": "string" + }, + { + "enum": [ + "1und1", + "strato" + ], + "type": "string" + } + ] + }, + "password": { + "minLength": 1, + "type": "string" + }, + "sourceAccount": { + "description": "Which account of your provider should be moved?", + "minLength": 1, + "type": "string" + }, + "userName": { + "description": "Login name to your provider", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "loginUrl", + "userName", + "password", + "sourceAccount" + ], + "type": "object" + }, + "target": { + "properties": { + "organisation": { + "description": "Your customer or organisation number", + "minLength": 1, + "type": "string" + }, + "product": { + "description": "Help our customer service finding your target account", + "oneOf": [ + { + "minLength": 1, + "type": "string" + }, + { + "enum": [ + "Space-Server", + "proSpace", + "Agentur-Server", + "CMS-Hosting", + "Shop-Hosting" + ], + "type": "string" + } + ], + "type": "string" + }, + "projectName": { + "description": "In which p-account or short project id your project should be moved.", + "minLength": 1, + "type": "string" + }, + "system": { + "description": "Which mittwald system does the targetProject use?", + "enum": [ + "kc", + "mstudio" + ], + "type": "string" + } + }, + "required": [ + "organisation", + "projectName", + "system", + "product" + ], + "type": "object" } }, "required": [ - "multiFactorCode" + "provider", + "contact", + "target", + "allowPasswordChange" ], "type": "object" } } }, + "description": "", "required": true }, "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", - "schema": { - "type": "string" - } - } - } + "204": { + "description": "No content" + }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" } }, - "summary": "Validate your second factor.", + "security": [], + "summary": "Relocate an external Project to mittwald.", "tags": [ - "User" - ], - "deprecated": true + "Relocation" + ] } }, - "/v2/authenticate-mfa": { + "/v2/service/{accessKeyId}/actions/authenticate": { "post": { - "operationId": "user-authenticate-mfa", + "parameters": [ + { + "in": "path", + "name": "accessKeyId", + "required": true, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { "schema": { "properties": { - "email": { - "description": "The email of the user.", - "example": "a.lovelace@example.com", - "format": "email", - "type": "string" - }, - "multiFactorCode": { - "description": "The second factor - otp code or recovery code.", - "example": "123456", - "maxLength": 16, - "minLength": 6, - "type": "string" - }, - "password": { - "description": "The password of the user.", + "secretAccessKey": { "type": "string" } }, "required": [ - "multiFactorCode" + "secretAccessKey" ], "type": "object" } @@ -30111,95 +29754,51 @@ "required": true }, "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "expires": { - "description": "Expiration unix timestamp", - "format": "date-time", - "type": "string" - }, - "token": { - "description": "Public token to identify yourself against the api gateway.", - "type": "string" - } - }, - "required": [ - "token" - ], - "type": "object" - } - } - }, - "description": "Your authentication request was successful and you've got an access token." - }, - "400": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/commons.ValidationErrors" - } - } - }, - "description": "Some of the specified values do not meet our requirements.\nPossible your multiFactorCode is not valid\n" - }, - "408": { - "content": { - "application/json": { + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/signup.DomainError" - }, - { - "properties": { - "name": { - "enum": [ - "FirstAuthenticationFactorExpired" - ], - "type": "string" - } - }, - "type": "object" - } - ] + "type": "string" } } - }, - "description": "Your first factor has been expired. Please call '/authentication' again\n" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" + } } }, - "summary": "Validate your second factor.", - "tags": [ - "User" - ] + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Obtain a service token.", + "tags": [], + "deprecated": true } }, - "/v2/signup/authentication": { + "/internal-v2/services/{accessKeyId}/actions/authenticate": { "post": { + "parameters": [ + { + "in": "path", + "name": "accessKeyId", + "required": true, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { "schema": { "properties": { - "email": { - "description": "The users Email-Address.", - "example": "a.lovelace@example.com", - "type": "string" - }, - "password": { - "description": "Password of the User.", + "secretAccessKey": { "type": "string" } }, "required": [ - "email", - "password" + "secretAccessKey" ], "type": "object" } @@ -30220,34 +29819,40 @@ } } }, - "summary": "Authenticate yourself to get an access token.", - "tags": [ - "User" + "security": [ + { + "commons.AccessToken": [] + } ], + "summary": "Obtain a service token.", + "tags": [], "deprecated": true } }, - "/v2/authenticate": { + "/v2/services/{accessKeyId}/actions/authenticate": { "post": { - "operationId": "user-authenticate", + "operationId": "servicetoken-authenticate-service", + "parameters": [ + { + "in": "path", + "name": "accessKeyId", + "required": true, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { "schema": { "properties": { - "email": { - "description": "The users Email-Address.", - "example": "a.lovelace@example.com", - "type": "string" - }, - "password": { - "description": "Password of the User.", + "secretAccessKey": { "type": "string" } }, "required": [ - "email", - "password" + "secretAccessKey" ], "type": "object" } @@ -30261,87 +29866,116 @@ "application/json": { "schema": { "properties": { - "expires": { - "description": "Expiration unix timestamp", - "format": "date-time", - "type": "string" - }, - "token": { - "description": "Public token to identify yourself against the api gateway.", - "type": "string" - } - }, - "required": [ - "token" - ], - "type": "object" - } - } - }, - "description": "Your authentication request was successfull and you've got an access token." - }, - "202": { - "content": { - "application/json": { - "schema": { - "properties": { - "name": { - "enum": [ - "SecondFactorRequired" + "accessToken": { + "properties": { + "id": { + "type": "string" + }, + "jwtClaims": { + "properties": { + "exp": { + "type": "string" + }, + "iat": { + "type": "string" + }, + "iss": { + "type": "string" + }, + "sub": { + "type": "string" + } + }, + "required": [ + "iat", + "iss", + "sub", + "exp" + ], + "type": "object" + }, + "publicToken": { + "type": "string" + } + }, + "required": [ + "id", + "jwtClaims", + "publicToken" ], - "type": "string" + "type": "object" } }, + "required": [ + "accessToken" + ], "type": "object" } } }, - "description": "Multi factor authentication is activated for this user. After calling this, you need to call '/authentication/mfa' with a valid multi factor code.\n" - }, - "400": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "401": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/commons.ValidationErrors" - } - } - }, - "description": "Authentication failed because of wrong credentials.\n" + "description": "Authentication has been successful." }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "summary": "Authenticate yourself to get an access token.", - "tags": [ - "User" - ] + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Obtain a service token.", + "tags": [] } }, - "/v2/authenticate-token-retrieval-key": { + "/v2/projects/{projectId}/sftp-users": { "post": { - "operationId": "user-authenticate-with-access-token-retrieval-key", + "operationId": "sftp-user-create-sftp-user", + "parameters": [ + { + "description": "ID of the Project to create an SFTPUser for.", + "in": "path", + "name": "projectId", + "required": true, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { "schema": { "properties": { - "accessTokenRetrievalKey": { - "maxLength": 37, - "minLength": 37, + "accessLevel": { + "enum": [ + "read", + "full" + ], "type": "string" }, - "userId": { - "format": "uuid", + "authentication": { + "$ref": "#/components/schemas/sshuser.Authentication" + }, + "description": { + "type": "string" + }, + "directories": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "expiresAt": { + "format": "date-time", "type": "string" } }, "required": [ - "userId", - "accessTokenRetrievalKey" + "description", + "authentication", + "directories" ], "type": "object" } @@ -30350,79 +29984,137 @@ "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { - "properties": { - "expiresAt": { - "format": "date-time", - "type": "string" - }, - "token": { - "description": "Public token to identify yourself against the public api.", - "type": "string" - } - }, - "required": [ - "token" - ], - "type": "object" + "$ref": "#/components/schemas/sshuser.SftpUser" } } }, - "description": "Your authentication request was successful and you've got an access token." + "description": "Created" }, "400": { "$ref": "#/components/responses/commons.ValidationError" }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "summary": "Authenticate an user with an access token retrieval key.", + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Create an SFTPUser for a Project.", "tags": [ - "User" + "SSH/SFTP User" ] - } - }, - "/v2/users/self/credentials/email": { - "put": { - "operationId": "user-change-email", - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "email": { - "description": "The new Email-Address", - "example": "ada.lovelace@example.com", - "format": "email", - "type": "string" - } - }, - "required": [ - "email" - ], - "type": "object" - } + }, + "get": { + "operationId": "sftp-user-list-sftp-users", + "parameters": [ + { + "description": "ID of the Project to request SFTPUsers for.", + "in": "path", + "name": "projectId", + "required": true, + "schema": { + "type": "string" } }, - "required": true - }, - "responses": { - "204": { - "description": "Your email has been added, but needs to be verfied. Check your mails and\ncall /email/verify with the verification code sent with the mail.\n" + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "integer" + } }, - "400": { + { + "in": "query", + "name": "skip", + "required": false, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/commons.ValidationErrors" + "items": { + "$ref": "#/components/schemas/sshuser.SftpUser" + }, + "type": "array" } } }, - "description": "Some of the specified values does not meet our requirements.\nPossible domain specific `type` values are:\n * EmailInUse\n * EmailBlacklisted\n * EmailMXInvalid\n" + "description": "OK", + "headers": { + "X-Pagination-Limit": { + "schema": { + "type": "number" + } + }, + "X-Pagination-Skip": { + "schema": { + "type": "number" + } + }, + "X-Pagination-TotalCount": { + "schema": { + "type": "number" + } + } + } + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } + }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Get all SFTPUsers for a Project.", + "tags": [ + "SSH/SFTP User" + ] + } + }, + "/v2/sftp-users/{sftpUserId}": { + "delete": { + "operationId": "sftp-user-delete-sftp-user", + "parameters": [ + { + "description": "ID of the SFTPUser to be deleted.", + "in": "path", + "name": "sftpUserId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "NoContent" + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -30433,33 +30125,37 @@ "commons.AccessToken": [] } ], - "summary": "Change your Email-Address.", - "tags": [ - "User" - ] - }, - "get": { - "operationId": "user-get-own-email", + "summary": "Delete an SFTPUser.", + "tags": [ + "SSH/SFTP User" + ] + }, + "get": { + "operationId": "sftp-user-get-sftp-user", + "parameters": [ + { + "description": "ID of the SFTPUser to get.", + "in": "path", + "name": "sftpUserId", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "email": { - "example": "a.lovelace@example.com", - "format": "email", - "type": "string" - } - }, - "required": [ - "email" - ], - "type": "object" + "$ref": "#/components/schemas/sshuser.SftpUser" } } }, - "description": "Your Email-Address." + "description": "OK" + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" }, "404": { "$ref": "#/components/responses/commons.NotFoundError" @@ -30473,56 +30169,80 @@ "commons.AccessToken": [] } ], - "summary": "Get your verified Email-Address.", + "summary": "Get an SFTPUser.", "tags": [ - "User" + "SSH/SFTP User" ] - } - }, - "/v2/signup/password": { - "put": { + }, + "patch": { + "operationId": "sftp-user-update-sftp-user", + "parameters": [ + { + "description": "ID of the SFTPUser to be updated.", + "in": "path", + "name": "sftpUserId", + "required": true, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { "schema": { "properties": { - "multiFactorCode": { - "description": "Multi Factor Code to confirm MFA.\nThis is optional, depending on the MFA activation status of the profile.\n", - "example": "123456", - "maxLength": 16, - "minLength": 6, + "accessLevel": { + "enum": [ + "read", + "full" + ], "type": "string" }, - "newPassword": { - "description": "The new password.", + "active": { + "type": "boolean" + }, + "description": { "type": "string" }, - "oldPassword": { - "description": "The old password.", + "directories": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "expiresAt": { + "format": "date-time", + "type": "string" + }, + "password": { "type": "string" + }, + "publicKeys": { + "items": { + "$ref": "#/components/schemas/sshuser.PublicKey" + }, + "type": "array" } }, - "required": [ - "oldPassword", - "newPassword" - ], "type": "object" } } - }, - "required": true + } }, "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", - "schema": { - "type": "string" - } - } - } + "204": { + "description": "NoContent" + }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" } }, "security": [ @@ -30530,23 +30250,41 @@ "commons.AccessToken": [] } ], - "summary": "Change your password.", + "summary": "Update an SFTPUser.", "tags": [ - "User" - ], - "deprecated": true - }, + "SSH/SFTP User" + ] + } + }, + "/v2/project/{projectId}/sftp-users": { "get": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object" - } + "parameters": [ + { + "description": "ID of the Project to request SFTPUsers for.", + "in": "path", + "name": "projectId", + "required": true, + "schema": { + "type": "string" } }, - "required": false - }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "in": "query", + "name": "skip", + "required": false, + "schema": { + "type": "integer" + } + } + ], "responses": { "308": { "description": "This route is deprecated, and will redirect you to another URL.", @@ -30565,40 +30303,46 @@ "commons.AccessToken": [] } ], - "summary": "The timestamp of your latest password change.", + "summary": "Get all SFTPUsers for a Project.", "tags": [ - "User" + "SSH/SFTP User" ], "deprecated": true } }, - "/v2/users/self/credentials/password": { - "put": { - "operationId": "user-change-password", + "/v2/projects/{projectId}/ssh-users": { + "post": { + "operationId": "ssh-user-create-ssh-user", + "parameters": [ + { + "description": "ID of the Project to create an SSHUser for.", + "in": "path", + "name": "projectId", + "required": true, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { "schema": { "properties": { - "multiFactorCode": { - "description": "Multi Factor Code to confirm MFA.\nThis is optional, depending on the MFA activation status of the profile.\n", - "example": "123456", - "maxLength": 16, - "minLength": 6, - "type": "string" + "authentication": { + "$ref": "#/components/schemas/sshuser.Authentication" }, - "newPassword": { - "description": "The new password.", + "description": { "type": "string" }, - "oldPassword": { - "description": "The old password.", + "expiresAt": { + "format": "date-time", "type": "string" } }, "required": [ - "oldPassword", - "newPassword" + "description", + "authentication" ], "type": "object" } @@ -30606,43 +30350,102 @@ }, "required": true }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sshuser.SshUser" + } + } + }, + "description": "Created" + }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } + }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Create an SSHUser for a Project.", + "tags": [ + "SSH/SFTP User" + ] + }, + "get": { + "operationId": "ssh-user-list-ssh-users", + "parameters": [ + { + "description": "ID of the Project to retrieve SSHUsers for.", + "in": "path", + "name": "projectId", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "in": "query", + "name": "skip", + "required": false, + "schema": { + "type": "integer" + } + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "expires": { - "description": "Expiration unix timestamp.", - "format": "date-time", - "type": "string" - }, - "token": { - "description": "Public token to identify yourself against the api gateway.", - "type": "string" - } + "items": { + "$ref": "#/components/schemas/sshuser.SshUser" }, - "required": [ - "token" - ], - "type": "object" + "type": "array" } } }, - "description": "Your password has been changed." - }, - "202": { - "$ref": "#/components/responses/signup.SecondFactorRequiredError" - }, - "400": { - "content": { - "application/json": { + "description": "OK", + "headers": { + "X-Pagination-Limit": { "schema": { - "$ref": "#/components/schemas/commons.ValidationErrors" + "type": "number" + } + }, + "X-Pagination-Skip": { + "schema": { + "type": "number" + } + }, + "X-Pagination-TotalCount": { + "schema": { + "type": "number" } } - }, - "description": "Some of the specified values does not meet our requirements.\nPossible domain specific `type` values are:\n * EmailAddressNotVerified\n * WrongPassword\n * SamePassword\n * PasswordIsLeaked\n * MfaCodeNotValid\n * PasswordEqualsEmail\n" + } + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -30653,35 +30456,79 @@ "commons.AccessToken": [] } ], - "summary": "Change your password.", + "summary": "Get all SSHUsers for a Project.", "tags": [ - "User" + "SSH/SFTP User" ] } }, - "/v2/signup/token/check": { - "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object" - } + "/v2/ssh-users/{sshUserId}": { + "delete": { + "operationId": "ssh-user-delete-ssh-user", + "parameters": [ + { + "description": "ID of the SSHUser to be deleted.", + "in": "path", + "name": "sshUserId", + "required": true, + "schema": { + "type": "string" } + } + ], + "responses": { + "204": { + "description": "NoContent" }, - "required": false + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Delete an SSHUser.", + "tags": [ + "SSH/SFTP User" + ] + }, + "get": { + "operationId": "ssh-user-get-ssh-user", + "parameters": [ + { + "description": "ID of the SSHUser to be retrieved.", + "in": "path", + "name": "sshUserId", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "200": { + "content": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/sshuser.SshUser" } } - } + }, + "description": "OK" + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" } }, "security": [ @@ -30689,49 +30536,63 @@ "commons.AccessToken": [] } ], - "summary": "Check token for validity.", + "summary": "Get an SSHUser.", "tags": [ - "User" + "SSH/SFTP User" + ] + }, + "patch": { + "operationId": "ssh-user-update-ssh-user", + "parameters": [ + { + "description": "ID of the SSHUser to be updated.", + "in": "path", + "name": "sshUserId", + "required": true, + "schema": { + "type": "string" + } + } ], - "deprecated": true - } - }, - "/v2/users/self/credentials/token": { - "post": { - "operationId": "user-check-token", "requestBody": { "content": { "application/json": { "schema": { + "properties": { + "active": { + "type": "boolean" + }, + "description": { + "type": "string" + }, + "expiresAt": { + "format": "date-time", + "type": "string" + }, + "password": { + "type": "string" + }, + "publicKeys": { + "items": { + "$ref": "#/components/schemas/sshuser.PublicKey" + }, + "type": "array" + } + }, "type": "object" } } - }, - "required": false + } }, "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "id": { - "format": "uuid", - "type": "string" - }, - "publicToken": { - "type": "string" - } - }, - "required": [ - "id", - "publicToken" - ], - "type": "object" - } - } - }, - "description": "Your token is valid." + "204": { + "description": "NoContent" + }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -30742,35 +30603,54 @@ "commons.AccessToken": [] } ], - "summary": "Check token for validity.", + "summary": "Update an SSHUser.", "tags": [ - "User" + "SSH/SFTP User" ] } }, - "/v2/signup/mfa/confirm": { - "post": { + "/v2/sshusers/{sshUserId}": { + "patch": { + "parameters": [ + { + "description": "ID of the SSHUser to be updated.", + "in": "path", + "name": "sshUserId", + "required": true, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { "schema": { "properties": { - "multiFactorCode": { - "description": "Multi Factor Code to confirm MFA.", - "example": "123456", - "maxLength": 16, - "minLength": 6, + "active": { + "type": "boolean" + }, + "description": { + "type": "string" + }, + "expiresAt": { + "format": "date-time", + "type": "string" + }, + "password": { "type": "string" + }, + "publicKeys": { + "items": { + "$ref": "#/components/schemas/sshuser.PublicKey" + }, + "type": "array" } }, - "required": [ - "multiFactorCode" - ], "type": "object" } } - }, - "required": true + } }, "responses": { "308": { @@ -30790,105 +30670,60 @@ "commons.AccessToken": [] } ], - "summary": "Confirm Multi Factor Authentication.", + "summary": "Update an SSHUser.", "tags": [ - "User" + "SSH/SFTP User" ], "deprecated": true } }, - "/v2/users/self/credentials/mfa": { + "/v2/users/{userId}/phone": { "post": { - "operationId": "user-confirm-mfa", - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "multiFactorCode": { - "description": "Multi Factor Code to confirm MFA.", - "example": "123456", - "maxLength": 16, - "minLength": 6, - "type": "string" - } - }, - "required": [ - "multiFactorCode" - ], - "type": "object" - } - } - }, - "required": true - }, - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "recoveryCodesList": { - "items": { - "example": 1234123412341234, - "maxLength": 16, - "minLength": 16, - "type": "string" - }, - "maxItems": 20, - "minItems": 20, - "type": "array" - } - }, - "required": [ - "recoveryCodesList" - ], - "type": "object" - } + "operationId": "user-add-phone-number", + "parameters": [ + { + "description": "`self` or the id of a user.", + "examples": { + "self": { + "summary": "You", + "value": "self" + }, + "userId": { + "summary": "ID of a user.", + "value": "10203040-1234-5678-abcd-badc0de01234" } }, - "description": "Mfa is now activated and recovery codes are in the response body." - }, - "400": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/commons.ValidationErrors" + "in": "path", + "name": "userId", + "required": true, + "schema": { + "oneOf": [ + { + "enum": [ + "self" + ], + "type": "string" + }, + { + "format": "uuid", + "type": "string" } - } - }, - "description": "Some of the specified values does not meet our requirements.\nPossible domain specific `type` values are:\n * EmailAddressNotVerified\n * MfaNotInitialized\n * MfaAlreadyConfirmed\n" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" - } - }, - "security": [ - { - "commons.AccessToken": [] + ] + } } ], - "summary": "Confirm Multi Factor Authentication.", - "tags": [ - "User" - ] - }, - "delete": { - "operationId": "user-disable-mfa", "requestBody": { "content": { "application/json": { "schema": { "properties": { - "multiFactorCode": { - "description": "Multi Factor Code to confirm MFA.", - "maxLength": 16, - "minLength": 6, + "phoneNumber": { + "format": "phone", "type": "string" } }, "required": [ - "multiFactorCode" + "phoneNumber" ], "type": "object" } @@ -30898,56 +30733,16 @@ }, "responses": { "204": { - "description": "Multi Factor Authentication was disabled." + "description": "Phone number was added successfully. Now, it can be verified via /v2/users/:userId/actions/verify-phone." }, "400": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/commons.ValidationErrors" - } - } - }, - "description": "Some of the specified values does not meet our requirements.\nPossible domain specific `type` values are:\n * MultiFactorCodeNotValid\n" + "$ref": "#/components/responses/commons.ValidationError" }, - "default": { + "403": { + "$ref": "#/components/responses/commons.RateLimitError" + }, + "409": { "$ref": "#/components/responses/commons.DefaultError" - } - }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Disable Multi Factor Authentication.", - "tags": [ - "User" - ] - }, - "get": { - "operationId": "user-get-mfa-status", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "confirmed": { - "type": "boolean" - }, - "initialized": { - "type": "boolean" - } - }, - "required": [ - "initialized", - "confirmed" - ], - "type": "object" - } - } - }, - "description": "Multi factor auth status" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -30958,71 +30753,51 @@ "commons.AccessToken": [] } ], - "summary": "Get your current multi factor auth status.", + "summary": "Add phone number and start verification process.", "tags": [ "User" ] }, - "put": { - "operationId": "user-reset-recoverycodes", - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "multiFactorCode": { - "description": "Multi Factor Code to authorize your request.", - "example": "123456", - "maxLength": 16, - "minLength": 6, - "type": "string" - } - }, - "required": [ - "multiFactorCode" - ], - "type": "object" - } - } - }, - "required": true - }, - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "recoveryCodesList": { - "items": { - "example": 1234123412341234, - "maxLength": 16, - "minLength": 16, - "type": "string" - }, - "maxItems": 20, - "minItems": 20, - "type": "array" - } - }, - "required": [ - "recoveryCodesList" - ], - "type": "object" - } + "delete": { + "operationId": "user-remove-phone-number", + "parameters": [ + { + "description": "`self` or the id of a user.", + "examples": { + "self": { + "summary": "You", + "value": "self" + }, + "userId": { + "summary": "ID of a user.", + "value": "10203040-1234-5678-abcd-badc0de01234" } }, - "description": "Recovery-Codes are reset now. The new Recovery-Codes are in the response body." - }, - "400": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/commons.ValidationErrors" + "in": "path", + "name": "userId", + "required": true, + "schema": { + "oneOf": [ + { + "enum": [ + "self" + ], + "type": "string" + }, + { + "format": "uuid", + "type": "string" } - } - }, - "description": "Some of the specified values does not meet our requirements.\nPossible domain specific `type` values are:\n * MultiFactorCodeNotValid\n * MfaNotInitialized\n" + ] + } + } + ], + "responses": { + "204": { + "description": "PhoneNumber removal was successful" + }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -31033,40 +30808,39 @@ "commons.AccessToken": [] } ], - "summary": "Reset RecoveryCodes for MFA.", + "summary": "Remove phone number.", "tags": [ "User" ] } }, - "/v2/users/self/credentials/password/confirm-reset": { + "/v2/signup/authentication/mfa": { "post": { - "operationId": "user-confirm-password-reset", "requestBody": { "content": { "application/json": { "schema": { "properties": { - "password": { - "description": "The new password.", + "email": { + "description": "The email of the user.", + "example": "a.lovelace@example.com", + "format": "email", "type": "string" }, - "token": { - "description": "Password reset token", - "maxLength": 6, + "multiFactorCode": { + "description": "The second factor - otp code or recovery code.", + "example": "123456", + "maxLength": 16, "minLength": 6, "type": "string" }, - "userId": { - "description": "UserId of the user to reset the password for.", - "format": "uuid", + "password": { + "description": "The password of the user.", "type": "string" } }, "required": [ - "userId", - "token", - "password" + "multiFactorCode" ], "type": "object" } @@ -31075,120 +30849,150 @@ "required": true }, "responses": { - "204": { - "description": "Password reset was successful." - }, - "400": { - "content": { - "application/json": { + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", "schema": { - "$ref": "#/components/schemas/commons.ValidationErrors" + "type": "string" } } - }, - "description": "Some of the specified values do not meet our requirements.\nPossible domain specific `type` values are:\n * WrongPasswordResetToken\n * EmailAddressNotVerified\n * PasswordIsLeaked\n * ValidationError\n * PasswordEqualsEmail\n" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" + } } }, - "summary": "Confirm password reset.", + "summary": "Validate your second factor.", "tags": [ "User" - ] + ], + "deprecated": true } }, - "/v2/users/self/token-retrieval-key": { + "/v2/authenticate-mfa": { "post": { - "operationId": "user-create-access-token-retrieval-key", + "operationId": "user-authenticate-mfa", "requestBody": { "content": { "application/json": { - "schema": {} + "schema": { + "properties": { + "email": { + "description": "The email of the user.", + "example": "a.lovelace@example.com", + "format": "email", + "type": "string" + }, + "multiFactorCode": { + "description": "The second factor - otp code or recovery code.", + "example": "123456", + "maxLength": 16, + "minLength": 6, + "type": "string" + }, + "password": { + "description": "The password of the user.", + "type": "string" + } + }, + "required": [ + "multiFactorCode" + ], + "type": "object" + } } }, - "required": false + "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { - "accessTokenRetrievalKey": { - "description": "This retrieval can be used as a one time password. It is only valid once and for a short time.", - "example": "mwrk-abcdefghijklmnopqrstuvwxyz012345", - "maxLength": 37, - "minLength": 37, + "expires": { + "description": "Expiration unix timestamp", + "format": "date-time", "type": "string" }, - "userId": { - "format": "uuid", + "token": { + "description": "Public token to identify yourself against the api gateway.", "type": "string" } }, "required": [ - "userId", - "accessTokenRetrievalKey" + "token" ], "type": "object" } } }, - "description": "You got an access token retrieval key use it as a one time password to get an actual access token." + "description": "Your authentication request was successful and you've got an access token." + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/commons.ValidationErrors" + } + } + }, + "description": "Some of the specified values do not meet our requirements.\nPossible your multiFactorCode is not valid\n" + }, + "408": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/signup.DomainError" + }, + { + "properties": { + "name": { + "enum": [ + "FirstAuthenticationFactorExpired" + ], + "type": "string" + } + }, + "type": "object" + } + ] + } + } + }, + "description": "Your first factor has been expired. Please call '/authentication' again\n" }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Create an access token retrieval key to acquire an access token for your user.", + "summary": "Validate your second factor.", "tags": [ "User" ] } }, - "/v2/signup/token/api": { + "/v2/signup/authentication": { "post": { "requestBody": { "content": { "application/json": { "schema": { "properties": { - "description": { - "example": "Api Token - read", + "email": { + "description": "The users Email-Address.", + "example": "a.lovelace@example.com", "type": "string" }, - "expiresAt": { - "format": "date-time", + "password": { + "description": "Password of the User.", "type": "string" - }, - "roles": { - "description": "Determines the access rights of the ApiToken.", - "example": { - "value": [ - "api_read" - ] - }, - "items": { - "enum": [ - "api_read", - "api_write" - ], - "type": "string" - }, - "minItems": 1, - "type": "array", - "uniqueItems": true } }, "required": [ - "roles", - "description" + "email", + "password" ], "type": "object" } @@ -31209,81 +31013,128 @@ } } }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Store a new ApiToken.", + "summary": "Authenticate yourself to get an access token.", "tags": [ "User" ], "deprecated": true - }, - "get": { + } + }, + "/v2/authenticate": { + "post": { + "operationId": "user-authenticate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "email": { + "description": "The users Email-Address.", + "example": "a.lovelace@example.com", + "type": "string" + }, + "password": { + "description": "Password of the User.", + "type": "string" + } + }, + "required": [ + "email", + "password" + ], + "type": "object" + } + } + }, + "required": true + }, "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "expires": { + "description": "Expiration unix timestamp", + "format": "date-time", + "type": "string" + }, + "token": { + "description": "Public token to identify yourself against the api gateway.", + "type": "string" + } + }, + "required": [ + "token" + ], + "type": "object" + } + } + }, + "description": "Your authentication request was successfull and you've got an access token." + }, + "202": { + "content": { + "application/json": { + "schema": { + "properties": { + "name": { + "enum": [ + "SecondFactorRequired" + ], + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Multi factor authentication is activated for this user. After calling this, you need to call '/authentication/mfa' with a valid multi factor code.\n" + }, + "400": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "401": { + "content": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/commons.ValidationErrors" } } - } + }, + "description": "Authentication failed because of wrong credentials.\n" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" } }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "List all of your ApiTokens.", + "summary": "Authenticate yourself to get an access token.", "tags": [ "User" - ], - "deprecated": true + ] } }, - "/v2/users/self/api-tokens": { + "/v2/authenticate-token-retrieval-key": { "post": { - "operationId": "user-create-api-token", + "operationId": "user-authenticate-with-access-token-retrieval-key", "requestBody": { "content": { "application/json": { "schema": { "properties": { - "description": { - "example": "Api Token - read", + "accessTokenRetrievalKey": { + "maxLength": 37, + "minLength": 37, "type": "string" }, - "expiresAt": { - "format": "date-time", + "userId": { + "format": "uuid", "type": "string" - }, - "roles": { - "description": "Determines the access rights of the ApiToken.", - "example": { - "value": [ - "api_read" - ] - }, - "items": { - "enum": [ - "api_read", - "api_write" - ], - "type": "string" - }, - "minItems": 1, - "type": "array", - "uniqueItems": true } }, "required": [ - "roles", - "description" + "userId", + "accessTokenRetrievalKey" ], "type": "object" } @@ -31292,13 +31143,17 @@ "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { + "expiresAt": { + "format": "date-time", + "type": "string" + }, "token": { - "description": "The `ApiToken`.", + "description": "Public token to identify yourself against the public api.", "type": "string" } }, @@ -31309,7 +31164,7 @@ } } }, - "description": "ApiToken was added." + "description": "Your authentication request was successful and you've got an access token." }, "400": { "$ref": "#/components/responses/commons.ValidationError" @@ -31318,31 +31173,49 @@ "$ref": "#/components/responses/commons.DefaultError" } }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Store a new ApiToken.", + "summary": "Authenticate an user with an access token retrieval key.", "tags": [ "User" ] - }, - "get": { - "operationId": "user-list-api-tokens", + } + }, + "/v2/users/self/credentials/email": { + "put": { + "operationId": "user-change-email", + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "email": { + "description": "The new Email-Address", + "example": "ada.lovelace@example.com", + "format": "email", + "type": "string" + } + }, + "required": [ + "email" + ], + "type": "object" + } + } + }, + "required": true + }, "responses": { - "200": { + "204": { + "description": "Your email has been added, but needs to be verfied. Check your mails and\ncall /email/verify with the verification code sent with the mail.\n" + }, + "400": { "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/signup.ApiToken" - }, - "type": "array" + "$ref": "#/components/schemas/commons.ValidationErrors" } } }, - "description": "A list of ApiTokens." + "description": "Some of the specified values does not meet our requirements.\nPossible domain specific `type` values are:\n * EmailInUse\n * EmailBlacklisted\n * EmailMXInvalid\n" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -31353,76 +31226,36 @@ "commons.AccessToken": [] } ], - "summary": "List all of your ApiTokens.", + "summary": "Change your Email-Address.", "tags": [ "User" ] - } - }, - "/v2/users/self/feedback": { - "post": { - "operationId": "user-create-feedback", - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "description": "Personal feedback message.", - "maxLength": 5000, - "type": "string" - }, - "origin": { - "description": "Origin of the feedback.", - "example": "https://studio.mittwald.de/app/dashboard", - "maxLength": 1000, - "type": "string" - }, - "subject": { - "description": "Descriptive subject.", - "maxLength": 100, - "type": "string" - }, - "type": { - "description": "Type of feedback.", - "enum": [ - "feedback", - "bug" - ], - "type": "string" - }, - "vote": { - "description": "Feedback rating from bad to good. Set to 0 or skip this field to not vote at all.", - "maximum": 10, - "minimum": 0, - "type": "number" - } - }, - "required": [ - "subject" - ], - "type": "object" - } - } - }, - "description": "The feedback to give." - }, + }, + "get": { + "operationId": "user-get-own-email", "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { + "properties": { + "email": { + "example": "a.lovelace@example.com", + "format": "email", + "type": "string" + } + }, + "required": [ + "email" + ], "type": "object" } } }, - "description": "Feedback successfully submitted." - }, - "401": { - "$ref": "#/components/responses/commons.DefaultError" + "description": "Your Email-Address." }, "404": { - "$ref": "#/components/responses/commons.DefaultError" + "$ref": "#/components/responses/commons.NotFoundError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -31433,30 +31266,38 @@ "commons.AccessToken": [] } ], - "summary": "Submit your user feedback.", + "summary": "Get your verified Email-Address.", "tags": [ "User" ] } }, - "/v2/signup/ssh": { - "post": { + "/v2/signup/password": { + "put": { "requestBody": { "content": { "application/json": { "schema": { "properties": { - "expiresAt": { - "format": "date-time", + "multiFactorCode": { + "description": "Multi Factor Code to confirm MFA.\nThis is optional, depending on the MFA activation status of the profile.\n", + "example": "123456", + "maxLength": 16, + "minLength": 6, "type": "string" }, - "publicKey": { - "example": "ssh-rsa ...", + "newPassword": { + "description": "The new password.", + "type": "string" + }, + "oldPassword": { + "description": "The old password.", "type": "string" } }, "required": [ - "publicKey" + "oldPassword", + "newPassword" ], "type": "object" } @@ -31482,13 +31323,23 @@ "commons.AccessToken": [] } ], - "summary": "Store a new ssh-key.", + "summary": "Change your password.", "tags": [ "User" ], "deprecated": true }, "get": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "required": false + }, "responses": { "308": { "description": "This route is deprecated, and will redirect you to another URL.", @@ -31507,32 +31358,40 @@ "commons.AccessToken": [] } ], - "summary": "Get your stored ssh-keys.", + "summary": "The timestamp of your latest password change.", "tags": [ "User" ], "deprecated": true } }, - "/v2/users/self/ssh-keys": { - "post": { - "operationId": "user-create-ssh-key", + "/v2/users/self/credentials/password": { + "put": { + "operationId": "user-change-password", "requestBody": { "content": { "application/json": { "schema": { "properties": { - "expiresAt": { - "format": "date-time", + "multiFactorCode": { + "description": "Multi Factor Code to confirm MFA.\nThis is optional, depending on the MFA activation status of the profile.\n", + "example": "123456", + "maxLength": 16, + "minLength": 6, + "type": "string" + }, + "newPassword": { + "description": "The new password.", "type": "string" }, - "publicKey": { - "example": "ssh-rsa ...", + "oldPassword": { + "description": "The old password.", "type": "string" } }, "required": [ - "publicKey" + "oldPassword", + "newPassword" ], "type": "object" } @@ -31541,53 +31400,42 @@ "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { + "properties": { + "expires": { + "description": "Expiration unix timestamp.", + "format": "date-time", + "type": "string" + }, + "token": { + "description": "Public token to identify yourself against the api gateway.", + "type": "string" + } + }, + "required": [ + "token" + ], "type": "object" } } }, - "description": "The ssh-key was stored." + "description": "Your password has been changed." }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" + "202": { + "$ref": "#/components/responses/signup.SecondFactorRequiredError" }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" - } - }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Store a new ssh-key.", - "tags": [ - "User" - ] - }, - "get": { - "operationId": "user-list-ssh-keys", - "responses": { - "200": { + "400": { "content": { "application/json": { "schema": { - "properties": { - "sshKeys": { - "items": { - "$ref": "#/components/schemas/signup.SshKey" - }, - "type": "array" - } - }, - "type": "object" + "$ref": "#/components/schemas/commons.ValidationErrors" } } }, - "description": "The list of stored ssh-keys." + "description": "Some of the specified values does not meet our requirements.\nPossible domain specific `type` values are:\n * EmailAddressNotVerified\n * WrongPassword\n * SamePassword\n * PasswordIsLeaked\n * MfaCodeNotValid\n * PasswordEqualsEmail\n" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -31598,36 +31446,35 @@ "commons.AccessToken": [] } ], - "summary": "Get your stored ssh-keys.", + "summary": "Change your password.", "tags": [ "User" ] } }, - "/v2/users/self/api-tokens/{apiTokenId}": { - "delete": { - "operationId": "user-delete-api-token", - "parameters": [ - { - "description": "The uuid of an ApiToken.", - "in": "path", - "name": "apiTokenId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" + "/v2/signup/token/check": { + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object" + } } - } - ], - "responses": { - "204": { - "description": "The `ApiToken` has been deleted." - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" + "required": false + }, + "responses": { + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "schema": { + "type": "string" + } + } + } } }, "security": [ @@ -31635,95 +31482,49 @@ "commons.AccessToken": [] } ], - "summary": "Deletes an ApiToken.", + "summary": "Check token for validity.", "tags": [ "User" - ] - }, - "put": { - "operationId": "user-edit-api-token", - "parameters": [ - { - "in": "path", - "name": "apiTokenId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" - } - } ], + "deprecated": true + } + }, + "/v2/users/self/credentials/token": { + "post": { + "operationId": "user-check-token", "requestBody": { "content": { "application/json": { "schema": { - "properties": { - "description": { - "example": "Api Token for ...", - "type": "string" - }, - "expiresAt": { - "format": "date-time", - "type": "string" - } - }, - "required": [ - "description" - ], "type": "object" } } }, - "required": true - }, - "responses": { - "204": { - "description": "ApiToken was updated." - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" - } + "required": false }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Update an existing `ApiToken`.", - "tags": [ - "User" - ] - }, - "get": { - "operationId": "user-get-api-token", - "parameters": [ - { - "description": "The id of an ApiToken.", - "in": "path", - "name": "apiTokenId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" - } - } - ], "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/signup.ApiToken" + "properties": { + "id": { + "format": "uuid", + "type": "string" + }, + "publicToken": { + "type": "string" + } + }, + "required": [ + "id", + "publicToken" + ], + "type": "object" } } }, - "description": "The ApiToken." - }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "description": "Your token is valid." }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -31734,73 +31535,29 @@ "commons.AccessToken": [] } ], - "summary": "Get a specific ApiToken.", + "summary": "Check token for validity.", "tags": [ "User" ] } }, - "/v2/users/self/ssh-keys/{sshKeyId}": { - "delete": { - "operationId": "user-delete-ssh-key", - "parameters": [ - { - "in": "path", - "name": "sshKeyId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "The ssh-key has been removed." - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" - } - }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Remove a ssh-key.", - "tags": [ - "User" - ] - }, - "put": { - "operationId": "user-edit-ssh-key", - "parameters": [ - { - "in": "path", - "name": "sshKeyId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" - } - } - ], + "/v2/signup/mfa/confirm": { + "post": { "requestBody": { "content": { "application/json": { "schema": { "properties": { - "comment": { - "example": "a.lovelace@example.com", - "type": "string" - }, - "expiresAt": { - "format": "date-time", + "multiFactorCode": { + "description": "Multi Factor Code to confirm MFA.", + "example": "123456", + "maxLength": 16, + "minLength": 6, "type": "string" } }, "required": [ - "comment" + "multiFactorCode" ], "type": "object" } @@ -31809,14 +31566,16 @@ "required": true }, "responses": { - "204": { - "description": "The ssh-key has been edited." - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "schema": { + "type": "string" + } + } + } } }, "security": [ @@ -31824,45 +31583,74 @@ "commons.AccessToken": [] } ], - "summary": "Edit a stored ssh-key.", + "summary": "Confirm Multi Factor Authentication.", "tags": [ "User" - ] - }, - "get": { - "operationId": "user-get-ssh-key", - "parameters": [ - { - "in": "path", - "name": "sshKeyId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" - } - } ], + "deprecated": true + } + }, + "/v2/users/self/credentials/mfa": { + "post": { + "operationId": "user-confirm-mfa", + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "multiFactorCode": { + "description": "Multi Factor Code to confirm MFA.", + "example": "123456", + "maxLength": 16, + "minLength": 6, + "type": "string" + } + }, + "required": [ + "multiFactorCode" + ], + "type": "object" + } + } + }, + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "sshKey": { - "$ref": "#/components/schemas/signup.SshKey" + "recoveryCodesList": { + "items": { + "example": 1234123412341234, + "maxLength": 16, + "minLength": 16, + "type": "string" + }, + "maxItems": 20, + "minItems": 20, + "type": "array" } }, "required": [ - "sshKey" + "recoveryCodesList" ], "type": "object" } } }, - "description": "The requested ssh-key." + "description": "Mfa is now activated and recovery codes are in the response body." }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/commons.ValidationErrors" + } + } + }, + "description": "Some of the specified values does not meet our requirements.\nPossible domain specific `type` values are:\n * EmailAddressNotVerified\n * MfaNotInitialized\n * MfaAlreadyConfirmed\n" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -31873,33 +31661,27 @@ "commons.AccessToken": [] } ], - "summary": "Get a specific stored ssh-key.", + "summary": "Confirm Multi Factor Authentication.", "tags": [ "User" ] - } - }, - "/v2/users/self": { + }, "delete": { - "operationId": "user-delete-user", + "operationId": "user-disable-mfa", "requestBody": { "content": { "application/json": { "schema": { "properties": { "multiFactorCode": { - "description": "Multi Factor Code to authorize your request.", - "example": "123456", + "description": "Multi Factor Code to confirm MFA.", "maxLength": 16, "minLength": 6, "type": "string" - }, - "password": { - "type": "string" } }, "required": [ - "password" + "multiFactorCode" ], "type": "object" } @@ -31908,11 +31690,8 @@ "required": true }, "responses": { - "200": { - "description": "Your user has been deleted." - }, - "202": { - "$ref": "#/components/responses/signup.SecondFactorRequiredError" + "204": { + "description": "Multi Factor Authentication was disabled." }, "400": { "content": { @@ -31922,10 +31701,7 @@ } } }, - "description": "Some of the specified values does not meet our requirements.\nPossible domain specific `type` values are:\n * WrongPassword\n * MfaCodeNotValid\n" - }, - "409": { - "$ref": "#/components/responses/signup.RemovingLastOwnerNotAllowedError" + "description": "Some of the specified values does not meet our requirements.\nPossible domain specific `type` values are:\n * MultiFactorCodeNotValid\n" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -31936,35 +31712,35 @@ "commons.AccessToken": [] } ], - "summary": "Delete your account and all your personal data.", + "summary": "Disable Multi Factor Authentication.", "tags": [ "User" ] - } - }, - "/v2/users/self/personal-information": { + }, "get": { - "operationId": "user-get-own-account", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - }, - "required": false - }, + "operationId": "user-get-mfa-status", "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/signup.Account" + "properties": { + "confirmed": { + "type": "boolean" + }, + "initialized": { + "type": "boolean" + } + }, + "required": [ + "initialized", + "confirmed" + ], + "type": "object" } } }, - "description": "Account information." + "description": "Multi factor auth status" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -31975,24 +31751,28 @@ "commons.AccessToken": [] } ], - "summary": "Get your account information.", + "summary": "Get your current multi factor auth status.", "tags": [ "User" ] }, "put": { - "operationId": "user-update-account", + "operationId": "user-reset-recoverycodes", "requestBody": { "content": { "application/json": { "schema": { "properties": { - "person": { - "$ref": "#/components/schemas/commons.Person" + "multiFactorCode": { + "description": "Multi Factor Code to authorize your request.", + "example": "123456", + "maxLength": 16, + "minLength": 6, + "type": "string" } }, "required": [ - "person" + "multiFactorCode" ], "type": "object" } @@ -32001,8 +31781,31 @@ "required": true }, "responses": { - "204": { - "description": "Account has been updated." + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "recoveryCodesList": { + "items": { + "example": 1234123412341234, + "maxLength": 16, + "minLength": 16, + "type": "string" + }, + "maxItems": 20, + "minItems": 20, + "type": "array" + } + }, + "required": [ + "recoveryCodesList" + ], + "type": "object" + } + } + }, + "description": "Recovery-Codes are reset now. The new Recovery-Codes are in the response body." }, "400": { "content": { @@ -32012,7 +31815,7 @@ } } }, - "description": "Some of the specified values does not meet our requirements.\n" + "description": "Some of the specified values does not meet our requirements.\nPossible domain specific `type` values are:\n * MultiFactorCodeNotValid\n * MfaNotInitialized\n" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -32023,112 +31826,109 @@ "commons.AccessToken": [] } ], - "summary": "Update your account information.", + "summary": "Reset RecoveryCodes for MFA.", "tags": [ "User" ] } }, - "/v2/users/self/credentials/password-updated-at": { - "get": { - "operationId": "user-get-password-updated-at", + "/v2/users/self/credentials/password/confirm-reset": { + "post": { + "operationId": "user-confirm-password-reset", "requestBody": { "content": { "application/json": { "schema": { + "properties": { + "password": { + "description": "The new password.", + "type": "string" + }, + "token": { + "description": "Password reset token", + "maxLength": 6, + "minLength": 6, + "type": "string" + }, + "userId": { + "description": "UserId of the user to reset the password for.", + "format": "uuid", + "type": "string" + } + }, + "required": [ + "userId", + "token", + "password" + ], "type": "object" } } }, - "required": false + "required": true }, "responses": { - "200": { + "204": { + "description": "Password reset was successful." + }, + "400": { "content": { "application/json": { "schema": { - "properties": { - "passwordUpdatedAt": { - "format": "date-time", - "type": "string" - } - }, - "required": [ - "passwordUpdatedAt" - ], - "type": "object" + "$ref": "#/components/schemas/commons.ValidationErrors" } } }, - "description": "Timestamp of latest password change." + "description": "Some of the specified values do not meet our requirements.\nPossible domain specific `type` values are:\n * WrongPasswordResetToken\n * EmailAddressNotVerified\n * PasswordIsLeaked\n * ValidationError\n * PasswordEqualsEmail\n" }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "The timestamp of your latest password change.", + "summary": "Confirm password reset.", "tags": [ "User" ] } }, - "/v2/users/{userId}/settings": { - "get": { - "operationId": "user-get-personalized-settings", - "parameters": [ - { - "description": "`self` or the id of a user.", - "examples": { - "self": { - "summary": "You", - "value": "self" - }, - "userId": { - "summary": "ID of a user.", - "value": "10203040-1234-5678-abcd-badc0de01234" - } - }, - "in": "path", - "name": "userId", - "required": true, - "schema": { - "oneOf": [ - { - "enum": [ - "self" - ], - "type": "string" - }, - { - "format": "uuid", - "type": "string" - } - ] + "/v2/users/self/token-retrieval-key": { + "post": { + "operationId": "user-create-access-token-retrieval-key", + "requestBody": { + "content": { + "application/json": { + "schema": {} } - } - ], + }, + "required": false + }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { "properties": { - "settingsString": { - "example": "eyJvbmJvYXJkaW5nIjp7ImNvbXBsZXRlZCI6W119LCJyZWNlbnRWaXNpdHMiOnsicmVjZW50VmlzaXRzIjp7fSwicmVjZW50VmlzaXRlZFBhdGhzIjp7fX0sImNoYW5nZWxvZ3MiOnsicmVhZElkcyI6WzIsMSwzLDQsNSw2LDgsNyw5XX19", - "format": "base64", + "accessTokenRetrievalKey": { + "description": "This retrieval can be used as a one time password. It is only valid once and for a short time.", + "example": "mwrk-abcdefghijklmnopqrstuvwxyz012345", + "maxLength": 37, + "minLength": 37, + "type": "string" + }, + "userId": { + "format": "uuid", "type": "string" } }, + "required": [ + "userId", + "accessTokenRetrievalKey" + ], "type": "object" } } }, - "description": "Personal settings of the user." + "description": "You got an access token retrieval key use it as a one time password to get an actual access token." }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -32139,58 +31939,49 @@ "commons.AccessToken": [] } ], - "summary": "Get personalized settings.", + "summary": "Create an access token retrieval key to acquire an access token for your user.", "tags": [ "User" ] - }, - "put": { - "operationId": "user-update-personalized-settings", - "parameters": [ - { - "description": "`self` or the id of a user.", - "examples": { - "self": { - "summary": "You", - "value": "self" - }, - "userId": { - "summary": "ID of a user.", - "value": "10203040-1234-5678-abcd-badc0de01234" - } - }, - "in": "path", - "name": "userId", - "required": true, - "schema": { - "oneOf": [ - { - "enum": [ - "self" - ], - "type": "string" - }, - { - "format": "uuid", - "type": "string" - } - ] - } - } - ], + } + }, + "/v2/signup/token/api": { + "post": { "requestBody": { "content": { "application/json": { "schema": { "properties": { - "settingsString": { - "example": "eyJvbmJvYXJkaW5nIjp7ImNvbXBsZXRlZCI6W119LCJyZWNlbnRWaXNpdHMiOnsicmVjZW50VmlzaXRzIjp7fSwicmVjZW50VmlzaXRlZFBhdGhzIjp7fX0sImNoYW5nZWxvZ3MiOnsicmVhZElkcyI6WzIsMSwzLDQsNSw2LDgsNyw5XX19", - "format": "base64", + "description": { + "example": "Api Token - read", + "type": "string" + }, + "expiresAt": { + "format": "date-time", "type": "string" + }, + "roles": { + "description": "Determines the access rights of the ApiToken.", + "example": { + "value": [ + "api_read" + ] + }, + "items": { + "enum": [ + "api_read", + "api_write" + ], + "type": "string" + }, + "minItems": 1, + "type": "array", + "uniqueItems": true } }, "required": [ - "settingsString" + "roles", + "description" ], "type": "object" } @@ -32199,14 +31990,16 @@ "required": true }, "responses": { - "204": { - "description": "PersonalSettings have been updated" - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "schema": { + "type": "string" + } + } + } } }, "security": [ @@ -32214,145 +32007,135 @@ "commons.AccessToken": [] } ], - "summary": "Update personalized GUI settings.", + "summary": "Store a new ApiToken.", "tags": [ "User" - ] - } - }, - "/v2/poll-settings/{userId}": { - "get": { - "operationId": "user-get-poll-status", - "parameters": [ - { - "in": "path", - "name": "userId", - "required": true, - "schema": { - "type": "string" - } - } ], + "deprecated": true + }, + "get": { "responses": { - "200": { - "content": { - "application/json": { + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", "schema": { - "$ref": "#/components/schemas/poll.UserPollSettings" + "type": "string" } } - }, - "description": "" - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" + } } }, - "summary": "Get poll settings for the specified user.", - "tags": [ - "User" - ] - }, - "post": { - "operationId": "user-post-poll-status", - "parameters": [ + "security": [ { - "in": "path", - "name": "userId", - "required": true, - "schema": { - "type": "string" - } + "commons.AccessToken": [] } ], + "summary": "List all of your ApiTokens.", + "tags": [ + "User" + ], + "deprecated": true + } + }, + "/v2/users/self/api-tokens": { + "post": { + "operationId": "user-create-api-token", "requestBody": { "content": { "application/json": { "schema": { "properties": { - "status": { - "enum": [ - "completed", - "muted", - "ignored" - ], + "description": { + "example": "Api Token - read", "type": "string" }, - "userId": { + "expiresAt": { + "format": "date-time", "type": "string" + }, + "roles": { + "description": "Determines the access rights of the ApiToken.", + "example": { + "value": [ + "api_read" + ] + }, + "items": { + "enum": [ + "api_read", + "api_write" + ], + "type": "string" + }, + "minItems": 1, + "type": "array", + "uniqueItems": true } }, "required": [ - "userId", - "status" + "roles", + "description" ], "type": "object" } } }, - "description": "", "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/poll.UserPollSettings" + "properties": { + "token": { + "description": "The `ApiToken`.", + "type": "string" + } + }, + "required": [ + "token" + ], + "type": "object" } } }, - "description": "The updated poll settings." + "description": "ApiToken was added." }, "400": { "$ref": "#/components/responses/commons.ValidationError" }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "summary": "Store new or update poll settings.", + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Store a new ApiToken.", "tags": [ "User" ] - } - }, - "/v2/users/self/sessions/{tokenId}": { + }, "get": { - "operationId": "user-get-session", - "parameters": [ - { - "description": "TokenId to identify a specific session.", - "in": "path", - "name": "tokenId", - "required": true, - "schema": { - "type": "string" - } - } - ], + "operationId": "user-list-api-tokens", "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/signup.UserSession" + "items": { + "$ref": "#/components/schemas/signup.ApiToken" + }, + "type": "array" } } }, - "description": "The session." - }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "description": "A list of ApiTokens." }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -32363,30 +32146,76 @@ "commons.AccessToken": [] } ], - "summary": "Get a specific session.", + "summary": "List all of your ApiTokens.", "tags": [ "User" ] - }, - "delete": { - "operationId": "user-terminate-session", - "parameters": [ - { - "description": "The sessionId is the id of the token used to create the session.", - "in": "path", - "name": "tokenId", - "required": true, - "schema": { - "type": "string" + } + }, + "/v2/users/self/feedback": { + "post": { + "operationId": "user-create-feedback", + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "Personal feedback message.", + "maxLength": 5000, + "type": "string" + }, + "origin": { + "description": "Origin of the feedback.", + "example": "https://studio.mittwald.de/app/dashboard", + "maxLength": 1000, + "type": "string" + }, + "subject": { + "description": "Descriptive subject.", + "maxLength": 100, + "type": "string" + }, + "type": { + "description": "Type of feedback.", + "enum": [ + "feedback", + "bug" + ], + "type": "string" + }, + "vote": { + "description": "Feedback rating from bad to good. Set to 0 or skip this field to not vote at all.", + "maximum": 10, + "minimum": 0, + "type": "number" + } + }, + "required": [ + "subject" + ], + "type": "object" + } } - } - ], + }, + "description": "The feedback to give." + }, "responses": { - "204": { - "description": "Session terminated." + "201": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "Feedback successfully submitted." + }, + "401": { + "$ref": "#/components/responses/commons.DefaultError" }, "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "$ref": "#/components/responses/commons.DefaultError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -32397,69 +32226,48 @@ "commons.AccessToken": [] } ], - "summary": "Terminate a specific Session.", + "summary": "Submit your user feedback.", "tags": [ "User" ] } }, - "/v2/users/{userId}": { - "get": { - "operationId": "user-get-user", - "parameters": [ - { - "description": "`self` or the id of a user.", - "examples": { - "self": { - "summary": "You", - "value": "self" - }, - "userId": { - "summary": "ID of a user.", - "value": "10203040-1234-5678-abcd-badc0de01234" - } - }, - "in": "path", - "name": "userId", - "required": true, - "schema": { - "oneOf": [ - { - "enum": [ - "self" - ], - "type": "string" + "/v2/signup/ssh": { + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "expiresAt": { + "format": "date-time", + "type": "string" + }, + "publicKey": { + "example": "ssh-rsa ...", + "type": "string" + } }, - { - "format": "uuid", - "type": "string" - } - ] + "required": [ + "publicKey" + ], + "type": "object" + } } - } - ], + }, + "required": true + }, "responses": { - "200": { - "content": { - "application/json": { + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", "schema": { - "$ref": "#/components/schemas/user.User" + "type": "string" } } - }, - "description": "The user profile." - }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "404": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "412": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" + } } }, "security": [ @@ -32467,56 +32275,57 @@ "commons.AccessToken": [] } ], - "summary": "Get profile information for a user.", + "summary": "Store a new ssh-key.", "tags": [ "User" - ] + ], + "deprecated": true }, - "put": { - "operationId": "user-update-personal-information", - "parameters": [ - { - "description": "`self` or the id of a user.", - "examples": { - "self": { - "summary": "You", - "value": "self" - }, - "userId": { - "summary": "ID of a user.", - "value": "10203040-1234-5678-abcd-badc0de01234" - } - }, - "in": "path", - "name": "userId", - "required": true, - "schema": { - "oneOf": [ - { - "enum": [ - "self" - ], - "type": "string" - }, - { - "format": "uuid", + "get": { + "responses": { + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "schema": { "type": "string" } - ] + } } } + }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Get your stored ssh-keys.", + "tags": [ + "User" ], + "deprecated": true + } + }, + "/v2/users/self/ssh-keys": { + "post": { + "operationId": "user-create-ssh-key", "requestBody": { "content": { "application/json": { "schema": { "properties": { - "person": { - "$ref": "#/components/schemas/commons.Person" + "expiresAt": { + "format": "date-time", + "type": "string" + }, + "publicKey": { + "example": "ssh-rsa ...", + "type": "string" } }, "required": [ - "person" + "publicKey" ], "type": "object" } @@ -32525,8 +32334,15 @@ "required": true }, "responses": { - "204": { - "description": "Your personal information has been changed" + "201": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "The ssh-key was stored." }, "400": { "$ref": "#/components/responses/commons.ValidationError" @@ -32540,60 +32356,31 @@ "commons.AccessToken": [] } ], - "summary": "Change personal information.", + "summary": "Store a new ssh-key.", "tags": [ "User" ] - } - }, - "/v2/users/self/credentials/init-mfa": { - "post": { - "operationId": "user-init-mfa", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - }, - "required": false - }, + }, + "get": { + "operationId": "user-list-ssh-keys", "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "barcode": { - "description": "base64 encoded barcode content to scan from your mfa app. e.g. `iVBORw0KGgoAAAANSUhEUgAAAMgAAADIEAAAAADYoy...`. You\ncan display it with ``\n", - "type": "string" - }, - "url": { - "description": "Same as barcode, but in URL form.\n", - "example": "otpauth://totp/mStudio:test@gmail.com?algorithm=SHA1&digits=6&issuer=mStudio&period=30&secret=HTXT7KJFVNAJUPYWQRWMNVQE5AF5YZI2", - "type": "string" + "sshKeys": { + "items": { + "$ref": "#/components/schemas/signup.SshKey" + }, + "type": "array" } }, - "required": [ - "barcode", - "url" - ], "type": "object" } } }, - "description": "The process of activating Multi Factor Authentication is initialized." - }, - "400": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/commons.ValidationErrors" - } - } - }, - "description": "Some of the specified values does not meet our requirements.\nPossible domain specific `type` values are:\n * EmailAddressNotVerified\n * MfaAlreadyConfirmed\n" + "description": "The list of stored ssh-keys." }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -32604,29 +32391,77 @@ "commons.AccessToken": [] } ], - "summary": "Initialize Multi Factor Authentication. If successful, it needs to be confirmed, before usage of mfa.", + "summary": "Get your stored ssh-keys.", "tags": [ "User" ] } }, - "/v2/users/self/credentials/actions/init-password-reset": { - "post": { - "operationId": "user-init-password-reset", + "/v2/users/self/api-tokens/{apiTokenId}": { + "delete": { + "operationId": "user-delete-api-token", + "parameters": [ + { + "description": "The uuid of an ApiToken.", + "in": "path", + "name": "apiTokenId", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "The `ApiToken` has been deleted." + }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } + }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Deletes an ApiToken.", + "tags": [ + "User" + ] + }, + "put": { + "operationId": "user-edit-api-token", + "parameters": [ + { + "in": "path", + "name": "apiTokenId", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { "schema": { "properties": { - "email": { - "description": "Email address to reset the password for.", - "example": "a.lovelace@example.com", - "format": "email", + "description": { + "example": "Api Token for ...", + "type": "string" + }, + "expiresAt": { + "format": "date-time", "type": "string" } }, "required": [ - "email" + "description" ], "type": "object" } @@ -32635,93 +32470,143 @@ "required": true }, "responses": { - "201": { - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - }, - "description": "The password reset process has been initialized and an email with confirmation code has been sent.\n" + "204": { + "description": "ApiToken was updated." }, "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } + }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Update an existing `ApiToken`.", + "tags": [ + "User" + ] + }, + "get": { + "operationId": "user-get-api-token", + "parameters": [ + { + "description": "The id of an ApiToken.", + "in": "path", + "name": "apiTokenId", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + } + ], + "responses": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/commons.ValidationErrors" + "$ref": "#/components/schemas/signup.ApiToken" } } }, - "description": "Some of the specified values do not meet our requirements.\n" + "description": "The ApiToken." + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "summary": "Initialize password reset process.", + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Get a specific ApiToken.", "tags": [ "User" ] } }, - "/v2/users/{userId}/feedback": { - "get": { - "operationId": "user-list-feedback", + "/v2/users/self/ssh-keys/{sshKeyId}": { + "delete": { + "operationId": "user-delete-ssh-key", "parameters": [ { - "description": "`self` or the id of a user.", - "examples": { - "self": { - "summary": "You", - "value": "self" - }, - "userId": { - "summary": "ID of a user.", - "value": "10203040-1234-5678-abcd-badc0de01234" - } - }, "in": "path", - "name": "userId", + "name": "sshKeyId", "required": true, "schema": { - "oneOf": [ - { - "enum": [ - "self" - ], - "type": "string" - }, - { - "format": "uuid", - "type": "string" - } - ] + "format": "uuid", + "type": "string" } + } + ], + "responses": { + "204": { + "description": "The ssh-key has been removed." }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } + }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Remove a ssh-key.", + "tags": [ + "User" + ] + }, + "put": { + "operationId": "user-edit-ssh-key", + "parameters": [ { - "description": "Filter for subject content.", - "in": "query", - "name": "subject", - "required": false, + "in": "path", + "name": "sshKeyId", + "required": true, "schema": { + "format": "uuid", "type": "string" } } ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "items": { - "$ref": "#/components/schemas/user.UserFeedback" + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "comment": { + "example": "a.lovelace@example.com", + "type": "string" }, - "type": "array" - } + "expiresAt": { + "format": "date-time", + "type": "string" + } + }, + "required": [ + "comment" + ], + "type": "object" } - }, - "description": "Feedback submitted by the user." + } + }, + "required": true + }, + "responses": { + "204": { + "description": "The ssh-key has been edited." + }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -32732,48 +32617,45 @@ "commons.AccessToken": [] } ], - "summary": "Submitted feedback of the given user.", + "summary": "Edit a stored ssh-key.", "tags": [ "User" ] - } - }, - "/v2/users/self/sessions": { + }, "get": { - "operationId": "user-list-sessions", + "operationId": "user-get-ssh-key", + "parameters": [ + { + "in": "path", + "name": "sshKeyId", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/signup.UserSession" + "properties": { + "sshKey": { + "$ref": "#/components/schemas/signup.SshKey" + } }, - "type": "array" + "required": [ + "sshKey" + ], + "type": "object" } } }, - "description": "List of all sessions." + "description": "The requested ssh-key." }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" - } - }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "List all sessions.", - "tags": [ - "User" - ] - }, - "delete": { - "operationId": "user-terminate-all-sessions", - "responses": { - "204": { - "description": "All sessions terminated." + "404": { + "$ref": "#/components/responses/commons.NotFoundError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -32784,28 +32666,46 @@ "commons.AccessToken": [] } ], - "summary": "Terminate all sessions, except the current session.", + "summary": "Get a specific stored ssh-key.", "tags": [ "User" ] } }, - "/v2/logout": { - "put": { - "operationId": "user-logout", + "/v2/users/self": { + "delete": { + "operationId": "user-delete-user", "requestBody": { "content": { "application/json": { "schema": { + "properties": { + "multiFactorCode": { + "description": "Multi Factor Code to authorize your request.", + "example": "123456", + "maxLength": 16, + "minLength": 6, + "type": "string" + }, + "password": { + "type": "string" + } + }, + "required": [ + "password" + ], "type": "object" } } }, - "required": false + "required": true }, "responses": { - "204": { - "description": "You've been logged out. The access token has been removed and invalidated." + "200": { + "description": "Your user has been deleted." + }, + "202": { + "$ref": "#/components/responses/signup.SecondFactorRequiredError" }, "400": { "content": { @@ -32815,7 +32715,10 @@ } } }, - "description": "Some of the specified values do not meet our requirements.\n" + "description": "Some of the specified values does not meet our requirements.\nPossible domain specific `type` values are:\n * WrongPassword\n * MfaCodeNotValid\n" + }, + "409": { + "$ref": "#/components/responses/signup.RemovingLastOwnerNotAllowedError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -32826,208 +32729,111 @@ "commons.AccessToken": [] } ], - "summary": "Terminate session and invalidate access token.", + "summary": "Delete your account and all your personal data.", "tags": [ "User" ] } }, - "/v2/oauth2/authorize": { + "/v2/users/self/personal-information": { "get": { - "operationId": "user-oauth-get-authorization", - "description": "The OAuth 2.0 client requests authorization from the resource owner according to\n[RFC6749](https://datatracker.ietf.org/doc/html/rfc6749). The\nauthorization request is made indirectly via the authorization\nserver as an intermediary.\n", - "parameters": [ - { - "description": "Access Token of the Resource Owner.\n", - "in": "cookie", - "name": "x-access-token", - "required": false, - "schema": { - "type": "string" - } - }, - { - "description": "Can be set in combination with `Authorization`-Header to grant consent for the requested scopes.\nIf set to `true`, the scopes will be marked as consented and the authorization server will\nredirect the user-agent back to the client.\nIf set to `false`, the authorization server will redirect the user-agent back to the client with an\naccess denied error.\nIf not set and `Authorization`-Header is set, the user will be asked for consent.\n", - "in": "query", - "name": "grant_consent", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "description": "The grant type. Must be set to `authorization_code` for this endpoint.\n", - "in": "query", - "name": "grant_type", - "required": false, - "schema": { - "enum": [ - "authorization_code" - ], - "type": "string" - } - }, - { - "description": "The response type. Must be set to `code` for this endpoint.\n", - "in": "query", - "name": "response_type", - "required": true, - "schema": { - "enum": [ - "code" - ], - "type": "string" - } - }, - { - "description": "The client identifier as described in\n[RFC6749](https://datatracker.ietf.org/doc/html/rfc6749#section-2.2).\n", - "in": "query", - "name": "client_id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "The redirection URI to which the authorization server\ndirects the user-agent back after the authorization\nendpoint. Must be a valid URI.\n", - "in": "query", - "name": "redirect_uri", - "required": false, - "schema": { - "format": "uri", - "type": "string" - } - }, - { - "description": "The scope of the access request as described by\n[RFC6749](https://datatracker.ietf.org/doc/html/rfc6749#section-3.3).\n", - "in": "query", - "name": "scope", - "required": false, - "schema": { - "type": "string" - } - }, - { - "description": "An opaque value used by the client to maintain state\nbetween the request and callback. The authorization server\nincludes this value when redirecting the user-agent back to\nthe client. The parameter SHOULD be used for preventing\ncross-site request forgery as described in\n[RFC6749](https://datatracker.ietf.org/doc/html/rfc6749#section-10.12).\n", - "in": "query", - "name": "state", - "required": false, - "schema": { - "type": "string" + "operationId": "user-get-own-account", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object" + } } }, - { - "description": "The code challenge as described by\n[RFC7636](https://datatracker.ietf.org/doc/html/rfc7636#section-4.2).\nIf the authorization code flow should be used with Proof Key for Code Exchange (PKCE), this parameter\n must be set and the code verifier has to be given to the token endpoint.\n", - "in": "query", - "name": "code_challenge", - "required": false, - "schema": { - "type": "string" - } + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/signup.Account" + } + } + }, + "description": "Account information." }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } + }, + "security": [ { - "description": "The code challenge method as described in\n[RFC7636](https://datatracker.ietf.org/doc/html/rfc7636#section-4.3).\nIf used, the code_challenge must be set as well and the code verifier\nhas to be given to the token endpoint\n", - "in": "query", - "name": "code_challenge_method", - "required": false, - "schema": { - "enum": [ - "S256" - ], - "type": "string" - } + "commons.AccessToken": [] } ], + "summary": "Get your account information.", + "tags": [ + "User" + ] + }, + "put": { + "operationId": "user-update-account", + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "person": { + "$ref": "#/components/schemas/commons.Person" + } + }, + "required": [ + "person" + ], + "type": "object" + } + } + }, + "required": true + }, "responses": { - "302": { - "description": "The authorization server redirects the user-agent by\nsending the HTTP response with status code 302 and the HTTP\n`Location`-Header field containing the authorization endpoint URI\nwith either the query parameters `code` added, if successful or `error`\nand `error_description` added, if not. Fore more Information see\n[Authorization Response](https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.2).\n" + "204": { + "description": "Account has been updated." }, "400": { "content": { "application/json": { "schema": { - "properties": { - "error": { - "enum": [ - "invalid_request" - ], - "type": "string" - }, - "error_description": { - "type": "string" - } - }, - "required": [ - "error" - ], - "type": "object" + "$ref": "#/components/schemas/commons.ValidationErrors" } } }, - "description": "The request is missing a required parameter, includes an\ninvalid parameter value, includes a parameter more than\nonce, or is otherwise malformed.\n" + "description": "Some of the specified values does not meet our requirements.\n" }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "summary": "Obtain authorization from the resource owner.", + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Update your account information.", "tags": [ "User" ] } }, - "/v2/oauth2/token": { - "post": { - "operationId": "user-oauth-retrieve-access-token", - "description": "The OAuth 2.0 client retrieves an Access Token from an existing authorization code according to\n[RFC6749](https://datatracker.ietf.org/doc/html/rfc6749).\n", - "parameters": [ - { - "description": "The client credentials (`client_id` and `client_secret`), separated with a colon\nand base64 encoded as described in\n[RFC6749](https://datatracker.ietf.org/doc/html/rfc6749#section-2.3.1).\nSubmitting the `client_id` and `client_secret` as request-body as suggested is forbidden.\n", - "in": "header", - "name": "Authorization", - "required": false, - "schema": { - "example": "Basic Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ=", - "type": "string" - } - } - ], + "/v2/users/self/credentials/password-updated-at": { + "get": { + "operationId": "user-get-password-updated-at", "requestBody": { "content": { - "application/x-www-form-urlencoded": { + "application/json": { "schema": { - "properties": { - "code": { - "description": "The authorization code received from the authorization server.\n", - "type": "string" - }, - "code_verifier": { - "description": "The code verifier used to generate the code challenge as described in\n[RFC7636](https://datatracker.ietf.org/doc/html/rfc7636#section-4.1).\nIf the authorization flow was initiated with a code challenge, this parameter is required.\n", - "type": "string" - }, - "grant_type": { - "description": "The grant type as described in\n[RFC6749](https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.3).\n", - "enum": [ - "authorization_code" - ], - "type": "string" - }, - "redirect_uri": { - "description": "The redirection URI used in the authorization request.\nMust be a valid URI.\n", - "format": "uri", - "type": "string" - } - }, - "required": [ - "grant_type", - "redirect_uri", - "code" - ], "type": "object" } } }, - "required": true + "required": false }, "responses": { "200": { @@ -33035,100 +32841,149 @@ "application/json": { "schema": { "properties": { - "access_token": { - "description": "The access token issued by the authorization server.\n", - "type": "string" - }, - "expires_in": { - "description": "The lifetime in seconds of the access token. For\nexample, the value \"3600\" denotes that the access\ntoken will expire in one hour from the time the\nresponse was generated.\n", - "type": "integer" - }, - "scope": { - "description": "The scope of the access token as described by\n[RFC6749](https://datatracker.ietf.org/doc/html/rfc6749#section-3.3).\n", - "type": "string" - }, - "token_type": { - "description": "The type of the token issued as described in\n[RFC6749](https://datatracker.ietf.org/doc/html/rfc6749#section-7.1).\n", - "enum": [ - "bearer" - ], + "passwordUpdatedAt": { + "format": "date-time", "type": "string" } }, "required": [ - "access_token", - "token_type", - "expires_in" + "passwordUpdatedAt" ], "type": "object" } } }, - "description": "The authorization server issues an access token as described in\n[RFC6749](https://datatracker.ietf.org/doc/html/rfc6749#section-5.1).\n" + "description": "Timestamp of latest password change." }, - "400": { + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } + }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "The timestamp of your latest password change.", + "tags": [ + "User" + ] + } + }, + "/v2/users/{userId}/settings": { + "get": { + "operationId": "user-get-personalized-settings", + "parameters": [ + { + "description": "`self` or the id of a user.", + "examples": { + "self": { + "summary": "You", + "value": "self" + }, + "userId": { + "summary": "ID of a user.", + "value": "10203040-1234-5678-abcd-badc0de01234" + } + }, + "in": "path", + "name": "userId", + "required": true, + "schema": { + "oneOf": [ + { + "enum": [ + "self" + ], + "type": "string" + }, + { + "format": "uuid", + "type": "string" + } + ] + } + } + ], + "responses": { + "200": { "content": { "application/json": { "schema": { "properties": { - "error": { - "enum": [ - "invalid_request", - "invalid_client", - "invalid_grant", - "unauthorized_client", - "unsupported_grant_type", - "invalid_scope" - ], - "type": "string" - }, - "error_description": { + "settingsString": { + "example": "eyJvbmJvYXJkaW5nIjp7ImNvbXBsZXRlZCI6W119LCJyZWNlbnRWaXNpdHMiOnsicmVjZW50VmlzaXRzIjp7fSwicmVjZW50VmlzaXRlZFBhdGhzIjp7fX0sImNoYW5nZWxvZ3MiOnsicmVhZElkcyI6WzIsMSwzLDQsNSw2LDgsNyw5XX19", + "format": "base64", "type": "string" } }, - "required": [ - "error" + "type": "object" + } + } + }, + "description": "Personal settings of the user." + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } + }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Get personalized settings.", + "tags": [ + "User" + ] + }, + "put": { + "operationId": "user-update-personalized-settings", + "parameters": [ + { + "description": "`self` or the id of a user.", + "examples": { + "self": { + "summary": "You", + "value": "self" + }, + "userId": { + "summary": "ID of a user.", + "value": "10203040-1234-5678-abcd-badc0de01234" + } + }, + "in": "path", + "name": "userId", + "required": true, + "schema": { + "oneOf": [ + { + "enum": [ + "self" ], - "type": "object" + "type": "string" + }, + { + "format": "uuid", + "type": "string" } - } - }, - "description": "The request of an access token is invalid as described in\n[RFC6749](https://datatracker.ietf.org/doc/html/rfc6749#section-5.2).\n" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" + ] + } } - }, - "summary": "Retrieve Access Token from Authorization Code.", - "tags": [ - "User" - ] - } - }, - "/v2/signup/registration": { - "post": { + ], "requestBody": { "content": { "application/json": { "schema": { "properties": { - "email": { - "description": "The users email address", - "format": "email", - "type": "string" - }, - "password": { - "description": "The users password.", + "settingsString": { + "example": "eyJvbmJvYXJkaW5nIjp7ImNvbXBsZXRlZCI6W119LCJyZWNlbnRWaXNpdHMiOnsicmVjZW50VmlzaXRzIjp7fSwicmVjZW50VmlzaXRlZFBhdGhzIjp7fX0sImNoYW5nZWxvZ3MiOnsicmVhZElkcyI6WzIsMSwzLDQsNSw2LDgsNyw5XX19", + "format": "base64", "type": "string" - }, - "person": { - "$ref": "#/components/schemas/commons.Person" } }, "required": [ - "email", - "password", - "person" + "settingsString" ], "type": "object" } @@ -33137,100 +32992,213 @@ "required": true }, "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "204": { + "description": "PersonalSettings have been updated" + }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } + }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Update personalized GUI settings.", + "tags": [ + "User" + ] + } + }, + "/v2/poll-settings/{userId}": { + "get": { + "operationId": "user-get-poll-status", + "parameters": [ + { + "in": "path", + "name": "userId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/poll.UserPollSettings" } } - } + }, + "description": "" + }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" } }, - "summary": "Register with email and password.", + "summary": "Get poll settings for the specified user.", "tags": [ "User" - ], - "deprecated": true - } - }, - "/v2/register": { + ] + }, "post": { - "operationId": "user-register", + "operationId": "user-post-poll-status", + "parameters": [ + { + "in": "path", + "name": "userId", + "required": true, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { "schema": { "properties": { - "email": { - "description": "The users email address", - "format": "email", + "status": { + "enum": [ + "completed", + "muted", + "ignored" + ], "type": "string" }, - "password": { - "description": "The users password.", + "userId": { "type": "string" - }, - "person": { - "$ref": "#/components/schemas/commons.Person" } }, "required": [ - "email", - "password", - "person" + "userId", + "status" ], "type": "object" } } }, + "description": "", "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "properties": { - "userId": { - "format": "uuid", - "type": "string" - } - }, - "required": [ - "userId" - ], - "type": "object" + "$ref": "#/components/schemas/poll.UserPollSettings" } } }, - "description": "Registration was successfull. A verification email will be sent to the specified email address.\nThe users can be used as soon as the verification link was opened\n" + "description": "The updated poll settings." }, "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } + }, + "summary": "Store new or update poll settings.", + "tags": [ + "User" + ] + } + }, + "/v2/users/self/sessions/{tokenId}": { + "get": { + "operationId": "user-get-session", + "parameters": [ + { + "description": "TokenId to identify a specific session.", + "in": "path", + "name": "tokenId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/commons.ValidationErrors" + "$ref": "#/components/schemas/signup.UserSession" } } }, - "description": "Some of the specified values does not meet our requirements.\nPossible domain specific `type` values are:\n * EmailInUse\n * PasswordIsLeaked\n * ValidationError\n * PasswordEqualsEmail\n" + "description": "The session." + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "summary": "Register with email and password.", + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Get a specific session.", + "tags": [ + "User" + ] + }, + "delete": { + "operationId": "user-terminate-session", + "parameters": [ + { + "description": "The sessionId is the id of the token used to create the session.", + "in": "path", + "name": "tokenId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Session terminated." + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } + }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Terminate a specific Session.", "tags": [ "User" ] } }, - "/v2/users/{userId}/avatar": { - "delete": { - "operationId": "user-remove-avatar", + "/v2/users/{userId}": { + "get": { + "operationId": "user-get-user", "parameters": [ { "description": "`self` or the id of a user.", @@ -33264,11 +33232,24 @@ } ], "responses": { - "204": { - "description": "Avatar removal was successful." + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/user.User" + } + } + }, + "description": "The user profile." + }, + "403": { + "$ref": "#/components/responses/commons.DefaultError" }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" + "404": { + "$ref": "#/components/responses/commons.DefaultError" + }, + "412": { + "$ref": "#/components/responses/commons.DefaultError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -33279,13 +33260,13 @@ "commons.AccessToken": [] } ], - "summary": "Remove Avatar.", + "summary": "Get profile information for a user.", "tags": [ "User" ] }, - "post": { - "operationId": "user-request-avatar-upload", + "put": { + "operationId": "user-update-personal-information", "parameters": [ { "description": "`self` or the id of a user.", @@ -33322,89 +33303,23 @@ "content": { "application/json": { "schema": { + "properties": { + "person": { + "$ref": "#/components/schemas/commons.Person" + } + }, + "required": [ + "person" + ], "type": "object" } } }, - "required": false + "required": true }, "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "refId": { - "description": "The `refId` to be used to upload your avatar to the /v2/files/:refId route.", - "format": "uuid", - "type": "string" - }, - "rules": { - "description": "Contstraints for the avatar image upload.", - "properties": { - "maxSizeInKB": { - "description": "Maximum size in kilobytes of the avatar image.", - "example": 3000, - "type": "integer" - }, - "mimeTypes": { - "description": "List of supported mime types.", - "items": { - "example": "image/png", - "type": "string" - }, - "type": "array" - }, - "properties": { - "properties": { - "imageDimensions": { - "description": "Supported range of dimensions for the avatar image.", - "properties": { - "max": { - "properties": { - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "type": "object" - }, - "min": { - "properties": { - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "type": "object" - } - }, - "type": "object" - } - }, - "type": "object" - } - }, - "required": [ - "mimeTypes", - "maxSizeInKB" - ], - "type": "object" - } - }, - "required": [ - "refId", - "rules" - ], - "type": "object" - } - } - }, - "description": "Avatar upload request was successful." + "204": { + "description": "Your personal information has been changed" }, "400": { "$ref": "#/components/responses/commons.ValidationError" @@ -33418,43 +33333,50 @@ "commons.AccessToken": [] } ], - "summary": "Request a new avatar image upload.", + "summary": "Change personal information.", "tags": [ "User" ] } }, - "/v2/users/self/credentials/email/actions/resend-email": { + "/v2/users/self/credentials/init-mfa": { "post": { - "operationId": "user-resend-verification-email", + "operationId": "user-init-mfa", "requestBody": { "content": { "application/json": { "schema": { - "properties": { - "email": { - "example": "ada.lovelace@example.com", - "format": "email", - "type": "string" - }, - "userId": { - "format": "uuid", - "type": "string" - } - }, - "required": [ - "userId", - "email" - ], "type": "object" } } }, - "required": true + "required": false }, "responses": { - "204": { - "description": "New Email-Address verification email was sent." + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "barcode": { + "description": "base64 encoded barcode content to scan from your mfa app. e.g. `iVBORw0KGgoAAAANSUhEUgAAAMgAAADIEAAAAADYoy...`. You\ncan display it with ``\n", + "type": "string" + }, + "url": { + "description": "Same as barcode, but in URL form.\n", + "example": "otpauth://totp/mStudio:test@gmail.com?algorithm=SHA1&digits=6&issuer=mStudio&period=30&secret=HTXT7KJFVNAJUPYWQRWMNVQE5AF5YZI2", + "type": "string" + } + }, + "required": [ + "barcode", + "url" + ], + "type": "object" + } + } + }, + "description": "The process of activating Multi Factor Authentication is initialized." }, "400": { "content": { @@ -33464,38 +33386,40 @@ } } }, - "description": "Some of the specified values do not meet our requirements.\n" - }, - "403": { - "$ref": "#/components/responses/commons.RateLimitError" + "description": "Some of the specified values does not meet our requirements.\nPossible domain specific `type` values are:\n * EmailAddressNotVerified\n * MfaAlreadyConfirmed\n" }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "summary": "Resend the Email-Address verification email.", + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Initialize Multi Factor Authentication. If successful, it needs to be confirmed, before usage of mfa.", "tags": [ "User" ] } }, - "/v2/signup/mfa/reset-recoverycodes": { - "put": { + "/v2/users/self/credentials/actions/init-password-reset": { + "post": { + "operationId": "user-init-password-reset", "requestBody": { "content": { "application/json": { "schema": { "properties": { - "multiFactorCode": { - "description": "Multi Factor Code to authorize your request.", - "example": "123456", - "maxLength": 16, - "minLength": 6, + "email": { + "description": "Email address to reset the password for.", + "example": "a.lovelace@example.com", + "format": "email", "type": "string" } }, "required": [ - "multiFactorCode" + "email" ], "type": "object" } @@ -33504,90 +33428,96 @@ "required": true }, "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "201": { + "content": { + "application/json": { "schema": { - "type": "string" + "type": "object" } } - } + }, + "description": "The password reset process has been initialized and an email with confirmation code has been sent.\n" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/commons.ValidationErrors" + } + } + }, + "description": "Some of the specified values do not meet our requirements.\n" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" } }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Reset RecoveryCodes for MFA.", + "summary": "Initialize password reset process.", "tags": [ "User" - ], - "deprecated": true + ] } }, - "/v2/signup/supportcode": { + "/v2/users/{userId}/feedback": { "get": { + "operationId": "user-list-feedback", "parameters": [ { - "in": "query", - "name": "forceRecreate", - "required": false, + "description": "`self` or the id of a user.", + "examples": { + "self": { + "summary": "You", + "value": "self" + }, + "userId": { + "summary": "ID of a user.", + "value": "10203040-1234-5678-abcd-badc0de01234" + } + }, + "in": "path", + "name": "userId", + "required": true, "schema": { - "type": "boolean" - } - } - ], - "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", - "schema": { + "oneOf": [ + { + "enum": [ + "self" + ], + "type": "string" + }, + { + "format": "uuid", "type": "string" } - } + ] } - } - }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Request a support code.", - "tags": [ - "User" - ], - "deprecated": true - } - }, - "/v2/signup/supportcodes": { - "get": { - "parameters": [ + }, { + "description": "Filter for subject content.", "in": "query", - "name": "forceRecreate", + "name": "subject", "required": false, "schema": { - "type": "boolean" + "type": "string" } } ], "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "200": { + "content": { + "application/json": { "schema": { - "type": "string" + "items": { + "$ref": "#/components/schemas/user.UserFeedback" + }, + "type": "array" } } - } + }, + "description": "Feedback submitted by the user." + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" } }, "security": [ @@ -33595,52 +33525,28 @@ "commons.AccessToken": [] } ], - "summary": "Request a support code.", + "summary": "Submitted feedback of the given user.", "tags": [ "User" - ], - "deprecated": true + ] } }, - "/v2/users/self/credentials/support-code": { + "/v2/users/self/sessions": { "get": { - "operationId": "user-support-code-request", - "parameters": [ - { - "in": "query", - "name": "forceRecreate", - "required": false, - "schema": { - "type": "boolean" - } - } - ], + "operationId": "user-list-sessions", "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "expiresAt": { - "description": "Expiration of the support code", - "format": "date-time", - "type": "string" - }, - "supportCode": { - "description": "support code to authenticate yourself against the mittwald support via telephone", - "example": "123456", - "type": "string" - } + "items": { + "$ref": "#/components/schemas/signup.UserSession" }, - "required": [ - "supportCode", - "expiresAt" - ], - "type": "object" + "type": "array" } } }, - "description": "The requested support code and the expiry." + "description": "List of all sessions." }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -33651,44 +33557,48 @@ "commons.AccessToken": [] } ], - "summary": "Request a support code.", + "summary": "List all sessions.", + "tags": [ + "User" + ] + }, + "delete": { + "operationId": "user-terminate-all-sessions", + "responses": { + "204": { + "description": "All sessions terminated." + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" + } + }, + "security": [ + { + "commons.AccessToken": [] + } + ], + "summary": "Terminate all sessions, except the current session.", "tags": [ "User" ] } }, - "/v2/users/self/credentials/email/actions/verify-email": { - "post": { - "operationId": "user-verify-email", + "/v2/logout": { + "put": { + "operationId": "user-logout", "requestBody": { "content": { "application/json": { "schema": { - "properties": { - "email": { - "description": "The Email-Address to verify.", - "example": "ada.lovelace@example.com", - "format": "email", - "type": "string" - }, - "token": { - "description": "The token found in the verification email.", - "example": "123456", - "type": "string" - } - }, - "required": [ - "email" - ], "type": "object" } } }, - "required": true + "required": false }, "responses": { "204": { - "description": "Email has been verified." + "description": "You've been logged out. The access token has been removed and invalidated." }, "400": { "content": { @@ -33698,10 +33608,7 @@ } } }, - "description": "Some of the specified values do not meet our requirements.\nPossible domain specific `type` values are:\n * WrongVerificationToken\n * EmailNotFound\n * WrongVerificationToken\n * EmailAddressAlreadyVerified\n" - }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "description": "Some of the specified values do not meet our requirements.\n" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -33712,150 +33619,201 @@ "commons.AccessToken": [] } ], - "summary": "Verify an added Email-Address.", + "summary": "Terminate session and invalidate access token.", "tags": [ "User" ] } }, - "/v2/users/{userId}/phone/verify": { - "post": { + "/v2/oauth2/authorize": { + "get": { + "operationId": "user-oauth-get-authorization", + "description": "The OAuth 2.0 client requests authorization from the resource owner according to\n[RFC6749](https://datatracker.ietf.org/doc/html/rfc6749). The\nauthorization request is made indirectly via the authorization\nserver as an intermediary.\n", "parameters": [ { - "description": "`self` or the id of a user.", - "examples": { - "self": { - "summary": "You", - "value": "self" - }, - "userId": { - "summary": "ID of a user.", - "value": "10203040-1234-5678-abcd-badc0de01234" - } - }, - "in": "path", - "name": "userId", + "description": "Access Token of the Resource Owner.\n", + "in": "cookie", + "name": "x-access-token", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Can be set in combination with `Authorization`-Header to grant consent for the requested scopes.\nIf set to `true`, the scopes will be marked as consented and the authorization server will\nredirect the user-agent back to the client.\nIf set to `false`, the authorization server will redirect the user-agent back to the client with an\naccess denied error.\nIf not set and `Authorization`-Header is set, the user will be asked for consent.\n", + "in": "query", + "name": "grant_consent", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "The grant type. Must be set to `authorization_code` for this endpoint.\n", + "in": "query", + "name": "grant_type", + "required": false, + "schema": { + "enum": [ + "authorization_code" + ], + "type": "string" + } + }, + { + "description": "The response type. Must be set to `code` for this endpoint.\n", + "in": "query", + "name": "response_type", "required": true, "schema": { - "oneOf": [ - { - "enum": [ - "self" - ], - "type": "string" - }, - { - "format": "uuid", - "type": "string" - } - ] + "enum": [ + "code" + ], + "type": "string" + } + }, + { + "description": "The client identifier as described in\n[RFC6749](https://datatracker.ietf.org/doc/html/rfc6749#section-2.2).\n", + "in": "query", + "name": "client_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The redirection URI to which the authorization server\ndirects the user-agent back after the authorization\nendpoint. Must be a valid URI.\n", + "in": "query", + "name": "redirect_uri", + "required": false, + "schema": { + "format": "uri", + "type": "string" + } + }, + { + "description": "The scope of the access request as described by\n[RFC6749](https://datatracker.ietf.org/doc/html/rfc6749#section-3.3).\n", + "in": "query", + "name": "scope", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "An opaque value used by the client to maintain state\nbetween the request and callback. The authorization server\nincludes this value when redirecting the user-agent back to\nthe client. The parameter SHOULD be used for preventing\ncross-site request forgery as described in\n[RFC6749](https://datatracker.ietf.org/doc/html/rfc6749#section-10.12).\n", + "in": "query", + "name": "state", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "The code challenge as described by\n[RFC7636](https://datatracker.ietf.org/doc/html/rfc7636#section-4.2).\nIf the authorization code flow should be used with Proof Key for Code Exchange (PKCE), this parameter\n must be set and the code verifier has to be given to the token endpoint.\n", + "in": "query", + "name": "code_challenge", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "The code challenge method as described in\n[RFC7636](https://datatracker.ietf.org/doc/html/rfc7636#section-4.3).\nIf used, the code_challenge must be set as well and the code verifier\nhas to be given to the token endpoint\n", + "in": "query", + "name": "code_challenge_method", + "required": false, + "schema": { + "enum": [ + "S256" + ], + "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "code": { - "example": "123456", - "maxLength": 6, - "minLength": 6, - "type": "string" - }, - "phoneNumber": { - "format": "phone", - "type": "string" - } - }, - "required": [ - "phoneNumber", - "code" - ], - "type": "object" - } - } - }, - "required": true - }, "responses": { - "308": { - "description": "This route is deprecated, and will redirect you to another URL.", - "headers": { - "location": { - "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", + "302": { + "description": "The authorization server redirects the user-agent by\nsending the HTTP response with status code 302 and the HTTP\n`Location`-Header field containing the authorization endpoint URI\nwith either the query parameters `code` added, if successful or `error`\nand `error_description` added, if not. Fore more Information see\n[Authorization Response](https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.2).\n" + }, + "400": { + "content": { + "application/json": { "schema": { - "type": "string" + "properties": { + "error": { + "enum": [ + "invalid_request" + ], + "type": "string" + }, + "error_description": { + "type": "string" + } + }, + "required": [ + "error" + ], + "type": "object" } } - } + }, + "description": "The request is missing a required parameter, includes an\ninvalid parameter value, includes a parameter more than\nonce, or is otherwise malformed.\n" + }, + "default": { + "$ref": "#/components/responses/commons.DefaultError" } }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Verify phone number.", + "summary": "Obtain authorization from the resource owner.", "tags": [ "User" - ], - "deprecated": true + ] } }, - "/v2/users/{userId}/actions/verify-phone": { + "/v2/oauth2/token": { "post": { - "operationId": "user-verify-phone-number", + "operationId": "user-oauth-retrieve-access-token", + "description": "The OAuth 2.0 client retrieves an Access Token from an existing authorization code according to\n[RFC6749](https://datatracker.ietf.org/doc/html/rfc6749).\n", "parameters": [ { - "description": "`self` or the id of a user.", - "examples": { - "self": { - "summary": "You", - "value": "self" - }, - "userId": { - "summary": "ID of a user.", - "value": "10203040-1234-5678-abcd-badc0de01234" - } - }, - "in": "path", - "name": "userId", - "required": true, + "description": "The client credentials (`client_id` and `client_secret`), separated with a colon\nand base64 encoded as described in\n[RFC6749](https://datatracker.ietf.org/doc/html/rfc6749#section-2.3.1).\nSubmitting the `client_id` and `client_secret` as request-body as suggested is forbidden.\n", + "in": "header", + "name": "Authorization", + "required": false, "schema": { - "oneOf": [ - { - "enum": [ - "self" - ], - "type": "string" - }, - { - "format": "uuid", - "type": "string" - } - ] + "example": "Basic Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ=", + "type": "string" } } ], "requestBody": { "content": { - "application/json": { + "application/x-www-form-urlencoded": { "schema": { "properties": { "code": { - "example": "123456", - "maxLength": 6, - "minLength": 6, + "description": "The authorization code received from the authorization server.\n", "type": "string" }, - "phoneNumber": { - "format": "phone", + "code_verifier": { + "description": "The code verifier used to generate the code challenge as described in\n[RFC7636](https://datatracker.ietf.org/doc/html/rfc7636#section-4.1).\nIf the authorization flow was initiated with a code challenge, this parameter is required.\n", + "type": "string" + }, + "grant_type": { + "description": "The grant type as described in\n[RFC6749](https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.3).\n", + "enum": [ + "authorization_code" + ], + "type": "string" + }, + "redirect_uri": { + "description": "The redirection URI used in the authorization request.\nMust be a valid URI.\n", + "format": "uri", "type": "string" } }, "required": [ - "phoneNumber", + "grant_type", + "redirect_uri", "code" ], "type": "object" @@ -33865,34 +33823,82 @@ "required": true }, "responses": { - "204": { - "description": "The phone number has been verified." + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "access_token": { + "description": "The access token issued by the authorization server.\n", + "type": "string" + }, + "expires_in": { + "description": "The lifetime in seconds of the access token. For\nexample, the value \"3600\" denotes that the access\ntoken will expire in one hour from the time the\nresponse was generated.\n", + "type": "integer" + }, + "scope": { + "description": "The scope of the access token as described by\n[RFC6749](https://datatracker.ietf.org/doc/html/rfc6749#section-3.3).\n", + "type": "string" + }, + "token_type": { + "description": "The type of the token issued as described in\n[RFC6749](https://datatracker.ietf.org/doc/html/rfc6749#section-7.1).\n", + "enum": [ + "bearer" + ], + "type": "string" + } + }, + "required": [ + "access_token", + "token_type", + "expires_in" + ], + "type": "object" + } + } + }, + "description": "The authorization server issues an access token as described in\n[RFC6749](https://datatracker.ietf.org/doc/html/rfc6749#section-5.1).\n" }, "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" - }, - "409": { - "$ref": "#/components/responses/commons.DefaultError" + "content": { + "application/json": { + "schema": { + "properties": { + "error": { + "enum": [ + "invalid_request", + "invalid_client", + "invalid_grant", + "unauthorized_client", + "unsupported_grant_type", + "invalid_scope" + ], + "type": "string" + }, + "error_description": { + "type": "string" + } + }, + "required": [ + "error" + ], + "type": "object" + } + } + }, + "description": "The request of an access token is invalid as described in\n[RFC6749](https://datatracker.ietf.org/doc/html/rfc6749#section-5.2).\n" }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Verify phone number.", + "summary": "Retrieve Access Token from Authorization Code.", "tags": [ "User" ] } }, - "/v2/signup/registration/verification": { + "/v2/signup/registration": { "post": { "requestBody": { "content": { @@ -33900,27 +33906,22 @@ "schema": { "properties": { "email": { - "description": "The users email address.", + "description": "The users email address", "format": "email", "type": "string" }, - "token": { - "description": "The token that was send to your email address", - "example": 123456, - "maxLength": 16, - "minLength": 6, + "password": { + "description": "The users password.", "type": "string" }, - "userId": { - "description": "UUID of the registered user.", - "format": "uuid", - "type": "string" + "person": { + "$ref": "#/components/schemas/commons.Person" } }, "required": [ "email", - "token", - "userId" + "password", + "person" ], "type": "object" } @@ -33941,43 +33942,38 @@ } } }, - "summary": "Verify your registration.", + "summary": "Register with email and password.", "tags": [ "User" ], "deprecated": true } }, - "/v2/verify-registration": { + "/v2/register": { "post": { - "operationId": "user-verify-registration", + "operationId": "user-register", "requestBody": { "content": { "application/json": { "schema": { "properties": { "email": { - "description": "The users email address.", + "description": "The users email address", "format": "email", "type": "string" }, - "token": { - "description": "The token that was send to your email address", - "example": 123456, - "maxLength": 16, - "minLength": 6, + "password": { + "description": "The users password.", "type": "string" }, - "userId": { - "description": "UUID of the registered user.", - "format": "uuid", - "type": "string" + "person": { + "$ref": "#/components/schemas/commons.Person" } }, "required": [ "email", - "token", - "userId" + "password", + "person" ], "type": "object" } @@ -33986,15 +33982,24 @@ "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { + "properties": { + "userId": { + "format": "uuid", + "type": "string" + } + }, + "required": [ + "userId" + ], "type": "object" } } }, - "description": "User is verified and you can now login to your user account.\n" + "description": "Registration was successfull. A verification email will be sent to the specified email address.\nThe users can be used as soon as the verification link was opened\n" }, "400": { "content": { @@ -34004,43 +34009,56 @@ } } }, - "description": "Some of the specified values do not meet our requirements.\nPossible domain specific `type` values are:\n * UserRegistrationAlreadyVerified\n * WrongVerificationToken\n" - }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "description": "Some of the specified values does not meet our requirements.\nPossible domain specific `type` values are:\n * EmailInUse\n * PasswordIsLeaked\n * ValidationError\n * PasswordEqualsEmail\n" }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "summary": "Verify your registration.", + "summary": "Register with email and password.", "tags": [ "User" ] } }, - "/v2/extension-instances/{extensionInstanceId}/actions/disable": { - "post": { - "operationId": "extension-disable-extension-instance", + "/v2/users/{userId}/avatar": { + "delete": { + "operationId": "user-remove-avatar", "parameters": [ { + "description": "`self` or the id of a user.", + "examples": { + "self": { + "summary": "You", + "value": "self" + }, + "userId": { + "summary": "ID of a user.", + "value": "10203040-1234-5678-abcd-badc0de01234" + } + }, "in": "path", - "name": "extensionInstanceId", + "name": "userId", "required": true, "schema": { - "format": "uuid", - "type": "string" + "oneOf": [ + { + "enum": [ + "self" + ], + "type": "string" + }, + { + "format": "uuid", + "type": "string" + } + ] } } ], "responses": { "204": { - "content": { - "application/json": { - "schema": {} - } - }, - "description": "NoContent" + "description": "Avatar removal was successful." }, "400": { "$ref": "#/components/responses/commons.ValidationError" @@ -34054,38 +34072,135 @@ "commons.AccessToken": [] } ], - "summary": "Disable an ExtensionInstance.", - "tags": [] - } - }, - "/v2/webhook-public-keys/{serial}": { - "get": { - "operationId": "extension-get-public-key", + "summary": "Remove Avatar.", + "tags": [ + "User" + ] + }, + "post": { + "operationId": "user-request-avatar-upload", "parameters": [ { - "description": "The serial id of a specific public key. Use `latest` to get the latest public key.", + "description": "`self` or the id of a user.", + "examples": { + "self": { + "summary": "You", + "value": "self" + }, + "userId": { + "summary": "ID of a user.", + "value": "10203040-1234-5678-abcd-badc0de01234" + } + }, "in": "path", - "name": "serial", + "name": "userId", "required": true, "schema": { - "example": "latest", - "type": "string" + "oneOf": [ + { + "enum": [ + "self" + ], + "type": "string" + }, + { + "format": "uuid", + "type": "string" + } + ] } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "required": false + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/marketplace.PublicKey" + "properties": { + "refId": { + "description": "The `refId` to be used to upload your avatar to the /v2/files/:refId route.", + "format": "uuid", + "type": "string" + }, + "rules": { + "description": "Contstraints for the avatar image upload.", + "properties": { + "maxSizeInKB": { + "description": "Maximum size in kilobytes of the avatar image.", + "example": 3000, + "type": "integer" + }, + "mimeTypes": { + "description": "List of supported mime types.", + "items": { + "example": "image/png", + "type": "string" + }, + "type": "array" + }, + "properties": { + "properties": { + "imageDimensions": { + "description": "Supported range of dimensions for the avatar image.", + "properties": { + "max": { + "properties": { + "height": { + "type": "integer" + }, + "width": { + "type": "integer" + } + }, + "type": "object" + }, + "min": { + "properties": { + "height": { + "type": "integer" + }, + "width": { + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "required": [ + "mimeTypes", + "maxSizeInKB" + ], + "type": "object" + } + }, + "required": [ + "refId", + "rules" + ], + "type": "object" } } }, - "description": "Use this public key to verify the webhook signature on your end." + "description": "Avatar upload request was successful." }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "400": { + "$ref": "#/components/responses/commons.ValidationError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -34096,118 +34211,102 @@ "commons.AccessToken": [] } ], - "summary": "Get the public key to verify the webhook signature.", - "tags": [] + "summary": "Request a new avatar image upload.", + "tags": [ + "User" + ] } }, - "/v2/extension-instances/{extensionInstanceId}": { - "delete": { - "operationId": "extension-delete-extension-instance", - "parameters": [ - { - "in": "path", - "name": "extensionInstanceId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" - } - } - ], - "responses": { - "204": { - "content": { - "application/json": { - "schema": {} - } - }, - "description": "NoContent" - }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" - } - }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Delete an ExtensionInstance.", - "tags": [] - }, - "get": { - "operationId": "extension-get-extension-instance", - "parameters": [ - { - "in": "path", - "name": "extensionInstanceId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" + "/v2/users/self/credentials/email/actions/resend-email": { + "post": { + "operationId": "user-resend-verification-email", + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "email": { + "example": "ada.lovelace@example.com", + "format": "email", + "type": "string" + }, + "userId": { + "format": "uuid", + "type": "string" + } + }, + "required": [ + "userId", + "email" + ], + "type": "object" + } } - } - ], + }, + "required": true + }, "responses": { - "200": { + "204": { + "description": "New Email-Address verification email was sent." + }, + "400": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/marketplace.ExtensionInstance" + "$ref": "#/components/schemas/commons.ValidationErrors" } } }, - "description": "OK" + "description": "Some of the specified values do not meet our requirements.\n" }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" + "403": { + "$ref": "#/components/responses/commons.RateLimitError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Get an ExtensionInstance.", - "tags": [] + "summary": "Resend the Email-Address verification email.", + "tags": [ + "User" + ] } }, - "/v2/contributors/{contributorId}": { - "get": { - "operationId": "extension-get-contributor", - "parameters": [ - { - "in": "path", - "name": "contributorId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" + "/v2/signup/mfa/reset-recoverycodes": { + "put": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "multiFactorCode": { + "description": "Multi Factor Code to authorize your request.", + "example": "123456", + "maxLength": 16, + "minLength": 6, + "type": "string" + } + }, + "required": [ + "multiFactorCode" + ], + "type": "object" + } } - } - ], + }, + "required": true + }, "responses": { - "200": { - "content": { - "application/json": { + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", "schema": { - "$ref": "#/components/schemas/marketplace.Contributor" + "type": "string" } } - }, - "description": "OK" - }, - "404": { - "$ref": "#/components/responses/commons.NotFoundError" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" + } } }, "security": [ @@ -34215,58 +34314,36 @@ "commons.AccessToken": [] } ], - "summary": "Get a Contributor.", - "tags": [] + "summary": "Reset RecoveryCodes for MFA.", + "tags": [ + "User" + ], + "deprecated": true } }, - "/v2/contributors": { + "/v2/signup/supportcode": { "get": { - "operationId": "extension-list-contributors", "parameters": [ { "in": "query", - "name": "limit", - "required": false, - "schema": { - "default": 1000, - "type": "integer" - } - }, - { - "in": "query", - "name": "skip", - "required": false, - "schema": { - "default": 0, - "type": "integer" - } - }, - { - "in": "query", - "name": "page", + "name": "forceRecreate", "required": false, "schema": { - "default": 1, - "type": "integer" + "type": "boolean" } } ], "responses": { - "200": { - "content": { - "application/json": { + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", "schema": { - "items": { - "$ref": "#/components/schemas/marketplace.Contributor" - }, - "type": "array" + "type": "string" } } - }, - "description": "OK" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" + } } }, "security": [ @@ -34274,37 +34351,36 @@ "commons.AccessToken": [] } ], - "summary": "List Contributors.", - "tags": [] + "summary": "Request a support code.", + "tags": [ + "User" + ], + "deprecated": true } }, - "/v2/extensions/{extensionId}": { + "/v2/signup/supportcodes": { "get": { - "operationId": "extension-get-extension", "parameters": [ { - "in": "path", - "name": "extensionId", - "required": true, + "in": "query", + "name": "forceRecreate", + "required": false, "schema": { - "format": "uuid", - "type": "string" + "type": "boolean" } } ], "responses": { - "200": { - "content": { - "application/json": { + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", "schema": { - "$ref": "#/components/schemas/marketplace.Extension" + "type": "string" } } - }, - "description": "OK" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" + } } }, "security": [ @@ -34312,35 +34388,52 @@ "commons.AccessToken": [] } ], - "summary": "Get an Extension.", - "tags": [] + "summary": "Request a support code.", + "tags": [ + "User" + ], + "deprecated": true } }, - "/v2/extension-instances/{extensionInstanceId}/actions/enable": { - "post": { - "operationId": "extension-enable-extension-instance", + "/v2/users/self/credentials/support-code": { + "get": { + "operationId": "user-support-code-request", "parameters": [ { - "in": "path", - "name": "extensionInstanceId", - "required": true, + "in": "query", + "name": "forceRecreate", + "required": false, "schema": { - "format": "uuid", - "type": "string" + "type": "boolean" } } ], "responses": { - "204": { + "200": { "content": { "application/json": { - "schema": {} + "schema": { + "properties": { + "expiresAt": { + "description": "Expiration of the support code", + "format": "date-time", + "type": "string" + }, + "supportCode": { + "description": "support code to authenticate yourself against the mittwald support via telephone", + "example": "123456", + "type": "string" + } + }, + "required": [ + "supportCode", + "expiresAt" + ], + "type": "object" + } } }, - "description": "NoContent" - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" + "description": "The requested support code and the expiry." }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -34351,38 +34444,34 @@ "commons.AccessToken": [] } ], - "summary": "Enable an ExtensionInstance.", - "tags": [] + "summary": "Request a support code.", + "tags": [ + "User" + ] } - }, - "/v2/extension-instances/{extensionInstanceId}/scopes": { - "patch": { - "operationId": "extension-consent-to-extension-scopes", - "parameters": [ - { - "in": "path", - "name": "extensionInstanceId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" - } - } - ], + }, + "/v2/users/self/credentials/email/actions/verify-email": { + "post": { + "operationId": "user-verify-email", "requestBody": { "content": { "application/json": { "schema": { "properties": { - "consentedScopes": { - "items": { - "$ref": "#/components/schemas/marketplace.Scope" - }, - "type": "array" + "email": { + "description": "The Email-Address to verify.", + "example": "ada.lovelace@example.com", + "format": "email", + "type": "string" + }, + "token": { + "description": "The token found in the verification email.", + "example": "123456", + "type": "string" } }, "required": [ - "consentedScopes" + "email" ], "type": "object" } @@ -34392,15 +34481,20 @@ }, "responses": { "204": { + "description": "Email has been verified." + }, + "400": { "content": { "application/json": { - "schema": {} + "schema": { + "$ref": "#/components/schemas/commons.ValidationErrors" + } } }, - "description": "NoContent" + "description": "Some of the specified values do not meet our requirements.\nPossible domain specific `type` values are:\n * WrongVerificationToken\n * EmailNotFound\n * WrongVerificationToken\n * EmailAddressAlreadyVerified\n" }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" + "404": { + "$ref": "#/components/responses/commons.NotFoundError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -34411,66 +34505,83 @@ "commons.AccessToken": [] } ], - "summary": "Consent to extension scopes.", - "tags": [] + "summary": "Verify an added Email-Address.", + "tags": [ + "User" + ] } }, - "/v2/extensions": { - "get": { - "operationId": "extension-list-extensions", + "/v2/users/{userId}/phone/verify": { + "post": { "parameters": [ { - "in": "query", - "name": "context", - "required": false, - "schema": { - "$ref": "#/components/schemas/marketplace.Context" - } - }, - { - "in": "query", - "name": "limit", - "required": false, - "schema": { - "default": 1000, - "type": "integer" - } - }, - { - "in": "query", - "name": "skip", - "required": false, - "schema": { - "default": 0, - "type": "integer" - } - }, - { - "in": "query", - "name": "page", - "required": false, + "description": "`self` or the id of a user.", + "examples": { + "self": { + "summary": "You", + "value": "self" + }, + "userId": { + "summary": "ID of a user.", + "value": "10203040-1234-5678-abcd-badc0de01234" + } + }, + "in": "path", + "name": "userId", + "required": true, "schema": { - "default": 1, - "type": "integer" + "oneOf": [ + { + "enum": [ + "self" + ], + "type": "string" + }, + { + "format": "uuid", + "type": "string" + } + ] } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "example": "123456", + "maxLength": 6, + "minLength": 6, + "type": "string" + }, + "phoneNumber": { + "format": "phone", + "type": "string" + } + }, + "required": [ + "phoneNumber", + "code" + ], + "type": "object" + } + } + }, + "required": true + }, "responses": { - "200": { - "content": { - "application/json": { + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", "schema": { - "items": { - "$ref": "#/components/schemas/marketplace.Extension" - }, - "type": "array" + "type": "string" } } - }, - "description": "OK" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" + } } }, "security": [ @@ -34478,73 +34589,86 @@ "commons.AccessToken": [] } ], - "summary": "List Extensions.", - "tags": [] + "summary": "Verify phone number.", + "tags": [ + "User" + ], + "deprecated": true } }, - "/v2/extension-instances": { - "get": { - "operationId": "extension-list-extension-instances", + "/v2/users/{userId}/actions/verify-phone": { + "post": { + "operationId": "user-verify-phone-number", "parameters": [ { - "in": "query", - "name": "limit", - "required": false, - "schema": { - "default": 1000, - "type": "integer" - } - }, - { - "in": "query", - "name": "skip", - "required": false, - "schema": { - "default": 0, - "type": "integer" - } - }, - { - "in": "query", - "name": "page", - "required": false, - "schema": { - "default": 1, - "type": "integer" - } - }, - { - "in": "query", - "name": "context", - "required": true, - "schema": { - "$ref": "#/components/schemas/marketplace.Context" - } - }, - { - "description": "The ID of your customer, project or user.", - "in": "query", - "name": "contextId", + "description": "`self` or the id of a user.", + "examples": { + "self": { + "summary": "You", + "value": "self" + }, + "userId": { + "summary": "ID of a user.", + "value": "10203040-1234-5678-abcd-badc0de01234" + } + }, + "in": "path", + "name": "userId", "required": true, "schema": { - "format": "uuid", - "type": "string" + "oneOf": [ + { + "enum": [ + "self" + ], + "type": "string" + }, + { + "format": "uuid", + "type": "string" + } + ] } } ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "items": { - "$ref": "#/components/schemas/marketplace.ExtensionInstance" + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "example": "123456", + "maxLength": 6, + "minLength": 6, + "type": "string" }, - "type": "array" - } + "phoneNumber": { + "format": "phone", + "type": "string" + } + }, + "required": [ + "phoneNumber", + "code" + ], + "type": "object" } - }, - "description": "OK" + } + }, + "required": true + }, + "responses": { + "204": { + "description": "The phone number has been verified." + }, + "400": { + "$ref": "#/components/responses/commons.ValidationError" + }, + "404": { + "$ref": "#/components/responses/commons.NotFoundError" + }, + "409": { + "$ref": "#/components/responses/commons.DefaultError" }, "default": { "$ref": "#/components/responses/commons.DefaultError" @@ -34555,39 +34679,41 @@ "commons.AccessToken": [] } ], - "summary": "List ExtensionInstances.", - "tags": [] - }, + "summary": "Verify phone number.", + "tags": [ + "User" + ] + } + }, + "/v2/signup/registration/verification": { "post": { - "operationId": "extension-create-extension-instance", "requestBody": { "content": { "application/json": { "schema": { "properties": { - "consentedScopes": { - "items": { - "$ref": "#/components/schemas/marketplace.Scope" - }, - "type": "array" - }, - "context": { - "$ref": "#/components/schemas/marketplace.Context" + "email": { + "description": "The users email address.", + "format": "email", + "type": "string" }, - "contextId": { - "format": "uuid", + "token": { + "description": "The token that was send to your email address", + "example": 123456, + "maxLength": 16, + "minLength": 6, "type": "string" }, - "extensionId": { + "userId": { + "description": "UUID of the registered user.", "format": "uuid", "type": "string" } }, "required": [ - "extensionId", - "consentedScopes", - "context", - "contextId" + "email", + "token", + "userId" ], "type": "object" } @@ -34596,66 +34722,55 @@ "required": true }, "responses": { - "201": { - "content": { - "application/json": { + "308": { + "description": "This route is deprecated, and will redirect you to another URL.", + "headers": { + "location": { + "description": "The new URL to use; clients should redirect their request to this URL, using the same request method and body as the original request.", "schema": { - "properties": { - "id": { - "format": "uuid", - "type": "string" - } - }, - "required": [ - "id" - ] + "type": "string" } } - }, - "description": "The ExtensionInstance ID." - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" + } } }, - "security": [ - { - "commons.AccessToken": [] - } + "summary": "Verify your registration.", + "tags": [ + "User" ], - "summary": "Create an ExtensionInstance.", - "tags": [] + "deprecated": true } }, - "/v2/extension-instances/{extensionInstanceId}/tokens": { + "/v2/verify-registration": { "post": { - "operationId": "extension-authenticate-instance", - "parameters": [ - { - "in": "path", - "name": "extensionInstanceId", - "required": true, - "schema": { - "format": "uuid", - "type": "string" - } - } - ], + "operationId": "user-verify-registration", "requestBody": { "content": { "application/json": { "schema": { "properties": { - "extensionInstanceSecret": { - "description": "The latest secret an external application received via lifecycle webhooks.\nNamely ExtensionAddedToContext and ExtensionInstanceSecretRotated.\n", + "email": { + "description": "The users email address.", + "format": "email", + "type": "string" + }, + "token": { + "description": "The token that was send to your email address", + "example": 123456, + "maxLength": 16, + "minLength": 6, + "type": "string" + }, + "userId": { + "description": "UUID of the registered user.", + "format": "uuid", "type": "string" } }, "required": [ - "extensionInstanceSecret" + "email", + "token", + "userId" ], "type": "object" } @@ -34664,149 +34779,36 @@ "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "properties": { - "expiry": { - "format": "date-time", - "type": "string" - }, - "publicToken": { - "description": "Set this in the 'x-access-token' header when performing domain actions.", - "type": "string" - } - }, - "required": [ - "publicToken", - "expiry" - ], "type": "object" } } }, - "description": "You received a public token with a short expiry. You can now perform domain actions." + "description": "User is verified and you can now login to your user account.\n" }, "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "default": { - "$ref": "#/components/responses/commons.DefaultError" - } - }, - "security": [ - { - "commons.AccessToken": [] - } - ], - "summary": "Authenticate your external application using the extensionInstanceSecret.", - "tags": [] - } - }, - "/v2/files/{fileId}/{fileName}": { - "get": { - "operationId": "file-get-file-with-name", - "parameters": [ - { - "description": "ID of the File to be retrieved.", - "in": "path", - "name": "fileId", - "required": true, - "schema": { - "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6", - "format": "uuid", - "type": "string" - } - }, - { - "in": "header", - "name": "Accept", - "schema": { - "default": "application/octet-stream", - "enum": [ - "application/octet-stream", - "text/plain;base64" - ], - "example": "application/octet-stream", - "type": "string" - } - }, - { - "in": "header", - "name": "Content-Disposition", - "schema": { - "default": "inline", - "enum": [ - "inline", - "attachment" - ], - "example": "inline", - "type": "string" - } - }, - { - "description": "Only needed for protected Files.", - "in": "header", - "name": "Token", - "required": false, - "schema": { - "example": "jwt", - "type": "string" - } - }, - { - "description": "Name of the File to be retrieved.", - "in": "path", - "name": "fileName", - "required": true, - "schema": { - "example": "me.jpeg", - "type": "string" - } - } - ], - "responses": { - "200": { "content": { - "application/octet-stream": { - "schema": { - "type": "string" - } - }, - "text/plain;base64": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/commons.ValidationErrors" } } }, - "description": "OK" - }, - "400": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "401": { - "$ref": "#/components/responses/commons.DefaultError" - }, - "403": { - "$ref": "#/components/responses/commons.DefaultError" + "description": "Some of the specified values do not meet our requirements.\nPossible domain specific `type` values are:\n * UserRegistrationAlreadyVerified\n * WrongVerificationToken\n" }, "404": { "$ref": "#/components/responses/commons.NotFoundError" }, - "422": { - "$ref": "#/components/responses/commons.ValidationError" - }, - "500": { - "$ref": "#/components/responses/commons.DefaultError" - }, "default": { "$ref": "#/components/responses/commons.DefaultError" } }, - "summary": "Get a File.", + "summary": "Verify your registration.", "tags": [ - "File" + "User" ] } }