diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..13566b81b018ad684f3a35fee301741b2734c8f4
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/antragraum-proxy.iml b/.idea/antragraum-proxy.iml
new file mode 100644
index 0000000000000000000000000000000000000000..d6ebd4805981b8400db3e3291c74a743fef9a824
--- /dev/null
+++ b/.idea/antragraum-proxy.iml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/.idea/copyright/Eupl1_2.xml b/.idea/copyright/Eupl1_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a6ac5451d15827c36038351f24b7d1d6ad33102d
--- /dev/null
+++ b/.idea/copyright/Eupl1_2.xml
@@ -0,0 +1,6 @@
+<component name="CopyrightManager">
+  <copyright>
+    <option name="notice" value="Copyright (c) &amp;#36;originalComment.match(&quot;Copyright \(c\) (\d+)&quot;, 1, &quot;-&quot;, &quot;&amp;#36;today.year&quot;)&amp;#36;today.year. &#10;Lizenziert unter der EUPL, Version 1.2 oder - sobald&#10;diese von der Europäischen Kommission genehmigt wurden -&#10;Folgeversionen der EUPL (&quot;Lizenz&quot;);&#10;Sie dürfen dieses Werk ausschließlich gemäß&#10;dieser Lizenz nutzen.&#10;Eine Kopie der Lizenz finden Sie hier:&#10;&#10;https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12&#10;&#10;Sofern nicht durch anwendbare Rechtsvorschriften&#10;gefordert oder in schriftlicher Form vereinbart, wird&#10;die unter der Lizenz verbreitete Software &quot;so wie sie&#10;ist&quot;, OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -&#10;ausdrücklich oder stillschweigend - verbreitet.&#10;Die sprachspezifischen Genehmigungen und Beschränkungen&#10;unter der Lizenz sind dem Lizenztext zu entnehmen. " />
+    <option name="myName" value="Eupl1.2" />
+  </copyright>
+</component>
\ No newline at end of file
diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4c8996918f5c5ce3236fb74f10a56f1ba8bf84fa
--- /dev/null
+++ b/.idea/copyright/profiles_settings.xml
@@ -0,0 +1,7 @@
+<component name="CopyrightManager">
+  <settings>
+    <module2copyright>
+      <element module="Project Files" copyright="Eupl1.2" />
+    </module2copyright>
+  </settings>
+</component>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d8fa43a0712d2d0440630662bcd6c53bf22faa9f
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="FormatOnSaveOptions">
+    <option name="myRunOnSave" value="true" />
+  </component>
+  <component name="OptimizeOnSaveOptions">
+    <option name="myRunOnSave" value="true" />
+  </component>
+  <component name="ProjectInspectionProfilesVisibleTreeState">
+    <entry key="Project Default">
+      <profile-state>
+        <expanded-state>
+          <State />
+        </expanded-state>
+        <selected-state>
+          <State>
+            <id>Angular</id>
+          </State>
+        </selected-state>
+      </profile-state>
+    </entry>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9730283442093fe6a311c59aa5cad7f3e5e2417e
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/antragraum-proxy.iml" filepath="$PROJECT_DIR$/.idea/antragraum-proxy.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..35eb1ddfbbc029bcab630581847471d7f238ec53
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..334b6d42e77781ba2a56fc998010c432ce29c33b
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,7 @@
+
+FROM scratch
+
+WORKDIR /
+COPY main /
+ADD config /config
+CMD ["/main"]
\ No newline at end of file
diff --git a/Jenkinsfile b/Jenkinsfile
new file mode 100644
index 0000000000000000000000000000000000000000..267253895348d82fd90742da6e79e145bb5b05fc
--- /dev/null
+++ b/Jenkinsfile
@@ -0,0 +1,336 @@
+pipeline {
+   agent {
+        node {
+            label 'ozgcloud-jenkins-build-agent'
+        }
+    }
+
+tools { go 'go-1.22.0' }
+    environment {
+        RELEASE_REGEX = /v\d+.\d+.\d+/
+        BETA_REGEX = /v\d+.\d+.\d+-beta.\d/
+        FAILED_STAGE = ""
+        SH_SUCCESS_STATUS_CODE = 0
+    }
+
+    options {
+        timeout(time: 1, unit: 'HOURS')
+        disableConcurrentBuilds()
+        buildDiscarder(logRotator(numToKeepStr: '5'))
+    }
+
+    stages {
+        stage('Get and Check Version') {
+            steps {
+                script {
+                    FAILED_STAGE = env.STAGE_NAME
+                    
+                    // Read the file content
+                    def fileContent = readFile('cmd/antragstraum-proxy/main.go')
+                    
+                    // Define the regex pattern to match "version= <version>"
+                    def versionPattern = /var version = \"(.*?)\"/
+
+                    // Find the line that matches the pattern
+                    def matcher = fileContent =~ versionPattern
+                    if (matcher.find()) {
+                        env.APP_VERSION = matcher[0][1].trim()
+                        echo "Version found: ${env.APP_VERSION}"
+                    } else {
+                        error("Version not found in main.go")
+                    }
+
+                    if(isReleaseBranch()){
+                        if ( !(env.APP_VERSION ==~ RELEASE_REGEX) ) {
+                            error("Keine Release Version für Branch ${env.BRANCH_NAME}.")
+                        }
+                    } else {
+                        if ( !(env.APP_VERSION ==~ BETA_REGEX) ) {
+                            error("Keine Beta Version für Branch ${env.BRANCH_NAME}.")
+                        }
+                    }                
+                }
+            }
+        }   
+
+        stage('Build Antragsraum-Proxy') {
+            steps {
+                script {
+                    FAILED_STAGE=env.STAGE_NAME
+                        
+                    sh '''
+                        #export GOPATH so that installed dependencies could be found
+                        export GOPATH=$GOROOT
+                        
+                        go mod download
+                        go install \
+                        github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway \
+                        github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2 \
+                        google.golang.org/protobuf/cmd/protoc-gen-go \
+                        google.golang.org/grpc/cmd/protoc-gen-go-grpc
+                    '''
+
+                    sh '''
+                        curl -sSL "https://github.com/bufbuild/buf/releases/download/v1.34.0/buf-$(uname -s)-$(uname -m)" -o ./buf
+                        chmod +x ./buf
+                        ./buf generate
+                        #to compile go statically with these tags, so that the binary is not dynamically linked and from scratch in Dockerfile will work
+                        go build -tags osusergo,netgo cmd/antragsraum-proxy/main.go
+
+                    '''
+                }
+            }
+        }
+
+        stage ('OWASP Dependency-Check Vulnerabilities') {
+            steps {
+                dependencyCheck additionalArguments: ''' 
+                    -o "./" 
+                    -s "./"
+                    -f "ALL" 
+                    -d /dependency-check-data
+                    --suppression dependency-check-supressions.xml
+                    --disableKnownExploited
+                    --noupdate
+                    --disableArchive
+                    --prettyPrint''', odcInstallation: 'dependency-check-owasp'
+
+                dependencyCheckPublisher pattern: 'dependency-check-report.xml'
+            }
+        }   
+
+        stage('Build and publish Docker image') {
+            steps {
+                script {
+                    FAILED_STAGE=env.STAGE_NAME
+                
+                   sh "docker build -t docker.ozg-sh.de/antragsraum-proxy:${env.APP_VERSION} ."
+
+                    IMAGE_TAG = generateImageTag()
+
+                    tagAndPushDockerImage('antragsraum-proxy', IMAGE_TAG)
+
+                    if (env.BRANCH_NAME == 'dev') {
+                        tagAndPushDockerImage('antragsraum-proxy', 'snapshot-latest')
+                    }
+                    else if (env.BRANCH_NAME == 'release') {
+                        tagAndPushDockerImage('antragsraum-proxy', 'latest')
+                    }
+                }
+            }
+        }
+        
+        stage('Test, build and deploy Helm Chart') {
+            steps {
+                script {
+                    FAILED_STAGE=env.STAGE_NAME
+                    HELM_CHART_VERSION = generateHelmChartVersion()
+
+                    dir('src/main/helm') {
+                        sh "helm lint -f ../../test/helm-linter-values.yaml"
+
+                        sh "helm unittest -f '../../test/helm/*.yaml' ."
+
+                        sh "helm package --version=${HELM_CHART_VERSION} ."
+
+                        deployHelmChart(HELM_CHART_VERSION)
+                    }
+                }
+            }
+        }
+
+        stage('Trigger Dev rollout') {
+            when {
+                branch 'dev'
+            }
+            steps {
+                script {
+                    FAILED_STAGE = env.STAGE_NAME
+
+                    cloneGitopsRepo()
+
+                    setNewDevAntragsraumProxyVersion()
+
+                    pushDevGitopsRepo()
+                }
+            }
+        }
+
+        stage('Trigger Test rollout') {
+            when {
+                branch 'release'
+            }
+            steps {
+                script {
+                    FAILED_STAGE = env.STAGE_NAME
+
+                    cloneGitopsRepo()
+
+                    setNewTestAntragsraumProxyVersion()
+
+                    pushTestGitopsRepo()
+                }
+            }
+        }
+    }
+    
+}
+
+
+Void deployHelmChart(String helmChartVersion) {
+    withCredentials([usernamePassword(credentialsId: 'jenkins-nexus-login', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]){
+        String fileName = '@antragsraum-proxy-' + helmChartVersion + '.tgz'
+        result = sh script: '''curl -u $USERNAME:$PASSWORD https://nexus.ozg-sh.de/service/rest/v1/components?repository=''' + getHelmRepository() + ''' -F file=''' + fileName, returnStdout: true
+
+        if (result != '') {
+            error(result)
+        }
+    }
+}
+
+String getHelmRepository(){
+    if (isReleaseBranch()) {
+        return 'ozg-base-apps';
+    }
+    return 'ozg-base-apps-snapshot';
+}
+
+String generateImageTag() {
+    return "${env.APP_VERSION}-${env.BRANCH_NAME}"
+}
+
+
+
+String getBuildProfile() {
+    if (isDevBranch()) {
+        return "-P dev"
+    } else if (isReleaseBranch()) {
+        return "-P release"
+    } else {
+        return ""
+    }
+}
+
+
+Void sendFailureMessage() {
+    def room = getRoom()
+    def data = getFailureData()
+
+    sh "curl -XPOST -H 'authorization: Bearer ${getElementAccessToken()}' -d '${data}' https://matrix.ozg-sh.de/_matrix/client/v3/rooms/$room/send/m.room.message"
+}
+
+String getElementAccessToken() {
+    withCredentials([string(credentialsId: 'element-login-json', variable: 'LOGIN_JSON')]) {
+        return readJSON ( text: sh (script: '''curl -XPOST -d \"$LOGIN_JSON\" https://matrix.ozg-sh.de/_matrix/client/v3/login''', returnStdout: true)).access_token
+    }
+}
+
+String getFailureData() {
+    return  """{"msgtype":"m.text", \
+                    "body":"Antragsraum-Proxy: Build Failed. Stage: ${FAILED_STAGE} Build-ID: ${env.BUILD_NUMBER}", \
+                    "format": "org.matrix.custom.html", \
+                    "formatted_body":"Antragsraum-Proxy: Build Failed. Stage: ${FAILED_STAGE} Build-ID: ${env.BUILD_NUMBER}"}"""
+}
+
+String getRoom() {
+    if (isReleaseBranch()) {
+        return "!oWZpUGTFsxkJIYNfYg:matrix.ozg-sh.de"
+    } else {
+        return "!iQPAvQIiRwRpNOszjw:matrix.ozg-sh.de"
+    } 
+}
+
+Void configureGit() {
+    def email = "jenkins@ozg-sh.de"
+    def name = "jenkins"
+
+    dir("gitops") {
+        sh "git config user.email '${email}'"
+        sh "git config user.name '${name}'"
+    }
+}
+
+Void cloneGitopsRepo() {
+    withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) {
+        sh 'git clone https://${USER}:${TOKEN}@git.ozg-sh.de/ozgcloud-devops/gitops.git'
+    }
+
+    configureGit()
+}
+
+Void setNewDevAntragsraumProxyVersion() {
+    setNewAntragsraumProxyGitopsVersion("dev")
+}
+
+Void setNewTestAntragsraumProxyVersion() {
+    setNewAntragsraumProxyGitopsVersion("test")
+}
+
+Void setNewAntragsraumProxyGitopsVersion(String environment) {
+    dir("gitops") {
+        def envFile = "${environment}/application/values/antragsraum-proxy-values.yaml"
+
+        def envVersions = readYaml file: envFile
+
+        envVersions.antragsraum_proxy.image.tag = IMAGE_TAG
+        envVersions.antragsraum_proxy.helm.version = HELM_CHART_VERSION
+
+        writeYaml file: envFile, data: envVersions, overwrite: true
+    }
+}
+
+
+Void pushDevGitopsRepo() {
+    pushNewGitopsVersion('dev')
+}
+
+Void pushTestGitopsRepo() {
+    pushNewGitopsVersion('test')
+}
+
+Void pushNewGitopsVersion(String environment) {
+    dir('gitops') {
+        if (!hasAntragsraumProxyValuesFileChanged(environment)) {
+            return
+        }
+
+        withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) {
+            sh "git add ${environment}/application/values/antragsraum-proxy-values.yaml"
+
+            sh "git commit -m 'jenkins rollout ${environment} antragsraum-proxy version ${IMAGE_TAG}'"
+            sh 'git push https://${USER}:${TOKEN}@git.ozg-sh.de/ozgcloud-devops/gitops.git'
+        }
+    }
+}
+
+Boolean hasAntragsraumProxyValuesFileChanged(String environment) {
+    return sh (script: "git status | grep '${environment}/application/values/antragsraum-proxy-values.yaml'", returnStatus: true) == env.SH_SUCCESS_STATUS_CODE as Integer
+}
+
+Boolean isDevBranch() {
+    return env.BRANCH_NAME == 'dev'
+}
+
+Boolean isReleaseBranch() {
+    return env.BRANCH_NAME == 'release'
+}
+
+String generateHelmChartVersion() {
+    def chartVersion = "${env.APP_VERSION}" 
+
+    if (isDevBranch()) {
+        chartVersion += "-${env.GIT_COMMIT.take(7)}"
+    }
+    else if (!isReleaseBranch()) {
+        chartVersion += "-${env.BRANCH_NAME}"
+    }
+
+    return chartVersion.replaceAll("_", "-")
+}
+Void tagAndPushDockerImage(String imageName, String newTag){
+    withCredentials([usernamePassword(credentialsId: 'jenkins-nexus-login', usernameVariable: 'USER', passwordVariable: 'PASSWORD')]) {
+        sh 'docker login docker.ozg-sh.de -u ${USER} -p ${PASSWORD}'
+        sh "docker tag docker.ozg-sh.de/${imageName}:${env.APP_VERSION} docker.ozg-sh.de/${imageName}:${newTag}"
+        sh "docker push docker.ozg-sh.de/${imageName}:${newTag}"
+    }
+}
\ No newline at end of file
diff --git a/README.md b/README.md
index a93272e5f31fd0764d10cd75f78bbebb5ea77056..79d25eb7286225161890b9bfb3a3894fc2f763ea 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,47 @@
-# antragsraum-proxy
+# Antragsraum-Proxy
 
-Repository for the REST to gRPC Proxy of the ANtragsraum
\ No newline at end of file
+## Getting Started
+
+### Dependencies installieren
+
+```
+go mod download
+```
+
+```
+go install \
+    github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway \
+    github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2 \
+    google.golang.org/protobuf/cmd/protoc-gen-go \
+    google.golang.org/grpc/cmd/protoc-gen-go-grpc
+```
+
+### Buf installieren
+
+https://github.com/bufbuild/buf?tab=readme-ov-file
+
+### Protobuf-Code generieren
+
+```
+buf generate
+```
+
+### Anwendung starten
+
+```
+go run cmd/antragsraum-proxy/main.go
+```
+
+## Config
+
+[Config-Datei](./config/config.yml)
+
+```
+server:
+  port: Port des HTTP Servers (int)
+grpc:
+  mock: lokalen gRPC Server mocken (bool)
+  url: URL des Ziel-gRPC-Servers im host:port Format (string)
+logging:
+  level: "ERROR" | "WARN" | "INFO" | "DEBUG"
+```
\ No newline at end of file
diff --git a/api/gateway-config.yml b/api/gateway-config.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1eeec0d9ea4a06ad2f8803fe5812a225e30b0966
--- /dev/null
+++ b/api/gateway-config.yml
@@ -0,0 +1,18 @@
+type: google.api.Service
+config_version: 3
+
+http:
+  rules:
+    - selector: de.ozgcloud.nachrichten.antragraum.AntragraumService.GetRueckfrage
+      get: "/api/rueckfrage/{id}/{samlToken}"
+    - selector: de.ozgcloud.nachrichten.antragraum.AntragraumService.SendRueckfrageAnswer
+      post: "/api/antworten"
+      body: "*"
+    - selector: de.ozgcloud.nachrichten.antragraum.AntragraumService.FindRueckfragen
+      get: "/api/rueckfragen/{postfachId}/{samlToken}"
+    - selector: de.ozgcloud.vorgang.grpc.command.CommandService.GetCommand
+      get: "/api/command/{id}"
+    - selector: de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService.GetBinaryFileContent
+      get: "/api/filecontent/{fileId}"
+    - selector: de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService.FindBinaryFilesMetaData
+      get: "/api/filemetadata/{fileId}"
\ No newline at end of file
diff --git a/api/openapi-config.yml b/api/openapi-config.yml
new file mode 100644
index 0000000000000000000000000000000000000000..b60cce9b4b71b12f7b29805414f7eed8c7bef75f
--- /dev/null
+++ b/api/openapi-config.yml
@@ -0,0 +1,143 @@
+openapiOptions:
+  file:
+    - file: "antragraum.proto"
+      option:
+        info:
+          title: Antragraum Proxy API
+          license:
+            name: EUPL 1.2
+            url: https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+          version: "1.0"
+        schemes:
+          - HTTP
+          - HTTPS
+        consumes:
+          - application/json
+        produces:
+          - application/json
+        responses:
+          "403":
+            description: Returned when the user does not have permission to access the resource.
+          "404":
+            description: Returned when the resource does not exist.
+            schema:
+              jsonSchema:
+                type:
+                  - STRING
+    - file: "binaryfile.proto"
+      option:
+        info:
+          title: File Proxy API
+          license:
+            name: EUPL 1.2
+            url: https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+          version: "1.0"
+        schemes:
+          - HTTP
+          - HTTPS
+        responses:
+          "403":
+            description: Returned when the user does not have permission to access the resource.
+          "404":
+            description: Returned when the resource does not exist.
+            schema:
+              jsonSchema:
+                type:
+                  - STRING
+    - file: "command.proto"
+      option:
+        info:
+          title: COmmand Proxy API
+          license:
+            name: EUPL 1.2
+            url: https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+          version: "1.0"
+        schemes:
+          - HTTP
+          - HTTPS
+        responses:
+          "403":
+            description: Returned when the user does not have permission to access the resource.
+          "404":
+            description: Returned when the resource does not exist.
+            schema:
+              jsonSchema:
+                type:
+                  - STRING
+  service:
+    - service: de.ozgcloud.nachrichten.antragraum.AntragraumService
+      option:
+        description: "Service to proxy between Antragraum Backend and NachrichtenManager in OZG-Cloud"
+    - service: de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService
+      option:
+        description: "Service to proxy between Antragraum Backend and VorgangManager File Api in OZG-Cloud"
+    - service: de.ozgcloud.vorgang.grpc.command.CommandService
+      option:
+        description: "Service to proxy between Antragraum Backend and VorgangManager Command Api in OZG-Cloud"
+  method:
+    - method: de.ozgcloud.nachrichten.antragraum.AntragraumService.GetRueckfrage
+      option:
+        description: "Get the Rueckfrage by id"
+        summary: "Summary: GetRueckfrage rpc"
+        responses:
+          "200":
+            description: Returns the Rueckfrage
+          "503":
+            description: Returned when the resource is temporarily unavailable.
+          "404":
+            description: Returned when the resource does not exist.
+    - method: de.ozgcloud.nachrichten.antragraum.AntragraumService.SendRueckfrageAnswer
+      option:
+        description: "Send a reply to a Rueckfrage"
+        summary: "Summary: SendRueckfrageAnswer rpc"
+        responses:
+          "200":
+            description: Returns the id of the command created for the send order
+          "503":
+            description: Returned when the resource is temporarily unavailable.
+          "404":
+            description: Returned when the resource does not exist.
+    - method: de.ozgcloud.nachrichten.antragraum.AntragraumService.FindRueckfragen
+      option:
+        description: "Find all Rueckfragen of a postfach"
+        summary: "Summary: FindRueckfragen rpc"
+        responses:
+          "200":
+            description: Returns the list of Rueckfragen Headers found.
+          "503":
+            description: Returned when the resource is temporarily unavailable.
+          "404":
+            description: Returned when the resource does not exist.
+    - method: de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService.GetBinaryFileContent
+      option:
+        description: "Get the content of a file"
+        summary: "Summary: GetBinaryFileContent rpc"
+        responses:
+          "200":
+            description: Returns file content as binary stream.
+          "503":
+            description: Returned when the resource is temporarily unavailable.
+          "404":
+            description: Returned when the resource does not exist.
+    - method: de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService.FindBinaryFilesMetaData
+      option:
+        description: "Get the metadata of a file"
+        summary: "Summary: FindBinaryFilesMetaData rpc"
+        responses:
+          "200":
+            description: Returns file metadata as json.
+          "503":
+            description: Returned when the resource is temporarily unavailable.
+          "404":
+            description: Returned when the resource does not exist.
+    - method: de.ozgcloud.vorgang.grpc.command.CommandService.GetCommand
+      option:
+        description: "Get the command by id"
+        summary: "Summary: GetCommand rpc"
+        responses:
+          "200":
+            description: Returns command as json.
+          "503":
+            description: Returned when the resource is temporarily unavailable.
+          "404":
+            description: Returned when the resource does not exist.
\ No newline at end of file
diff --git a/api/proto/antragraum.model.proto b/api/proto/antragraum.model.proto
new file mode 100644
index 0000000000000000000000000000000000000000..a88117f9b4124266b73de2077c0cea5e1fd360a4
--- /dev/null
+++ b/api/proto/antragraum.model.proto
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.nachrichten.antragraum;
+
+import "postfach.model.proto";
+
+option go_package = "de.ozgcloud.nachrichten.antragraum";
+
+message GrpcFindRueckfragenRequest {
+  string samlToken = 1;
+  string postfachId = 2;
+}
+
+message GrpcFindRueckfragenResponse {
+  repeated GrpcRueckfrageHead rueckfrageHead = 1;
+}
+
+message GrpcRueckfrageHead {
+  string id = 1;
+  string vorgangId = 2;
+  string vorgangName = 3;
+  string vorgangNummer = 4;
+  string sentAt = 5;
+  string answeredAt = 6;
+  string status = 7;
+  string trustLevel = 8;
+  bool accessible = 9;
+}
+
+message GrpcRueckfrage {
+  string id = 1;
+  string vorgangId = 2;
+  string vorgangName = 3;
+  string vorgangNummer = 4;
+  string sentAt = 5;
+  string answeredAt = 6;
+  string status = 7;
+  string trustLevel = 8;
+  bool accessible = 9;
+
+  string text = 10;
+
+  repeated string attachmentFileId = 11;
+  repeated GrpcRueckfrageAnswer answers = 12;
+}
+
+message GrpcSendRueckfrageAnswerRequest {
+  string samlToken = 1;
+  GrpcRueckfrageAnswer answer = 2;
+}
+
+message GrpcRueckfrageAnswer {
+  string rueckfrageId = 1;
+  string answerText = 2;
+  repeated string attachmentFileId = 3;
+  string sentAt = 4;
+}
+
+message GrpcSendRueckfrageAnswerResponse {
+  string commandId = 1;
+}
+
+message GrpcGetRueckfrageRequest {
+  string samlToken = 1;
+  string id = 2;
+}
+
+message GrpcGetRueckfrageResponse {
+  GrpcRueckfrage rueckfrage = 1;
+}
\ No newline at end of file
diff --git a/api/proto/antragraum.proto b/api/proto/antragraum.proto
new file mode 100644
index 0000000000000000000000000000000000000000..b23d1877562ad34bc3a71a4f9260f77c0f76a958
--- /dev/null
+++ b/api/proto/antragraum.proto
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.nachrichten.antragraum;
+
+import "antragraum.model.proto";
+import "command.model.proto";
+
+option go_package = "de.ozgcloud.nachrichten.antragraum";
+
+service AntragraumService {
+  rpc FindRueckfragen(GrpcFindRueckfragenRequest) returns (GrpcFindRueckfragenResponse);
+
+  rpc SendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequest) returns (GrpcSendRueckfrageAnswerResponse);
+
+  rpc GetRueckfrage(GrpcGetRueckfrageRequest) returns (GrpcGetRueckfrageResponse);
+}
\ No newline at end of file
diff --git a/api/proto/binaryfile.proto b/api/proto/binaryfile.proto
new file mode 100644
index 0000000000000000000000000000000000000000..91cde87ba125abb38a63fbd2c56eafc99b1b551c
--- /dev/null
+++ b/api/proto/binaryfile.proto
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.grpc.binaryFile;
+
+import "callcontext.proto";
+import "filemodel.proto";
+
+option go_package = "de.ozgcloud.vorgang.grpc.binaryFile";
+
+service BinaryFileService {
+
+  rpc UploadBinaryFileAsStream(stream GrpcUploadBinaryFileRequest) returns (GrpcUploadBinaryFileResponse) {
+  }
+
+  rpc GetBinaryFileContent(GrpcGetBinaryFileDataRequest) returns (stream GrpcGetBinaryFileDataResponse) {
+  }
+
+  rpc FindBinaryFilesMetaData(GrpcBinaryFilesRequest) returns (GrpcFindFilesResponse) {
+  }
+
+  rpc GetAttachments(GrpcGetAttachmentsRequest) returns (GrpcGetAttachmentsResponse) {
+  }
+
+  rpc GetRepresentations(GrpcGetRepresentationsRequest) returns (GrpcGetRepresentationsResponse) {
+  }
+}
+
+message GrpcBinaryFilesRequest {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+  repeated string fileId = 2;
+}
+
+message GrpcFindFilesResponse {
+  repeated de.ozgcloud.vorgang.grpc.file.GrpcOzgFile file = 1;
+}
+
+message GrpcBinaryFileDataRequest {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+  string fileId = 2;
+}
+
+message GrpcUploadBinaryFileRequest {
+  oneof request {
+    GrpcUploadBinaryFileMetaData metadata = 1;
+    bytes fileContent = 2;
+  }
+}
+
+message GrpcUploadBinaryFileMetaData {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+  string vorgangId = 2;
+  string field = 3;
+  string fileName = 4;
+  string contentType = 5;
+  int64 size = 6 [deprecated = true];
+}
+
+message GrpcUploadBinaryFileResponse {
+  string fileId = 2;
+}
+
+message GrpcGetBinaryFileDataRequest {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+  string fileId = 2;
+}
+
+message GrpcGetBinaryFileDataResponse {
+  bytes fileContent = 1;
+}
+
+message GrpcGetAttachmentsRequest {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+  string eingangId = 2;
+}
+message GrpcGetAttachmentsResponse {
+  repeated GrpcBinaryFile file = 1;
+}
+
+message GrpcGetRepresentationsRequest {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+  string eingangId = 2;
+}
+message GrpcGetRepresentationsResponse {
+  repeated GrpcBinaryFile file = 1;
+}
+
+message GrpcBinaryFile {
+  string id = 1;
+  string name = 2;
+  int64 size = 3;
+  string contentType = 4;
+}
\ No newline at end of file
diff --git a/api/proto/callcontext.proto b/api/proto/callcontext.proto
new file mode 100644
index 0000000000000000000000000000000000000000..16bf5063a5ef34f0e28d382ac444130b18e595a2
--- /dev/null
+++ b/api/proto/callcontext.proto
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.grpc.command;
+
+option go_package = "de.ozgcloud.vorgang.grpc.command";
+
+message GrpcCallContext {
+  string client = 1;
+  GrpcUser user = 2;
+  string requestId = 3;
+}
+
+message GrpcUser {
+  string id = 1;
+  string name = 2;
+  repeated string roles = 3 [deprecated = true];
+}
\ No newline at end of file
diff --git a/api/proto/clientattribute.model.proto b/api/proto/clientattribute.model.proto
new file mode 100644
index 0000000000000000000000000000000000000000..50ee5d7e2cd3749cd314c452dc49ecc517309c9f
--- /dev/null
+++ b/api/proto/clientattribute.model.proto
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.grpc.clientAttribute;
+
+option go_package = "de.ozgcloud.vorgang.grpc.clientAttribute";
+
+message GrpcClientAttribute {
+  string clientName = 1;
+  string attributeName = 2;
+  GrpcAccessPermission access = 3;
+  GrpcClientAttributeValue value = 4;
+}
+
+enum GrpcAccessPermission {
+  PRIVATE = 0;
+  READ_ONLY = 1;
+  READ_WRITE = 2;
+}
+
+message GrpcClientAttributeValue {
+  oneof value {
+    string stringValue = 1;
+    int64 intValue = 2;
+    double doubleValue = 3;
+    bool boolValue = 4;
+  }
+}
\ No newline at end of file
diff --git a/api/proto/command.model.proto b/api/proto/command.model.proto
new file mode 100644
index 0000000000000000000000000000000000000000..5ca4bab4c76d477a62cd674ac1d66d95f83a079c
--- /dev/null
+++ b/api/proto/command.model.proto
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.grpc.command;
+
+import "callcontext.proto";
+import "common.model.proto";
+
+option go_package = "de.ozgcloud.vorgang.grpc.command";
+
+message GrpcCreateCommandRequest {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext callContext = 1;
+  string vorgangId = 2;
+  string relationId = 4;
+  int64 relationVersion = 5;
+  GrpcRedirectRequest redirectRequest = 12;
+  repeated GrpcCommandBodyField body = 15;
+  de.ozgcloud.vorgang.common.GrpcObject bodyObj = 17;
+  string orderString = 21;
+}
+
+message GrpcCommandResponse {
+  enum GrpcResponseCode {
+    OK = 0;
+    PENDING = 1;
+    ERROR = 2;
+    CONFLICT = 3;
+  }
+  GrpcResponseCode responseCode = 1;
+  string messageCode = 2;
+  repeated string messageParameters = 3;
+  GrpcCommand command = 4;
+}
+
+message GrpcRevokeCommandRequest {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+  string id = 2;
+}
+
+message GrpcGetCommandRequest {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+  string id = 2;
+}
+
+message GrpcSetCommandExecutedRequest {
+  string commandId = 1;
+  string createdResource = 2;
+}
+
+message GrpcCommand {
+  string id = 1;
+  string vorgangId = 2;
+  string createdAt = 3;
+  string finishedAt = 4;
+  string createdBy = 10;
+  string createdByName = 11;
+  string status = 12;
+  string errorMessage = 13;
+  string relationId = 14;
+  GrpcCommandBody body = 16;
+  de.ozgcloud.vorgang.common.GrpcObject bodyObj = 17;
+  GrpcRedirectRequest redirectRequest = 20;
+  string orderString = 21;
+  string createdResource = 22;
+}
+
+message GrpcExistsPendingCommandsRequest {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+  string vorgangId = 2;
+}
+
+message GrpcExistsPendingCommandsResponse {
+  bool existsPendingCommands = 1;
+}
+
+message GrpcRedirectRequest {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+  string email = 2;
+  string password = 3;
+}
+
+
+message GrpcGetPendingCommandsRequest {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+  string vorgangId = 2;
+}
+
+message GrpcFindCommandsRequest {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+  string vorgangId = 2;
+  repeated string status = 3;
+  string orderString = 5;
+}
+
+
+message GrpcGetPendingCommandsResponse {
+  repeated GrpcCommand command = 1;
+}
+message GrpcCommandsResponse {
+  repeated GrpcCommand command = 1;
+}
+
+message GrpcCommandBody {
+  repeated GrpcCommandBodyField field = 1;
+}
+
+message GrpcCommandBodyField {
+  string name = 1;
+  string value = 2;
+}
+
+message GrpcEmpty {
+}
+
+message GrpcAddSubCommandsRequest {
+  string parentId = 1;
+  string executionMode = 2;
+  bool completedIfSubsCompleted = 3;
+  repeated GrpcCreateCommand subCommands = 4;
+}
+
+message GrpcCreateCommand {
+  string order = 1;
+  string relationId = 2;
+  int64 relationVersion = 3;
+  de.ozgcloud.vorgang.common.GrpcObject bodyObj = 4;
+}
\ No newline at end of file
diff --git a/api/proto/command.proto b/api/proto/command.proto
new file mode 100644
index 0000000000000000000000000000000000000000..b15efd17aa0dc09756c0c7ac6cf0b60fc3f2dd66
--- /dev/null
+++ b/api/proto/command.proto
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.grpc.command;
+
+import "command.model.proto";
+
+option go_package = "de.ozgcloud.vorgang.grpc.command";
+
+service CommandService {
+
+  rpc GetCommand(GrpcGetCommandRequest) returns (GrpcCommand) {
+  }
+}
\ No newline at end of file
diff --git a/api/proto/common.model.proto b/api/proto/common.model.proto
new file mode 100644
index 0000000000000000000000000000000000000000..7e97bc87bb81c4ece1216372cbb2bf70f47250e7
--- /dev/null
+++ b/api/proto/common.model.proto
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.common;
+
+option go_package = "de.ozgcloud.vorgang.common";
+
+message GrpcObject {
+  repeated GrpcProperty property = 1;
+  repeated GrpcSubObject subObject = 2;
+}
+
+message GrpcProperty {
+  string name = 1;
+  repeated string value = 2;
+}
+
+message GrpcSubObject {
+  string name = 1;
+  repeated GrpcProperty property = 2;
+  repeated GrpcSubObject subObject = 3;
+}
+
+enum GrpcQueryOperator {
+  GREATER_THEN = 0;  // >
+  GREATER_THEN_OR_EQUAL_TO = 1; // >=
+  LESS_THEN = 2; // <
+  LESS_THEN_OR_EQUAL_TO = 3; // <=
+  EQUAL = 4; // =
+  UNEQUAL = 5; // <>
+  IS_NULL = 6;
+  IS_EMPTY = 7;
+  EXISTS = 8;
+  NOT_EXIST = 9;
+}
\ No newline at end of file
diff --git a/api/proto/filemodel.proto b/api/proto/filemodel.proto
new file mode 100644
index 0000000000000000000000000000000000000000..6c273dc9b7c83761ebf83041c97ad20292e54739
--- /dev/null
+++ b/api/proto/filemodel.proto
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.grpc.file;
+
+import "callcontext.proto";
+
+option go_package = "de.ozgcloud.vorgang.grpc.file";
+
+message GrpcGetAttachmentsRequest {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+  string eingangId = 2;
+}
+message GrpcGetAttachmentsResponse {
+  repeated GrpcOzgFile file = 1;
+}
+
+message GrpcGetRepresentationsRequest {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+  string eingangId = 2;
+}
+message GrpcGetRepresentationsResponse {
+  repeated GrpcOzgFile file = 1;
+}
+
+message GrpcOzgFile {
+  string id = 1;
+  string name = 2;
+  int64 size = 3;
+  string contentType = 4;
+}
\ No newline at end of file
diff --git a/api/proto/postfach.model.proto b/api/proto/postfach.model.proto
new file mode 100644
index 0000000000000000000000000000000000000000..a47bb640515141beb866f8f7f13dc933115ca222
--- /dev/null
+++ b/api/proto/postfach.model.proto
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.nachrichten.postfach;
+
+import "callcontext.proto";
+import "vorgang.model.proto";
+import "common.model.proto";
+
+option go_package = "de.ozgcloud.nachrichten.postfach";
+
+message GrpcSendPostfachMailRequest {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+  string commandId = 2;
+  GrpcPostfachMail mail = 5;
+}
+
+message GrpcSaveNachrichtDraftRequest {
+  string vorgangId = 1;
+  GrpcPostfachNachricht nachricht = 2;
+}
+
+message GrpcSaveNachrichtDraftResponse {
+}
+
+message GrpcSendPostfachMailResponse {
+}
+
+message GrpcFindPostfachMailRequest {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+  string nachrichtId = 2;
+}
+
+message GrpcFindPostfachMailResponse {
+  GrpcPostfachMail nachricht = 1;
+}
+
+message GrpcFindPostfachMailsRequest {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+  string vorgangId = 2;
+}
+
+message GrpcFindPostfachMailsResponse {
+  repeated GrpcPostfachMail mails = 1;
+}
+
+enum GrpcDirection {
+  UNDEFINED = 0;
+  IN = 1;
+  OUT = 2;
+}
+
+message GrpcPostfachNachricht {
+  string id = 1;
+  string createdAt = 2;
+  de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress postfachAddress = 3;
+  string subject = 4;
+  string mailBody = 5;
+  string replyOption = 6;
+  repeated string attachment = 7;
+}
+
+message GrpcPostfachMail {
+  string id = 1;
+  string vorgangId = 2;
+  string postfachId = 3 [deprecated = true];
+  GrpcPostfachAddress postfachAddress = 14;
+  string createdAt = 4;
+  string createdBy = 5;
+  string sentAt = 6;
+  bool sentSuccessful = 7;
+  string messageCode = 8;
+  GrpcDirection direction = 9;
+  string subject = 10;
+  string mailBody = 11;
+  string replyOption = 12;
+  repeated string attachment = 13;
+  GrpcPostfachAddress address = 15;
+  string referencedNachricht = 16;
+}
+
+message GrpcPostfachAddress {
+  string version = 1;
+  de.ozgcloud.vorgang.common.GrpcObject identifier = 2;
+  int32 type = 3;
+  string serviceKontoType = 4;
+}
+
+message GrpcResendPostfachMailRequest {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+  string commandId = 2;
+  string postfachMailId = 3;
+}
+
+message GrpcResendPostfachMailResponse {
+}
+
+message GrpcIsPostfachConfiguredRequest {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+}
+
+message GrpcIsPostfachConfiguredResponse {
+  bool isConfigured = 1;
+}
+
+message GrpcGetPostfachConfigRequest {
+}
+
+message GrpcGetPostfachConfigResponse {
+  bool configured = 1;
+  repeated GrpcPostfach postfach = 2;
+}
+
+message GrpcPostfach {
+  string type = 1;
+  bool replyAllowed = 2;
+}
\ No newline at end of file
diff --git a/api/proto/vorgang.model.proto b/api/proto/vorgang.model.proto
new file mode 100644
index 0000000000000000000000000000000000000000..87815b07a810c229afde09c8d177ccf640dbad29
--- /dev/null
+++ b/api/proto/vorgang.model.proto
@@ -0,0 +1,212 @@
+/*
+ * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.vorgang;
+
+import "clientattribute.model.proto";
+import "common.model.proto";
+
+option go_package = "de.ozgcloud.vorgang.vorgang";
+
+message GrpcVorgangHeader {
+  string id = 1;
+  int64 version = 2;
+  string status = 3;
+  string name = 4;
+  string createdAt = 5;
+  string aktenzeichen = 6;
+  string assignedTo = 7;
+  string nummer = 8;
+  repeated de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute clientAttributes = 9;
+  string formEngineName = 15;
+}
+
+message GrpcVorgangWithEingang {
+  string id = 1;
+  int64 version = 2;
+  string status = 3;
+  string name = 4;
+  string createdAt = 5;
+  string aktenzeichen = 6;
+  string assignedTo = 7;
+  string nummer = 8;
+  repeated de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute clientAttributes = 9;
+
+  GrpcEingang eingang = 10;
+  string formEngineName = 15;
+  GrpcVorgangHead header = 16;
+}
+
+message GrpcVorgangHead {
+  GrpcServiceKonto serviceKonto = 1;
+}
+
+message GrpcEingang {
+  string id = 1;
+
+  GrpcEingangHeader header = 2;
+  GrpcAntragsteller antragsteller = 3;
+  GrpcZustaendigeStelle zustaendigeStelle = 4;
+
+  GrpcFormData formData = 10;
+
+  int32 numberOfAttachments = 11;
+  int32 numberOfRepresentations = 12;
+
+  repeated GrpcIncomingFileGroup attachments = 20;
+  repeated GrpcIncomingFile representations = 21;
+}
+
+message GrpcIncomingFileGroup {
+  string name = 1;
+  repeated GrpcIncomingFile files = 2;
+}
+
+message GrpcIncomingFile {
+  string id = 1;
+  string vendorId = 2;
+  string name = 3;
+  string contentType = 4;
+  int64 size = 5;
+  bytes content = 6;
+}
+
+message GrpcEingangHeader {
+  string requestId = 1;
+  string createdAt = 2;
+  string formId = 3;
+  string formName = 4;
+  string sender = 5;
+  string customer = 6 [deprecated = true];
+  string customerId = 7 [deprecated = true];
+  string client = 8 [deprecated = true];
+  string clientId = 9 [deprecated = true];
+  string formEngineName = 10;
+  GrpcServiceKonto serviceKonto = 11;
+  string vorgangNummer = 12;
+}
+
+message GrpcServiceKonto {
+  string type = 1;
+  repeated GrpcPostfachAddress postfachAddresses = 2;
+  string trustLevel = 3;
+}
+
+message GrpcPostfachAddress {
+  string version = 1;
+  de.ozgcloud.vorgang.common.GrpcObject identifier = 2;
+  int32 type = 3;
+}
+
+message GrpcAntragsteller {
+  string anrede = 1;
+  string nachname = 2;
+  string vorname = 3;
+  string geburtsdatum = 4;
+  string geburtsort = 5;
+  string geburtsname = 6;
+  string email = 7;
+  string telefon = 8;
+  string strasse = 9;
+  string hausnummer = 10;
+  string plz = 11;
+  string ort = 12;
+  string postfachId = 13 [deprecated = true];
+
+  GrpcFormData otherData = 30;
+  string firmaName = 31;
+}
+
+message GrpcFormData {
+  repeated GrpcFormField field = 1;
+  repeated GrpcSubForm form = 2;
+}
+
+message GrpcFormField {
+  string name = 1;
+  string value = 2;
+  string label = 3;
+}
+
+message GrpcSubForm {
+  string title = 1;
+  repeated GrpcFormField field = 2;
+  repeated GrpcSubForm subForm = 3;
+  string label = 4;
+  GrpcControlData controlData = 5;
+}
+
+message GrpcControlData {
+  bool metadata = 1;
+}
+
+message GrpcZustaendigeStelle {
+  string organisationseinheitenId = 1;
+  string email = 2;
+  string bezeichnung = 3;
+  string gemeindeSchluessel = 4;
+  string amtlicherRegionalSchluessel = 5;
+  string hausanschriftStrasse = 6;
+  string hausanschriftPlz = 7;
+  string hausanschriftOrt = 8;
+  string telefon = 9;
+}
+
+message GrpcQuery {
+  GrpcLogicalOperator logicalOperator = 1;
+  repeated GrpcVorgangQueryExpression expressions = 2;
+  GrpcQuery nestedQuery = 3;
+}
+
+enum GrpcLogicalOperator {
+  AND = 0;
+  OR = 1;
+}
+
+message GrpcVorgangQueryExpression {
+  string path = 1;
+  de.ozgcloud.vorgang.common.GrpcQueryOperator operator = 2;
+  oneof operand {
+    int32 operandIntValue = 3;
+    bool operandBoolValue = 4;
+    string operandStringValue = 5;
+  }
+}
+
+message GrpcCreateCollaborationVorgangRequest {
+  oneof request {
+    GrpcCollaborationRequest collaborationRequest = 1;
+  }
+}
+
+message GrpcCollaborationRequest {
+  string vorgangId = 1;
+  int32 collaborationLevel = 2;
+  string zustaendigeStelle = 3;
+}
+
+message GrpcCreateCollaborationVorgangResponse {
+  string vorgangId = 1;
+}
\ No newline at end of file
diff --git a/buf.gen.yaml b/buf.gen.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..e18132f572789797723497bed5cd8d141848b99a
--- /dev/null
+++ b/buf.gen.yaml
@@ -0,0 +1,20 @@
+version: v1
+plugins:
+  - plugin: go
+    out: gen/go
+    opt:
+      - paths=source_relative
+  - plugin: go-grpc
+    out: gen/go
+    opt:
+      - paths=source_relative
+  - plugin: grpc-gateway
+    out: gen/go
+    opt:
+      - paths=source_relative
+      - grpc_api_configuration=api/gateway-config.yml
+  - plugin: openapiv2
+    out: gen/openapiv2
+    opt:
+      - grpc_api_configuration=api/gateway-config.yml
+      - openapi_configuration=api/openapi-config.yml
\ No newline at end of file
diff --git a/buf.lock b/buf.lock
new file mode 100644
index 0000000000000000000000000000000000000000..f446f52ce6898925ad377769fb6632a99f742f6b
--- /dev/null
+++ b/buf.lock
@@ -0,0 +1,13 @@
+# Generated by buf. DO NOT EDIT.
+version: v1beta1
+deps:
+  - remote: buf.build
+    owner: googleapis
+    repository: googleapis
+    commit: f0e53af8f2fc4556b94f482688b57223
+    digest: shake256:de26a277fc28b8b411ecf58729d78d32fcf15090ffd998a4469225b17889bfb51442eaab04bb7a8d88d203ecdf0a9febd4ffd52c18ed1c2229160c7bd353ca95
+  - remote: buf.build
+    owner: grpc-ecosystem
+    repository: grpc-gateway
+    commit: a48fcebcf8f140dd9d09359b9bb185a4
+    digest: shake256:a926173f0ec3e1a929462c350acda846e546134b5ce2bb83fe44f02f9330a42b1c9b292f64b951b06a4d2c47e2ce4d477d6a2cb31502a15637ada35ecedefcf6
diff --git a/buf.yaml b/buf.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..ee350234c83408d0b2f11bc08c62e17e20344909
--- /dev/null
+++ b/buf.yaml
@@ -0,0 +1,7 @@
+version: v1beta1
+build:
+  roots:
+    - api/proto
+deps:
+  - buf.build/googleapis/googleapis
+  - buf.build/grpc-ecosystem/grpc-gateway
\ No newline at end of file
diff --git a/cmd/antragsraum-proxy/main.go b/cmd/antragsraum-proxy/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..a4f8f8503462a0394af5bcb703f083cd02e891d9
--- /dev/null
+++ b/cmd/antragsraum-proxy/main.go
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2023-2024
+ * Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+
+package main
+
+import (
+	"antragsraum-proxy/internal/config"
+	"antragsraum-proxy/internal/mock"
+	"antragsraum-proxy/internal/server"
+)
+
+var version = "v1.0.0-beta.1"
+
+func main() {
+	conf := config.LoadConfig()
+
+	if conf.Grpc.Mock {
+		go mock.StartGrpcServer()
+	}
+
+	server.StartHttpGateway(conf)
+}
diff --git a/config/config.yml b/config/config.yml
new file mode 100755
index 0000000000000000000000000000000000000000..8605b248d11050d5a8ad3c71b3e41e20eb8993d6
--- /dev/null
+++ b/config/config.yml
@@ -0,0 +1,6 @@
+server:
+  port: 8082
+grpc:
+  mock: true
+logging:
+  level: "INFO"
\ No newline at end of file
diff --git a/gen/go/antragraum.model.pb.go b/gen/go/antragraum.model.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..a9ecd8fd6f400513a68be7459ef554dbd2c3b514
--- /dev/null
+++ b/gen/go/antragraum.model.pb.go
@@ -0,0 +1,946 @@
+//
+// Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
+// Ministerpräsidenten des Landes Schleswig-Holstein
+// Staatskanzlei
+// Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+//
+// Lizenziert unter der EUPL, Version 1.2 oder - sobald
+// diese von der Europäischen Kommission genehmigt wurden -
+// Folgeversionen der EUPL ("Lizenz");
+// Sie dürfen dieses Werk ausschließlich gemäß
+// dieser Lizenz nutzen.
+// Eine Kopie der Lizenz finden Sie hier:
+//
+// https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+//
+// Sofern nicht durch anwendbare Rechtsvorschriften
+// gefordert oder in schriftlicher Form vereinbart, wird
+// die unter der Lizenz verbreitete Software "so wie sie
+// ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+// ausdrücklich oder stillschweigend - verbreitet.
+// Die sprachspezifischen Genehmigungen und Beschränkungen
+// unter der Lizenz sind dem Lizenztext zu entnehmen.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.34.2
+// 	protoc        (unknown)
+// source: antragraum.model.proto
+
+package de_ozgcloud_nachrichten_antragraum
+
+import (
+	_ "de.ozgcloud.nachrichten.postfach"
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type GrpcFindRueckfragenRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	SamlToken  string `protobuf:"bytes,1,opt,name=samlToken,proto3" json:"samlToken,omitempty"`
+	PostfachId string `protobuf:"bytes,2,opt,name=postfachId,proto3" json:"postfachId,omitempty"`
+}
+
+func (x *GrpcFindRueckfragenRequest) Reset() {
+	*x = GrpcFindRueckfragenRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_antragraum_model_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcFindRueckfragenRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcFindRueckfragenRequest) ProtoMessage() {}
+
+func (x *GrpcFindRueckfragenRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_antragraum_model_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcFindRueckfragenRequest.ProtoReflect.Descriptor instead.
+func (*GrpcFindRueckfragenRequest) Descriptor() ([]byte, []int) {
+	return file_antragraum_model_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *GrpcFindRueckfragenRequest) GetSamlToken() string {
+	if x != nil {
+		return x.SamlToken
+	}
+	return ""
+}
+
+func (x *GrpcFindRueckfragenRequest) GetPostfachId() string {
+	if x != nil {
+		return x.PostfachId
+	}
+	return ""
+}
+
+type GrpcFindRueckfragenResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	RueckfrageHead []*GrpcRueckfrageHead `protobuf:"bytes,1,rep,name=rueckfrageHead,proto3" json:"rueckfrageHead,omitempty"`
+}
+
+func (x *GrpcFindRueckfragenResponse) Reset() {
+	*x = GrpcFindRueckfragenResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_antragraum_model_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcFindRueckfragenResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcFindRueckfragenResponse) ProtoMessage() {}
+
+func (x *GrpcFindRueckfragenResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_antragraum_model_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcFindRueckfragenResponse.ProtoReflect.Descriptor instead.
+func (*GrpcFindRueckfragenResponse) Descriptor() ([]byte, []int) {
+	return file_antragraum_model_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *GrpcFindRueckfragenResponse) GetRueckfrageHead() []*GrpcRueckfrageHead {
+	if x != nil {
+		return x.RueckfrageHead
+	}
+	return nil
+}
+
+type GrpcRueckfrageHead struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id            string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	VorgangId     string `protobuf:"bytes,2,opt,name=vorgangId,proto3" json:"vorgangId,omitempty"`
+	VorgangName   string `protobuf:"bytes,3,opt,name=vorgangName,proto3" json:"vorgangName,omitempty"`
+	VorgangNummer string `protobuf:"bytes,4,opt,name=vorgangNummer,proto3" json:"vorgangNummer,omitempty"`
+	SentAt        string `protobuf:"bytes,5,opt,name=sentAt,proto3" json:"sentAt,omitempty"`
+	AnsweredAt    string `protobuf:"bytes,6,opt,name=answeredAt,proto3" json:"answeredAt,omitempty"`
+	Status        string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"`
+	TrustLevel    string `protobuf:"bytes,8,opt,name=trustLevel,proto3" json:"trustLevel,omitempty"`
+	Accessible    bool   `protobuf:"varint,9,opt,name=accessible,proto3" json:"accessible,omitempty"`
+}
+
+func (x *GrpcRueckfrageHead) Reset() {
+	*x = GrpcRueckfrageHead{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_antragraum_model_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcRueckfrageHead) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcRueckfrageHead) ProtoMessage() {}
+
+func (x *GrpcRueckfrageHead) ProtoReflect() protoreflect.Message {
+	mi := &file_antragraum_model_proto_msgTypes[2]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcRueckfrageHead.ProtoReflect.Descriptor instead.
+func (*GrpcRueckfrageHead) Descriptor() ([]byte, []int) {
+	return file_antragraum_model_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *GrpcRueckfrageHead) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *GrpcRueckfrageHead) GetVorgangId() string {
+	if x != nil {
+		return x.VorgangId
+	}
+	return ""
+}
+
+func (x *GrpcRueckfrageHead) GetVorgangName() string {
+	if x != nil {
+		return x.VorgangName
+	}
+	return ""
+}
+
+func (x *GrpcRueckfrageHead) GetVorgangNummer() string {
+	if x != nil {
+		return x.VorgangNummer
+	}
+	return ""
+}
+
+func (x *GrpcRueckfrageHead) GetSentAt() string {
+	if x != nil {
+		return x.SentAt
+	}
+	return ""
+}
+
+func (x *GrpcRueckfrageHead) GetAnsweredAt() string {
+	if x != nil {
+		return x.AnsweredAt
+	}
+	return ""
+}
+
+func (x *GrpcRueckfrageHead) GetStatus() string {
+	if x != nil {
+		return x.Status
+	}
+	return ""
+}
+
+func (x *GrpcRueckfrageHead) GetTrustLevel() string {
+	if x != nil {
+		return x.TrustLevel
+	}
+	return ""
+}
+
+func (x *GrpcRueckfrageHead) GetAccessible() bool {
+	if x != nil {
+		return x.Accessible
+	}
+	return false
+}
+
+type GrpcRueckfrage struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id               string                  `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	VorgangId        string                  `protobuf:"bytes,2,opt,name=vorgangId,proto3" json:"vorgangId,omitempty"`
+	VorgangName      string                  `protobuf:"bytes,3,opt,name=vorgangName,proto3" json:"vorgangName,omitempty"`
+	VorgangNummer    string                  `protobuf:"bytes,4,opt,name=vorgangNummer,proto3" json:"vorgangNummer,omitempty"`
+	SentAt           string                  `protobuf:"bytes,5,opt,name=sentAt,proto3" json:"sentAt,omitempty"`
+	AnsweredAt       string                  `protobuf:"bytes,6,opt,name=answeredAt,proto3" json:"answeredAt,omitempty"`
+	Status           string                  `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"`
+	TrustLevel       string                  `protobuf:"bytes,8,opt,name=trustLevel,proto3" json:"trustLevel,omitempty"`
+	Accessible       bool                    `protobuf:"varint,9,opt,name=accessible,proto3" json:"accessible,omitempty"`
+	Text             string                  `protobuf:"bytes,10,opt,name=text,proto3" json:"text,omitempty"`
+	AttachmentFileId []string                `protobuf:"bytes,11,rep,name=attachmentFileId,proto3" json:"attachmentFileId,omitempty"`
+	Answers          []*GrpcRueckfrageAnswer `protobuf:"bytes,12,rep,name=answers,proto3" json:"answers,omitempty"`
+}
+
+func (x *GrpcRueckfrage) Reset() {
+	*x = GrpcRueckfrage{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_antragraum_model_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcRueckfrage) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcRueckfrage) ProtoMessage() {}
+
+func (x *GrpcRueckfrage) ProtoReflect() protoreflect.Message {
+	mi := &file_antragraum_model_proto_msgTypes[3]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcRueckfrage.ProtoReflect.Descriptor instead.
+func (*GrpcRueckfrage) Descriptor() ([]byte, []int) {
+	return file_antragraum_model_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *GrpcRueckfrage) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *GrpcRueckfrage) GetVorgangId() string {
+	if x != nil {
+		return x.VorgangId
+	}
+	return ""
+}
+
+func (x *GrpcRueckfrage) GetVorgangName() string {
+	if x != nil {
+		return x.VorgangName
+	}
+	return ""
+}
+
+func (x *GrpcRueckfrage) GetVorgangNummer() string {
+	if x != nil {
+		return x.VorgangNummer
+	}
+	return ""
+}
+
+func (x *GrpcRueckfrage) GetSentAt() string {
+	if x != nil {
+		return x.SentAt
+	}
+	return ""
+}
+
+func (x *GrpcRueckfrage) GetAnsweredAt() string {
+	if x != nil {
+		return x.AnsweredAt
+	}
+	return ""
+}
+
+func (x *GrpcRueckfrage) GetStatus() string {
+	if x != nil {
+		return x.Status
+	}
+	return ""
+}
+
+func (x *GrpcRueckfrage) GetTrustLevel() string {
+	if x != nil {
+		return x.TrustLevel
+	}
+	return ""
+}
+
+func (x *GrpcRueckfrage) GetAccessible() bool {
+	if x != nil {
+		return x.Accessible
+	}
+	return false
+}
+
+func (x *GrpcRueckfrage) GetText() string {
+	if x != nil {
+		return x.Text
+	}
+	return ""
+}
+
+func (x *GrpcRueckfrage) GetAttachmentFileId() []string {
+	if x != nil {
+		return x.AttachmentFileId
+	}
+	return nil
+}
+
+func (x *GrpcRueckfrage) GetAnswers() []*GrpcRueckfrageAnswer {
+	if x != nil {
+		return x.Answers
+	}
+	return nil
+}
+
+type GrpcSendRueckfrageAnswerRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	SamlToken string                `protobuf:"bytes,1,opt,name=samlToken,proto3" json:"samlToken,omitempty"`
+	Answer    *GrpcRueckfrageAnswer `protobuf:"bytes,2,opt,name=answer,proto3" json:"answer,omitempty"`
+}
+
+func (x *GrpcSendRueckfrageAnswerRequest) Reset() {
+	*x = GrpcSendRueckfrageAnswerRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_antragraum_model_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcSendRueckfrageAnswerRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcSendRueckfrageAnswerRequest) ProtoMessage() {}
+
+func (x *GrpcSendRueckfrageAnswerRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_antragraum_model_proto_msgTypes[4]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcSendRueckfrageAnswerRequest.ProtoReflect.Descriptor instead.
+func (*GrpcSendRueckfrageAnswerRequest) Descriptor() ([]byte, []int) {
+	return file_antragraum_model_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *GrpcSendRueckfrageAnswerRequest) GetSamlToken() string {
+	if x != nil {
+		return x.SamlToken
+	}
+	return ""
+}
+
+func (x *GrpcSendRueckfrageAnswerRequest) GetAnswer() *GrpcRueckfrageAnswer {
+	if x != nil {
+		return x.Answer
+	}
+	return nil
+}
+
+type GrpcRueckfrageAnswer struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	RueckfrageId     string   `protobuf:"bytes,1,opt,name=rueckfrageId,proto3" json:"rueckfrageId,omitempty"`
+	AnswerText       string   `protobuf:"bytes,2,opt,name=answerText,proto3" json:"answerText,omitempty"`
+	AttachmentFileId []string `protobuf:"bytes,3,rep,name=attachmentFileId,proto3" json:"attachmentFileId,omitempty"`
+	SentAt           string   `protobuf:"bytes,4,opt,name=sentAt,proto3" json:"sentAt,omitempty"`
+}
+
+func (x *GrpcRueckfrageAnswer) Reset() {
+	*x = GrpcRueckfrageAnswer{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_antragraum_model_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcRueckfrageAnswer) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcRueckfrageAnswer) ProtoMessage() {}
+
+func (x *GrpcRueckfrageAnswer) ProtoReflect() protoreflect.Message {
+	mi := &file_antragraum_model_proto_msgTypes[5]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcRueckfrageAnswer.ProtoReflect.Descriptor instead.
+func (*GrpcRueckfrageAnswer) Descriptor() ([]byte, []int) {
+	return file_antragraum_model_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *GrpcRueckfrageAnswer) GetRueckfrageId() string {
+	if x != nil {
+		return x.RueckfrageId
+	}
+	return ""
+}
+
+func (x *GrpcRueckfrageAnswer) GetAnswerText() string {
+	if x != nil {
+		return x.AnswerText
+	}
+	return ""
+}
+
+func (x *GrpcRueckfrageAnswer) GetAttachmentFileId() []string {
+	if x != nil {
+		return x.AttachmentFileId
+	}
+	return nil
+}
+
+func (x *GrpcRueckfrageAnswer) GetSentAt() string {
+	if x != nil {
+		return x.SentAt
+	}
+	return ""
+}
+
+type GrpcSendRueckfrageAnswerResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	CommandId string `protobuf:"bytes,1,opt,name=commandId,proto3" json:"commandId,omitempty"`
+}
+
+func (x *GrpcSendRueckfrageAnswerResponse) Reset() {
+	*x = GrpcSendRueckfrageAnswerResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_antragraum_model_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcSendRueckfrageAnswerResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcSendRueckfrageAnswerResponse) ProtoMessage() {}
+
+func (x *GrpcSendRueckfrageAnswerResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_antragraum_model_proto_msgTypes[6]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcSendRueckfrageAnswerResponse.ProtoReflect.Descriptor instead.
+func (*GrpcSendRueckfrageAnswerResponse) Descriptor() ([]byte, []int) {
+	return file_antragraum_model_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *GrpcSendRueckfrageAnswerResponse) GetCommandId() string {
+	if x != nil {
+		return x.CommandId
+	}
+	return ""
+}
+
+type GrpcGetRueckfrageRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	SamlToken string `protobuf:"bytes,1,opt,name=samlToken,proto3" json:"samlToken,omitempty"`
+	Id        string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+}
+
+func (x *GrpcGetRueckfrageRequest) Reset() {
+	*x = GrpcGetRueckfrageRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_antragraum_model_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcGetRueckfrageRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcGetRueckfrageRequest) ProtoMessage() {}
+
+func (x *GrpcGetRueckfrageRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_antragraum_model_proto_msgTypes[7]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcGetRueckfrageRequest.ProtoReflect.Descriptor instead.
+func (*GrpcGetRueckfrageRequest) Descriptor() ([]byte, []int) {
+	return file_antragraum_model_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *GrpcGetRueckfrageRequest) GetSamlToken() string {
+	if x != nil {
+		return x.SamlToken
+	}
+	return ""
+}
+
+func (x *GrpcGetRueckfrageRequest) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+type GrpcGetRueckfrageResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Rueckfrage *GrpcRueckfrage `protobuf:"bytes,1,opt,name=rueckfrage,proto3" json:"rueckfrage,omitempty"`
+}
+
+func (x *GrpcGetRueckfrageResponse) Reset() {
+	*x = GrpcGetRueckfrageResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_antragraum_model_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcGetRueckfrageResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcGetRueckfrageResponse) ProtoMessage() {}
+
+func (x *GrpcGetRueckfrageResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_antragraum_model_proto_msgTypes[8]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcGetRueckfrageResponse.ProtoReflect.Descriptor instead.
+func (*GrpcGetRueckfrageResponse) Descriptor() ([]byte, []int) {
+	return file_antragraum_model_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *GrpcGetRueckfrageResponse) GetRueckfrage() *GrpcRueckfrage {
+	if x != nil {
+		return x.Rueckfrage
+	}
+	return nil
+}
+
+var File_antragraum_model_proto protoreflect.FileDescriptor
+
+var file_antragraum_model_proto_rawDesc = []byte{
+	0x0a, 0x16, 0x61, 0x6e, 0x74, 0x72, 0x61, 0x67, 0x72, 0x61, 0x75, 0x6d, 0x2e, 0x6d, 0x6f, 0x64,
+	0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x22, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67,
+	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68, 0x74, 0x65,
+	0x6e, 0x2e, 0x61, 0x6e, 0x74, 0x72, 0x61, 0x67, 0x72, 0x61, 0x75, 0x6d, 0x1a, 0x14, 0x70, 0x6f,
+	0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x22, 0x5a, 0x0a, 0x1a, 0x47, 0x72, 0x70, 0x63, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x75,
+	0x65, 0x63, 0x6b, 0x66, 0x72, 0x61, 0x67, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x12, 0x1c, 0x0a, 0x09, 0x73, 0x61, 0x6d, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6d, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1e,
+	0x0a, 0x0a, 0x70, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x49, 0x64, 0x22, 0x7d,
+	0x0a, 0x1b, 0x47, 0x72, 0x70, 0x63, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x75, 0x65, 0x63, 0x6b, 0x66,
+	0x72, 0x61, 0x67, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a,
+	0x0e, 0x72, 0x75, 0x65, 0x63, 0x6b, 0x66, 0x72, 0x61, 0x67, 0x65, 0x48, 0x65, 0x61, 0x64, 0x18,
+	0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c,
+	0x6f, 0x75, 0x64, 0x2e, 0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68, 0x74, 0x65, 0x6e, 0x2e,
+	0x61, 0x6e, 0x74, 0x72, 0x61, 0x67, 0x72, 0x61, 0x75, 0x6d, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x52,
+	0x75, 0x65, 0x63, 0x6b, 0x66, 0x72, 0x61, 0x67, 0x65, 0x48, 0x65, 0x61, 0x64, 0x52, 0x0e, 0x72,
+	0x75, 0x65, 0x63, 0x6b, 0x66, 0x72, 0x61, 0x67, 0x65, 0x48, 0x65, 0x61, 0x64, 0x22, 0x9a, 0x02,
+	0x0a, 0x12, 0x47, 0x72, 0x70, 0x63, 0x52, 0x75, 0x65, 0x63, 0x6b, 0x66, 0x72, 0x61, 0x67, 0x65,
+	0x48, 0x65, 0x61, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x49,
+	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67,
+	0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x4e, 0x61, 0x6d,
+	0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67,
+	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x4e,
+	0x75, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x76, 0x6f, 0x72,
+	0x67, 0x61, 0x6e, 0x67, 0x4e, 0x75, 0x6d, 0x6d, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65,
+	0x6e, 0x74, 0x41, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x74,
+	0x41, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x65, 0x64, 0x41, 0x74,
+	0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x65, 0x64,
+	0x41, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x72,
+	0x75, 0x73, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a,
+	0x74, 0x72, 0x75, 0x73, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63,
+	0x63, 0x65, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a,
+	0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0xaa, 0x03, 0x0a, 0x0e, 0x47,
+	0x72, 0x70, 0x63, 0x52, 0x75, 0x65, 0x63, 0x6b, 0x66, 0x72, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a,
+	0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a,
+	0x09, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x09, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x76,
+	0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0b, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a,
+	0x0d, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x4e, 0x75, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x4e, 0x75, 0x6d,
+	0x6d, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x18, 0x05, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x61,
+	0x6e, 0x73, 0x77, 0x65, 0x72, 0x65, 0x64, 0x41, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x0a, 0x61, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x65, 0x64, 0x41, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61,
+	0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x72, 0x75, 0x73, 0x74, 0x4c, 0x65, 0x76, 0x65,
+	0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x72, 0x75, 0x73, 0x74, 0x4c, 0x65,
+	0x76, 0x65, 0x6c, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x62, 0x6c,
+	0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69,
+	0x62, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x61, 0x74, 0x74, 0x61, 0x63,
+	0x68, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x03, 0x28,
+	0x09, 0x52, 0x10, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c,
+	0x65, 0x49, 0x64, 0x12, 0x52, 0x0a, 0x07, 0x61, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x73, 0x18, 0x0c,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f,
+	0x75, 0x64, 0x2e, 0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68, 0x74, 0x65, 0x6e, 0x2e, 0x61,
+	0x6e, 0x74, 0x72, 0x61, 0x67, 0x72, 0x61, 0x75, 0x6d, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x52, 0x75,
+	0x65, 0x63, 0x6b, 0x66, 0x72, 0x61, 0x67, 0x65, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x52, 0x07,
+	0x61, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x73, 0x22, 0x91, 0x01, 0x0a, 0x1f, 0x47, 0x72, 0x70, 0x63,
+	0x53, 0x65, 0x6e, 0x64, 0x52, 0x75, 0x65, 0x63, 0x6b, 0x66, 0x72, 0x61, 0x67, 0x65, 0x41, 0x6e,
+	0x73, 0x77, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73,
+	0x61, 0x6d, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
+	0x73, 0x61, 0x6d, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x50, 0x0a, 0x06, 0x61, 0x6e, 0x73,
+	0x77, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x64, 0x65, 0x2e, 0x6f,
+	0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68,
+	0x74, 0x65, 0x6e, 0x2e, 0x61, 0x6e, 0x74, 0x72, 0x61, 0x67, 0x72, 0x61, 0x75, 0x6d, 0x2e, 0x47,
+	0x72, 0x70, 0x63, 0x52, 0x75, 0x65, 0x63, 0x6b, 0x66, 0x72, 0x61, 0x67, 0x65, 0x41, 0x6e, 0x73,
+	0x77, 0x65, 0x72, 0x52, 0x06, 0x61, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x22, 0x9e, 0x01, 0x0a, 0x14,
+	0x47, 0x72, 0x70, 0x63, 0x52, 0x75, 0x65, 0x63, 0x6b, 0x66, 0x72, 0x61, 0x67, 0x65, 0x41, 0x6e,
+	0x73, 0x77, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x75, 0x65, 0x63, 0x6b, 0x66, 0x72, 0x61,
+	0x67, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x75, 0x65, 0x63,
+	0x6b, 0x66, 0x72, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x6e, 0x73, 0x77,
+	0x65, 0x72, 0x54, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x6e,
+	0x73, 0x77, 0x65, 0x72, 0x54, 0x65, 0x78, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x61, 0x74, 0x74, 0x61,
+	0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x03,
+	0x28, 0x09, 0x52, 0x10, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69,
+	0x6c, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x22, 0x40, 0x0a, 0x20,
+	0x47, 0x72, 0x70, 0x63, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x75, 0x65, 0x63, 0x6b, 0x66, 0x72, 0x61,
+	0x67, 0x65, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x22, 0x48,
+	0x0a, 0x18, 0x47, 0x72, 0x70, 0x63, 0x47, 0x65, 0x74, 0x52, 0x75, 0x65, 0x63, 0x6b, 0x66, 0x72,
+	0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x61,
+	0x6d, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73,
+	0x61, 0x6d, 0x6c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x6f, 0x0a, 0x19, 0x47, 0x72, 0x70, 0x63,
+	0x47, 0x65, 0x74, 0x52, 0x75, 0x65, 0x63, 0x6b, 0x66, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0a, 0x72, 0x75, 0x65, 0x63, 0x6b, 0x66, 0x72,
+	0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x64, 0x65, 0x2e, 0x6f,
+	0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68,
+	0x74, 0x65, 0x6e, 0x2e, 0x61, 0x6e, 0x74, 0x72, 0x61, 0x67, 0x72, 0x61, 0x75, 0x6d, 0x2e, 0x47,
+	0x72, 0x70, 0x63, 0x52, 0x75, 0x65, 0x63, 0x6b, 0x66, 0x72, 0x61, 0x67, 0x65, 0x52, 0x0a, 0x72,
+	0x75, 0x65, 0x63, 0x6b, 0x66, 0x72, 0x61, 0x67, 0x65, 0x42, 0x24, 0x5a, 0x22, 0x64, 0x65, 0x2e,
+	0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63,
+	0x68, 0x74, 0x65, 0x6e, 0x2e, 0x61, 0x6e, 0x74, 0x72, 0x61, 0x67, 0x72, 0x61, 0x75, 0x6d, 0x62,
+	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_antragraum_model_proto_rawDescOnce sync.Once
+	file_antragraum_model_proto_rawDescData = file_antragraum_model_proto_rawDesc
+)
+
+func file_antragraum_model_proto_rawDescGZIP() []byte {
+	file_antragraum_model_proto_rawDescOnce.Do(func() {
+		file_antragraum_model_proto_rawDescData = protoimpl.X.CompressGZIP(file_antragraum_model_proto_rawDescData)
+	})
+	return file_antragraum_model_proto_rawDescData
+}
+
+var file_antragraum_model_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
+var file_antragraum_model_proto_goTypes = []any{
+	(*GrpcFindRueckfragenRequest)(nil),       // 0: de.ozgcloud.nachrichten.antragraum.GrpcFindRueckfragenRequest
+	(*GrpcFindRueckfragenResponse)(nil),      // 1: de.ozgcloud.nachrichten.antragraum.GrpcFindRueckfragenResponse
+	(*GrpcRueckfrageHead)(nil),               // 2: de.ozgcloud.nachrichten.antragraum.GrpcRueckfrageHead
+	(*GrpcRueckfrage)(nil),                   // 3: de.ozgcloud.nachrichten.antragraum.GrpcRueckfrage
+	(*GrpcSendRueckfrageAnswerRequest)(nil),  // 4: de.ozgcloud.nachrichten.antragraum.GrpcSendRueckfrageAnswerRequest
+	(*GrpcRueckfrageAnswer)(nil),             // 5: de.ozgcloud.nachrichten.antragraum.GrpcRueckfrageAnswer
+	(*GrpcSendRueckfrageAnswerResponse)(nil), // 6: de.ozgcloud.nachrichten.antragraum.GrpcSendRueckfrageAnswerResponse
+	(*GrpcGetRueckfrageRequest)(nil),         // 7: de.ozgcloud.nachrichten.antragraum.GrpcGetRueckfrageRequest
+	(*GrpcGetRueckfrageResponse)(nil),        // 8: de.ozgcloud.nachrichten.antragraum.GrpcGetRueckfrageResponse
+}
+var file_antragraum_model_proto_depIdxs = []int32{
+	2, // 0: de.ozgcloud.nachrichten.antragraum.GrpcFindRueckfragenResponse.rueckfrageHead:type_name -> de.ozgcloud.nachrichten.antragraum.GrpcRueckfrageHead
+	5, // 1: de.ozgcloud.nachrichten.antragraum.GrpcRueckfrage.answers:type_name -> de.ozgcloud.nachrichten.antragraum.GrpcRueckfrageAnswer
+	5, // 2: de.ozgcloud.nachrichten.antragraum.GrpcSendRueckfrageAnswerRequest.answer:type_name -> de.ozgcloud.nachrichten.antragraum.GrpcRueckfrageAnswer
+	3, // 3: de.ozgcloud.nachrichten.antragraum.GrpcGetRueckfrageResponse.rueckfrage:type_name -> de.ozgcloud.nachrichten.antragraum.GrpcRueckfrage
+	4, // [4:4] is the sub-list for method output_type
+	4, // [4:4] is the sub-list for method input_type
+	4, // [4:4] is the sub-list for extension type_name
+	4, // [4:4] is the sub-list for extension extendee
+	0, // [0:4] is the sub-list for field type_name
+}
+
+func init() { file_antragraum_model_proto_init() }
+func file_antragraum_model_proto_init() {
+	if File_antragraum_model_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_antragraum_model_proto_msgTypes[0].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcFindRueckfragenRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_antragraum_model_proto_msgTypes[1].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcFindRueckfragenResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_antragraum_model_proto_msgTypes[2].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcRueckfrageHead); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_antragraum_model_proto_msgTypes[3].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcRueckfrage); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_antragraum_model_proto_msgTypes[4].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcSendRueckfrageAnswerRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_antragraum_model_proto_msgTypes[5].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcRueckfrageAnswer); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_antragraum_model_proto_msgTypes[6].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcSendRueckfrageAnswerResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_antragraum_model_proto_msgTypes[7].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcGetRueckfrageRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_antragraum_model_proto_msgTypes[8].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcGetRueckfrageResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_antragraum_model_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   9,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_antragraum_model_proto_goTypes,
+		DependencyIndexes: file_antragraum_model_proto_depIdxs,
+		MessageInfos:      file_antragraum_model_proto_msgTypes,
+	}.Build()
+	File_antragraum_model_proto = out.File
+	file_antragraum_model_proto_rawDesc = nil
+	file_antragraum_model_proto_goTypes = nil
+	file_antragraum_model_proto_depIdxs = nil
+}
diff --git a/gen/go/antragraum.pb.go b/gen/go/antragraum.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..f5760920ac778f80786863f53464c9d8e316ec08
--- /dev/null
+++ b/gen/go/antragraum.pb.go
@@ -0,0 +1,135 @@
+//
+// Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
+// Ministerpräsidenten des Landes Schleswig-Holstein
+// Staatskanzlei
+// Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+//
+// Lizenziert unter der EUPL, Version 1.2 oder - sobald
+// diese von der Europäischen Kommission genehmigt wurden -
+// Folgeversionen der EUPL ("Lizenz");
+// Sie dürfen dieses Werk ausschließlich gemäß
+// dieser Lizenz nutzen.
+// Eine Kopie der Lizenz finden Sie hier:
+//
+// https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+//
+// Sofern nicht durch anwendbare Rechtsvorschriften
+// gefordert oder in schriftlicher Form vereinbart, wird
+// die unter der Lizenz verbreitete Software "so wie sie
+// ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+// ausdrücklich oder stillschweigend - verbreitet.
+// Die sprachspezifischen Genehmigungen und Beschränkungen
+// unter der Lizenz sind dem Lizenztext zu entnehmen.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.34.2
+// 	protoc        (unknown)
+// source: antragraum.proto
+
+package de_ozgcloud_nachrichten_antragraum
+
+import (
+	_ "de.ozgcloud.vorgang.grpc.command"
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+var File_antragraum_proto protoreflect.FileDescriptor
+
+var file_antragraum_proto_rawDesc = []byte{
+	0x0a, 0x10, 0x61, 0x6e, 0x74, 0x72, 0x61, 0x67, 0x72, 0x61, 0x75, 0x6d, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x12, 0x22, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
+	0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68, 0x74, 0x65, 0x6e, 0x2e, 0x61, 0x6e, 0x74, 0x72,
+	0x61, 0x67, 0x72, 0x61, 0x75, 0x6d, 0x1a, 0x16, 0x61, 0x6e, 0x74, 0x72, 0x61, 0x67, 0x72, 0x61,
+	0x75, 0x6d, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13,
+	0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x32, 0xdb, 0x03, 0x0a, 0x11, 0x41, 0x6e, 0x74, 0x72, 0x61, 0x67, 0x72, 0x61,
+	0x75, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x92, 0x01, 0x0a, 0x0f, 0x46, 0x69,
+	0x6e, 0x64, 0x52, 0x75, 0x65, 0x63, 0x6b, 0x66, 0x72, 0x61, 0x67, 0x65, 0x6e, 0x12, 0x3e, 0x2e,
+	0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x6e, 0x61, 0x63, 0x68,
+	0x72, 0x69, 0x63, 0x68, 0x74, 0x65, 0x6e, 0x2e, 0x61, 0x6e, 0x74, 0x72, 0x61, 0x67, 0x72, 0x61,
+	0x75, 0x6d, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x75, 0x65, 0x63, 0x6b,
+	0x66, 0x72, 0x61, 0x67, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e,
+	0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x6e, 0x61, 0x63, 0x68,
+	0x72, 0x69, 0x63, 0x68, 0x74, 0x65, 0x6e, 0x2e, 0x61, 0x6e, 0x74, 0x72, 0x61, 0x67, 0x72, 0x61,
+	0x75, 0x6d, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x75, 0x65, 0x63, 0x6b,
+	0x66, 0x72, 0x61, 0x67, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa1,
+	0x01, 0x0a, 0x14, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x75, 0x65, 0x63, 0x6b, 0x66, 0x72, 0x61, 0x67,
+	0x65, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x12, 0x43, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67,
+	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68, 0x74, 0x65,
+	0x6e, 0x2e, 0x61, 0x6e, 0x74, 0x72, 0x61, 0x67, 0x72, 0x61, 0x75, 0x6d, 0x2e, 0x47, 0x72, 0x70,
+	0x63, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x75, 0x65, 0x63, 0x6b, 0x66, 0x72, 0x61, 0x67, 0x65, 0x41,
+	0x6e, 0x73, 0x77, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x44, 0x2e, 0x64,
+	0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x6e, 0x61, 0x63, 0x68, 0x72,
+	0x69, 0x63, 0x68, 0x74, 0x65, 0x6e, 0x2e, 0x61, 0x6e, 0x74, 0x72, 0x61, 0x67, 0x72, 0x61, 0x75,
+	0x6d, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x75, 0x65, 0x63, 0x6b, 0x66,
+	0x72, 0x61, 0x67, 0x65, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52, 0x75, 0x65, 0x63, 0x6b, 0x66,
+	0x72, 0x61, 0x67, 0x65, 0x12, 0x3c, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f,
+	0x75, 0x64, 0x2e, 0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68, 0x74, 0x65, 0x6e, 0x2e, 0x61,
+	0x6e, 0x74, 0x72, 0x61, 0x67, 0x72, 0x61, 0x75, 0x6d, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x47, 0x65,
+	0x74, 0x52, 0x75, 0x65, 0x63, 0x6b, 0x66, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64,
+	0x2e, 0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68, 0x74, 0x65, 0x6e, 0x2e, 0x61, 0x6e, 0x74,
+	0x72, 0x61, 0x67, 0x72, 0x61, 0x75, 0x6d, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x47, 0x65, 0x74, 0x52,
+	0x75, 0x65, 0x63, 0x6b, 0x66, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x42, 0x24, 0x5a, 0x22, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64,
+	0x2e, 0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68, 0x74, 0x65, 0x6e, 0x2e, 0x61, 0x6e, 0x74,
+	0x72, 0x61, 0x67, 0x72, 0x61, 0x75, 0x6d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var file_antragraum_proto_goTypes = []any{
+	(*GrpcFindRueckfragenRequest)(nil),       // 0: de.ozgcloud.nachrichten.antragraum.GrpcFindRueckfragenRequest
+	(*GrpcSendRueckfrageAnswerRequest)(nil),  // 1: de.ozgcloud.nachrichten.antragraum.GrpcSendRueckfrageAnswerRequest
+	(*GrpcGetRueckfrageRequest)(nil),         // 2: de.ozgcloud.nachrichten.antragraum.GrpcGetRueckfrageRequest
+	(*GrpcFindRueckfragenResponse)(nil),      // 3: de.ozgcloud.nachrichten.antragraum.GrpcFindRueckfragenResponse
+	(*GrpcSendRueckfrageAnswerResponse)(nil), // 4: de.ozgcloud.nachrichten.antragraum.GrpcSendRueckfrageAnswerResponse
+	(*GrpcGetRueckfrageResponse)(nil),        // 5: de.ozgcloud.nachrichten.antragraum.GrpcGetRueckfrageResponse
+}
+var file_antragraum_proto_depIdxs = []int32{
+	0, // 0: de.ozgcloud.nachrichten.antragraum.AntragraumService.FindRueckfragen:input_type -> de.ozgcloud.nachrichten.antragraum.GrpcFindRueckfragenRequest
+	1, // 1: de.ozgcloud.nachrichten.antragraum.AntragraumService.SendRueckfrageAnswer:input_type -> de.ozgcloud.nachrichten.antragraum.GrpcSendRueckfrageAnswerRequest
+	2, // 2: de.ozgcloud.nachrichten.antragraum.AntragraumService.GetRueckfrage:input_type -> de.ozgcloud.nachrichten.antragraum.GrpcGetRueckfrageRequest
+	3, // 3: de.ozgcloud.nachrichten.antragraum.AntragraumService.FindRueckfragen:output_type -> de.ozgcloud.nachrichten.antragraum.GrpcFindRueckfragenResponse
+	4, // 4: de.ozgcloud.nachrichten.antragraum.AntragraumService.SendRueckfrageAnswer:output_type -> de.ozgcloud.nachrichten.antragraum.GrpcSendRueckfrageAnswerResponse
+	5, // 5: de.ozgcloud.nachrichten.antragraum.AntragraumService.GetRueckfrage:output_type -> de.ozgcloud.nachrichten.antragraum.GrpcGetRueckfrageResponse
+	3, // [3:6] is the sub-list for method output_type
+	0, // [0:3] is the sub-list for method input_type
+	0, // [0:0] is the sub-list for extension type_name
+	0, // [0:0] is the sub-list for extension extendee
+	0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_antragraum_proto_init() }
+func file_antragraum_proto_init() {
+	if File_antragraum_proto != nil {
+		return
+	}
+	file_antragraum_model_proto_init()
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_antragraum_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   0,
+			NumExtensions: 0,
+			NumServices:   1,
+		},
+		GoTypes:           file_antragraum_proto_goTypes,
+		DependencyIndexes: file_antragraum_proto_depIdxs,
+	}.Build()
+	File_antragraum_proto = out.File
+	file_antragraum_proto_rawDesc = nil
+	file_antragraum_proto_goTypes = nil
+	file_antragraum_proto_depIdxs = nil
+}
diff --git a/gen/go/antragraum.pb.gw.go b/gen/go/antragraum.pb.gw.go
new file mode 100644
index 0000000000000000000000000000000000000000..14e29f802f283194ceab2c508aa3edc8cad78ca6
--- /dev/null
+++ b/gen/go/antragraum.pb.gw.go
@@ -0,0 +1,409 @@
+// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
+// source: antragraum.proto
+
+/*
+Package de_ozgcloud_nachrichten_antragraum is a reverse proxy.
+
+It translates gRPC into RESTful JSON APIs.
+*/
+package de_ozgcloud_nachrichten_antragraum
+
+import (
+	"context"
+	"io"
+	"net/http"
+
+	"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
+	"github.com/grpc-ecosystem/grpc-gateway/v2/utilities"
+	"google.golang.org/grpc"
+	"google.golang.org/grpc/codes"
+	"google.golang.org/grpc/grpclog"
+	"google.golang.org/grpc/metadata"
+	"google.golang.org/grpc/status"
+	"google.golang.org/protobuf/proto"
+)
+
+// Suppress "imported and not used" errors
+var _ codes.Code
+var _ io.Reader
+var _ status.Status
+var _ = runtime.String
+var _ = utilities.NewDoubleArray
+var _ = metadata.Join
+
+func request_AntragraumService_FindRueckfragen_0(ctx context.Context, marshaler runtime.Marshaler, client AntragraumServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq GrpcFindRueckfragenRequest
+	var metadata runtime.ServerMetadata
+
+	var (
+		val string
+		ok  bool
+		err error
+		_   = err
+	)
+
+	val, ok = pathParams["postfachId"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "postfachId")
+	}
+
+	protoReq.PostfachId, err = runtime.String(val)
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "postfachId", err)
+	}
+
+	val, ok = pathParams["samlToken"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "samlToken")
+	}
+
+	protoReq.SamlToken, err = runtime.String(val)
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "samlToken", err)
+	}
+
+	msg, err := client.FindRueckfragen(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_AntragraumService_FindRueckfragen_0(ctx context.Context, marshaler runtime.Marshaler, server AntragraumServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq GrpcFindRueckfragenRequest
+	var metadata runtime.ServerMetadata
+
+	var (
+		val string
+		ok  bool
+		err error
+		_   = err
+	)
+
+	val, ok = pathParams["postfachId"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "postfachId")
+	}
+
+	protoReq.PostfachId, err = runtime.String(val)
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "postfachId", err)
+	}
+
+	val, ok = pathParams["samlToken"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "samlToken")
+	}
+
+	protoReq.SamlToken, err = runtime.String(val)
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "samlToken", err)
+	}
+
+	msg, err := server.FindRueckfragen(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
+func request_AntragraumService_SendRueckfrageAnswer_0(ctx context.Context, marshaler runtime.Marshaler, client AntragraumServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq GrpcSendRueckfrageAnswerRequest
+	var metadata runtime.ServerMetadata
+
+	if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	msg, err := client.SendRueckfrageAnswer(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_AntragraumService_SendRueckfrageAnswer_0(ctx context.Context, marshaler runtime.Marshaler, server AntragraumServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq GrpcSendRueckfrageAnswerRequest
+	var metadata runtime.ServerMetadata
+
+	if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	msg, err := server.SendRueckfrageAnswer(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
+func request_AntragraumService_GetRueckfrage_0(ctx context.Context, marshaler runtime.Marshaler, client AntragraumServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq GrpcGetRueckfrageRequest
+	var metadata runtime.ServerMetadata
+
+	var (
+		val string
+		ok  bool
+		err error
+		_   = err
+	)
+
+	val, ok = pathParams["id"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id")
+	}
+
+	protoReq.Id, err = runtime.String(val)
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err)
+	}
+
+	val, ok = pathParams["samlToken"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "samlToken")
+	}
+
+	protoReq.SamlToken, err = runtime.String(val)
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "samlToken", err)
+	}
+
+	msg, err := client.GetRueckfrage(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_AntragraumService_GetRueckfrage_0(ctx context.Context, marshaler runtime.Marshaler, server AntragraumServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq GrpcGetRueckfrageRequest
+	var metadata runtime.ServerMetadata
+
+	var (
+		val string
+		ok  bool
+		err error
+		_   = err
+	)
+
+	val, ok = pathParams["id"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id")
+	}
+
+	protoReq.Id, err = runtime.String(val)
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err)
+	}
+
+	val, ok = pathParams["samlToken"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "samlToken")
+	}
+
+	protoReq.SamlToken, err = runtime.String(val)
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "samlToken", err)
+	}
+
+	msg, err := server.GetRueckfrage(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
+// RegisterAntragraumServiceHandlerServer registers the http handlers for service AntragraumService to "mux".
+// UnaryRPC     :call AntragraumServiceServer directly.
+// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
+// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAntragraumServiceHandlerFromEndpoint instead.
+func RegisterAntragraumServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AntragraumServiceServer) error {
+
+	mux.Handle("GET", pattern_AntragraumService_FindRueckfragen_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		var stream runtime.ServerTransportStream
+		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		var err error
+		var annotatedContext context.Context
+		annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/de.ozgcloud.nachrichten.antragraum.AntragraumService/FindRueckfragen", runtime.WithHTTPPathPattern("/api/rueckfragen/{postfachId}/{samlToken}"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := local_request_AntragraumService_FindRueckfragen_0(annotatedContext, inboundMarshaler, server, req, pathParams)
+		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
+		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+		if err != nil {
+			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_AntragraumService_FindRueckfragen_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("POST", pattern_AntragraumService_SendRueckfrageAnswer_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		var stream runtime.ServerTransportStream
+		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		var err error
+		var annotatedContext context.Context
+		annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/de.ozgcloud.nachrichten.antragraum.AntragraumService/SendRueckfrageAnswer", runtime.WithHTTPPathPattern("/api/antworten"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := local_request_AntragraumService_SendRueckfrageAnswer_0(annotatedContext, inboundMarshaler, server, req, pathParams)
+		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
+		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+		if err != nil {
+			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_AntragraumService_SendRueckfrageAnswer_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("GET", pattern_AntragraumService_GetRueckfrage_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		var stream runtime.ServerTransportStream
+		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		var err error
+		var annotatedContext context.Context
+		annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/de.ozgcloud.nachrichten.antragraum.AntragraumService/GetRueckfrage", runtime.WithHTTPPathPattern("/api/rueckfrage/{id}/{samlToken}"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := local_request_AntragraumService_GetRueckfrage_0(annotatedContext, inboundMarshaler, server, req, pathParams)
+		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
+		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+		if err != nil {
+			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_AntragraumService_GetRueckfrage_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	return nil
+}
+
+// RegisterAntragraumServiceHandlerFromEndpoint is same as RegisterAntragraumServiceHandler but
+// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
+func RegisterAntragraumServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
+	conn, err := grpc.NewClient(endpoint, opts...)
+	if err != nil {
+		return err
+	}
+	defer func() {
+		if err != nil {
+			if cerr := conn.Close(); cerr != nil {
+				grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr)
+			}
+			return
+		}
+		go func() {
+			<-ctx.Done()
+			if cerr := conn.Close(); cerr != nil {
+				grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr)
+			}
+		}()
+	}()
+
+	return RegisterAntragraumServiceHandler(ctx, mux, conn)
+}
+
+// RegisterAntragraumServiceHandler registers the http handlers for service AntragraumService to "mux".
+// The handlers forward requests to the grpc endpoint over "conn".
+func RegisterAntragraumServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
+	return RegisterAntragraumServiceHandlerClient(ctx, mux, NewAntragraumServiceClient(conn))
+}
+
+// RegisterAntragraumServiceHandlerClient registers the http handlers for service AntragraumService
+// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "AntragraumServiceClient".
+// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "AntragraumServiceClient"
+// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
+// "AntragraumServiceClient" to call the correct interceptors.
+func RegisterAntragraumServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AntragraumServiceClient) error {
+
+	mux.Handle("GET", pattern_AntragraumService_FindRueckfragen_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		var err error
+		var annotatedContext context.Context
+		annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/de.ozgcloud.nachrichten.antragraum.AntragraumService/FindRueckfragen", runtime.WithHTTPPathPattern("/api/rueckfragen/{postfachId}/{samlToken}"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := request_AntragraumService_FindRueckfragen_0(annotatedContext, inboundMarshaler, client, req, pathParams)
+		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+		if err != nil {
+			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_AntragraumService_FindRueckfragen_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("POST", pattern_AntragraumService_SendRueckfrageAnswer_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		var err error
+		var annotatedContext context.Context
+		annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/de.ozgcloud.nachrichten.antragraum.AntragraumService/SendRueckfrageAnswer", runtime.WithHTTPPathPattern("/api/antworten"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := request_AntragraumService_SendRueckfrageAnswer_0(annotatedContext, inboundMarshaler, client, req, pathParams)
+		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+		if err != nil {
+			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_AntragraumService_SendRueckfrageAnswer_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("GET", pattern_AntragraumService_GetRueckfrage_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		var err error
+		var annotatedContext context.Context
+		annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/de.ozgcloud.nachrichten.antragraum.AntragraumService/GetRueckfrage", runtime.WithHTTPPathPattern("/api/rueckfrage/{id}/{samlToken}"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := request_AntragraumService_GetRueckfrage_0(annotatedContext, inboundMarshaler, client, req, pathParams)
+		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+		if err != nil {
+			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_AntragraumService_GetRueckfrage_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	return nil
+}
+
+var (
+	pattern_AntragraumService_FindRueckfragen_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3}, []string{"api", "rueckfragen", "postfachId", "samlToken"}, ""))
+
+	pattern_AntragraumService_SendRueckfrageAnswer_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"api", "antworten"}, ""))
+
+	pattern_AntragraumService_GetRueckfrage_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3}, []string{"api", "rueckfrage", "id", "samlToken"}, ""))
+)
+
+var (
+	forward_AntragraumService_FindRueckfragen_0 = runtime.ForwardResponseMessage
+
+	forward_AntragraumService_SendRueckfrageAnswer_0 = runtime.ForwardResponseMessage
+
+	forward_AntragraumService_GetRueckfrage_0 = runtime.ForwardResponseMessage
+)
diff --git a/gen/go/antragraum_grpc.pb.go b/gen/go/antragraum_grpc.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..ead6957e6a567c09363d2e9a5b75102af9334038
--- /dev/null
+++ b/gen/go/antragraum_grpc.pb.go
@@ -0,0 +1,209 @@
+//
+// Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
+// Ministerpräsidenten des Landes Schleswig-Holstein
+// Staatskanzlei
+// Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+//
+// Lizenziert unter der EUPL, Version 1.2 oder - sobald
+// diese von der Europäischen Kommission genehmigt wurden -
+// Folgeversionen der EUPL ("Lizenz");
+// Sie dürfen dieses Werk ausschließlich gemäß
+// dieser Lizenz nutzen.
+// Eine Kopie der Lizenz finden Sie hier:
+//
+// https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+//
+// Sofern nicht durch anwendbare Rechtsvorschriften
+// gefordert oder in schriftlicher Form vereinbart, wird
+// die unter der Lizenz verbreitete Software "so wie sie
+// ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+// ausdrücklich oder stillschweigend - verbreitet.
+// Die sprachspezifischen Genehmigungen und Beschränkungen
+// unter der Lizenz sind dem Lizenztext zu entnehmen.
+
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.4.0
+// - protoc             (unknown)
+// source: antragraum.proto
+
+package de_ozgcloud_nachrichten_antragraum
+
+import (
+	context "context"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.62.0 or later.
+const _ = grpc.SupportPackageIsVersion8
+
+const (
+	AntragraumService_FindRueckfragen_FullMethodName      = "/de.ozgcloud.nachrichten.antragraum.AntragraumService/FindRueckfragen"
+	AntragraumService_SendRueckfrageAnswer_FullMethodName = "/de.ozgcloud.nachrichten.antragraum.AntragraumService/SendRueckfrageAnswer"
+	AntragraumService_GetRueckfrage_FullMethodName        = "/de.ozgcloud.nachrichten.antragraum.AntragraumService/GetRueckfrage"
+)
+
+// AntragraumServiceClient is the client API for AntragraumService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type AntragraumServiceClient interface {
+	FindRueckfragen(ctx context.Context, in *GrpcFindRueckfragenRequest, opts ...grpc.CallOption) (*GrpcFindRueckfragenResponse, error)
+	SendRueckfrageAnswer(ctx context.Context, in *GrpcSendRueckfrageAnswerRequest, opts ...grpc.CallOption) (*GrpcSendRueckfrageAnswerResponse, error)
+	GetRueckfrage(ctx context.Context, in *GrpcGetRueckfrageRequest, opts ...grpc.CallOption) (*GrpcGetRueckfrageResponse, error)
+}
+
+type antragraumServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewAntragraumServiceClient(cc grpc.ClientConnInterface) AntragraumServiceClient {
+	return &antragraumServiceClient{cc}
+}
+
+func (c *antragraumServiceClient) FindRueckfragen(ctx context.Context, in *GrpcFindRueckfragenRequest, opts ...grpc.CallOption) (*GrpcFindRueckfragenResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+	out := new(GrpcFindRueckfragenResponse)
+	err := c.cc.Invoke(ctx, AntragraumService_FindRueckfragen_FullMethodName, in, out, cOpts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *antragraumServiceClient) SendRueckfrageAnswer(ctx context.Context, in *GrpcSendRueckfrageAnswerRequest, opts ...grpc.CallOption) (*GrpcSendRueckfrageAnswerResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+	out := new(GrpcSendRueckfrageAnswerResponse)
+	err := c.cc.Invoke(ctx, AntragraumService_SendRueckfrageAnswer_FullMethodName, in, out, cOpts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *antragraumServiceClient) GetRueckfrage(ctx context.Context, in *GrpcGetRueckfrageRequest, opts ...grpc.CallOption) (*GrpcGetRueckfrageResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+	out := new(GrpcGetRueckfrageResponse)
+	err := c.cc.Invoke(ctx, AntragraumService_GetRueckfrage_FullMethodName, in, out, cOpts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AntragraumServiceServer is the server API for AntragraumService service.
+// All implementations must embed UnimplementedAntragraumServiceServer
+// for forward compatibility
+type AntragraumServiceServer interface {
+	FindRueckfragen(context.Context, *GrpcFindRueckfragenRequest) (*GrpcFindRueckfragenResponse, error)
+	SendRueckfrageAnswer(context.Context, *GrpcSendRueckfrageAnswerRequest) (*GrpcSendRueckfrageAnswerResponse, error)
+	GetRueckfrage(context.Context, *GrpcGetRueckfrageRequest) (*GrpcGetRueckfrageResponse, error)
+	mustEmbedUnimplementedAntragraumServiceServer()
+}
+
+// UnimplementedAntragraumServiceServer must be embedded to have forward compatible implementations.
+type UnimplementedAntragraumServiceServer struct {
+}
+
+func (UnimplementedAntragraumServiceServer) FindRueckfragen(context.Context, *GrpcFindRueckfragenRequest) (*GrpcFindRueckfragenResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method FindRueckfragen not implemented")
+}
+func (UnimplementedAntragraumServiceServer) SendRueckfrageAnswer(context.Context, *GrpcSendRueckfrageAnswerRequest) (*GrpcSendRueckfrageAnswerResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SendRueckfrageAnswer not implemented")
+}
+func (UnimplementedAntragraumServiceServer) GetRueckfrage(context.Context, *GrpcGetRueckfrageRequest) (*GrpcGetRueckfrageResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetRueckfrage not implemented")
+}
+func (UnimplementedAntragraumServiceServer) mustEmbedUnimplementedAntragraumServiceServer() {}
+
+// UnsafeAntragraumServiceServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to AntragraumServiceServer will
+// result in compilation errors.
+type UnsafeAntragraumServiceServer interface {
+	mustEmbedUnimplementedAntragraumServiceServer()
+}
+
+func RegisterAntragraumServiceServer(s grpc.ServiceRegistrar, srv AntragraumServiceServer) {
+	s.RegisterService(&AntragraumService_ServiceDesc, srv)
+}
+
+func _AntragraumService_FindRueckfragen_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GrpcFindRueckfragenRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AntragraumServiceServer).FindRueckfragen(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: AntragraumService_FindRueckfragen_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AntragraumServiceServer).FindRueckfragen(ctx, req.(*GrpcFindRueckfragenRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _AntragraumService_SendRueckfrageAnswer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GrpcSendRueckfrageAnswerRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AntragraumServiceServer).SendRueckfrageAnswer(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: AntragraumService_SendRueckfrageAnswer_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AntragraumServiceServer).SendRueckfrageAnswer(ctx, req.(*GrpcSendRueckfrageAnswerRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _AntragraumService_GetRueckfrage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GrpcGetRueckfrageRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AntragraumServiceServer).GetRueckfrage(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: AntragraumService_GetRueckfrage_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AntragraumServiceServer).GetRueckfrage(ctx, req.(*GrpcGetRueckfrageRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+// AntragraumService_ServiceDesc is the grpc.ServiceDesc for AntragraumService service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var AntragraumService_ServiceDesc = grpc.ServiceDesc{
+	ServiceName: "de.ozgcloud.nachrichten.antragraum.AntragraumService",
+	HandlerType: (*AntragraumServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "FindRueckfragen",
+			Handler:    _AntragraumService_FindRueckfragen_Handler,
+		},
+		{
+			MethodName: "SendRueckfrageAnswer",
+			Handler:    _AntragraumService_SendRueckfrageAnswer_Handler,
+		},
+		{
+			MethodName: "GetRueckfrage",
+			Handler:    _AntragraumService_GetRueckfrage_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "antragraum.proto",
+}
diff --git a/gen/go/binaryfile.pb.go b/gen/go/binaryfile.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..20b4d92108452880b4d93974fad5cdda81b52129
--- /dev/null
+++ b/gen/go/binaryfile.pb.go
@@ -0,0 +1,1209 @@
+//
+// Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+// Ministerpräsidenten des Landes Schleswig-Holstein
+// Staatskanzlei
+// Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+//
+// Lizenziert unter der EUPL, Version 1.2 oder - sobald
+// diese von der Europäischen Kommission genehmigt wurden -
+// Folgeversionen der EUPL ("Lizenz");
+// Sie dürfen dieses Werk ausschließlich gemäß
+// dieser Lizenz nutzen.
+// Eine Kopie der Lizenz finden Sie hier:
+//
+// https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+//
+// Sofern nicht durch anwendbare Rechtsvorschriften
+// gefordert oder in schriftlicher Form vereinbart, wird
+// die unter der Lizenz verbreitete Software "so wie sie
+// ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+// ausdrücklich oder stillschweigend - verbreitet.
+// Die sprachspezifischen Genehmigungen und Beschränkungen
+// unter der Lizenz sind dem Lizenztext zu entnehmen.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.34.2
+// 	protoc        (unknown)
+// source: binaryfile.proto
+
+package de_ozgcloud_vorgang_grpc_binaryFile
+
+import (
+	de_ozgcloud_vorgang_grpc_command "de.ozgcloud.vorgang.grpc.command"
+	de_ozgcloud_vorgang_grpc_file "de.ozgcloud.vorgang.grpc.file"
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type GrpcBinaryFilesRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Context *de_ozgcloud_vorgang_grpc_command.GrpcCallContext `protobuf:"bytes,1,opt,name=context,proto3" json:"context,omitempty"`
+	FileId  []string                                          `protobuf:"bytes,2,rep,name=fileId,proto3" json:"fileId,omitempty"`
+}
+
+func (x *GrpcBinaryFilesRequest) Reset() {
+	*x = GrpcBinaryFilesRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_binaryfile_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcBinaryFilesRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcBinaryFilesRequest) ProtoMessage() {}
+
+func (x *GrpcBinaryFilesRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_binaryfile_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcBinaryFilesRequest.ProtoReflect.Descriptor instead.
+func (*GrpcBinaryFilesRequest) Descriptor() ([]byte, []int) {
+	return file_binaryfile_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *GrpcBinaryFilesRequest) GetContext() *de_ozgcloud_vorgang_grpc_command.GrpcCallContext {
+	if x != nil {
+		return x.Context
+	}
+	return nil
+}
+
+func (x *GrpcBinaryFilesRequest) GetFileId() []string {
+	if x != nil {
+		return x.FileId
+	}
+	return nil
+}
+
+type GrpcFindFilesResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	File []*de_ozgcloud_vorgang_grpc_file.GrpcOzgFile `protobuf:"bytes,1,rep,name=file,proto3" json:"file,omitempty"`
+}
+
+func (x *GrpcFindFilesResponse) Reset() {
+	*x = GrpcFindFilesResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_binaryfile_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcFindFilesResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcFindFilesResponse) ProtoMessage() {}
+
+func (x *GrpcFindFilesResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_binaryfile_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcFindFilesResponse.ProtoReflect.Descriptor instead.
+func (*GrpcFindFilesResponse) Descriptor() ([]byte, []int) {
+	return file_binaryfile_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *GrpcFindFilesResponse) GetFile() []*de_ozgcloud_vorgang_grpc_file.GrpcOzgFile {
+	if x != nil {
+		return x.File
+	}
+	return nil
+}
+
+type GrpcBinaryFileDataRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Context *de_ozgcloud_vorgang_grpc_command.GrpcCallContext `protobuf:"bytes,1,opt,name=context,proto3" json:"context,omitempty"`
+	FileId  string                                            `protobuf:"bytes,2,opt,name=fileId,proto3" json:"fileId,omitempty"`
+}
+
+func (x *GrpcBinaryFileDataRequest) Reset() {
+	*x = GrpcBinaryFileDataRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_binaryfile_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcBinaryFileDataRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcBinaryFileDataRequest) ProtoMessage() {}
+
+func (x *GrpcBinaryFileDataRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_binaryfile_proto_msgTypes[2]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcBinaryFileDataRequest.ProtoReflect.Descriptor instead.
+func (*GrpcBinaryFileDataRequest) Descriptor() ([]byte, []int) {
+	return file_binaryfile_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *GrpcBinaryFileDataRequest) GetContext() *de_ozgcloud_vorgang_grpc_command.GrpcCallContext {
+	if x != nil {
+		return x.Context
+	}
+	return nil
+}
+
+func (x *GrpcBinaryFileDataRequest) GetFileId() string {
+	if x != nil {
+		return x.FileId
+	}
+	return ""
+}
+
+type GrpcUploadBinaryFileRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Types that are assignable to Request:
+	//
+	//	*GrpcUploadBinaryFileRequest_Metadata
+	//	*GrpcUploadBinaryFileRequest_FileContent
+	Request isGrpcUploadBinaryFileRequest_Request `protobuf_oneof:"request"`
+}
+
+func (x *GrpcUploadBinaryFileRequest) Reset() {
+	*x = GrpcUploadBinaryFileRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_binaryfile_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcUploadBinaryFileRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcUploadBinaryFileRequest) ProtoMessage() {}
+
+func (x *GrpcUploadBinaryFileRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_binaryfile_proto_msgTypes[3]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcUploadBinaryFileRequest.ProtoReflect.Descriptor instead.
+func (*GrpcUploadBinaryFileRequest) Descriptor() ([]byte, []int) {
+	return file_binaryfile_proto_rawDescGZIP(), []int{3}
+}
+
+func (m *GrpcUploadBinaryFileRequest) GetRequest() isGrpcUploadBinaryFileRequest_Request {
+	if m != nil {
+		return m.Request
+	}
+	return nil
+}
+
+func (x *GrpcUploadBinaryFileRequest) GetMetadata() *GrpcUploadBinaryFileMetaData {
+	if x, ok := x.GetRequest().(*GrpcUploadBinaryFileRequest_Metadata); ok {
+		return x.Metadata
+	}
+	return nil
+}
+
+func (x *GrpcUploadBinaryFileRequest) GetFileContent() []byte {
+	if x, ok := x.GetRequest().(*GrpcUploadBinaryFileRequest_FileContent); ok {
+		return x.FileContent
+	}
+	return nil
+}
+
+type isGrpcUploadBinaryFileRequest_Request interface {
+	isGrpcUploadBinaryFileRequest_Request()
+}
+
+type GrpcUploadBinaryFileRequest_Metadata struct {
+	Metadata *GrpcUploadBinaryFileMetaData `protobuf:"bytes,1,opt,name=metadata,proto3,oneof"`
+}
+
+type GrpcUploadBinaryFileRequest_FileContent struct {
+	FileContent []byte `protobuf:"bytes,2,opt,name=fileContent,proto3,oneof"`
+}
+
+func (*GrpcUploadBinaryFileRequest_Metadata) isGrpcUploadBinaryFileRequest_Request() {}
+
+func (*GrpcUploadBinaryFileRequest_FileContent) isGrpcUploadBinaryFileRequest_Request() {}
+
+type GrpcUploadBinaryFileMetaData struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Context     *de_ozgcloud_vorgang_grpc_command.GrpcCallContext `protobuf:"bytes,1,opt,name=context,proto3" json:"context,omitempty"`
+	VorgangId   string                                            `protobuf:"bytes,2,opt,name=vorgangId,proto3" json:"vorgangId,omitempty"`
+	Field       string                                            `protobuf:"bytes,3,opt,name=field,proto3" json:"field,omitempty"`
+	FileName    string                                            `protobuf:"bytes,4,opt,name=fileName,proto3" json:"fileName,omitempty"`
+	ContentType string                                            `protobuf:"bytes,5,opt,name=contentType,proto3" json:"contentType,omitempty"`
+	// Deprecated: Marked as deprecated in binaryfile.proto.
+	Size int64 `protobuf:"varint,6,opt,name=size,proto3" json:"size,omitempty"`
+}
+
+func (x *GrpcUploadBinaryFileMetaData) Reset() {
+	*x = GrpcUploadBinaryFileMetaData{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_binaryfile_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcUploadBinaryFileMetaData) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcUploadBinaryFileMetaData) ProtoMessage() {}
+
+func (x *GrpcUploadBinaryFileMetaData) ProtoReflect() protoreflect.Message {
+	mi := &file_binaryfile_proto_msgTypes[4]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcUploadBinaryFileMetaData.ProtoReflect.Descriptor instead.
+func (*GrpcUploadBinaryFileMetaData) Descriptor() ([]byte, []int) {
+	return file_binaryfile_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *GrpcUploadBinaryFileMetaData) GetContext() *de_ozgcloud_vorgang_grpc_command.GrpcCallContext {
+	if x != nil {
+		return x.Context
+	}
+	return nil
+}
+
+func (x *GrpcUploadBinaryFileMetaData) GetVorgangId() string {
+	if x != nil {
+		return x.VorgangId
+	}
+	return ""
+}
+
+func (x *GrpcUploadBinaryFileMetaData) GetField() string {
+	if x != nil {
+		return x.Field
+	}
+	return ""
+}
+
+func (x *GrpcUploadBinaryFileMetaData) GetFileName() string {
+	if x != nil {
+		return x.FileName
+	}
+	return ""
+}
+
+func (x *GrpcUploadBinaryFileMetaData) GetContentType() string {
+	if x != nil {
+		return x.ContentType
+	}
+	return ""
+}
+
+// Deprecated: Marked as deprecated in binaryfile.proto.
+func (x *GrpcUploadBinaryFileMetaData) GetSize() int64 {
+	if x != nil {
+		return x.Size
+	}
+	return 0
+}
+
+type GrpcUploadBinaryFileResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	FileId string `protobuf:"bytes,2,opt,name=fileId,proto3" json:"fileId,omitempty"`
+}
+
+func (x *GrpcUploadBinaryFileResponse) Reset() {
+	*x = GrpcUploadBinaryFileResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_binaryfile_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcUploadBinaryFileResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcUploadBinaryFileResponse) ProtoMessage() {}
+
+func (x *GrpcUploadBinaryFileResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_binaryfile_proto_msgTypes[5]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcUploadBinaryFileResponse.ProtoReflect.Descriptor instead.
+func (*GrpcUploadBinaryFileResponse) Descriptor() ([]byte, []int) {
+	return file_binaryfile_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *GrpcUploadBinaryFileResponse) GetFileId() string {
+	if x != nil {
+		return x.FileId
+	}
+	return ""
+}
+
+type GrpcGetBinaryFileDataRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Context *de_ozgcloud_vorgang_grpc_command.GrpcCallContext `protobuf:"bytes,1,opt,name=context,proto3" json:"context,omitempty"`
+	FileId  string                                            `protobuf:"bytes,2,opt,name=fileId,proto3" json:"fileId,omitempty"`
+}
+
+func (x *GrpcGetBinaryFileDataRequest) Reset() {
+	*x = GrpcGetBinaryFileDataRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_binaryfile_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcGetBinaryFileDataRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcGetBinaryFileDataRequest) ProtoMessage() {}
+
+func (x *GrpcGetBinaryFileDataRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_binaryfile_proto_msgTypes[6]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcGetBinaryFileDataRequest.ProtoReflect.Descriptor instead.
+func (*GrpcGetBinaryFileDataRequest) Descriptor() ([]byte, []int) {
+	return file_binaryfile_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *GrpcGetBinaryFileDataRequest) GetContext() *de_ozgcloud_vorgang_grpc_command.GrpcCallContext {
+	if x != nil {
+		return x.Context
+	}
+	return nil
+}
+
+func (x *GrpcGetBinaryFileDataRequest) GetFileId() string {
+	if x != nil {
+		return x.FileId
+	}
+	return ""
+}
+
+type GrpcGetBinaryFileDataResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	FileContent []byte `protobuf:"bytes,1,opt,name=fileContent,proto3" json:"fileContent,omitempty"`
+}
+
+func (x *GrpcGetBinaryFileDataResponse) Reset() {
+	*x = GrpcGetBinaryFileDataResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_binaryfile_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcGetBinaryFileDataResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcGetBinaryFileDataResponse) ProtoMessage() {}
+
+func (x *GrpcGetBinaryFileDataResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_binaryfile_proto_msgTypes[7]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcGetBinaryFileDataResponse.ProtoReflect.Descriptor instead.
+func (*GrpcGetBinaryFileDataResponse) Descriptor() ([]byte, []int) {
+	return file_binaryfile_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *GrpcGetBinaryFileDataResponse) GetFileContent() []byte {
+	if x != nil {
+		return x.FileContent
+	}
+	return nil
+}
+
+type GrpcGetAttachmentsRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Context   *de_ozgcloud_vorgang_grpc_command.GrpcCallContext `protobuf:"bytes,1,opt,name=context,proto3" json:"context,omitempty"`
+	EingangId string                                            `protobuf:"bytes,2,opt,name=eingangId,proto3" json:"eingangId,omitempty"`
+}
+
+func (x *GrpcGetAttachmentsRequest) Reset() {
+	*x = GrpcGetAttachmentsRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_binaryfile_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcGetAttachmentsRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcGetAttachmentsRequest) ProtoMessage() {}
+
+func (x *GrpcGetAttachmentsRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_binaryfile_proto_msgTypes[8]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcGetAttachmentsRequest.ProtoReflect.Descriptor instead.
+func (*GrpcGetAttachmentsRequest) Descriptor() ([]byte, []int) {
+	return file_binaryfile_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *GrpcGetAttachmentsRequest) GetContext() *de_ozgcloud_vorgang_grpc_command.GrpcCallContext {
+	if x != nil {
+		return x.Context
+	}
+	return nil
+}
+
+func (x *GrpcGetAttachmentsRequest) GetEingangId() string {
+	if x != nil {
+		return x.EingangId
+	}
+	return ""
+}
+
+type GrpcGetAttachmentsResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	File []*GrpcBinaryFile `protobuf:"bytes,1,rep,name=file,proto3" json:"file,omitempty"`
+}
+
+func (x *GrpcGetAttachmentsResponse) Reset() {
+	*x = GrpcGetAttachmentsResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_binaryfile_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcGetAttachmentsResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcGetAttachmentsResponse) ProtoMessage() {}
+
+func (x *GrpcGetAttachmentsResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_binaryfile_proto_msgTypes[9]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcGetAttachmentsResponse.ProtoReflect.Descriptor instead.
+func (*GrpcGetAttachmentsResponse) Descriptor() ([]byte, []int) {
+	return file_binaryfile_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *GrpcGetAttachmentsResponse) GetFile() []*GrpcBinaryFile {
+	if x != nil {
+		return x.File
+	}
+	return nil
+}
+
+type GrpcGetRepresentationsRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Context   *de_ozgcloud_vorgang_grpc_command.GrpcCallContext `protobuf:"bytes,1,opt,name=context,proto3" json:"context,omitempty"`
+	EingangId string                                            `protobuf:"bytes,2,opt,name=eingangId,proto3" json:"eingangId,omitempty"`
+}
+
+func (x *GrpcGetRepresentationsRequest) Reset() {
+	*x = GrpcGetRepresentationsRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_binaryfile_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcGetRepresentationsRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcGetRepresentationsRequest) ProtoMessage() {}
+
+func (x *GrpcGetRepresentationsRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_binaryfile_proto_msgTypes[10]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcGetRepresentationsRequest.ProtoReflect.Descriptor instead.
+func (*GrpcGetRepresentationsRequest) Descriptor() ([]byte, []int) {
+	return file_binaryfile_proto_rawDescGZIP(), []int{10}
+}
+
+func (x *GrpcGetRepresentationsRequest) GetContext() *de_ozgcloud_vorgang_grpc_command.GrpcCallContext {
+	if x != nil {
+		return x.Context
+	}
+	return nil
+}
+
+func (x *GrpcGetRepresentationsRequest) GetEingangId() string {
+	if x != nil {
+		return x.EingangId
+	}
+	return ""
+}
+
+type GrpcGetRepresentationsResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	File []*GrpcBinaryFile `protobuf:"bytes,1,rep,name=file,proto3" json:"file,omitempty"`
+}
+
+func (x *GrpcGetRepresentationsResponse) Reset() {
+	*x = GrpcGetRepresentationsResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_binaryfile_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcGetRepresentationsResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcGetRepresentationsResponse) ProtoMessage() {}
+
+func (x *GrpcGetRepresentationsResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_binaryfile_proto_msgTypes[11]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcGetRepresentationsResponse.ProtoReflect.Descriptor instead.
+func (*GrpcGetRepresentationsResponse) Descriptor() ([]byte, []int) {
+	return file_binaryfile_proto_rawDescGZIP(), []int{11}
+}
+
+func (x *GrpcGetRepresentationsResponse) GetFile() []*GrpcBinaryFile {
+	if x != nil {
+		return x.File
+	}
+	return nil
+}
+
+type GrpcBinaryFile struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id          string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	Name        string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	Size        int64  `protobuf:"varint,3,opt,name=size,proto3" json:"size,omitempty"`
+	ContentType string `protobuf:"bytes,4,opt,name=contentType,proto3" json:"contentType,omitempty"`
+}
+
+func (x *GrpcBinaryFile) Reset() {
+	*x = GrpcBinaryFile{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_binaryfile_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcBinaryFile) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcBinaryFile) ProtoMessage() {}
+
+func (x *GrpcBinaryFile) ProtoReflect() protoreflect.Message {
+	mi := &file_binaryfile_proto_msgTypes[12]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcBinaryFile.ProtoReflect.Descriptor instead.
+func (*GrpcBinaryFile) Descriptor() ([]byte, []int) {
+	return file_binaryfile_proto_rawDescGZIP(), []int{12}
+}
+
+func (x *GrpcBinaryFile) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *GrpcBinaryFile) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *GrpcBinaryFile) GetSize() int64 {
+	if x != nil {
+		return x.Size
+	}
+	return 0
+}
+
+func (x *GrpcBinaryFile) GetContentType() string {
+	if x != nil {
+		return x.ContentType
+	}
+	return ""
+}
+
+var File_binaryfile_proto protoreflect.FileDescriptor
+
+var file_binaryfile_proto_rawDesc = []byte{
+	0x0a, 0x10, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x12, 0x23, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
+	0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e,
+	0x61, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x1a, 0x11, 0x63, 0x61, 0x6c, 0x6c, 0x63, 0x6f, 0x6e,
+	0x74, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0f, 0x66, 0x69, 0x6c, 0x65,
+	0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7d, 0x0a, 0x16, 0x47,
+	0x72, 0x70, 0x63, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63,
+	0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70,
+	0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x61,
+	0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+	0x78, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x03,
+	0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x57, 0x0a, 0x15, 0x47, 0x72,
+	0x70, 0x63, 0x46, 0x69, 0x6e, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x2a, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
+	0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x66, 0x69, 0x6c,
+	0x65, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4f, 0x7a, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x04, 0x66,
+	0x69, 0x6c, 0x65, 0x22, 0x80, 0x01, 0x0a, 0x19, 0x47, 0x72, 0x70, 0x63, 0x42, 0x69, 0x6e, 0x61,
+	0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x12, 0x4b, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x31, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64,
+	0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f,
+	0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x61, 0x6c, 0x6c, 0x43, 0x6f,
+	0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x16,
+	0x0a, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+	0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x22, 0xad, 0x01, 0x0a, 0x1b, 0x47, 0x72, 0x70, 0x63, 0x55,
+	0x70, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5f, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
+	0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a,
+	0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67,
+	0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x2e, 0x47,
+	0x72, 0x70, 0x63, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46,
+	0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x08, 0x6d,
+	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x22, 0x0a, 0x0b, 0x66, 0x69, 0x6c, 0x65, 0x43,
+	0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x0b,
+	0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x72,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xf5, 0x01, 0x0a, 0x1c, 0x47, 0x72, 0x70, 0x63, 0x55,
+	0x70, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x4d,
+	0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4b, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+	0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a,
+	0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67,
+	0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63,
+	0x43, 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e,
+	0x74, 0x65, 0x78, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x49,
+	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67,
+	0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65,
+	0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65,
+	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54,
+	0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+	0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06,
+	0x20, 0x01, 0x28, 0x03, 0x42, 0x02, 0x18, 0x01, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x36,
+	0x0a, 0x1c, 0x47, 0x72, 0x70, 0x63, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x69, 0x6e, 0x61,
+	0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16,
+	0x0a, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+	0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x83, 0x01, 0x0a, 0x1c, 0x47, 0x72, 0x70, 0x63, 0x47,
+	0x65, 0x74, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+	0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a,
+	0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67,
+	0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63,
+	0x43, 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e,
+	0x74, 0x65, 0x78, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x41, 0x0a, 0x1d,
+	0x47, 0x72, 0x70, 0x63, 0x47, 0x65, 0x74, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c,
+	0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a,
+	0x0b, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0c, 0x52, 0x0b, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22,
+	0x86, 0x01, 0x0a, 0x19, 0x47, 0x72, 0x70, 0x63, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63,
+	0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a,
+	0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31,
+	0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72,
+	0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
+	0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78,
+	0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x69,
+	0x6e, 0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65,
+	0x69, 0x6e, 0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x22, 0x65, 0x0a, 0x1a, 0x47, 0x72, 0x70, 0x63,
+	0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f,
+	0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,
+	0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x42,
+	0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x22,
+	0x8a, 0x01, 0x0a, 0x1d, 0x47, 0x72, 0x70, 0x63, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x72, 0x65,
+	0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x12, 0x4b, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x31, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64,
+	0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f,
+	0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x61, 0x6c, 0x6c, 0x43, 0x6f,
+	0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1c,
+	0x0a, 0x09, 0x65, 0x69, 0x6e, 0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x09, 0x65, 0x69, 0x6e, 0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x22, 0x69, 0x0a, 0x1e,
+	0x47, 0x72, 0x70, 0x63, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47,
+	0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x64,
+	0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61,
+	0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69,
+	0x6c, 0x65, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c,
+	0x65, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x6a, 0x0a, 0x0e, 0x47, 0x72, 0x70, 0x63, 0x42,
+	0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
+	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a,
+	0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a,
+	0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54,
+	0x79, 0x70, 0x65, 0x32, 0xac, 0x06, 0x0a, 0x11, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69,
+	0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xa3, 0x01, 0x0a, 0x18, 0x55, 0x70,
+	0x6c, 0x6f, 0x61, 0x64, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x41, 0x73,
+	0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x40, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63,
+	0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70,
+	0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x2e, 0x47, 0x72, 0x70,
+	0x63, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c,
+	0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a,
+	0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67,
+	0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x2e, 0x47,
+	0x72, 0x70, 0x63, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46,
+	0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x12,
+	0xa1, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c,
+	0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a,
+	0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67,
+	0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x2e, 0x47,
+	0x72, 0x70, 0x63, 0x47, 0x65, 0x74, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65,
+	0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x64, 0x65,
+	0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e,
+	0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c,
+	0x65, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x47, 0x65, 0x74, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46,
+	0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0x00, 0x30, 0x01, 0x12, 0x94, 0x01, 0x0a, 0x17, 0x46, 0x69, 0x6e, 0x64, 0x42, 0x69, 0x6e, 0x61,
+	0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12,
+	0x3b, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f,
+	0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72,
+	0x79, 0x46, 0x69, 0x6c, 0x65, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79,
+	0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x64,
+	0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61,
+	0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69,
+	0x6c, 0x65, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x46, 0x69, 0x6e, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x93, 0x01, 0x0a, 0x0e, 0x47,
+	0x65, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3e, 0x2e,
+	0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67,
+	0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46,
+	0x69, 0x6c, 0x65, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63,
+	0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e,
+	0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67,
+	0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46,
+	0x69, 0x6c, 0x65, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63,
+	0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+	0x12, 0x9f, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e,
+	0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x42, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67,
+	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72,
+	0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x2e, 0x47, 0x72,
+	0x70, 0x63, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x64, 0x65,
+	0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e,
+	0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c,
+	0x65, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65,
+	0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x00, 0x42, 0x25, 0x5a, 0x23, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75,
+	0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62,
+	0x69, 0x6e, 0x61, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x33,
+}
+
+var (
+	file_binaryfile_proto_rawDescOnce sync.Once
+	file_binaryfile_proto_rawDescData = file_binaryfile_proto_rawDesc
+)
+
+func file_binaryfile_proto_rawDescGZIP() []byte {
+	file_binaryfile_proto_rawDescOnce.Do(func() {
+		file_binaryfile_proto_rawDescData = protoimpl.X.CompressGZIP(file_binaryfile_proto_rawDescData)
+	})
+	return file_binaryfile_proto_rawDescData
+}
+
+var file_binaryfile_proto_msgTypes = make([]protoimpl.MessageInfo, 13)
+var file_binaryfile_proto_goTypes = []any{
+	(*GrpcBinaryFilesRequest)(nil),                           // 0: de.ozgcloud.vorgang.grpc.binaryFile.GrpcBinaryFilesRequest
+	(*GrpcFindFilesResponse)(nil),                            // 1: de.ozgcloud.vorgang.grpc.binaryFile.GrpcFindFilesResponse
+	(*GrpcBinaryFileDataRequest)(nil),                        // 2: de.ozgcloud.vorgang.grpc.binaryFile.GrpcBinaryFileDataRequest
+	(*GrpcUploadBinaryFileRequest)(nil),                      // 3: de.ozgcloud.vorgang.grpc.binaryFile.GrpcUploadBinaryFileRequest
+	(*GrpcUploadBinaryFileMetaData)(nil),                     // 4: de.ozgcloud.vorgang.grpc.binaryFile.GrpcUploadBinaryFileMetaData
+	(*GrpcUploadBinaryFileResponse)(nil),                     // 5: de.ozgcloud.vorgang.grpc.binaryFile.GrpcUploadBinaryFileResponse
+	(*GrpcGetBinaryFileDataRequest)(nil),                     // 6: de.ozgcloud.vorgang.grpc.binaryFile.GrpcGetBinaryFileDataRequest
+	(*GrpcGetBinaryFileDataResponse)(nil),                    // 7: de.ozgcloud.vorgang.grpc.binaryFile.GrpcGetBinaryFileDataResponse
+	(*GrpcGetAttachmentsRequest)(nil),                        // 8: de.ozgcloud.vorgang.grpc.binaryFile.GrpcGetAttachmentsRequest
+	(*GrpcGetAttachmentsResponse)(nil),                       // 9: de.ozgcloud.vorgang.grpc.binaryFile.GrpcGetAttachmentsResponse
+	(*GrpcGetRepresentationsRequest)(nil),                    // 10: de.ozgcloud.vorgang.grpc.binaryFile.GrpcGetRepresentationsRequest
+	(*GrpcGetRepresentationsResponse)(nil),                   // 11: de.ozgcloud.vorgang.grpc.binaryFile.GrpcGetRepresentationsResponse
+	(*GrpcBinaryFile)(nil),                                   // 12: de.ozgcloud.vorgang.grpc.binaryFile.GrpcBinaryFile
+	(*de_ozgcloud_vorgang_grpc_command.GrpcCallContext)(nil), // 13: de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	(*de_ozgcloud_vorgang_grpc_file.GrpcOzgFile)(nil),        // 14: de.ozgcloud.vorgang.grpc.file.GrpcOzgFile
+}
+var file_binaryfile_proto_depIdxs = []int32{
+	13, // 0: de.ozgcloud.vorgang.grpc.binaryFile.GrpcBinaryFilesRequest.context:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	14, // 1: de.ozgcloud.vorgang.grpc.binaryFile.GrpcFindFilesResponse.file:type_name -> de.ozgcloud.vorgang.grpc.file.GrpcOzgFile
+	13, // 2: de.ozgcloud.vorgang.grpc.binaryFile.GrpcBinaryFileDataRequest.context:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	4,  // 3: de.ozgcloud.vorgang.grpc.binaryFile.GrpcUploadBinaryFileRequest.metadata:type_name -> de.ozgcloud.vorgang.grpc.binaryFile.GrpcUploadBinaryFileMetaData
+	13, // 4: de.ozgcloud.vorgang.grpc.binaryFile.GrpcUploadBinaryFileMetaData.context:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	13, // 5: de.ozgcloud.vorgang.grpc.binaryFile.GrpcGetBinaryFileDataRequest.context:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	13, // 6: de.ozgcloud.vorgang.grpc.binaryFile.GrpcGetAttachmentsRequest.context:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	12, // 7: de.ozgcloud.vorgang.grpc.binaryFile.GrpcGetAttachmentsResponse.file:type_name -> de.ozgcloud.vorgang.grpc.binaryFile.GrpcBinaryFile
+	13, // 8: de.ozgcloud.vorgang.grpc.binaryFile.GrpcGetRepresentationsRequest.context:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	12, // 9: de.ozgcloud.vorgang.grpc.binaryFile.GrpcGetRepresentationsResponse.file:type_name -> de.ozgcloud.vorgang.grpc.binaryFile.GrpcBinaryFile
+	3,  // 10: de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService.UploadBinaryFileAsStream:input_type -> de.ozgcloud.vorgang.grpc.binaryFile.GrpcUploadBinaryFileRequest
+	6,  // 11: de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService.GetBinaryFileContent:input_type -> de.ozgcloud.vorgang.grpc.binaryFile.GrpcGetBinaryFileDataRequest
+	0,  // 12: de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService.FindBinaryFilesMetaData:input_type -> de.ozgcloud.vorgang.grpc.binaryFile.GrpcBinaryFilesRequest
+	8,  // 13: de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService.GetAttachments:input_type -> de.ozgcloud.vorgang.grpc.binaryFile.GrpcGetAttachmentsRequest
+	10, // 14: de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService.GetRepresentations:input_type -> de.ozgcloud.vorgang.grpc.binaryFile.GrpcGetRepresentationsRequest
+	5,  // 15: de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService.UploadBinaryFileAsStream:output_type -> de.ozgcloud.vorgang.grpc.binaryFile.GrpcUploadBinaryFileResponse
+	7,  // 16: de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService.GetBinaryFileContent:output_type -> de.ozgcloud.vorgang.grpc.binaryFile.GrpcGetBinaryFileDataResponse
+	1,  // 17: de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService.FindBinaryFilesMetaData:output_type -> de.ozgcloud.vorgang.grpc.binaryFile.GrpcFindFilesResponse
+	9,  // 18: de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService.GetAttachments:output_type -> de.ozgcloud.vorgang.grpc.binaryFile.GrpcGetAttachmentsResponse
+	11, // 19: de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService.GetRepresentations:output_type -> de.ozgcloud.vorgang.grpc.binaryFile.GrpcGetRepresentationsResponse
+	15, // [15:20] is the sub-list for method output_type
+	10, // [10:15] is the sub-list for method input_type
+	10, // [10:10] is the sub-list for extension type_name
+	10, // [10:10] is the sub-list for extension extendee
+	0,  // [0:10] is the sub-list for field type_name
+}
+
+func init() { file_binaryfile_proto_init() }
+func file_binaryfile_proto_init() {
+	if File_binaryfile_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_binaryfile_proto_msgTypes[0].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcBinaryFilesRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_binaryfile_proto_msgTypes[1].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcFindFilesResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_binaryfile_proto_msgTypes[2].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcBinaryFileDataRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_binaryfile_proto_msgTypes[3].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcUploadBinaryFileRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_binaryfile_proto_msgTypes[4].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcUploadBinaryFileMetaData); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_binaryfile_proto_msgTypes[5].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcUploadBinaryFileResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_binaryfile_proto_msgTypes[6].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcGetBinaryFileDataRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_binaryfile_proto_msgTypes[7].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcGetBinaryFileDataResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_binaryfile_proto_msgTypes[8].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcGetAttachmentsRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_binaryfile_proto_msgTypes[9].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcGetAttachmentsResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_binaryfile_proto_msgTypes[10].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcGetRepresentationsRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_binaryfile_proto_msgTypes[11].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcGetRepresentationsResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_binaryfile_proto_msgTypes[12].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcBinaryFile); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	file_binaryfile_proto_msgTypes[3].OneofWrappers = []any{
+		(*GrpcUploadBinaryFileRequest_Metadata)(nil),
+		(*GrpcUploadBinaryFileRequest_FileContent)(nil),
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_binaryfile_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   13,
+			NumExtensions: 0,
+			NumServices:   1,
+		},
+		GoTypes:           file_binaryfile_proto_goTypes,
+		DependencyIndexes: file_binaryfile_proto_depIdxs,
+		MessageInfos:      file_binaryfile_proto_msgTypes,
+	}.Build()
+	File_binaryfile_proto = out.File
+	file_binaryfile_proto_rawDesc = nil
+	file_binaryfile_proto_goTypes = nil
+	file_binaryfile_proto_depIdxs = nil
+}
diff --git a/gen/go/binaryfile.pb.gw.go b/gen/go/binaryfile.pb.gw.go
new file mode 100644
index 0000000000000000000000000000000000000000..75bcfd247d30c7c62009fce6a78a92e5dd91110e
--- /dev/null
+++ b/gen/go/binaryfile.pb.gw.go
@@ -0,0 +1,285 @@
+// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
+// source: binaryfile.proto
+
+/*
+Package de_ozgcloud_vorgang_grpc_binaryFile is a reverse proxy.
+
+It translates gRPC into RESTful JSON APIs.
+*/
+package de_ozgcloud_vorgang_grpc_binaryFile
+
+import (
+	"context"
+	"io"
+	"net/http"
+
+	"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
+	"github.com/grpc-ecosystem/grpc-gateway/v2/utilities"
+	"google.golang.org/grpc"
+	"google.golang.org/grpc/codes"
+	"google.golang.org/grpc/grpclog"
+	"google.golang.org/grpc/metadata"
+	"google.golang.org/grpc/status"
+	"google.golang.org/protobuf/proto"
+)
+
+// Suppress "imported and not used" errors
+var _ codes.Code
+var _ io.Reader
+var _ status.Status
+var _ = runtime.String
+var _ = utilities.NewDoubleArray
+var _ = metadata.Join
+
+var (
+	filter_BinaryFileService_GetBinaryFileContent_0 = &utilities.DoubleArray{Encoding: map[string]int{"fileId": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}
+)
+
+func request_BinaryFileService_GetBinaryFileContent_0(ctx context.Context, marshaler runtime.Marshaler, client BinaryFileServiceClient, req *http.Request, pathParams map[string]string) (BinaryFileService_GetBinaryFileContentClient, runtime.ServerMetadata, error) {
+	var protoReq GrpcGetBinaryFileDataRequest
+	var metadata runtime.ServerMetadata
+
+	var (
+		val string
+		ok  bool
+		err error
+		_   = err
+	)
+
+	val, ok = pathParams["fileId"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "fileId")
+	}
+
+	protoReq.FileId, err = runtime.String(val)
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "fileId", err)
+	}
+
+	if err := req.ParseForm(); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BinaryFileService_GetBinaryFileContent_0); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	stream, err := client.GetBinaryFileContent(ctx, &protoReq)
+	if err != nil {
+		return nil, metadata, err
+	}
+	header, err := stream.Header()
+	if err != nil {
+		return nil, metadata, err
+	}
+	metadata.HeaderMD = header
+	return stream, metadata, nil
+
+}
+
+var (
+	filter_BinaryFileService_FindBinaryFilesMetaData_0 = &utilities.DoubleArray{Encoding: map[string]int{"fileId": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}
+)
+
+func request_BinaryFileService_FindBinaryFilesMetaData_0(ctx context.Context, marshaler runtime.Marshaler, client BinaryFileServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq GrpcBinaryFilesRequest
+	var metadata runtime.ServerMetadata
+
+	var (
+		val string
+		ok  bool
+		err error
+		_   = err
+	)
+
+	val, ok = pathParams["fileId"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "fileId")
+	}
+
+	protoReq.FileId, err = runtime.StringSlice(val, ",")
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "fileId", err)
+	}
+
+	if err := req.ParseForm(); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BinaryFileService_FindBinaryFilesMetaData_0); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	msg, err := client.FindBinaryFilesMetaData(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_BinaryFileService_FindBinaryFilesMetaData_0(ctx context.Context, marshaler runtime.Marshaler, server BinaryFileServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq GrpcBinaryFilesRequest
+	var metadata runtime.ServerMetadata
+
+	var (
+		val string
+		ok  bool
+		err error
+		_   = err
+	)
+
+	val, ok = pathParams["fileId"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "fileId")
+	}
+
+	protoReq.FileId, err = runtime.StringSlice(val, ",")
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "fileId", err)
+	}
+
+	if err := req.ParseForm(); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BinaryFileService_FindBinaryFilesMetaData_0); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	msg, err := server.FindBinaryFilesMetaData(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
+// RegisterBinaryFileServiceHandlerServer registers the http handlers for service BinaryFileService to "mux".
+// UnaryRPC     :call BinaryFileServiceServer directly.
+// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
+// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterBinaryFileServiceHandlerFromEndpoint instead.
+func RegisterBinaryFileServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server BinaryFileServiceServer) error {
+
+	mux.Handle("GET", pattern_BinaryFileService_GetBinaryFileContent_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")
+		_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+		return
+	})
+
+	mux.Handle("GET", pattern_BinaryFileService_FindBinaryFilesMetaData_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		var stream runtime.ServerTransportStream
+		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		var err error
+		var annotatedContext context.Context
+		annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService/FindBinaryFilesMetaData", runtime.WithHTTPPathPattern("/api/filemetadata/{fileId}"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := local_request_BinaryFileService_FindBinaryFilesMetaData_0(annotatedContext, inboundMarshaler, server, req, pathParams)
+		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
+		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+		if err != nil {
+			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_BinaryFileService_FindBinaryFilesMetaData_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	return nil
+}
+
+// RegisterBinaryFileServiceHandlerFromEndpoint is same as RegisterBinaryFileServiceHandler but
+// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
+func RegisterBinaryFileServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
+	conn, err := grpc.NewClient(endpoint, opts...)
+	if err != nil {
+		return err
+	}
+	defer func() {
+		if err != nil {
+			if cerr := conn.Close(); cerr != nil {
+				grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr)
+			}
+			return
+		}
+		go func() {
+			<-ctx.Done()
+			if cerr := conn.Close(); cerr != nil {
+				grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr)
+			}
+		}()
+	}()
+
+	return RegisterBinaryFileServiceHandler(ctx, mux, conn)
+}
+
+// RegisterBinaryFileServiceHandler registers the http handlers for service BinaryFileService to "mux".
+// The handlers forward requests to the grpc endpoint over "conn".
+func RegisterBinaryFileServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
+	return RegisterBinaryFileServiceHandlerClient(ctx, mux, NewBinaryFileServiceClient(conn))
+}
+
+// RegisterBinaryFileServiceHandlerClient registers the http handlers for service BinaryFileService
+// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "BinaryFileServiceClient".
+// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "BinaryFileServiceClient"
+// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
+// "BinaryFileServiceClient" to call the correct interceptors.
+func RegisterBinaryFileServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client BinaryFileServiceClient) error {
+
+	mux.Handle("GET", pattern_BinaryFileService_GetBinaryFileContent_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		var err error
+		var annotatedContext context.Context
+		annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService/GetBinaryFileContent", runtime.WithHTTPPathPattern("/api/filecontent/{fileId}"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := request_BinaryFileService_GetBinaryFileContent_0(annotatedContext, inboundMarshaler, client, req, pathParams)
+		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+		if err != nil {
+			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_BinaryFileService_GetBinaryFileContent_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("GET", pattern_BinaryFileService_FindBinaryFilesMetaData_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		var err error
+		var annotatedContext context.Context
+		annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService/FindBinaryFilesMetaData", runtime.WithHTTPPathPattern("/api/filemetadata/{fileId}"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := request_BinaryFileService_FindBinaryFilesMetaData_0(annotatedContext, inboundMarshaler, client, req, pathParams)
+		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+		if err != nil {
+			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_BinaryFileService_FindBinaryFilesMetaData_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	return nil
+}
+
+var (
+	pattern_BinaryFileService_GetBinaryFileContent_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"api", "filecontent", "fileId"}, ""))
+
+	pattern_BinaryFileService_FindBinaryFilesMetaData_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"api", "filemetadata", "fileId"}, ""))
+)
+
+var (
+	forward_BinaryFileService_GetBinaryFileContent_0 = runtime.ForwardResponseStream
+
+	forward_BinaryFileService_FindBinaryFilesMetaData_0 = runtime.ForwardResponseMessage
+)
diff --git a/gen/go/binaryfile_grpc.pb.go b/gen/go/binaryfile_grpc.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..dede0a0812cb2ef34a6581238681d17387389689
--- /dev/null
+++ b/gen/go/binaryfile_grpc.pb.go
@@ -0,0 +1,347 @@
+//
+// Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+// Ministerpräsidenten des Landes Schleswig-Holstein
+// Staatskanzlei
+// Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+//
+// Lizenziert unter der EUPL, Version 1.2 oder - sobald
+// diese von der Europäischen Kommission genehmigt wurden -
+// Folgeversionen der EUPL ("Lizenz");
+// Sie dürfen dieses Werk ausschließlich gemäß
+// dieser Lizenz nutzen.
+// Eine Kopie der Lizenz finden Sie hier:
+//
+// https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+//
+// Sofern nicht durch anwendbare Rechtsvorschriften
+// gefordert oder in schriftlicher Form vereinbart, wird
+// die unter der Lizenz verbreitete Software "so wie sie
+// ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+// ausdrücklich oder stillschweigend - verbreitet.
+// Die sprachspezifischen Genehmigungen und Beschränkungen
+// unter der Lizenz sind dem Lizenztext zu entnehmen.
+
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.4.0
+// - protoc             (unknown)
+// source: binaryfile.proto
+
+package de_ozgcloud_vorgang_grpc_binaryFile
+
+import (
+	context "context"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.62.0 or later.
+const _ = grpc.SupportPackageIsVersion8
+
+const (
+	BinaryFileService_UploadBinaryFileAsStream_FullMethodName = "/de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService/UploadBinaryFileAsStream"
+	BinaryFileService_GetBinaryFileContent_FullMethodName     = "/de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService/GetBinaryFileContent"
+	BinaryFileService_FindBinaryFilesMetaData_FullMethodName  = "/de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService/FindBinaryFilesMetaData"
+	BinaryFileService_GetAttachments_FullMethodName           = "/de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService/GetAttachments"
+	BinaryFileService_GetRepresentations_FullMethodName       = "/de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService/GetRepresentations"
+)
+
+// BinaryFileServiceClient is the client API for BinaryFileService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type BinaryFileServiceClient interface {
+	UploadBinaryFileAsStream(ctx context.Context, opts ...grpc.CallOption) (BinaryFileService_UploadBinaryFileAsStreamClient, error)
+	GetBinaryFileContent(ctx context.Context, in *GrpcGetBinaryFileDataRequest, opts ...grpc.CallOption) (BinaryFileService_GetBinaryFileContentClient, error)
+	FindBinaryFilesMetaData(ctx context.Context, in *GrpcBinaryFilesRequest, opts ...grpc.CallOption) (*GrpcFindFilesResponse, error)
+	GetAttachments(ctx context.Context, in *GrpcGetAttachmentsRequest, opts ...grpc.CallOption) (*GrpcGetAttachmentsResponse, error)
+	GetRepresentations(ctx context.Context, in *GrpcGetRepresentationsRequest, opts ...grpc.CallOption) (*GrpcGetRepresentationsResponse, error)
+}
+
+type binaryFileServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewBinaryFileServiceClient(cc grpc.ClientConnInterface) BinaryFileServiceClient {
+	return &binaryFileServiceClient{cc}
+}
+
+func (c *binaryFileServiceClient) UploadBinaryFileAsStream(ctx context.Context, opts ...grpc.CallOption) (BinaryFileService_UploadBinaryFileAsStreamClient, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+	stream, err := c.cc.NewStream(ctx, &BinaryFileService_ServiceDesc.Streams[0], BinaryFileService_UploadBinaryFileAsStream_FullMethodName, cOpts...)
+	if err != nil {
+		return nil, err
+	}
+	x := &binaryFileServiceUploadBinaryFileAsStreamClient{ClientStream: stream}
+	return x, nil
+}
+
+type BinaryFileService_UploadBinaryFileAsStreamClient interface {
+	Send(*GrpcUploadBinaryFileRequest) error
+	CloseAndRecv() (*GrpcUploadBinaryFileResponse, error)
+	grpc.ClientStream
+}
+
+type binaryFileServiceUploadBinaryFileAsStreamClient struct {
+	grpc.ClientStream
+}
+
+func (x *binaryFileServiceUploadBinaryFileAsStreamClient) Send(m *GrpcUploadBinaryFileRequest) error {
+	return x.ClientStream.SendMsg(m)
+}
+
+func (x *binaryFileServiceUploadBinaryFileAsStreamClient) CloseAndRecv() (*GrpcUploadBinaryFileResponse, error) {
+	if err := x.ClientStream.CloseSend(); err != nil {
+		return nil, err
+	}
+	m := new(GrpcUploadBinaryFileResponse)
+	if err := x.ClientStream.RecvMsg(m); err != nil {
+		return nil, err
+	}
+	return m, nil
+}
+
+func (c *binaryFileServiceClient) GetBinaryFileContent(ctx context.Context, in *GrpcGetBinaryFileDataRequest, opts ...grpc.CallOption) (BinaryFileService_GetBinaryFileContentClient, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+	stream, err := c.cc.NewStream(ctx, &BinaryFileService_ServiceDesc.Streams[1], BinaryFileService_GetBinaryFileContent_FullMethodName, cOpts...)
+	if err != nil {
+		return nil, err
+	}
+	x := &binaryFileServiceGetBinaryFileContentClient{ClientStream: stream}
+	if err := x.ClientStream.SendMsg(in); err != nil {
+		return nil, err
+	}
+	if err := x.ClientStream.CloseSend(); err != nil {
+		return nil, err
+	}
+	return x, nil
+}
+
+type BinaryFileService_GetBinaryFileContentClient interface {
+	Recv() (*GrpcGetBinaryFileDataResponse, error)
+	grpc.ClientStream
+}
+
+type binaryFileServiceGetBinaryFileContentClient struct {
+	grpc.ClientStream
+}
+
+func (x *binaryFileServiceGetBinaryFileContentClient) Recv() (*GrpcGetBinaryFileDataResponse, error) {
+	m := new(GrpcGetBinaryFileDataResponse)
+	if err := x.ClientStream.RecvMsg(m); err != nil {
+		return nil, err
+	}
+	return m, nil
+}
+
+func (c *binaryFileServiceClient) FindBinaryFilesMetaData(ctx context.Context, in *GrpcBinaryFilesRequest, opts ...grpc.CallOption) (*GrpcFindFilesResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+	out := new(GrpcFindFilesResponse)
+	err := c.cc.Invoke(ctx, BinaryFileService_FindBinaryFilesMetaData_FullMethodName, in, out, cOpts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *binaryFileServiceClient) GetAttachments(ctx context.Context, in *GrpcGetAttachmentsRequest, opts ...grpc.CallOption) (*GrpcGetAttachmentsResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+	out := new(GrpcGetAttachmentsResponse)
+	err := c.cc.Invoke(ctx, BinaryFileService_GetAttachments_FullMethodName, in, out, cOpts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *binaryFileServiceClient) GetRepresentations(ctx context.Context, in *GrpcGetRepresentationsRequest, opts ...grpc.CallOption) (*GrpcGetRepresentationsResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+	out := new(GrpcGetRepresentationsResponse)
+	err := c.cc.Invoke(ctx, BinaryFileService_GetRepresentations_FullMethodName, in, out, cOpts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// BinaryFileServiceServer is the server API for BinaryFileService service.
+// All implementations must embed UnimplementedBinaryFileServiceServer
+// for forward compatibility
+type BinaryFileServiceServer interface {
+	UploadBinaryFileAsStream(BinaryFileService_UploadBinaryFileAsStreamServer) error
+	GetBinaryFileContent(*GrpcGetBinaryFileDataRequest, BinaryFileService_GetBinaryFileContentServer) error
+	FindBinaryFilesMetaData(context.Context, *GrpcBinaryFilesRequest) (*GrpcFindFilesResponse, error)
+	GetAttachments(context.Context, *GrpcGetAttachmentsRequest) (*GrpcGetAttachmentsResponse, error)
+	GetRepresentations(context.Context, *GrpcGetRepresentationsRequest) (*GrpcGetRepresentationsResponse, error)
+	mustEmbedUnimplementedBinaryFileServiceServer()
+}
+
+// UnimplementedBinaryFileServiceServer must be embedded to have forward compatible implementations.
+type UnimplementedBinaryFileServiceServer struct {
+}
+
+func (UnimplementedBinaryFileServiceServer) UploadBinaryFileAsStream(BinaryFileService_UploadBinaryFileAsStreamServer) error {
+	return status.Errorf(codes.Unimplemented, "method UploadBinaryFileAsStream not implemented")
+}
+func (UnimplementedBinaryFileServiceServer) GetBinaryFileContent(*GrpcGetBinaryFileDataRequest, BinaryFileService_GetBinaryFileContentServer) error {
+	return status.Errorf(codes.Unimplemented, "method GetBinaryFileContent not implemented")
+}
+func (UnimplementedBinaryFileServiceServer) FindBinaryFilesMetaData(context.Context, *GrpcBinaryFilesRequest) (*GrpcFindFilesResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method FindBinaryFilesMetaData not implemented")
+}
+func (UnimplementedBinaryFileServiceServer) GetAttachments(context.Context, *GrpcGetAttachmentsRequest) (*GrpcGetAttachmentsResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetAttachments not implemented")
+}
+func (UnimplementedBinaryFileServiceServer) GetRepresentations(context.Context, *GrpcGetRepresentationsRequest) (*GrpcGetRepresentationsResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetRepresentations not implemented")
+}
+func (UnimplementedBinaryFileServiceServer) mustEmbedUnimplementedBinaryFileServiceServer() {}
+
+// UnsafeBinaryFileServiceServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to BinaryFileServiceServer will
+// result in compilation errors.
+type UnsafeBinaryFileServiceServer interface {
+	mustEmbedUnimplementedBinaryFileServiceServer()
+}
+
+func RegisterBinaryFileServiceServer(s grpc.ServiceRegistrar, srv BinaryFileServiceServer) {
+	s.RegisterService(&BinaryFileService_ServiceDesc, srv)
+}
+
+func _BinaryFileService_UploadBinaryFileAsStream_Handler(srv interface{}, stream grpc.ServerStream) error {
+	return srv.(BinaryFileServiceServer).UploadBinaryFileAsStream(&binaryFileServiceUploadBinaryFileAsStreamServer{ServerStream: stream})
+}
+
+type BinaryFileService_UploadBinaryFileAsStreamServer interface {
+	SendAndClose(*GrpcUploadBinaryFileResponse) error
+	Recv() (*GrpcUploadBinaryFileRequest, error)
+	grpc.ServerStream
+}
+
+type binaryFileServiceUploadBinaryFileAsStreamServer struct {
+	grpc.ServerStream
+}
+
+func (x *binaryFileServiceUploadBinaryFileAsStreamServer) SendAndClose(m *GrpcUploadBinaryFileResponse) error {
+	return x.ServerStream.SendMsg(m)
+}
+
+func (x *binaryFileServiceUploadBinaryFileAsStreamServer) Recv() (*GrpcUploadBinaryFileRequest, error) {
+	m := new(GrpcUploadBinaryFileRequest)
+	if err := x.ServerStream.RecvMsg(m); err != nil {
+		return nil, err
+	}
+	return m, nil
+}
+
+func _BinaryFileService_GetBinaryFileContent_Handler(srv interface{}, stream grpc.ServerStream) error {
+	m := new(GrpcGetBinaryFileDataRequest)
+	if err := stream.RecvMsg(m); err != nil {
+		return err
+	}
+	return srv.(BinaryFileServiceServer).GetBinaryFileContent(m, &binaryFileServiceGetBinaryFileContentServer{ServerStream: stream})
+}
+
+type BinaryFileService_GetBinaryFileContentServer interface {
+	Send(*GrpcGetBinaryFileDataResponse) error
+	grpc.ServerStream
+}
+
+type binaryFileServiceGetBinaryFileContentServer struct {
+	grpc.ServerStream
+}
+
+func (x *binaryFileServiceGetBinaryFileContentServer) Send(m *GrpcGetBinaryFileDataResponse) error {
+	return x.ServerStream.SendMsg(m)
+}
+
+func _BinaryFileService_FindBinaryFilesMetaData_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GrpcBinaryFilesRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BinaryFileServiceServer).FindBinaryFilesMetaData(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: BinaryFileService_FindBinaryFilesMetaData_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BinaryFileServiceServer).FindBinaryFilesMetaData(ctx, req.(*GrpcBinaryFilesRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _BinaryFileService_GetAttachments_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GrpcGetAttachmentsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BinaryFileServiceServer).GetAttachments(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: BinaryFileService_GetAttachments_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BinaryFileServiceServer).GetAttachments(ctx, req.(*GrpcGetAttachmentsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _BinaryFileService_GetRepresentations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GrpcGetRepresentationsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BinaryFileServiceServer).GetRepresentations(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: BinaryFileService_GetRepresentations_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BinaryFileServiceServer).GetRepresentations(ctx, req.(*GrpcGetRepresentationsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+// BinaryFileService_ServiceDesc is the grpc.ServiceDesc for BinaryFileService service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var BinaryFileService_ServiceDesc = grpc.ServiceDesc{
+	ServiceName: "de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileService",
+	HandlerType: (*BinaryFileServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "FindBinaryFilesMetaData",
+			Handler:    _BinaryFileService_FindBinaryFilesMetaData_Handler,
+		},
+		{
+			MethodName: "GetAttachments",
+			Handler:    _BinaryFileService_GetAttachments_Handler,
+		},
+		{
+			MethodName: "GetRepresentations",
+			Handler:    _BinaryFileService_GetRepresentations_Handler,
+		},
+	},
+	Streams: []grpc.StreamDesc{
+		{
+			StreamName:    "UploadBinaryFileAsStream",
+			Handler:       _BinaryFileService_UploadBinaryFileAsStream_Handler,
+			ClientStreams: true,
+		},
+		{
+			StreamName:    "GetBinaryFileContent",
+			Handler:       _BinaryFileService_GetBinaryFileContent_Handler,
+			ServerStreams: true,
+		},
+	},
+	Metadata: "binaryfile.proto",
+}
diff --git a/gen/go/callcontext.pb.go b/gen/go/callcontext.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..8ab7e92d30513004a7f9cc9c9213ab6a39ac803d
--- /dev/null
+++ b/gen/go/callcontext.pb.go
@@ -0,0 +1,274 @@
+//
+// Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+// Ministerpräsidenten des Landes Schleswig-Holstein
+// Staatskanzlei
+// Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+//
+// Lizenziert unter der EUPL, Version 1.2 oder - sobald
+// diese von der Europäischen Kommission genehmigt wurden -
+// Folgeversionen der EUPL ("Lizenz");
+// Sie dürfen dieses Werk ausschließlich gemäß
+// dieser Lizenz nutzen.
+// Eine Kopie der Lizenz finden Sie hier:
+//
+// https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+//
+// Sofern nicht durch anwendbare Rechtsvorschriften
+// gefordert oder in schriftlicher Form vereinbart, wird
+// die unter der Lizenz verbreitete Software "so wie sie
+// ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+// ausdrücklich oder stillschweigend - verbreitet.
+// Die sprachspezifischen Genehmigungen und Beschränkungen
+// unter der Lizenz sind dem Lizenztext zu entnehmen.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.34.2
+// 	protoc        (unknown)
+// source: callcontext.proto
+
+package de_ozgcloud_vorgang_grpc_command
+
+import (
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type GrpcCallContext struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Client    string    `protobuf:"bytes,1,opt,name=client,proto3" json:"client,omitempty"`
+	User      *GrpcUser `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"`
+	RequestId string    `protobuf:"bytes,3,opt,name=requestId,proto3" json:"requestId,omitempty"`
+}
+
+func (x *GrpcCallContext) Reset() {
+	*x = GrpcCallContext{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_callcontext_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcCallContext) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcCallContext) ProtoMessage() {}
+
+func (x *GrpcCallContext) ProtoReflect() protoreflect.Message {
+	mi := &file_callcontext_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcCallContext.ProtoReflect.Descriptor instead.
+func (*GrpcCallContext) Descriptor() ([]byte, []int) {
+	return file_callcontext_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *GrpcCallContext) GetClient() string {
+	if x != nil {
+		return x.Client
+	}
+	return ""
+}
+
+func (x *GrpcCallContext) GetUser() *GrpcUser {
+	if x != nil {
+		return x.User
+	}
+	return nil
+}
+
+func (x *GrpcCallContext) GetRequestId() string {
+	if x != nil {
+		return x.RequestId
+	}
+	return ""
+}
+
+type GrpcUser struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id   string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	// Deprecated: Marked as deprecated in callcontext.proto.
+	Roles []string `protobuf:"bytes,3,rep,name=roles,proto3" json:"roles,omitempty"`
+}
+
+func (x *GrpcUser) Reset() {
+	*x = GrpcUser{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_callcontext_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcUser) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcUser) ProtoMessage() {}
+
+func (x *GrpcUser) ProtoReflect() protoreflect.Message {
+	mi := &file_callcontext_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcUser.ProtoReflect.Descriptor instead.
+func (*GrpcUser) Descriptor() ([]byte, []int) {
+	return file_callcontext_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *GrpcUser) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *GrpcUser) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+// Deprecated: Marked as deprecated in callcontext.proto.
+func (x *GrpcUser) GetRoles() []string {
+	if x != nil {
+		return x.Roles
+	}
+	return nil
+}
+
+var File_callcontext_proto protoreflect.FileDescriptor
+
+var file_callcontext_proto_rawDesc = []byte{
+	0x0a, 0x11, 0x63, 0x61, 0x6c, 0x6c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x12, 0x20, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64,
+	0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f,
+	0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x87, 0x01, 0x0a, 0x0f, 0x47, 0x72, 0x70, 0x63, 0x43, 0x61,
+	0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6c, 0x69,
+	0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e,
+	0x74, 0x12, 0x3e, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x2a, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f,
+	0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61,
+	0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65,
+	0x72, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22,
+	0x48, 0x0a, 0x08, 0x47, 0x72, 0x70, 0x63, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69,
+	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e,
+	0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
+	0x18, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x42, 0x02,
+	0x18, 0x01, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x42, 0x22, 0x5a, 0x20, 0x64, 0x65, 0x2e,
+	0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67,
+	0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x62, 0x06, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_callcontext_proto_rawDescOnce sync.Once
+	file_callcontext_proto_rawDescData = file_callcontext_proto_rawDesc
+)
+
+func file_callcontext_proto_rawDescGZIP() []byte {
+	file_callcontext_proto_rawDescOnce.Do(func() {
+		file_callcontext_proto_rawDescData = protoimpl.X.CompressGZIP(file_callcontext_proto_rawDescData)
+	})
+	return file_callcontext_proto_rawDescData
+}
+
+var file_callcontext_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_callcontext_proto_goTypes = []any{
+	(*GrpcCallContext)(nil), // 0: de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	(*GrpcUser)(nil),        // 1: de.ozgcloud.vorgang.grpc.command.GrpcUser
+}
+var file_callcontext_proto_depIdxs = []int32{
+	1, // 0: de.ozgcloud.vorgang.grpc.command.GrpcCallContext.user:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcUser
+	1, // [1:1] is the sub-list for method output_type
+	1, // [1:1] is the sub-list for method input_type
+	1, // [1:1] is the sub-list for extension type_name
+	1, // [1:1] is the sub-list for extension extendee
+	0, // [0:1] is the sub-list for field type_name
+}
+
+func init() { file_callcontext_proto_init() }
+func file_callcontext_proto_init() {
+	if File_callcontext_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_callcontext_proto_msgTypes[0].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcCallContext); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_callcontext_proto_msgTypes[1].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcUser); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_callcontext_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   2,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_callcontext_proto_goTypes,
+		DependencyIndexes: file_callcontext_proto_depIdxs,
+		MessageInfos:      file_callcontext_proto_msgTypes,
+	}.Build()
+	File_callcontext_proto = out.File
+	file_callcontext_proto_rawDesc = nil
+	file_callcontext_proto_goTypes = nil
+	file_callcontext_proto_depIdxs = nil
+}
diff --git a/gen/go/clientattribute.model.pb.go b/gen/go/clientattribute.model.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..b2aa4f58021355b0de8c8f4ade6cb0cf943d1875
--- /dev/null
+++ b/gen/go/clientattribute.model.pb.go
@@ -0,0 +1,405 @@
+//
+// Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+// Ministerpräsidenten des Landes Schleswig-Holstein
+// Staatskanzlei
+// Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+//
+// Lizenziert unter der EUPL, Version 1.2 oder - sobald
+// diese von der Europäischen Kommission genehmigt wurden -
+// Folgeversionen der EUPL ("Lizenz");
+// Sie dürfen dieses Werk ausschließlich gemäß
+// dieser Lizenz nutzen.
+// Eine Kopie der Lizenz finden Sie hier:
+//
+// https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+//
+// Sofern nicht durch anwendbare Rechtsvorschriften
+// gefordert oder in schriftlicher Form vereinbart, wird
+// die unter der Lizenz verbreitete Software "so wie sie
+// ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+// ausdrücklich oder stillschweigend - verbreitet.
+// Die sprachspezifischen Genehmigungen und Beschränkungen
+// unter der Lizenz sind dem Lizenztext zu entnehmen.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.34.2
+// 	protoc        (unknown)
+// source: clientattribute.model.proto
+
+package de_ozgcloud_vorgang_grpc_clientAttribute
+
+import (
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type GrpcAccessPermission int32
+
+const (
+	GrpcAccessPermission_PRIVATE    GrpcAccessPermission = 0
+	GrpcAccessPermission_READ_ONLY  GrpcAccessPermission = 1
+	GrpcAccessPermission_READ_WRITE GrpcAccessPermission = 2
+)
+
+// Enum value maps for GrpcAccessPermission.
+var (
+	GrpcAccessPermission_name = map[int32]string{
+		0: "PRIVATE",
+		1: "READ_ONLY",
+		2: "READ_WRITE",
+	}
+	GrpcAccessPermission_value = map[string]int32{
+		"PRIVATE":    0,
+		"READ_ONLY":  1,
+		"READ_WRITE": 2,
+	}
+)
+
+func (x GrpcAccessPermission) Enum() *GrpcAccessPermission {
+	p := new(GrpcAccessPermission)
+	*p = x
+	return p
+}
+
+func (x GrpcAccessPermission) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (GrpcAccessPermission) Descriptor() protoreflect.EnumDescriptor {
+	return file_clientattribute_model_proto_enumTypes[0].Descriptor()
+}
+
+func (GrpcAccessPermission) Type() protoreflect.EnumType {
+	return &file_clientattribute_model_proto_enumTypes[0]
+}
+
+func (x GrpcAccessPermission) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use GrpcAccessPermission.Descriptor instead.
+func (GrpcAccessPermission) EnumDescriptor() ([]byte, []int) {
+	return file_clientattribute_model_proto_rawDescGZIP(), []int{0}
+}
+
+type GrpcClientAttribute struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ClientName    string                    `protobuf:"bytes,1,opt,name=clientName,proto3" json:"clientName,omitempty"`
+	AttributeName string                    `protobuf:"bytes,2,opt,name=attributeName,proto3" json:"attributeName,omitempty"`
+	Access        GrpcAccessPermission      `protobuf:"varint,3,opt,name=access,proto3,enum=de.ozgcloud.vorgang.grpc.clientAttribute.GrpcAccessPermission" json:"access,omitempty"`
+	Value         *GrpcClientAttributeValue `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (x *GrpcClientAttribute) Reset() {
+	*x = GrpcClientAttribute{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_clientattribute_model_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcClientAttribute) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcClientAttribute) ProtoMessage() {}
+
+func (x *GrpcClientAttribute) ProtoReflect() protoreflect.Message {
+	mi := &file_clientattribute_model_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcClientAttribute.ProtoReflect.Descriptor instead.
+func (*GrpcClientAttribute) Descriptor() ([]byte, []int) {
+	return file_clientattribute_model_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *GrpcClientAttribute) GetClientName() string {
+	if x != nil {
+		return x.ClientName
+	}
+	return ""
+}
+
+func (x *GrpcClientAttribute) GetAttributeName() string {
+	if x != nil {
+		return x.AttributeName
+	}
+	return ""
+}
+
+func (x *GrpcClientAttribute) GetAccess() GrpcAccessPermission {
+	if x != nil {
+		return x.Access
+	}
+	return GrpcAccessPermission_PRIVATE
+}
+
+func (x *GrpcClientAttribute) GetValue() *GrpcClientAttributeValue {
+	if x != nil {
+		return x.Value
+	}
+	return nil
+}
+
+type GrpcClientAttributeValue struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Types that are assignable to Value:
+	//
+	//	*GrpcClientAttributeValue_StringValue
+	//	*GrpcClientAttributeValue_IntValue
+	//	*GrpcClientAttributeValue_DoubleValue
+	//	*GrpcClientAttributeValue_BoolValue
+	Value isGrpcClientAttributeValue_Value `protobuf_oneof:"value"`
+}
+
+func (x *GrpcClientAttributeValue) Reset() {
+	*x = GrpcClientAttributeValue{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_clientattribute_model_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcClientAttributeValue) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcClientAttributeValue) ProtoMessage() {}
+
+func (x *GrpcClientAttributeValue) ProtoReflect() protoreflect.Message {
+	mi := &file_clientattribute_model_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcClientAttributeValue.ProtoReflect.Descriptor instead.
+func (*GrpcClientAttributeValue) Descriptor() ([]byte, []int) {
+	return file_clientattribute_model_proto_rawDescGZIP(), []int{1}
+}
+
+func (m *GrpcClientAttributeValue) GetValue() isGrpcClientAttributeValue_Value {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func (x *GrpcClientAttributeValue) GetStringValue() string {
+	if x, ok := x.GetValue().(*GrpcClientAttributeValue_StringValue); ok {
+		return x.StringValue
+	}
+	return ""
+}
+
+func (x *GrpcClientAttributeValue) GetIntValue() int64 {
+	if x, ok := x.GetValue().(*GrpcClientAttributeValue_IntValue); ok {
+		return x.IntValue
+	}
+	return 0
+}
+
+func (x *GrpcClientAttributeValue) GetDoubleValue() float64 {
+	if x, ok := x.GetValue().(*GrpcClientAttributeValue_DoubleValue); ok {
+		return x.DoubleValue
+	}
+	return 0
+}
+
+func (x *GrpcClientAttributeValue) GetBoolValue() bool {
+	if x, ok := x.GetValue().(*GrpcClientAttributeValue_BoolValue); ok {
+		return x.BoolValue
+	}
+	return false
+}
+
+type isGrpcClientAttributeValue_Value interface {
+	isGrpcClientAttributeValue_Value()
+}
+
+type GrpcClientAttributeValue_StringValue struct {
+	StringValue string `protobuf:"bytes,1,opt,name=stringValue,proto3,oneof"`
+}
+
+type GrpcClientAttributeValue_IntValue struct {
+	IntValue int64 `protobuf:"varint,2,opt,name=intValue,proto3,oneof"`
+}
+
+type GrpcClientAttributeValue_DoubleValue struct {
+	DoubleValue float64 `protobuf:"fixed64,3,opt,name=doubleValue,proto3,oneof"`
+}
+
+type GrpcClientAttributeValue_BoolValue struct {
+	BoolValue bool `protobuf:"varint,4,opt,name=boolValue,proto3,oneof"`
+}
+
+func (*GrpcClientAttributeValue_StringValue) isGrpcClientAttributeValue_Value() {}
+
+func (*GrpcClientAttributeValue_IntValue) isGrpcClientAttributeValue_Value() {}
+
+func (*GrpcClientAttributeValue_DoubleValue) isGrpcClientAttributeValue_Value() {}
+
+func (*GrpcClientAttributeValue_BoolValue) isGrpcClientAttributeValue_Value() {}
+
+var File_clientattribute_model_proto protoreflect.FileDescriptor
+
+var file_clientattribute_model_proto_rawDesc = []byte{
+	0x0a, 0x1b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+	0x65, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x28, 0x64,
+	0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61,
+	0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x74,
+	0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0x8d, 0x02, 0x0a, 0x13, 0x47, 0x72, 0x70, 0x63,
+	0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12,
+	0x1e, 0x0a, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12,
+	0x24, 0x0a, 0x0d, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+	0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x56, 0x0a, 0x06, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c,
+	0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63,
+	0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+	0x2e, 0x47, 0x72, 0x70, 0x63, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69,
+	0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x58, 0x0a,
+	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x64,
+	0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61,
+	0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x74,
+	0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x6c, 0x69, 0x65,
+	0x6e, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa9, 0x01, 0x0a, 0x18, 0x47, 0x72, 0x70, 0x63,
+	0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x12, 0x22, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72,
+	0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e,
+	0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x22, 0x0a, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64,
+	0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1e, 0x0a, 0x09, 0x62, 0x6f,
+	0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52,
+	0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61,
+	0x6c, 0x75, 0x65, 0x2a, 0x42, 0x0a, 0x14, 0x47, 0x72, 0x70, 0x63, 0x41, 0x63, 0x63, 0x65, 0x73,
+	0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x50,
+	0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x45, 0x41, 0x44,
+	0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x45, 0x41, 0x44, 0x5f,
+	0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x02, 0x42, 0x2a, 0x5a, 0x28, 0x64, 0x65, 0x2e, 0x6f, 0x7a,
+	0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67,
+	0x72, 0x70, 0x63, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
+	0x75, 0x74, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_clientattribute_model_proto_rawDescOnce sync.Once
+	file_clientattribute_model_proto_rawDescData = file_clientattribute_model_proto_rawDesc
+)
+
+func file_clientattribute_model_proto_rawDescGZIP() []byte {
+	file_clientattribute_model_proto_rawDescOnce.Do(func() {
+		file_clientattribute_model_proto_rawDescData = protoimpl.X.CompressGZIP(file_clientattribute_model_proto_rawDescData)
+	})
+	return file_clientattribute_model_proto_rawDescData
+}
+
+var file_clientattribute_model_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_clientattribute_model_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_clientattribute_model_proto_goTypes = []any{
+	(GrpcAccessPermission)(0),        // 0: de.ozgcloud.vorgang.grpc.clientAttribute.GrpcAccessPermission
+	(*GrpcClientAttribute)(nil),      // 1: de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute
+	(*GrpcClientAttributeValue)(nil), // 2: de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue
+}
+var file_clientattribute_model_proto_depIdxs = []int32{
+	0, // 0: de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute.access:type_name -> de.ozgcloud.vorgang.grpc.clientAttribute.GrpcAccessPermission
+	2, // 1: de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute.value:type_name -> de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue
+	2, // [2:2] is the sub-list for method output_type
+	2, // [2:2] is the sub-list for method input_type
+	2, // [2:2] is the sub-list for extension type_name
+	2, // [2:2] is the sub-list for extension extendee
+	0, // [0:2] is the sub-list for field type_name
+}
+
+func init() { file_clientattribute_model_proto_init() }
+func file_clientattribute_model_proto_init() {
+	if File_clientattribute_model_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_clientattribute_model_proto_msgTypes[0].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcClientAttribute); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_clientattribute_model_proto_msgTypes[1].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcClientAttributeValue); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	file_clientattribute_model_proto_msgTypes[1].OneofWrappers = []any{
+		(*GrpcClientAttributeValue_StringValue)(nil),
+		(*GrpcClientAttributeValue_IntValue)(nil),
+		(*GrpcClientAttributeValue_DoubleValue)(nil),
+		(*GrpcClientAttributeValue_BoolValue)(nil),
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_clientattribute_model_proto_rawDesc,
+			NumEnums:      1,
+			NumMessages:   2,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_clientattribute_model_proto_goTypes,
+		DependencyIndexes: file_clientattribute_model_proto_depIdxs,
+		EnumInfos:         file_clientattribute_model_proto_enumTypes,
+		MessageInfos:      file_clientattribute_model_proto_msgTypes,
+	}.Build()
+	File_clientattribute_model_proto = out.File
+	file_clientattribute_model_proto_rawDesc = nil
+	file_clientattribute_model_proto_goTypes = nil
+	file_clientattribute_model_proto_depIdxs = nil
+}
diff --git a/gen/go/command.model.pb.go b/gen/go/command.model.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..356e9c0e69c7976c7d5831a1cdb1facc4edcb4a6
--- /dev/null
+++ b/gen/go/command.model.pb.go
@@ -0,0 +1,1785 @@
+//
+// Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+// Ministerpräsidenten des Landes Schleswig-Holstein
+// Staatskanzlei
+// Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+//
+// Lizenziert unter der EUPL, Version 1.2 oder - sobald
+// diese von der Europäischen Kommission genehmigt wurden -
+// Folgeversionen der EUPL ("Lizenz");
+// Sie dürfen dieses Werk ausschließlich gemäß
+// dieser Lizenz nutzen.
+// Eine Kopie der Lizenz finden Sie hier:
+//
+// https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+//
+// Sofern nicht durch anwendbare Rechtsvorschriften
+// gefordert oder in schriftlicher Form vereinbart, wird
+// die unter der Lizenz verbreitete Software "so wie sie
+// ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+// ausdrücklich oder stillschweigend - verbreitet.
+// Die sprachspezifischen Genehmigungen und Beschränkungen
+// unter der Lizenz sind dem Lizenztext zu entnehmen.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.34.2
+// 	protoc        (unknown)
+// source: command.model.proto
+
+package de_ozgcloud_vorgang_grpc_command
+
+import (
+	de_ozgcloud_vorgang_common "de.ozgcloud.vorgang.common"
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type GrpcCommandResponse_GrpcResponseCode int32
+
+const (
+	GrpcCommandResponse_OK       GrpcCommandResponse_GrpcResponseCode = 0
+	GrpcCommandResponse_PENDING  GrpcCommandResponse_GrpcResponseCode = 1
+	GrpcCommandResponse_ERROR    GrpcCommandResponse_GrpcResponseCode = 2
+	GrpcCommandResponse_CONFLICT GrpcCommandResponse_GrpcResponseCode = 3
+)
+
+// Enum value maps for GrpcCommandResponse_GrpcResponseCode.
+var (
+	GrpcCommandResponse_GrpcResponseCode_name = map[int32]string{
+		0: "OK",
+		1: "PENDING",
+		2: "ERROR",
+		3: "CONFLICT",
+	}
+	GrpcCommandResponse_GrpcResponseCode_value = map[string]int32{
+		"OK":       0,
+		"PENDING":  1,
+		"ERROR":    2,
+		"CONFLICT": 3,
+	}
+)
+
+func (x GrpcCommandResponse_GrpcResponseCode) Enum() *GrpcCommandResponse_GrpcResponseCode {
+	p := new(GrpcCommandResponse_GrpcResponseCode)
+	*p = x
+	return p
+}
+
+func (x GrpcCommandResponse_GrpcResponseCode) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (GrpcCommandResponse_GrpcResponseCode) Descriptor() protoreflect.EnumDescriptor {
+	return file_command_model_proto_enumTypes[0].Descriptor()
+}
+
+func (GrpcCommandResponse_GrpcResponseCode) Type() protoreflect.EnumType {
+	return &file_command_model_proto_enumTypes[0]
+}
+
+func (x GrpcCommandResponse_GrpcResponseCode) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use GrpcCommandResponse_GrpcResponseCode.Descriptor instead.
+func (GrpcCommandResponse_GrpcResponseCode) EnumDescriptor() ([]byte, []int) {
+	return file_command_model_proto_rawDescGZIP(), []int{1, 0}
+}
+
+type GrpcCreateCommandRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	CallContext     *GrpcCallContext                       `protobuf:"bytes,1,opt,name=callContext,proto3" json:"callContext,omitempty"`
+	VorgangId       string                                 `protobuf:"bytes,2,opt,name=vorgangId,proto3" json:"vorgangId,omitempty"`
+	RelationId      string                                 `protobuf:"bytes,4,opt,name=relationId,proto3" json:"relationId,omitempty"`
+	RelationVersion int64                                  `protobuf:"varint,5,opt,name=relationVersion,proto3" json:"relationVersion,omitempty"`
+	RedirectRequest *GrpcRedirectRequest                   `protobuf:"bytes,12,opt,name=redirectRequest,proto3" json:"redirectRequest,omitempty"`
+	Body            []*GrpcCommandBodyField                `protobuf:"bytes,15,rep,name=body,proto3" json:"body,omitempty"`
+	BodyObj         *de_ozgcloud_vorgang_common.GrpcObject `protobuf:"bytes,17,opt,name=bodyObj,proto3" json:"bodyObj,omitempty"`
+	OrderString     string                                 `protobuf:"bytes,21,opt,name=orderString,proto3" json:"orderString,omitempty"`
+}
+
+func (x *GrpcCreateCommandRequest) Reset() {
+	*x = GrpcCreateCommandRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_command_model_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcCreateCommandRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcCreateCommandRequest) ProtoMessage() {}
+
+func (x *GrpcCreateCommandRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_command_model_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcCreateCommandRequest.ProtoReflect.Descriptor instead.
+func (*GrpcCreateCommandRequest) Descriptor() ([]byte, []int) {
+	return file_command_model_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *GrpcCreateCommandRequest) GetCallContext() *GrpcCallContext {
+	if x != nil {
+		return x.CallContext
+	}
+	return nil
+}
+
+func (x *GrpcCreateCommandRequest) GetVorgangId() string {
+	if x != nil {
+		return x.VorgangId
+	}
+	return ""
+}
+
+func (x *GrpcCreateCommandRequest) GetRelationId() string {
+	if x != nil {
+		return x.RelationId
+	}
+	return ""
+}
+
+func (x *GrpcCreateCommandRequest) GetRelationVersion() int64 {
+	if x != nil {
+		return x.RelationVersion
+	}
+	return 0
+}
+
+func (x *GrpcCreateCommandRequest) GetRedirectRequest() *GrpcRedirectRequest {
+	if x != nil {
+		return x.RedirectRequest
+	}
+	return nil
+}
+
+func (x *GrpcCreateCommandRequest) GetBody() []*GrpcCommandBodyField {
+	if x != nil {
+		return x.Body
+	}
+	return nil
+}
+
+func (x *GrpcCreateCommandRequest) GetBodyObj() *de_ozgcloud_vorgang_common.GrpcObject {
+	if x != nil {
+		return x.BodyObj
+	}
+	return nil
+}
+
+func (x *GrpcCreateCommandRequest) GetOrderString() string {
+	if x != nil {
+		return x.OrderString
+	}
+	return ""
+}
+
+type GrpcCommandResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ResponseCode      GrpcCommandResponse_GrpcResponseCode `protobuf:"varint,1,opt,name=responseCode,proto3,enum=de.ozgcloud.vorgang.grpc.command.GrpcCommandResponse_GrpcResponseCode" json:"responseCode,omitempty"`
+	MessageCode       string                               `protobuf:"bytes,2,opt,name=messageCode,proto3" json:"messageCode,omitempty"`
+	MessageParameters []string                             `protobuf:"bytes,3,rep,name=messageParameters,proto3" json:"messageParameters,omitempty"`
+	Command           *GrpcCommand                         `protobuf:"bytes,4,opt,name=command,proto3" json:"command,omitempty"`
+}
+
+func (x *GrpcCommandResponse) Reset() {
+	*x = GrpcCommandResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_command_model_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcCommandResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcCommandResponse) ProtoMessage() {}
+
+func (x *GrpcCommandResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_command_model_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcCommandResponse.ProtoReflect.Descriptor instead.
+func (*GrpcCommandResponse) Descriptor() ([]byte, []int) {
+	return file_command_model_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *GrpcCommandResponse) GetResponseCode() GrpcCommandResponse_GrpcResponseCode {
+	if x != nil {
+		return x.ResponseCode
+	}
+	return GrpcCommandResponse_OK
+}
+
+func (x *GrpcCommandResponse) GetMessageCode() string {
+	if x != nil {
+		return x.MessageCode
+	}
+	return ""
+}
+
+func (x *GrpcCommandResponse) GetMessageParameters() []string {
+	if x != nil {
+		return x.MessageParameters
+	}
+	return nil
+}
+
+func (x *GrpcCommandResponse) GetCommand() *GrpcCommand {
+	if x != nil {
+		return x.Command
+	}
+	return nil
+}
+
+type GrpcRevokeCommandRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Context *GrpcCallContext `protobuf:"bytes,1,opt,name=context,proto3" json:"context,omitempty"`
+	Id      string           `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+}
+
+func (x *GrpcRevokeCommandRequest) Reset() {
+	*x = GrpcRevokeCommandRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_command_model_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcRevokeCommandRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcRevokeCommandRequest) ProtoMessage() {}
+
+func (x *GrpcRevokeCommandRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_command_model_proto_msgTypes[2]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcRevokeCommandRequest.ProtoReflect.Descriptor instead.
+func (*GrpcRevokeCommandRequest) Descriptor() ([]byte, []int) {
+	return file_command_model_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *GrpcRevokeCommandRequest) GetContext() *GrpcCallContext {
+	if x != nil {
+		return x.Context
+	}
+	return nil
+}
+
+func (x *GrpcRevokeCommandRequest) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+type GrpcGetCommandRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Context *GrpcCallContext `protobuf:"bytes,1,opt,name=context,proto3" json:"context,omitempty"`
+	Id      string           `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+}
+
+func (x *GrpcGetCommandRequest) Reset() {
+	*x = GrpcGetCommandRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_command_model_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcGetCommandRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcGetCommandRequest) ProtoMessage() {}
+
+func (x *GrpcGetCommandRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_command_model_proto_msgTypes[3]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcGetCommandRequest.ProtoReflect.Descriptor instead.
+func (*GrpcGetCommandRequest) Descriptor() ([]byte, []int) {
+	return file_command_model_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *GrpcGetCommandRequest) GetContext() *GrpcCallContext {
+	if x != nil {
+		return x.Context
+	}
+	return nil
+}
+
+func (x *GrpcGetCommandRequest) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+type GrpcSetCommandExecutedRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	CommandId       string `protobuf:"bytes,1,opt,name=commandId,proto3" json:"commandId,omitempty"`
+	CreatedResource string `protobuf:"bytes,2,opt,name=createdResource,proto3" json:"createdResource,omitempty"`
+}
+
+func (x *GrpcSetCommandExecutedRequest) Reset() {
+	*x = GrpcSetCommandExecutedRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_command_model_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcSetCommandExecutedRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcSetCommandExecutedRequest) ProtoMessage() {}
+
+func (x *GrpcSetCommandExecutedRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_command_model_proto_msgTypes[4]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcSetCommandExecutedRequest.ProtoReflect.Descriptor instead.
+func (*GrpcSetCommandExecutedRequest) Descriptor() ([]byte, []int) {
+	return file_command_model_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *GrpcSetCommandExecutedRequest) GetCommandId() string {
+	if x != nil {
+		return x.CommandId
+	}
+	return ""
+}
+
+func (x *GrpcSetCommandExecutedRequest) GetCreatedResource() string {
+	if x != nil {
+		return x.CreatedResource
+	}
+	return ""
+}
+
+type GrpcCommand struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id              string                                 `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	VorgangId       string                                 `protobuf:"bytes,2,opt,name=vorgangId,proto3" json:"vorgangId,omitempty"`
+	CreatedAt       string                                 `protobuf:"bytes,3,opt,name=createdAt,proto3" json:"createdAt,omitempty"`
+	FinishedAt      string                                 `protobuf:"bytes,4,opt,name=finishedAt,proto3" json:"finishedAt,omitempty"`
+	CreatedBy       string                                 `protobuf:"bytes,10,opt,name=createdBy,proto3" json:"createdBy,omitempty"`
+	CreatedByName   string                                 `protobuf:"bytes,11,opt,name=createdByName,proto3" json:"createdByName,omitempty"`
+	Status          string                                 `protobuf:"bytes,12,opt,name=status,proto3" json:"status,omitempty"`
+	ErrorMessage    string                                 `protobuf:"bytes,13,opt,name=errorMessage,proto3" json:"errorMessage,omitempty"`
+	RelationId      string                                 `protobuf:"bytes,14,opt,name=relationId,proto3" json:"relationId,omitempty"`
+	Body            *GrpcCommandBody                       `protobuf:"bytes,16,opt,name=body,proto3" json:"body,omitempty"`
+	BodyObj         *de_ozgcloud_vorgang_common.GrpcObject `protobuf:"bytes,17,opt,name=bodyObj,proto3" json:"bodyObj,omitempty"`
+	RedirectRequest *GrpcRedirectRequest                   `protobuf:"bytes,20,opt,name=redirectRequest,proto3" json:"redirectRequest,omitempty"`
+	OrderString     string                                 `protobuf:"bytes,21,opt,name=orderString,proto3" json:"orderString,omitempty"`
+	CreatedResource string                                 `protobuf:"bytes,22,opt,name=createdResource,proto3" json:"createdResource,omitempty"`
+}
+
+func (x *GrpcCommand) Reset() {
+	*x = GrpcCommand{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_command_model_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcCommand) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcCommand) ProtoMessage() {}
+
+func (x *GrpcCommand) ProtoReflect() protoreflect.Message {
+	mi := &file_command_model_proto_msgTypes[5]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcCommand.ProtoReflect.Descriptor instead.
+func (*GrpcCommand) Descriptor() ([]byte, []int) {
+	return file_command_model_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *GrpcCommand) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *GrpcCommand) GetVorgangId() string {
+	if x != nil {
+		return x.VorgangId
+	}
+	return ""
+}
+
+func (x *GrpcCommand) GetCreatedAt() string {
+	if x != nil {
+		return x.CreatedAt
+	}
+	return ""
+}
+
+func (x *GrpcCommand) GetFinishedAt() string {
+	if x != nil {
+		return x.FinishedAt
+	}
+	return ""
+}
+
+func (x *GrpcCommand) GetCreatedBy() string {
+	if x != nil {
+		return x.CreatedBy
+	}
+	return ""
+}
+
+func (x *GrpcCommand) GetCreatedByName() string {
+	if x != nil {
+		return x.CreatedByName
+	}
+	return ""
+}
+
+func (x *GrpcCommand) GetStatus() string {
+	if x != nil {
+		return x.Status
+	}
+	return ""
+}
+
+func (x *GrpcCommand) GetErrorMessage() string {
+	if x != nil {
+		return x.ErrorMessage
+	}
+	return ""
+}
+
+func (x *GrpcCommand) GetRelationId() string {
+	if x != nil {
+		return x.RelationId
+	}
+	return ""
+}
+
+func (x *GrpcCommand) GetBody() *GrpcCommandBody {
+	if x != nil {
+		return x.Body
+	}
+	return nil
+}
+
+func (x *GrpcCommand) GetBodyObj() *de_ozgcloud_vorgang_common.GrpcObject {
+	if x != nil {
+		return x.BodyObj
+	}
+	return nil
+}
+
+func (x *GrpcCommand) GetRedirectRequest() *GrpcRedirectRequest {
+	if x != nil {
+		return x.RedirectRequest
+	}
+	return nil
+}
+
+func (x *GrpcCommand) GetOrderString() string {
+	if x != nil {
+		return x.OrderString
+	}
+	return ""
+}
+
+func (x *GrpcCommand) GetCreatedResource() string {
+	if x != nil {
+		return x.CreatedResource
+	}
+	return ""
+}
+
+type GrpcExistsPendingCommandsRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Context   *GrpcCallContext `protobuf:"bytes,1,opt,name=context,proto3" json:"context,omitempty"`
+	VorgangId string           `protobuf:"bytes,2,opt,name=vorgangId,proto3" json:"vorgangId,omitempty"`
+}
+
+func (x *GrpcExistsPendingCommandsRequest) Reset() {
+	*x = GrpcExistsPendingCommandsRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_command_model_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcExistsPendingCommandsRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcExistsPendingCommandsRequest) ProtoMessage() {}
+
+func (x *GrpcExistsPendingCommandsRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_command_model_proto_msgTypes[6]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcExistsPendingCommandsRequest.ProtoReflect.Descriptor instead.
+func (*GrpcExistsPendingCommandsRequest) Descriptor() ([]byte, []int) {
+	return file_command_model_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *GrpcExistsPendingCommandsRequest) GetContext() *GrpcCallContext {
+	if x != nil {
+		return x.Context
+	}
+	return nil
+}
+
+func (x *GrpcExistsPendingCommandsRequest) GetVorgangId() string {
+	if x != nil {
+		return x.VorgangId
+	}
+	return ""
+}
+
+type GrpcExistsPendingCommandsResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ExistsPendingCommands bool `protobuf:"varint,1,opt,name=existsPendingCommands,proto3" json:"existsPendingCommands,omitempty"`
+}
+
+func (x *GrpcExistsPendingCommandsResponse) Reset() {
+	*x = GrpcExistsPendingCommandsResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_command_model_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcExistsPendingCommandsResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcExistsPendingCommandsResponse) ProtoMessage() {}
+
+func (x *GrpcExistsPendingCommandsResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_command_model_proto_msgTypes[7]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcExistsPendingCommandsResponse.ProtoReflect.Descriptor instead.
+func (*GrpcExistsPendingCommandsResponse) Descriptor() ([]byte, []int) {
+	return file_command_model_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *GrpcExistsPendingCommandsResponse) GetExistsPendingCommands() bool {
+	if x != nil {
+		return x.ExistsPendingCommands
+	}
+	return false
+}
+
+type GrpcRedirectRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Context  *GrpcCallContext `protobuf:"bytes,1,opt,name=context,proto3" json:"context,omitempty"`
+	Email    string           `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"`
+	Password string           `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"`
+}
+
+func (x *GrpcRedirectRequest) Reset() {
+	*x = GrpcRedirectRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_command_model_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcRedirectRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcRedirectRequest) ProtoMessage() {}
+
+func (x *GrpcRedirectRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_command_model_proto_msgTypes[8]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcRedirectRequest.ProtoReflect.Descriptor instead.
+func (*GrpcRedirectRequest) Descriptor() ([]byte, []int) {
+	return file_command_model_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *GrpcRedirectRequest) GetContext() *GrpcCallContext {
+	if x != nil {
+		return x.Context
+	}
+	return nil
+}
+
+func (x *GrpcRedirectRequest) GetEmail() string {
+	if x != nil {
+		return x.Email
+	}
+	return ""
+}
+
+func (x *GrpcRedirectRequest) GetPassword() string {
+	if x != nil {
+		return x.Password
+	}
+	return ""
+}
+
+type GrpcGetPendingCommandsRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Context   *GrpcCallContext `protobuf:"bytes,1,opt,name=context,proto3" json:"context,omitempty"`
+	VorgangId string           `protobuf:"bytes,2,opt,name=vorgangId,proto3" json:"vorgangId,omitempty"`
+}
+
+func (x *GrpcGetPendingCommandsRequest) Reset() {
+	*x = GrpcGetPendingCommandsRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_command_model_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcGetPendingCommandsRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcGetPendingCommandsRequest) ProtoMessage() {}
+
+func (x *GrpcGetPendingCommandsRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_command_model_proto_msgTypes[9]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcGetPendingCommandsRequest.ProtoReflect.Descriptor instead.
+func (*GrpcGetPendingCommandsRequest) Descriptor() ([]byte, []int) {
+	return file_command_model_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *GrpcGetPendingCommandsRequest) GetContext() *GrpcCallContext {
+	if x != nil {
+		return x.Context
+	}
+	return nil
+}
+
+func (x *GrpcGetPendingCommandsRequest) GetVorgangId() string {
+	if x != nil {
+		return x.VorgangId
+	}
+	return ""
+}
+
+type GrpcFindCommandsRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Context     *GrpcCallContext `protobuf:"bytes,1,opt,name=context,proto3" json:"context,omitempty"`
+	VorgangId   string           `protobuf:"bytes,2,opt,name=vorgangId,proto3" json:"vorgangId,omitempty"`
+	Status      []string         `protobuf:"bytes,3,rep,name=status,proto3" json:"status,omitempty"`
+	OrderString string           `protobuf:"bytes,5,opt,name=orderString,proto3" json:"orderString,omitempty"`
+}
+
+func (x *GrpcFindCommandsRequest) Reset() {
+	*x = GrpcFindCommandsRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_command_model_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcFindCommandsRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcFindCommandsRequest) ProtoMessage() {}
+
+func (x *GrpcFindCommandsRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_command_model_proto_msgTypes[10]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcFindCommandsRequest.ProtoReflect.Descriptor instead.
+func (*GrpcFindCommandsRequest) Descriptor() ([]byte, []int) {
+	return file_command_model_proto_rawDescGZIP(), []int{10}
+}
+
+func (x *GrpcFindCommandsRequest) GetContext() *GrpcCallContext {
+	if x != nil {
+		return x.Context
+	}
+	return nil
+}
+
+func (x *GrpcFindCommandsRequest) GetVorgangId() string {
+	if x != nil {
+		return x.VorgangId
+	}
+	return ""
+}
+
+func (x *GrpcFindCommandsRequest) GetStatus() []string {
+	if x != nil {
+		return x.Status
+	}
+	return nil
+}
+
+func (x *GrpcFindCommandsRequest) GetOrderString() string {
+	if x != nil {
+		return x.OrderString
+	}
+	return ""
+}
+
+type GrpcGetPendingCommandsResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Command []*GrpcCommand `protobuf:"bytes,1,rep,name=command,proto3" json:"command,omitempty"`
+}
+
+func (x *GrpcGetPendingCommandsResponse) Reset() {
+	*x = GrpcGetPendingCommandsResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_command_model_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcGetPendingCommandsResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcGetPendingCommandsResponse) ProtoMessage() {}
+
+func (x *GrpcGetPendingCommandsResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_command_model_proto_msgTypes[11]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcGetPendingCommandsResponse.ProtoReflect.Descriptor instead.
+func (*GrpcGetPendingCommandsResponse) Descriptor() ([]byte, []int) {
+	return file_command_model_proto_rawDescGZIP(), []int{11}
+}
+
+func (x *GrpcGetPendingCommandsResponse) GetCommand() []*GrpcCommand {
+	if x != nil {
+		return x.Command
+	}
+	return nil
+}
+
+type GrpcCommandsResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Command []*GrpcCommand `protobuf:"bytes,1,rep,name=command,proto3" json:"command,omitempty"`
+}
+
+func (x *GrpcCommandsResponse) Reset() {
+	*x = GrpcCommandsResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_command_model_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcCommandsResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcCommandsResponse) ProtoMessage() {}
+
+func (x *GrpcCommandsResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_command_model_proto_msgTypes[12]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcCommandsResponse.ProtoReflect.Descriptor instead.
+func (*GrpcCommandsResponse) Descriptor() ([]byte, []int) {
+	return file_command_model_proto_rawDescGZIP(), []int{12}
+}
+
+func (x *GrpcCommandsResponse) GetCommand() []*GrpcCommand {
+	if x != nil {
+		return x.Command
+	}
+	return nil
+}
+
+type GrpcCommandBody struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Field []*GrpcCommandBodyField `protobuf:"bytes,1,rep,name=field,proto3" json:"field,omitempty"`
+}
+
+func (x *GrpcCommandBody) Reset() {
+	*x = GrpcCommandBody{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_command_model_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcCommandBody) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcCommandBody) ProtoMessage() {}
+
+func (x *GrpcCommandBody) ProtoReflect() protoreflect.Message {
+	mi := &file_command_model_proto_msgTypes[13]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcCommandBody.ProtoReflect.Descriptor instead.
+func (*GrpcCommandBody) Descriptor() ([]byte, []int) {
+	return file_command_model_proto_rawDescGZIP(), []int{13}
+}
+
+func (x *GrpcCommandBody) GetField() []*GrpcCommandBodyField {
+	if x != nil {
+		return x.Field
+	}
+	return nil
+}
+
+type GrpcCommandBodyField struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name  string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (x *GrpcCommandBodyField) Reset() {
+	*x = GrpcCommandBodyField{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_command_model_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcCommandBodyField) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcCommandBodyField) ProtoMessage() {}
+
+func (x *GrpcCommandBodyField) ProtoReflect() protoreflect.Message {
+	mi := &file_command_model_proto_msgTypes[14]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcCommandBodyField.ProtoReflect.Descriptor instead.
+func (*GrpcCommandBodyField) Descriptor() ([]byte, []int) {
+	return file_command_model_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *GrpcCommandBodyField) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *GrpcCommandBodyField) GetValue() string {
+	if x != nil {
+		return x.Value
+	}
+	return ""
+}
+
+type GrpcEmpty struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *GrpcEmpty) Reset() {
+	*x = GrpcEmpty{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_command_model_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcEmpty) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcEmpty) ProtoMessage() {}
+
+func (x *GrpcEmpty) ProtoReflect() protoreflect.Message {
+	mi := &file_command_model_proto_msgTypes[15]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcEmpty.ProtoReflect.Descriptor instead.
+func (*GrpcEmpty) Descriptor() ([]byte, []int) {
+	return file_command_model_proto_rawDescGZIP(), []int{15}
+}
+
+type GrpcAddSubCommandsRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ParentId                 string               `protobuf:"bytes,1,opt,name=parentId,proto3" json:"parentId,omitempty"`
+	ExecutionMode            string               `protobuf:"bytes,2,opt,name=executionMode,proto3" json:"executionMode,omitempty"`
+	CompletedIfSubsCompleted bool                 `protobuf:"varint,3,opt,name=completedIfSubsCompleted,proto3" json:"completedIfSubsCompleted,omitempty"`
+	SubCommands              []*GrpcCreateCommand `protobuf:"bytes,4,rep,name=subCommands,proto3" json:"subCommands,omitempty"`
+}
+
+func (x *GrpcAddSubCommandsRequest) Reset() {
+	*x = GrpcAddSubCommandsRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_command_model_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcAddSubCommandsRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcAddSubCommandsRequest) ProtoMessage() {}
+
+func (x *GrpcAddSubCommandsRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_command_model_proto_msgTypes[16]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcAddSubCommandsRequest.ProtoReflect.Descriptor instead.
+func (*GrpcAddSubCommandsRequest) Descriptor() ([]byte, []int) {
+	return file_command_model_proto_rawDescGZIP(), []int{16}
+}
+
+func (x *GrpcAddSubCommandsRequest) GetParentId() string {
+	if x != nil {
+		return x.ParentId
+	}
+	return ""
+}
+
+func (x *GrpcAddSubCommandsRequest) GetExecutionMode() string {
+	if x != nil {
+		return x.ExecutionMode
+	}
+	return ""
+}
+
+func (x *GrpcAddSubCommandsRequest) GetCompletedIfSubsCompleted() bool {
+	if x != nil {
+		return x.CompletedIfSubsCompleted
+	}
+	return false
+}
+
+func (x *GrpcAddSubCommandsRequest) GetSubCommands() []*GrpcCreateCommand {
+	if x != nil {
+		return x.SubCommands
+	}
+	return nil
+}
+
+type GrpcCreateCommand struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Order           string                                 `protobuf:"bytes,1,opt,name=order,proto3" json:"order,omitempty"`
+	RelationId      string                                 `protobuf:"bytes,2,opt,name=relationId,proto3" json:"relationId,omitempty"`
+	RelationVersion int64                                  `protobuf:"varint,3,opt,name=relationVersion,proto3" json:"relationVersion,omitempty"`
+	BodyObj         *de_ozgcloud_vorgang_common.GrpcObject `protobuf:"bytes,4,opt,name=bodyObj,proto3" json:"bodyObj,omitempty"`
+}
+
+func (x *GrpcCreateCommand) Reset() {
+	*x = GrpcCreateCommand{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_command_model_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcCreateCommand) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcCreateCommand) ProtoMessage() {}
+
+func (x *GrpcCreateCommand) ProtoReflect() protoreflect.Message {
+	mi := &file_command_model_proto_msgTypes[17]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcCreateCommand.ProtoReflect.Descriptor instead.
+func (*GrpcCreateCommand) Descriptor() ([]byte, []int) {
+	return file_command_model_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *GrpcCreateCommand) GetOrder() string {
+	if x != nil {
+		return x.Order
+	}
+	return ""
+}
+
+func (x *GrpcCreateCommand) GetRelationId() string {
+	if x != nil {
+		return x.RelationId
+	}
+	return ""
+}
+
+func (x *GrpcCreateCommand) GetRelationVersion() int64 {
+	if x != nil {
+		return x.RelationVersion
+	}
+	return 0
+}
+
+func (x *GrpcCreateCommand) GetBodyObj() *de_ozgcloud_vorgang_common.GrpcObject {
+	if x != nil {
+		return x.BodyObj
+	}
+	return nil
+}
+
+var File_command_model_proto protoreflect.FileDescriptor
+
+var file_command_model_proto_rawDesc = []byte{
+	0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x20, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f,
+	0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e,
+	0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x1a, 0x11, 0x63, 0x61, 0x6c, 0x6c, 0x63, 0x6f, 0x6e,
+	0x74, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x12, 0x63, 0x6f, 0x6d, 0x6d,
+	0x6f, 0x6e, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe8,
+	0x03, 0x0a, 0x18, 0x47, 0x72, 0x70, 0x63, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d,
+	0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x0b, 0x63,
+	0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x31, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76,
+	0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
+	0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x74,
+	0x65, 0x78, 0x74, 0x52, 0x0b, 0x63, 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
+	0x12, 0x1c, 0x0a, 0x09, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x1e,
+	0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x28,
+	0x0a, 0x0f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
+	0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x5f, 0x0a, 0x0f, 0x72, 0x65, 0x64, 0x69,
+	0x72, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x35, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
+	0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d,
+	0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63,
+	0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65,
+	0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x04, 0x62, 0x6f, 0x64,
+	0x79, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67,
+	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72,
+	0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43,
+	0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x6f, 0x64, 0x79, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52,
+	0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x0a, 0x07, 0x62, 0x6f, 0x64, 0x79, 0x4f, 0x62, 0x6a,
+	0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63,
+	0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x63, 0x6f, 0x6d,
+	0x6d, 0x6f, 0x6e, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07,
+	0x62, 0x6f, 0x64, 0x79, 0x4f, 0x62, 0x6a, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x72, 0x64, 0x65, 0x72,
+	0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x72,
+	0x64, 0x65, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x22, 0xdc, 0x02, 0x0a, 0x13, 0x47, 0x72,
+	0x70, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x12, 0x6a, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64,
+	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x46, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67,
+	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72,
+	0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43,
+	0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x47,
+	0x72, 0x70, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52,
+	0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a,
+	0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12,
+	0x2c, 0x0a, 0x11, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65,
+	0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x6d, 0x65, 0x73, 0x73,
+	0x61, 0x67, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x47, 0x0a,
+	0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d,
+	0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72,
+	0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
+	0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63,
+	0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x40, 0x0a, 0x10, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b,
+	0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12,
+	0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x4f,
+	0x4e, 0x46, 0x4c, 0x49, 0x43, 0x54, 0x10, 0x03, 0x22, 0x77, 0x0a, 0x18, 0x47, 0x72, 0x70, 0x63,
+	0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c,
+	0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63,
+	0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x61, 0x6c,
+	0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78,
+	0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
+	0x64, 0x22, 0x74, 0x0a, 0x15, 0x47, 0x72, 0x70, 0x63, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d,
+	0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x07, 0x63, 0x6f,
+	0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x64, 0x65,
+	0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e,
+	0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47,
+	0x72, 0x70, 0x63, 0x43, 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07,
+	0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x67, 0x0a, 0x1d, 0x47, 0x72, 0x70, 0x63, 0x53,
+	0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65,
+	0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d,
+	0x61, 0x6e, 0x64, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d,
+	0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65,
+	0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+	0x22, 0xcf, 0x04, 0x0a, 0x0b, 0x47, 0x72, 0x70, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
+	0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64,
+	0x12, 0x1c, 0x0a, 0x09, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x1c,
+	0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1e, 0x0a, 0x0a,
+	0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x41, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0a, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09,
+	0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x72,
+	0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65,
+	0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x72, 0x72, 0x6f,
+	0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c,
+	0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a,
+	0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0a, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x04,
+	0x62, 0x6f, 0x64, 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x64, 0x65, 0x2e,
+	0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67,
+	0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72,
+	0x70, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x62,
+	0x6f, 0x64, 0x79, 0x12, 0x40, 0x0a, 0x07, 0x62, 0x6f, 0x64, 0x79, 0x4f, 0x62, 0x6a, 0x18, 0x11,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f,
+	0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
+	0x6e, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x62, 0x6f,
+	0x64, 0x79, 0x4f, 0x62, 0x6a, 0x12, 0x5f, 0x0a, 0x0f, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63,
+	0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35,
+	0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72,
+	0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
+	0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53,
+	0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x72, 0x64,
+	0x65, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72,
+	0x63, 0x65, 0x22, 0x8d, 0x01, 0x0a, 0x20, 0x47, 0x72, 0x70, 0x63, 0x45, 0x78, 0x69, 0x73, 0x74,
+	0x73, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+	0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a,
+	0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67,
+	0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63,
+	0x43, 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e,
+	0x74, 0x65, 0x78, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x49,
+	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67,
+	0x49, 0x64, 0x22, 0x59, 0x0a, 0x21, 0x47, 0x72, 0x70, 0x63, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73,
+	0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x65, 0x78, 0x69, 0x73, 0x74,
+	0x73, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x50, 0x65,
+	0x6e, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x22, 0x94, 0x01,
+	0x0a, 0x13, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63,
+	0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70,
+	0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x61,
+	0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+	0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73,
+	0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73,
+	0x77, 0x6f, 0x72, 0x64, 0x22, 0x8a, 0x01, 0x0a, 0x1d, 0x47, 0x72, 0x70, 0x63, 0x47, 0x65, 0x74,
+	0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78,
+	0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67,
+	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72,
+	0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43,
+	0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74,
+	0x65, 0x78, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x49, 0x64,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x49,
+	0x64, 0x22, 0xbe, 0x01, 0x0a, 0x17, 0x47, 0x72, 0x70, 0x63, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6f,
+	0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a,
+	0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31,
+	0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72,
+	0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
+	0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78,
+	0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x76, 0x6f,
+	0x72, 0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76,
+	0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
+	0x75, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18,
+	0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, 0x72, 0x69,
+	0x6e, 0x67, 0x22, 0x69, 0x0a, 0x1e, 0x47, 0x72, 0x70, 0x63, 0x47, 0x65, 0x74, 0x50, 0x65, 0x6e,
+	0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18,
+	0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c,
+	0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63,
+	0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x6f, 0x6d,
+	0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x5f, 0x0a,
+	0x14, 0x47, 0x72, 0x70, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
+	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63,
+	0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70,
+	0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x6f,
+	0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x5f,
+	0x0a, 0x0f, 0x47, 0x72, 0x70, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x6f, 0x64,
+	0x79, 0x12, 0x4c, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x36, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76,
+	0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
+	0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42,
+	0x6f, 0x64, 0x79, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22,
+	0x40, 0x0a, 0x14, 0x47, 0x72, 0x70, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x6f,
+	0x64, 0x79, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76,
+	0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
+	0x65, 0x22, 0x0b, 0x0a, 0x09, 0x47, 0x72, 0x70, 0x63, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0xf0,
+	0x01, 0x0a, 0x19, 0x47, 0x72, 0x70, 0x63, 0x41, 0x64, 0x64, 0x53, 0x75, 0x62, 0x43, 0x6f, 0x6d,
+	0x6d, 0x61, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08,
+	0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+	0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x65, 0x78, 0x65, 0x63,
+	0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x0d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x3a,
+	0x0a, 0x18, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x49, 0x66, 0x53, 0x75, 0x62,
+	0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x18, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x49, 0x66, 0x53, 0x75, 0x62,
+	0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x55, 0x0a, 0x0b, 0x73, 0x75,
+	0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x33, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f,
+	0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61,
+	0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d,
+	0x6d, 0x61, 0x6e, 0x64, 0x52, 0x0b, 0x73, 0x75, 0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
+	0x73, 0x22, 0xb5, 0x01, 0x0a, 0x11, 0x47, 0x72, 0x70, 0x63, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+	0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1e, 0x0a,
+	0x0a, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0a, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x28, 0x0a,
+	0x0f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x07, 0x62, 0x6f, 0x64, 0x79, 0x4f,
+	0x62, 0x6a, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a,
+	0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x63,
+	0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+	0x52, 0x07, 0x62, 0x6f, 0x64, 0x79, 0x4f, 0x62, 0x6a, 0x42, 0x22, 0x5a, 0x20, 0x64, 0x65, 0x2e,
+	0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67,
+	0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x62, 0x06, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_command_model_proto_rawDescOnce sync.Once
+	file_command_model_proto_rawDescData = file_command_model_proto_rawDesc
+)
+
+func file_command_model_proto_rawDescGZIP() []byte {
+	file_command_model_proto_rawDescOnce.Do(func() {
+		file_command_model_proto_rawDescData = protoimpl.X.CompressGZIP(file_command_model_proto_rawDescData)
+	})
+	return file_command_model_proto_rawDescData
+}
+
+var file_command_model_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_command_model_proto_msgTypes = make([]protoimpl.MessageInfo, 18)
+var file_command_model_proto_goTypes = []any{
+	(GrpcCommandResponse_GrpcResponseCode)(0),     // 0: de.ozgcloud.vorgang.grpc.command.GrpcCommandResponse.GrpcResponseCode
+	(*GrpcCreateCommandRequest)(nil),              // 1: de.ozgcloud.vorgang.grpc.command.GrpcCreateCommandRequest
+	(*GrpcCommandResponse)(nil),                   // 2: de.ozgcloud.vorgang.grpc.command.GrpcCommandResponse
+	(*GrpcRevokeCommandRequest)(nil),              // 3: de.ozgcloud.vorgang.grpc.command.GrpcRevokeCommandRequest
+	(*GrpcGetCommandRequest)(nil),                 // 4: de.ozgcloud.vorgang.grpc.command.GrpcGetCommandRequest
+	(*GrpcSetCommandExecutedRequest)(nil),         // 5: de.ozgcloud.vorgang.grpc.command.GrpcSetCommandExecutedRequest
+	(*GrpcCommand)(nil),                           // 6: de.ozgcloud.vorgang.grpc.command.GrpcCommand
+	(*GrpcExistsPendingCommandsRequest)(nil),      // 7: de.ozgcloud.vorgang.grpc.command.GrpcExistsPendingCommandsRequest
+	(*GrpcExistsPendingCommandsResponse)(nil),     // 8: de.ozgcloud.vorgang.grpc.command.GrpcExistsPendingCommandsResponse
+	(*GrpcRedirectRequest)(nil),                   // 9: de.ozgcloud.vorgang.grpc.command.GrpcRedirectRequest
+	(*GrpcGetPendingCommandsRequest)(nil),         // 10: de.ozgcloud.vorgang.grpc.command.GrpcGetPendingCommandsRequest
+	(*GrpcFindCommandsRequest)(nil),               // 11: de.ozgcloud.vorgang.grpc.command.GrpcFindCommandsRequest
+	(*GrpcGetPendingCommandsResponse)(nil),        // 12: de.ozgcloud.vorgang.grpc.command.GrpcGetPendingCommandsResponse
+	(*GrpcCommandsResponse)(nil),                  // 13: de.ozgcloud.vorgang.grpc.command.GrpcCommandsResponse
+	(*GrpcCommandBody)(nil),                       // 14: de.ozgcloud.vorgang.grpc.command.GrpcCommandBody
+	(*GrpcCommandBodyField)(nil),                  // 15: de.ozgcloud.vorgang.grpc.command.GrpcCommandBodyField
+	(*GrpcEmpty)(nil),                             // 16: de.ozgcloud.vorgang.grpc.command.GrpcEmpty
+	(*GrpcAddSubCommandsRequest)(nil),             // 17: de.ozgcloud.vorgang.grpc.command.GrpcAddSubCommandsRequest
+	(*GrpcCreateCommand)(nil),                     // 18: de.ozgcloud.vorgang.grpc.command.GrpcCreateCommand
+	(*GrpcCallContext)(nil),                       // 19: de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	(*de_ozgcloud_vorgang_common.GrpcObject)(nil), // 20: de.ozgcloud.vorgang.common.GrpcObject
+}
+var file_command_model_proto_depIdxs = []int32{
+	19, // 0: de.ozgcloud.vorgang.grpc.command.GrpcCreateCommandRequest.callContext:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	9,  // 1: de.ozgcloud.vorgang.grpc.command.GrpcCreateCommandRequest.redirectRequest:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcRedirectRequest
+	15, // 2: de.ozgcloud.vorgang.grpc.command.GrpcCreateCommandRequest.body:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCommandBodyField
+	20, // 3: de.ozgcloud.vorgang.grpc.command.GrpcCreateCommandRequest.bodyObj:type_name -> de.ozgcloud.vorgang.common.GrpcObject
+	0,  // 4: de.ozgcloud.vorgang.grpc.command.GrpcCommandResponse.responseCode:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCommandResponse.GrpcResponseCode
+	6,  // 5: de.ozgcloud.vorgang.grpc.command.GrpcCommandResponse.command:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCommand
+	19, // 6: de.ozgcloud.vorgang.grpc.command.GrpcRevokeCommandRequest.context:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	19, // 7: de.ozgcloud.vorgang.grpc.command.GrpcGetCommandRequest.context:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	14, // 8: de.ozgcloud.vorgang.grpc.command.GrpcCommand.body:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCommandBody
+	20, // 9: de.ozgcloud.vorgang.grpc.command.GrpcCommand.bodyObj:type_name -> de.ozgcloud.vorgang.common.GrpcObject
+	9,  // 10: de.ozgcloud.vorgang.grpc.command.GrpcCommand.redirectRequest:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcRedirectRequest
+	19, // 11: de.ozgcloud.vorgang.grpc.command.GrpcExistsPendingCommandsRequest.context:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	19, // 12: de.ozgcloud.vorgang.grpc.command.GrpcRedirectRequest.context:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	19, // 13: de.ozgcloud.vorgang.grpc.command.GrpcGetPendingCommandsRequest.context:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	19, // 14: de.ozgcloud.vorgang.grpc.command.GrpcFindCommandsRequest.context:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	6,  // 15: de.ozgcloud.vorgang.grpc.command.GrpcGetPendingCommandsResponse.command:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCommand
+	6,  // 16: de.ozgcloud.vorgang.grpc.command.GrpcCommandsResponse.command:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCommand
+	15, // 17: de.ozgcloud.vorgang.grpc.command.GrpcCommandBody.field:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCommandBodyField
+	18, // 18: de.ozgcloud.vorgang.grpc.command.GrpcAddSubCommandsRequest.subCommands:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCreateCommand
+	20, // 19: de.ozgcloud.vorgang.grpc.command.GrpcCreateCommand.bodyObj:type_name -> de.ozgcloud.vorgang.common.GrpcObject
+	20, // [20:20] is the sub-list for method output_type
+	20, // [20:20] is the sub-list for method input_type
+	20, // [20:20] is the sub-list for extension type_name
+	20, // [20:20] is the sub-list for extension extendee
+	0,  // [0:20] is the sub-list for field type_name
+}
+
+func init() { file_command_model_proto_init() }
+func file_command_model_proto_init() {
+	if File_command_model_proto != nil {
+		return
+	}
+	file_callcontext_proto_init()
+	if !protoimpl.UnsafeEnabled {
+		file_command_model_proto_msgTypes[0].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcCreateCommandRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_command_model_proto_msgTypes[1].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcCommandResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_command_model_proto_msgTypes[2].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcRevokeCommandRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_command_model_proto_msgTypes[3].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcGetCommandRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_command_model_proto_msgTypes[4].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcSetCommandExecutedRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_command_model_proto_msgTypes[5].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcCommand); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_command_model_proto_msgTypes[6].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcExistsPendingCommandsRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_command_model_proto_msgTypes[7].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcExistsPendingCommandsResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_command_model_proto_msgTypes[8].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcRedirectRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_command_model_proto_msgTypes[9].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcGetPendingCommandsRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_command_model_proto_msgTypes[10].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcFindCommandsRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_command_model_proto_msgTypes[11].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcGetPendingCommandsResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_command_model_proto_msgTypes[12].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcCommandsResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_command_model_proto_msgTypes[13].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcCommandBody); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_command_model_proto_msgTypes[14].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcCommandBodyField); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_command_model_proto_msgTypes[15].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcEmpty); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_command_model_proto_msgTypes[16].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcAddSubCommandsRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_command_model_proto_msgTypes[17].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcCreateCommand); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_command_model_proto_rawDesc,
+			NumEnums:      1,
+			NumMessages:   18,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_command_model_proto_goTypes,
+		DependencyIndexes: file_command_model_proto_depIdxs,
+		EnumInfos:         file_command_model_proto_enumTypes,
+		MessageInfos:      file_command_model_proto_msgTypes,
+	}.Build()
+	File_command_model_proto = out.File
+	file_command_model_proto_rawDesc = nil
+	file_command_model_proto_goTypes = nil
+	file_command_model_proto_depIdxs = nil
+}
diff --git a/gen/go/command.pb.go b/gen/go/command.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..68c7b68674fe81f62230eb2af01c20e89be69616
--- /dev/null
+++ b/gen/go/command.pb.go
@@ -0,0 +1,103 @@
+//
+// Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+// Ministerpräsidenten des Landes Schleswig-Holstein
+// Staatskanzlei
+// Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+//
+// Lizenziert unter der EUPL, Version 1.2 oder - sobald
+// diese von der Europäischen Kommission genehmigt wurden -
+// Folgeversionen der EUPL ("Lizenz");
+// Sie dürfen dieses Werk ausschließlich gemäß
+// dieser Lizenz nutzen.
+// Eine Kopie der Lizenz finden Sie hier:
+//
+// https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+//
+// Sofern nicht durch anwendbare Rechtsvorschriften
+// gefordert oder in schriftlicher Form vereinbart, wird
+// die unter der Lizenz verbreitete Software "so wie sie
+// ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+// ausdrücklich oder stillschweigend - verbreitet.
+// Die sprachspezifischen Genehmigungen und Beschränkungen
+// unter der Lizenz sind dem Lizenztext zu entnehmen.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.34.2
+// 	protoc        (unknown)
+// source: command.proto
+
+package de_ozgcloud_vorgang_grpc_command
+
+import (
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+var File_command_proto protoreflect.FileDescriptor
+
+var file_command_proto_rawDesc = []byte{
+	0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
+	0x20, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72,
+	0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
+	0x64, 0x1a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x88, 0x01, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x6d, 0x61,
+	0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x76, 0x0a, 0x0a, 0x47, 0x65, 0x74,
+	0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x37, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67,
+	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72,
+	0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x47,
+	0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x2d, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76,
+	0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
+	0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22,
+	0x00, 0x42, 0x22, 0x5a, 0x20, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64,
+	0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f,
+	0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var file_command_proto_goTypes = []any{
+	(*GrpcGetCommandRequest)(nil), // 0: de.ozgcloud.vorgang.grpc.command.GrpcGetCommandRequest
+	(*GrpcCommand)(nil),           // 1: de.ozgcloud.vorgang.grpc.command.GrpcCommand
+}
+var file_command_proto_depIdxs = []int32{
+	0, // 0: de.ozgcloud.vorgang.grpc.command.CommandService.GetCommand:input_type -> de.ozgcloud.vorgang.grpc.command.GrpcGetCommandRequest
+	1, // 1: de.ozgcloud.vorgang.grpc.command.CommandService.GetCommand:output_type -> de.ozgcloud.vorgang.grpc.command.GrpcCommand
+	1, // [1:2] is the sub-list for method output_type
+	0, // [0:1] is the sub-list for method input_type
+	0, // [0:0] is the sub-list for extension type_name
+	0, // [0:0] is the sub-list for extension extendee
+	0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_command_proto_init() }
+func file_command_proto_init() {
+	if File_command_proto != nil {
+		return
+	}
+	file_command_model_proto_init()
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_command_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   0,
+			NumExtensions: 0,
+			NumServices:   1,
+		},
+		GoTypes:           file_command_proto_goTypes,
+		DependencyIndexes: file_command_proto_depIdxs,
+	}.Build()
+	File_command_proto = out.File
+	file_command_proto_rawDesc = nil
+	file_command_proto_goTypes = nil
+	file_command_proto_depIdxs = nil
+}
diff --git a/gen/go/command.pb.gw.go b/gen/go/command.pb.gw.go
new file mode 100644
index 0000000000000000000000000000000000000000..cf99ef206598dcdf27c1f4d4196722311d07fbb5
--- /dev/null
+++ b/gen/go/command.pb.gw.go
@@ -0,0 +1,207 @@
+// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
+// source: command.proto
+
+/*
+Package de_ozgcloud_vorgang_grpc_command is a reverse proxy.
+
+It translates gRPC into RESTful JSON APIs.
+*/
+package de_ozgcloud_vorgang_grpc_command
+
+import (
+	"context"
+	"io"
+	"net/http"
+
+	"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
+	"github.com/grpc-ecosystem/grpc-gateway/v2/utilities"
+	"google.golang.org/grpc"
+	"google.golang.org/grpc/codes"
+	"google.golang.org/grpc/grpclog"
+	"google.golang.org/grpc/metadata"
+	"google.golang.org/grpc/status"
+	"google.golang.org/protobuf/proto"
+)
+
+// Suppress "imported and not used" errors
+var _ codes.Code
+var _ io.Reader
+var _ status.Status
+var _ = runtime.String
+var _ = utilities.NewDoubleArray
+var _ = metadata.Join
+
+var (
+	filter_CommandService_GetCommand_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}
+)
+
+func request_CommandService_GetCommand_0(ctx context.Context, marshaler runtime.Marshaler, client CommandServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq GrpcGetCommandRequest
+	var metadata runtime.ServerMetadata
+
+	var (
+		val string
+		ok  bool
+		err error
+		_   = err
+	)
+
+	val, ok = pathParams["id"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id")
+	}
+
+	protoReq.Id, err = runtime.String(val)
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err)
+	}
+
+	if err := req.ParseForm(); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_CommandService_GetCommand_0); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	msg, err := client.GetCommand(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_CommandService_GetCommand_0(ctx context.Context, marshaler runtime.Marshaler, server CommandServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq GrpcGetCommandRequest
+	var metadata runtime.ServerMetadata
+
+	var (
+		val string
+		ok  bool
+		err error
+		_   = err
+	)
+
+	val, ok = pathParams["id"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id")
+	}
+
+	protoReq.Id, err = runtime.String(val)
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err)
+	}
+
+	if err := req.ParseForm(); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_CommandService_GetCommand_0); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	msg, err := server.GetCommand(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
+// RegisterCommandServiceHandlerServer registers the http handlers for service CommandService to "mux".
+// UnaryRPC     :call CommandServiceServer directly.
+// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
+// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterCommandServiceHandlerFromEndpoint instead.
+func RegisterCommandServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server CommandServiceServer) error {
+
+	mux.Handle("GET", pattern_CommandService_GetCommand_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		var stream runtime.ServerTransportStream
+		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		var err error
+		var annotatedContext context.Context
+		annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/de.ozgcloud.vorgang.grpc.command.CommandService/GetCommand", runtime.WithHTTPPathPattern("/api/command/{id}"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := local_request_CommandService_GetCommand_0(annotatedContext, inboundMarshaler, server, req, pathParams)
+		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
+		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+		if err != nil {
+			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_CommandService_GetCommand_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	return nil
+}
+
+// RegisterCommandServiceHandlerFromEndpoint is same as RegisterCommandServiceHandler but
+// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
+func RegisterCommandServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
+	conn, err := grpc.NewClient(endpoint, opts...)
+	if err != nil {
+		return err
+	}
+	defer func() {
+		if err != nil {
+			if cerr := conn.Close(); cerr != nil {
+				grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr)
+			}
+			return
+		}
+		go func() {
+			<-ctx.Done()
+			if cerr := conn.Close(); cerr != nil {
+				grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr)
+			}
+		}()
+	}()
+
+	return RegisterCommandServiceHandler(ctx, mux, conn)
+}
+
+// RegisterCommandServiceHandler registers the http handlers for service CommandService to "mux".
+// The handlers forward requests to the grpc endpoint over "conn".
+func RegisterCommandServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
+	return RegisterCommandServiceHandlerClient(ctx, mux, NewCommandServiceClient(conn))
+}
+
+// RegisterCommandServiceHandlerClient registers the http handlers for service CommandService
+// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "CommandServiceClient".
+// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "CommandServiceClient"
+// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
+// "CommandServiceClient" to call the correct interceptors.
+func RegisterCommandServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client CommandServiceClient) error {
+
+	mux.Handle("GET", pattern_CommandService_GetCommand_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		var err error
+		var annotatedContext context.Context
+		annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/de.ozgcloud.vorgang.grpc.command.CommandService/GetCommand", runtime.WithHTTPPathPattern("/api/command/{id}"))
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := request_CommandService_GetCommand_0(annotatedContext, inboundMarshaler, client, req, pathParams)
+		annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+		if err != nil {
+			runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_CommandService_GetCommand_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	return nil
+}
+
+var (
+	pattern_CommandService_GetCommand_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"api", "command", "id"}, ""))
+)
+
+var (
+	forward_CommandService_GetCommand_0 = runtime.ForwardResponseMessage
+)
diff --git a/gen/go/command_grpc.pb.go b/gen/go/command_grpc.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..65d439d32189cf25aeffe26c9377a607e88efe86
--- /dev/null
+++ b/gen/go/command_grpc.pb.go
@@ -0,0 +1,133 @@
+//
+// Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+// Ministerpräsidenten des Landes Schleswig-Holstein
+// Staatskanzlei
+// Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+//
+// Lizenziert unter der EUPL, Version 1.2 oder - sobald
+// diese von der Europäischen Kommission genehmigt wurden -
+// Folgeversionen der EUPL ("Lizenz");
+// Sie dürfen dieses Werk ausschließlich gemäß
+// dieser Lizenz nutzen.
+// Eine Kopie der Lizenz finden Sie hier:
+//
+// https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+//
+// Sofern nicht durch anwendbare Rechtsvorschriften
+// gefordert oder in schriftlicher Form vereinbart, wird
+// die unter der Lizenz verbreitete Software "so wie sie
+// ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+// ausdrücklich oder stillschweigend - verbreitet.
+// Die sprachspezifischen Genehmigungen und Beschränkungen
+// unter der Lizenz sind dem Lizenztext zu entnehmen.
+
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.4.0
+// - protoc             (unknown)
+// source: command.proto
+
+package de_ozgcloud_vorgang_grpc_command
+
+import (
+	context "context"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.62.0 or later.
+const _ = grpc.SupportPackageIsVersion8
+
+const (
+	CommandService_GetCommand_FullMethodName = "/de.ozgcloud.vorgang.grpc.command.CommandService/GetCommand"
+)
+
+// CommandServiceClient is the client API for CommandService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type CommandServiceClient interface {
+	GetCommand(ctx context.Context, in *GrpcGetCommandRequest, opts ...grpc.CallOption) (*GrpcCommand, error)
+}
+
+type commandServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCommandServiceClient(cc grpc.ClientConnInterface) CommandServiceClient {
+	return &commandServiceClient{cc}
+}
+
+func (c *commandServiceClient) GetCommand(ctx context.Context, in *GrpcGetCommandRequest, opts ...grpc.CallOption) (*GrpcCommand, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+	out := new(GrpcCommand)
+	err := c.cc.Invoke(ctx, CommandService_GetCommand_FullMethodName, in, out, cOpts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CommandServiceServer is the server API for CommandService service.
+// All implementations must embed UnimplementedCommandServiceServer
+// for forward compatibility
+type CommandServiceServer interface {
+	GetCommand(context.Context, *GrpcGetCommandRequest) (*GrpcCommand, error)
+	mustEmbedUnimplementedCommandServiceServer()
+}
+
+// UnimplementedCommandServiceServer must be embedded to have forward compatible implementations.
+type UnimplementedCommandServiceServer struct {
+}
+
+func (UnimplementedCommandServiceServer) GetCommand(context.Context, *GrpcGetCommandRequest) (*GrpcCommand, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetCommand not implemented")
+}
+func (UnimplementedCommandServiceServer) mustEmbedUnimplementedCommandServiceServer() {}
+
+// UnsafeCommandServiceServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to CommandServiceServer will
+// result in compilation errors.
+type UnsafeCommandServiceServer interface {
+	mustEmbedUnimplementedCommandServiceServer()
+}
+
+func RegisterCommandServiceServer(s grpc.ServiceRegistrar, srv CommandServiceServer) {
+	s.RegisterService(&CommandService_ServiceDesc, srv)
+}
+
+func _CommandService_GetCommand_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GrpcGetCommandRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CommandServiceServer).GetCommand(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: CommandService_GetCommand_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CommandServiceServer).GetCommand(ctx, req.(*GrpcGetCommandRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+// CommandService_ServiceDesc is the grpc.ServiceDesc for CommandService service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var CommandService_ServiceDesc = grpc.ServiceDesc{
+	ServiceName: "de.ozgcloud.vorgang.grpc.command.CommandService",
+	HandlerType: (*CommandServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetCommand",
+			Handler:    _CommandService_GetCommand_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "command.proto",
+}
diff --git a/gen/go/common.model.pb.go b/gen/go/common.model.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..7642901ad1d9a3d0069a740719923fbc45407bd0
--- /dev/null
+++ b/gen/go/common.model.pb.go
@@ -0,0 +1,431 @@
+//
+// Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+// Ministerpräsidenten des Landes Schleswig-Holstein
+// Staatskanzlei
+// Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+//
+// Lizenziert unter der EUPL, Version 1.2 oder - sobald
+// diese von der Europäischen Kommission genehmigt wurden -
+// Folgeversionen der EUPL ("Lizenz");
+// Sie dürfen dieses Werk ausschließlich gemäß
+// dieser Lizenz nutzen.
+// Eine Kopie der Lizenz finden Sie hier:
+//
+// https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+//
+// Sofern nicht durch anwendbare Rechtsvorschriften
+// gefordert oder in schriftlicher Form vereinbart, wird
+// die unter der Lizenz verbreitete Software "so wie sie
+// ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+// ausdrücklich oder stillschweigend - verbreitet.
+// Die sprachspezifischen Genehmigungen und Beschränkungen
+// unter der Lizenz sind dem Lizenztext zu entnehmen.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.34.2
+// 	protoc        (unknown)
+// source: common.model.proto
+
+package de_ozgcloud_vorgang_common
+
+import (
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type GrpcQueryOperator int32
+
+const (
+	GrpcQueryOperator_GREATER_THEN             GrpcQueryOperator = 0 // >
+	GrpcQueryOperator_GREATER_THEN_OR_EQUAL_TO GrpcQueryOperator = 1 // >=
+	GrpcQueryOperator_LESS_THEN                GrpcQueryOperator = 2 // <
+	GrpcQueryOperator_LESS_THEN_OR_EQUAL_TO    GrpcQueryOperator = 3 // <=
+	GrpcQueryOperator_EQUAL                    GrpcQueryOperator = 4 // =
+	GrpcQueryOperator_UNEQUAL                  GrpcQueryOperator = 5 // <>
+	GrpcQueryOperator_IS_NULL                  GrpcQueryOperator = 6
+	GrpcQueryOperator_IS_EMPTY                 GrpcQueryOperator = 7
+	GrpcQueryOperator_EXISTS                   GrpcQueryOperator = 8
+	GrpcQueryOperator_NOT_EXIST                GrpcQueryOperator = 9
+)
+
+// Enum value maps for GrpcQueryOperator.
+var (
+	GrpcQueryOperator_name = map[int32]string{
+		0: "GREATER_THEN",
+		1: "GREATER_THEN_OR_EQUAL_TO",
+		2: "LESS_THEN",
+		3: "LESS_THEN_OR_EQUAL_TO",
+		4: "EQUAL",
+		5: "UNEQUAL",
+		6: "IS_NULL",
+		7: "IS_EMPTY",
+		8: "EXISTS",
+		9: "NOT_EXIST",
+	}
+	GrpcQueryOperator_value = map[string]int32{
+		"GREATER_THEN":             0,
+		"GREATER_THEN_OR_EQUAL_TO": 1,
+		"LESS_THEN":                2,
+		"LESS_THEN_OR_EQUAL_TO":    3,
+		"EQUAL":                    4,
+		"UNEQUAL":                  5,
+		"IS_NULL":                  6,
+		"IS_EMPTY":                 7,
+		"EXISTS":                   8,
+		"NOT_EXIST":                9,
+	}
+)
+
+func (x GrpcQueryOperator) Enum() *GrpcQueryOperator {
+	p := new(GrpcQueryOperator)
+	*p = x
+	return p
+}
+
+func (x GrpcQueryOperator) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (GrpcQueryOperator) Descriptor() protoreflect.EnumDescriptor {
+	return file_common_model_proto_enumTypes[0].Descriptor()
+}
+
+func (GrpcQueryOperator) Type() protoreflect.EnumType {
+	return &file_common_model_proto_enumTypes[0]
+}
+
+func (x GrpcQueryOperator) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use GrpcQueryOperator.Descriptor instead.
+func (GrpcQueryOperator) EnumDescriptor() ([]byte, []int) {
+	return file_common_model_proto_rawDescGZIP(), []int{0}
+}
+
+type GrpcObject struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Property  []*GrpcProperty  `protobuf:"bytes,1,rep,name=property,proto3" json:"property,omitempty"`
+	SubObject []*GrpcSubObject `protobuf:"bytes,2,rep,name=subObject,proto3" json:"subObject,omitempty"`
+}
+
+func (x *GrpcObject) Reset() {
+	*x = GrpcObject{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_model_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcObject) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcObject) ProtoMessage() {}
+
+func (x *GrpcObject) ProtoReflect() protoreflect.Message {
+	mi := &file_common_model_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcObject.ProtoReflect.Descriptor instead.
+func (*GrpcObject) Descriptor() ([]byte, []int) {
+	return file_common_model_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *GrpcObject) GetProperty() []*GrpcProperty {
+	if x != nil {
+		return x.Property
+	}
+	return nil
+}
+
+func (x *GrpcObject) GetSubObject() []*GrpcSubObject {
+	if x != nil {
+		return x.SubObject
+	}
+	return nil
+}
+
+type GrpcProperty struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name  string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Value []string `protobuf:"bytes,2,rep,name=value,proto3" json:"value,omitempty"`
+}
+
+func (x *GrpcProperty) Reset() {
+	*x = GrpcProperty{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_model_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcProperty) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcProperty) ProtoMessage() {}
+
+func (x *GrpcProperty) ProtoReflect() protoreflect.Message {
+	mi := &file_common_model_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcProperty.ProtoReflect.Descriptor instead.
+func (*GrpcProperty) Descriptor() ([]byte, []int) {
+	return file_common_model_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *GrpcProperty) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *GrpcProperty) GetValue() []string {
+	if x != nil {
+		return x.Value
+	}
+	return nil
+}
+
+type GrpcSubObject struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name      string           `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Property  []*GrpcProperty  `protobuf:"bytes,2,rep,name=property,proto3" json:"property,omitempty"`
+	SubObject []*GrpcSubObject `protobuf:"bytes,3,rep,name=subObject,proto3" json:"subObject,omitempty"`
+}
+
+func (x *GrpcSubObject) Reset() {
+	*x = GrpcSubObject{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_model_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcSubObject) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcSubObject) ProtoMessage() {}
+
+func (x *GrpcSubObject) ProtoReflect() protoreflect.Message {
+	mi := &file_common_model_proto_msgTypes[2]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcSubObject.ProtoReflect.Descriptor instead.
+func (*GrpcSubObject) Descriptor() ([]byte, []int) {
+	return file_common_model_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *GrpcSubObject) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *GrpcSubObject) GetProperty() []*GrpcProperty {
+	if x != nil {
+		return x.Property
+	}
+	return nil
+}
+
+func (x *GrpcSubObject) GetSubObject() []*GrpcSubObject {
+	if x != nil {
+		return x.SubObject
+	}
+	return nil
+}
+
+var File_common_model_proto protoreflect.FileDescriptor
+
+var file_common_model_proto_rawDesc = []byte{
+	0x0a, 0x12, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75,
+	0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
+	0x22, 0x9b, 0x01, 0x0a, 0x0a, 0x47, 0x72, 0x70, 0x63, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12,
+	0x44, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x28, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
+	0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x47,
+	0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x52, 0x08, 0x70, 0x72, 0x6f,
+	0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x47, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x4f, 0x62, 0x6a, 0x65,
+	0x63, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a,
+	0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x63,
+	0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x53, 0x75, 0x62, 0x4f, 0x62, 0x6a,
+	0x65, 0x63, 0x74, 0x52, 0x09, 0x73, 0x75, 0x62, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x38,
+	0x0a, 0x0c, 0x47, 0x72, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x12,
+	0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
+	0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28,
+	0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb2, 0x01, 0x0a, 0x0d, 0x47, 0x72, 0x70,
+	0x63, 0x53, 0x75, 0x62, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
+	0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x44,
+	0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x28, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76,
+	0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x47, 0x72,
+	0x70, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70,
+	0x65, 0x72, 0x74, 0x79, 0x12, 0x47, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x4f, 0x62, 0x6a, 0x65, 0x63,
+	0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67,
+	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x63, 0x6f,
+	0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x53, 0x75, 0x62, 0x4f, 0x62, 0x6a, 0x65,
+	0x63, 0x74, 0x52, 0x09, 0x73, 0x75, 0x62, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2a, 0xbb, 0x01,
+	0x0a, 0x11, 0x47, 0x72, 0x70, 0x63, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x70, 0x65, 0x72, 0x61,
+	0x74, 0x6f, 0x72, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x54,
+	0x48, 0x45, 0x4e, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52,
+	0x5f, 0x54, 0x48, 0x45, 0x4e, 0x5f, 0x4f, 0x52, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x5f, 0x54,
+	0x4f, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48, 0x45, 0x4e,
+	0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48, 0x45, 0x4e, 0x5f,
+	0x4f, 0x52, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x5f, 0x54, 0x4f, 0x10, 0x03, 0x12, 0x09, 0x0a,
+	0x05, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x45, 0x51,
+	0x55, 0x41, 0x4c, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x53, 0x5f, 0x4e, 0x55, 0x4c, 0x4c,
+	0x10, 0x06, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x53, 0x5f, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x10, 0x07,
+	0x12, 0x0a, 0x0a, 0x06, 0x45, 0x58, 0x49, 0x53, 0x54, 0x53, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09,
+	0x4e, 0x4f, 0x54, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x09, 0x42, 0x1c, 0x5a, 0x1a, 0x64,
+	0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61,
+	0x6e, 0x67, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x33,
+}
+
+var (
+	file_common_model_proto_rawDescOnce sync.Once
+	file_common_model_proto_rawDescData = file_common_model_proto_rawDesc
+)
+
+func file_common_model_proto_rawDescGZIP() []byte {
+	file_common_model_proto_rawDescOnce.Do(func() {
+		file_common_model_proto_rawDescData = protoimpl.X.CompressGZIP(file_common_model_proto_rawDescData)
+	})
+	return file_common_model_proto_rawDescData
+}
+
+var file_common_model_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_common_model_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
+var file_common_model_proto_goTypes = []any{
+	(GrpcQueryOperator)(0), // 0: de.ozgcloud.vorgang.common.GrpcQueryOperator
+	(*GrpcObject)(nil),     // 1: de.ozgcloud.vorgang.common.GrpcObject
+	(*GrpcProperty)(nil),   // 2: de.ozgcloud.vorgang.common.GrpcProperty
+	(*GrpcSubObject)(nil),  // 3: de.ozgcloud.vorgang.common.GrpcSubObject
+}
+var file_common_model_proto_depIdxs = []int32{
+	2, // 0: de.ozgcloud.vorgang.common.GrpcObject.property:type_name -> de.ozgcloud.vorgang.common.GrpcProperty
+	3, // 1: de.ozgcloud.vorgang.common.GrpcObject.subObject:type_name -> de.ozgcloud.vorgang.common.GrpcSubObject
+	2, // 2: de.ozgcloud.vorgang.common.GrpcSubObject.property:type_name -> de.ozgcloud.vorgang.common.GrpcProperty
+	3, // 3: de.ozgcloud.vorgang.common.GrpcSubObject.subObject:type_name -> de.ozgcloud.vorgang.common.GrpcSubObject
+	4, // [4:4] is the sub-list for method output_type
+	4, // [4:4] is the sub-list for method input_type
+	4, // [4:4] is the sub-list for extension type_name
+	4, // [4:4] is the sub-list for extension extendee
+	0, // [0:4] is the sub-list for field type_name
+}
+
+func init() { file_common_model_proto_init() }
+func file_common_model_proto_init() {
+	if File_common_model_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_common_model_proto_msgTypes[0].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcObject); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_model_proto_msgTypes[1].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcProperty); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_model_proto_msgTypes[2].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcSubObject); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_common_model_proto_rawDesc,
+			NumEnums:      1,
+			NumMessages:   3,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_common_model_proto_goTypes,
+		DependencyIndexes: file_common_model_proto_depIdxs,
+		EnumInfos:         file_common_model_proto_enumTypes,
+		MessageInfos:      file_common_model_proto_msgTypes,
+	}.Build()
+	File_common_model_proto = out.File
+	file_common_model_proto_rawDesc = nil
+	file_common_model_proto_goTypes = nil
+	file_common_model_proto_depIdxs = nil
+}
diff --git a/gen/go/filemodel.pb.go b/gen/go/filemodel.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..e62581c0651a5b17cb63e966ba8ca8abb913befe
--- /dev/null
+++ b/gen/go/filemodel.pb.go
@@ -0,0 +1,488 @@
+//
+// Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+// Ministerpräsidenten des Landes Schleswig-Holstein
+// Staatskanzlei
+// Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+//
+// Lizenziert unter der EUPL, Version 1.2 oder - sobald
+// diese von der Europäischen Kommission genehmigt wurden -
+// Folgeversionen der EUPL ("Lizenz");
+// Sie dürfen dieses Werk ausschließlich gemäß
+// dieser Lizenz nutzen.
+// Eine Kopie der Lizenz finden Sie hier:
+//
+// https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+//
+// Sofern nicht durch anwendbare Rechtsvorschriften
+// gefordert oder in schriftlicher Form vereinbart, wird
+// die unter der Lizenz verbreitete Software "so wie sie
+// ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+// ausdrücklich oder stillschweigend - verbreitet.
+// Die sprachspezifischen Genehmigungen und Beschränkungen
+// unter der Lizenz sind dem Lizenztext zu entnehmen.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.34.2
+// 	protoc        (unknown)
+// source: filemodel.proto
+
+package de_ozgcloud_vorgang_grpc_file
+
+import (
+	de_ozgcloud_vorgang_grpc_command "de.ozgcloud.vorgang.grpc.command"
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type GrpcGetAttachmentsRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Context   *de_ozgcloud_vorgang_grpc_command.GrpcCallContext `protobuf:"bytes,1,opt,name=context,proto3" json:"context,omitempty"`
+	EingangId string                                            `protobuf:"bytes,2,opt,name=eingangId,proto3" json:"eingangId,omitempty"`
+}
+
+func (x *GrpcGetAttachmentsRequest) Reset() {
+	*x = GrpcGetAttachmentsRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_filemodel_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcGetAttachmentsRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcGetAttachmentsRequest) ProtoMessage() {}
+
+func (x *GrpcGetAttachmentsRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_filemodel_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcGetAttachmentsRequest.ProtoReflect.Descriptor instead.
+func (*GrpcGetAttachmentsRequest) Descriptor() ([]byte, []int) {
+	return file_filemodel_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *GrpcGetAttachmentsRequest) GetContext() *de_ozgcloud_vorgang_grpc_command.GrpcCallContext {
+	if x != nil {
+		return x.Context
+	}
+	return nil
+}
+
+func (x *GrpcGetAttachmentsRequest) GetEingangId() string {
+	if x != nil {
+		return x.EingangId
+	}
+	return ""
+}
+
+type GrpcGetAttachmentsResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	File []*GrpcOzgFile `protobuf:"bytes,1,rep,name=file,proto3" json:"file,omitempty"`
+}
+
+func (x *GrpcGetAttachmentsResponse) Reset() {
+	*x = GrpcGetAttachmentsResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_filemodel_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcGetAttachmentsResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcGetAttachmentsResponse) ProtoMessage() {}
+
+func (x *GrpcGetAttachmentsResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_filemodel_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcGetAttachmentsResponse.ProtoReflect.Descriptor instead.
+func (*GrpcGetAttachmentsResponse) Descriptor() ([]byte, []int) {
+	return file_filemodel_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *GrpcGetAttachmentsResponse) GetFile() []*GrpcOzgFile {
+	if x != nil {
+		return x.File
+	}
+	return nil
+}
+
+type GrpcGetRepresentationsRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Context   *de_ozgcloud_vorgang_grpc_command.GrpcCallContext `protobuf:"bytes,1,opt,name=context,proto3" json:"context,omitempty"`
+	EingangId string                                            `protobuf:"bytes,2,opt,name=eingangId,proto3" json:"eingangId,omitempty"`
+}
+
+func (x *GrpcGetRepresentationsRequest) Reset() {
+	*x = GrpcGetRepresentationsRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_filemodel_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcGetRepresentationsRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcGetRepresentationsRequest) ProtoMessage() {}
+
+func (x *GrpcGetRepresentationsRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_filemodel_proto_msgTypes[2]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcGetRepresentationsRequest.ProtoReflect.Descriptor instead.
+func (*GrpcGetRepresentationsRequest) Descriptor() ([]byte, []int) {
+	return file_filemodel_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *GrpcGetRepresentationsRequest) GetContext() *de_ozgcloud_vorgang_grpc_command.GrpcCallContext {
+	if x != nil {
+		return x.Context
+	}
+	return nil
+}
+
+func (x *GrpcGetRepresentationsRequest) GetEingangId() string {
+	if x != nil {
+		return x.EingangId
+	}
+	return ""
+}
+
+type GrpcGetRepresentationsResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	File []*GrpcOzgFile `protobuf:"bytes,1,rep,name=file,proto3" json:"file,omitempty"`
+}
+
+func (x *GrpcGetRepresentationsResponse) Reset() {
+	*x = GrpcGetRepresentationsResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_filemodel_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcGetRepresentationsResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcGetRepresentationsResponse) ProtoMessage() {}
+
+func (x *GrpcGetRepresentationsResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_filemodel_proto_msgTypes[3]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcGetRepresentationsResponse.ProtoReflect.Descriptor instead.
+func (*GrpcGetRepresentationsResponse) Descriptor() ([]byte, []int) {
+	return file_filemodel_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *GrpcGetRepresentationsResponse) GetFile() []*GrpcOzgFile {
+	if x != nil {
+		return x.File
+	}
+	return nil
+}
+
+type GrpcOzgFile struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id          string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	Name        string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	Size        int64  `protobuf:"varint,3,opt,name=size,proto3" json:"size,omitempty"`
+	ContentType string `protobuf:"bytes,4,opt,name=contentType,proto3" json:"contentType,omitempty"`
+}
+
+func (x *GrpcOzgFile) Reset() {
+	*x = GrpcOzgFile{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_filemodel_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcOzgFile) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcOzgFile) ProtoMessage() {}
+
+func (x *GrpcOzgFile) ProtoReflect() protoreflect.Message {
+	mi := &file_filemodel_proto_msgTypes[4]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcOzgFile.ProtoReflect.Descriptor instead.
+func (*GrpcOzgFile) Descriptor() ([]byte, []int) {
+	return file_filemodel_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *GrpcOzgFile) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *GrpcOzgFile) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *GrpcOzgFile) GetSize() int64 {
+	if x != nil {
+		return x.Size
+	}
+	return 0
+}
+
+func (x *GrpcOzgFile) GetContentType() string {
+	if x != nil {
+		return x.ContentType
+	}
+	return ""
+}
+
+var File_filemodel_proto protoreflect.FileDescriptor
+
+var file_filemodel_proto_rawDesc = []byte{
+	0x0a, 0x0f, 0x66, 0x69, 0x6c, 0x65, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x12, 0x1d, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76,
+	0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x66, 0x69, 0x6c, 0x65,
+	0x1a, 0x11, 0x63, 0x61, 0x6c, 0x6c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x22, 0x86, 0x01, 0x0a, 0x19, 0x47, 0x72, 0x70, 0x63, 0x47, 0x65, 0x74, 0x41,
+	0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x12, 0x4b, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x31, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64,
+	0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f,
+	0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x61, 0x6c, 0x6c, 0x43, 0x6f,
+	0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1c,
+	0x0a, 0x09, 0x65, 0x69, 0x6e, 0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x09, 0x65, 0x69, 0x6e, 0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x22, 0x5c, 0x0a, 0x1a,
+	0x47, 0x72, 0x70, 0x63, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e,
+	0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x04, 0x66, 0x69,
+	0x6c, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a,
+	0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67,
+	0x72, 0x70, 0x63, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4f, 0x7a, 0x67,
+	0x46, 0x69, 0x6c, 0x65, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x1d, 0x47,
+	0x72, 0x70, 0x63, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x07,
+	0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e,
+	0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67,
+	0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
+	0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
+	0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x69, 0x6e,
+	0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x69,
+	0x6e, 0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x22, 0x60, 0x0a, 0x1e, 0x47, 0x72, 0x70, 0x63, 0x47,
+	0x65, 0x74, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x04, 0x66, 0x69, 0x6c,
+	0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67,
+	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72,
+	0x70, 0x63, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4f, 0x7a, 0x67, 0x46,
+	0x69, 0x6c, 0x65, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x67, 0x0a, 0x0b, 0x47, 0x72, 0x70,
+	0x63, 0x4f, 0x7a, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04,
+	0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65,
+	0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18,
+	0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79,
+	0x70, 0x65, 0x42, 0x1f, 0x5a, 0x1d, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75,
+	0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x66,
+	0x69, 0x6c, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_filemodel_proto_rawDescOnce sync.Once
+	file_filemodel_proto_rawDescData = file_filemodel_proto_rawDesc
+)
+
+func file_filemodel_proto_rawDescGZIP() []byte {
+	file_filemodel_proto_rawDescOnce.Do(func() {
+		file_filemodel_proto_rawDescData = protoimpl.X.CompressGZIP(file_filemodel_proto_rawDescData)
+	})
+	return file_filemodel_proto_rawDescData
+}
+
+var file_filemodel_proto_msgTypes = make([]protoimpl.MessageInfo, 5)
+var file_filemodel_proto_goTypes = []any{
+	(*GrpcGetAttachmentsRequest)(nil),                        // 0: de.ozgcloud.vorgang.grpc.file.GrpcGetAttachmentsRequest
+	(*GrpcGetAttachmentsResponse)(nil),                       // 1: de.ozgcloud.vorgang.grpc.file.GrpcGetAttachmentsResponse
+	(*GrpcGetRepresentationsRequest)(nil),                    // 2: de.ozgcloud.vorgang.grpc.file.GrpcGetRepresentationsRequest
+	(*GrpcGetRepresentationsResponse)(nil),                   // 3: de.ozgcloud.vorgang.grpc.file.GrpcGetRepresentationsResponse
+	(*GrpcOzgFile)(nil),                                      // 4: de.ozgcloud.vorgang.grpc.file.GrpcOzgFile
+	(*de_ozgcloud_vorgang_grpc_command.GrpcCallContext)(nil), // 5: de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+}
+var file_filemodel_proto_depIdxs = []int32{
+	5, // 0: de.ozgcloud.vorgang.grpc.file.GrpcGetAttachmentsRequest.context:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	4, // 1: de.ozgcloud.vorgang.grpc.file.GrpcGetAttachmentsResponse.file:type_name -> de.ozgcloud.vorgang.grpc.file.GrpcOzgFile
+	5, // 2: de.ozgcloud.vorgang.grpc.file.GrpcGetRepresentationsRequest.context:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	4, // 3: de.ozgcloud.vorgang.grpc.file.GrpcGetRepresentationsResponse.file:type_name -> de.ozgcloud.vorgang.grpc.file.GrpcOzgFile
+	4, // [4:4] is the sub-list for method output_type
+	4, // [4:4] is the sub-list for method input_type
+	4, // [4:4] is the sub-list for extension type_name
+	4, // [4:4] is the sub-list for extension extendee
+	0, // [0:4] is the sub-list for field type_name
+}
+
+func init() { file_filemodel_proto_init() }
+func file_filemodel_proto_init() {
+	if File_filemodel_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_filemodel_proto_msgTypes[0].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcGetAttachmentsRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_filemodel_proto_msgTypes[1].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcGetAttachmentsResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_filemodel_proto_msgTypes[2].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcGetRepresentationsRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_filemodel_proto_msgTypes[3].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcGetRepresentationsResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_filemodel_proto_msgTypes[4].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcOzgFile); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_filemodel_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   5,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_filemodel_proto_goTypes,
+		DependencyIndexes: file_filemodel_proto_depIdxs,
+		MessageInfos:      file_filemodel_proto_msgTypes,
+	}.Build()
+	File_filemodel_proto = out.File
+	file_filemodel_proto_rawDesc = nil
+	file_filemodel_proto_goTypes = nil
+	file_filemodel_proto_depIdxs = nil
+}
diff --git a/gen/go/postfach.model.pb.go b/gen/go/postfach.model.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..1a7e728504f74f43351af347db784035e79514c2
--- /dev/null
+++ b/gen/go/postfach.model.pb.go
@@ -0,0 +1,1666 @@
+//
+// Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+// Ministerpräsidenten des Landes Schleswig-Holstein
+// Staatskanzlei
+// Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+//
+// Lizenziert unter der EUPL, Version 1.2 oder - sobald
+// diese von der Europäischen Kommission genehmigt wurden -
+// Folgeversionen der EUPL ("Lizenz");
+// Sie dürfen dieses Werk ausschließlich gemäß
+// dieser Lizenz nutzen.
+// Eine Kopie der Lizenz finden Sie hier:
+//
+// https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+//
+// Sofern nicht durch anwendbare Rechtsvorschriften
+// gefordert oder in schriftlicher Form vereinbart, wird
+// die unter der Lizenz verbreitete Software "so wie sie
+// ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+// ausdrücklich oder stillschweigend - verbreitet.
+// Die sprachspezifischen Genehmigungen und Beschränkungen
+// unter der Lizenz sind dem Lizenztext zu entnehmen.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.34.2
+// 	protoc        (unknown)
+// source: postfach.model.proto
+
+package de_ozgcloud_nachrichten_postfach
+
+import (
+	de_ozgcloud_vorgang_common "de.ozgcloud.vorgang.common"
+	de_ozgcloud_vorgang_grpc_command "de.ozgcloud.vorgang.grpc.command"
+	de_ozgcloud_vorgang_vorgang "de.ozgcloud.vorgang.vorgang"
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type GrpcDirection int32
+
+const (
+	GrpcDirection_UNDEFINED GrpcDirection = 0
+	GrpcDirection_IN        GrpcDirection = 1
+	GrpcDirection_OUT       GrpcDirection = 2
+)
+
+// Enum value maps for GrpcDirection.
+var (
+	GrpcDirection_name = map[int32]string{
+		0: "UNDEFINED",
+		1: "IN",
+		2: "OUT",
+	}
+	GrpcDirection_value = map[string]int32{
+		"UNDEFINED": 0,
+		"IN":        1,
+		"OUT":       2,
+	}
+)
+
+func (x GrpcDirection) Enum() *GrpcDirection {
+	p := new(GrpcDirection)
+	*p = x
+	return p
+}
+
+func (x GrpcDirection) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (GrpcDirection) Descriptor() protoreflect.EnumDescriptor {
+	return file_postfach_model_proto_enumTypes[0].Descriptor()
+}
+
+func (GrpcDirection) Type() protoreflect.EnumType {
+	return &file_postfach_model_proto_enumTypes[0]
+}
+
+func (x GrpcDirection) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use GrpcDirection.Descriptor instead.
+func (GrpcDirection) EnumDescriptor() ([]byte, []int) {
+	return file_postfach_model_proto_rawDescGZIP(), []int{0}
+}
+
+type GrpcSendPostfachMailRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Context   *de_ozgcloud_vorgang_grpc_command.GrpcCallContext `protobuf:"bytes,1,opt,name=context,proto3" json:"context,omitempty"`
+	CommandId string                                            `protobuf:"bytes,2,opt,name=commandId,proto3" json:"commandId,omitempty"`
+	Mail      *GrpcPostfachMail                                 `protobuf:"bytes,5,opt,name=mail,proto3" json:"mail,omitempty"`
+}
+
+func (x *GrpcSendPostfachMailRequest) Reset() {
+	*x = GrpcSendPostfachMailRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_postfach_model_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcSendPostfachMailRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcSendPostfachMailRequest) ProtoMessage() {}
+
+func (x *GrpcSendPostfachMailRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_postfach_model_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcSendPostfachMailRequest.ProtoReflect.Descriptor instead.
+func (*GrpcSendPostfachMailRequest) Descriptor() ([]byte, []int) {
+	return file_postfach_model_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *GrpcSendPostfachMailRequest) GetContext() *de_ozgcloud_vorgang_grpc_command.GrpcCallContext {
+	if x != nil {
+		return x.Context
+	}
+	return nil
+}
+
+func (x *GrpcSendPostfachMailRequest) GetCommandId() string {
+	if x != nil {
+		return x.CommandId
+	}
+	return ""
+}
+
+func (x *GrpcSendPostfachMailRequest) GetMail() *GrpcPostfachMail {
+	if x != nil {
+		return x.Mail
+	}
+	return nil
+}
+
+type GrpcSaveNachrichtDraftRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	VorgangId string                 `protobuf:"bytes,1,opt,name=vorgangId,proto3" json:"vorgangId,omitempty"`
+	Nachricht *GrpcPostfachNachricht `protobuf:"bytes,2,opt,name=nachricht,proto3" json:"nachricht,omitempty"`
+}
+
+func (x *GrpcSaveNachrichtDraftRequest) Reset() {
+	*x = GrpcSaveNachrichtDraftRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_postfach_model_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcSaveNachrichtDraftRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcSaveNachrichtDraftRequest) ProtoMessage() {}
+
+func (x *GrpcSaveNachrichtDraftRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_postfach_model_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcSaveNachrichtDraftRequest.ProtoReflect.Descriptor instead.
+func (*GrpcSaveNachrichtDraftRequest) Descriptor() ([]byte, []int) {
+	return file_postfach_model_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *GrpcSaveNachrichtDraftRequest) GetVorgangId() string {
+	if x != nil {
+		return x.VorgangId
+	}
+	return ""
+}
+
+func (x *GrpcSaveNachrichtDraftRequest) GetNachricht() *GrpcPostfachNachricht {
+	if x != nil {
+		return x.Nachricht
+	}
+	return nil
+}
+
+type GrpcSaveNachrichtDraftResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *GrpcSaveNachrichtDraftResponse) Reset() {
+	*x = GrpcSaveNachrichtDraftResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_postfach_model_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcSaveNachrichtDraftResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcSaveNachrichtDraftResponse) ProtoMessage() {}
+
+func (x *GrpcSaveNachrichtDraftResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_postfach_model_proto_msgTypes[2]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcSaveNachrichtDraftResponse.ProtoReflect.Descriptor instead.
+func (*GrpcSaveNachrichtDraftResponse) Descriptor() ([]byte, []int) {
+	return file_postfach_model_proto_rawDescGZIP(), []int{2}
+}
+
+type GrpcSendPostfachMailResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *GrpcSendPostfachMailResponse) Reset() {
+	*x = GrpcSendPostfachMailResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_postfach_model_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcSendPostfachMailResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcSendPostfachMailResponse) ProtoMessage() {}
+
+func (x *GrpcSendPostfachMailResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_postfach_model_proto_msgTypes[3]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcSendPostfachMailResponse.ProtoReflect.Descriptor instead.
+func (*GrpcSendPostfachMailResponse) Descriptor() ([]byte, []int) {
+	return file_postfach_model_proto_rawDescGZIP(), []int{3}
+}
+
+type GrpcFindPostfachMailRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Context     *de_ozgcloud_vorgang_grpc_command.GrpcCallContext `protobuf:"bytes,1,opt,name=context,proto3" json:"context,omitempty"`
+	NachrichtId string                                            `protobuf:"bytes,2,opt,name=nachrichtId,proto3" json:"nachrichtId,omitempty"`
+}
+
+func (x *GrpcFindPostfachMailRequest) Reset() {
+	*x = GrpcFindPostfachMailRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_postfach_model_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcFindPostfachMailRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcFindPostfachMailRequest) ProtoMessage() {}
+
+func (x *GrpcFindPostfachMailRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_postfach_model_proto_msgTypes[4]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcFindPostfachMailRequest.ProtoReflect.Descriptor instead.
+func (*GrpcFindPostfachMailRequest) Descriptor() ([]byte, []int) {
+	return file_postfach_model_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *GrpcFindPostfachMailRequest) GetContext() *de_ozgcloud_vorgang_grpc_command.GrpcCallContext {
+	if x != nil {
+		return x.Context
+	}
+	return nil
+}
+
+func (x *GrpcFindPostfachMailRequest) GetNachrichtId() string {
+	if x != nil {
+		return x.NachrichtId
+	}
+	return ""
+}
+
+type GrpcFindPostfachMailResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Nachricht *GrpcPostfachMail `protobuf:"bytes,1,opt,name=nachricht,proto3" json:"nachricht,omitempty"`
+}
+
+func (x *GrpcFindPostfachMailResponse) Reset() {
+	*x = GrpcFindPostfachMailResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_postfach_model_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcFindPostfachMailResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcFindPostfachMailResponse) ProtoMessage() {}
+
+func (x *GrpcFindPostfachMailResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_postfach_model_proto_msgTypes[5]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcFindPostfachMailResponse.ProtoReflect.Descriptor instead.
+func (*GrpcFindPostfachMailResponse) Descriptor() ([]byte, []int) {
+	return file_postfach_model_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *GrpcFindPostfachMailResponse) GetNachricht() *GrpcPostfachMail {
+	if x != nil {
+		return x.Nachricht
+	}
+	return nil
+}
+
+type GrpcFindPostfachMailsRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Context   *de_ozgcloud_vorgang_grpc_command.GrpcCallContext `protobuf:"bytes,1,opt,name=context,proto3" json:"context,omitempty"`
+	VorgangId string                                            `protobuf:"bytes,2,opt,name=vorgangId,proto3" json:"vorgangId,omitempty"`
+}
+
+func (x *GrpcFindPostfachMailsRequest) Reset() {
+	*x = GrpcFindPostfachMailsRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_postfach_model_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcFindPostfachMailsRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcFindPostfachMailsRequest) ProtoMessage() {}
+
+func (x *GrpcFindPostfachMailsRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_postfach_model_proto_msgTypes[6]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcFindPostfachMailsRequest.ProtoReflect.Descriptor instead.
+func (*GrpcFindPostfachMailsRequest) Descriptor() ([]byte, []int) {
+	return file_postfach_model_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *GrpcFindPostfachMailsRequest) GetContext() *de_ozgcloud_vorgang_grpc_command.GrpcCallContext {
+	if x != nil {
+		return x.Context
+	}
+	return nil
+}
+
+func (x *GrpcFindPostfachMailsRequest) GetVorgangId() string {
+	if x != nil {
+		return x.VorgangId
+	}
+	return ""
+}
+
+type GrpcFindPostfachMailsResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Mails []*GrpcPostfachMail `protobuf:"bytes,1,rep,name=mails,proto3" json:"mails,omitempty"`
+}
+
+func (x *GrpcFindPostfachMailsResponse) Reset() {
+	*x = GrpcFindPostfachMailsResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_postfach_model_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcFindPostfachMailsResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcFindPostfachMailsResponse) ProtoMessage() {}
+
+func (x *GrpcFindPostfachMailsResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_postfach_model_proto_msgTypes[7]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcFindPostfachMailsResponse.ProtoReflect.Descriptor instead.
+func (*GrpcFindPostfachMailsResponse) Descriptor() ([]byte, []int) {
+	return file_postfach_model_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *GrpcFindPostfachMailsResponse) GetMails() []*GrpcPostfachMail {
+	if x != nil {
+		return x.Mails
+	}
+	return nil
+}
+
+type GrpcPostfachNachricht struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id              string                                           `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	CreatedAt       string                                           `protobuf:"bytes,2,opt,name=createdAt,proto3" json:"createdAt,omitempty"`
+	PostfachAddress *de_ozgcloud_vorgang_vorgang.GrpcPostfachAddress `protobuf:"bytes,3,opt,name=postfachAddress,proto3" json:"postfachAddress,omitempty"`
+	Subject         string                                           `protobuf:"bytes,4,opt,name=subject,proto3" json:"subject,omitempty"`
+	MailBody        string                                           `protobuf:"bytes,5,opt,name=mailBody,proto3" json:"mailBody,omitempty"`
+	ReplyOption     string                                           `protobuf:"bytes,6,opt,name=replyOption,proto3" json:"replyOption,omitempty"`
+	Attachment      []string                                         `protobuf:"bytes,7,rep,name=attachment,proto3" json:"attachment,omitempty"`
+}
+
+func (x *GrpcPostfachNachricht) Reset() {
+	*x = GrpcPostfachNachricht{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_postfach_model_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcPostfachNachricht) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcPostfachNachricht) ProtoMessage() {}
+
+func (x *GrpcPostfachNachricht) ProtoReflect() protoreflect.Message {
+	mi := &file_postfach_model_proto_msgTypes[8]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcPostfachNachricht.ProtoReflect.Descriptor instead.
+func (*GrpcPostfachNachricht) Descriptor() ([]byte, []int) {
+	return file_postfach_model_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *GrpcPostfachNachricht) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *GrpcPostfachNachricht) GetCreatedAt() string {
+	if x != nil {
+		return x.CreatedAt
+	}
+	return ""
+}
+
+func (x *GrpcPostfachNachricht) GetPostfachAddress() *de_ozgcloud_vorgang_vorgang.GrpcPostfachAddress {
+	if x != nil {
+		return x.PostfachAddress
+	}
+	return nil
+}
+
+func (x *GrpcPostfachNachricht) GetSubject() string {
+	if x != nil {
+		return x.Subject
+	}
+	return ""
+}
+
+func (x *GrpcPostfachNachricht) GetMailBody() string {
+	if x != nil {
+		return x.MailBody
+	}
+	return ""
+}
+
+func (x *GrpcPostfachNachricht) GetReplyOption() string {
+	if x != nil {
+		return x.ReplyOption
+	}
+	return ""
+}
+
+func (x *GrpcPostfachNachricht) GetAttachment() []string {
+	if x != nil {
+		return x.Attachment
+	}
+	return nil
+}
+
+type GrpcPostfachMail struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id        string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	VorgangId string `protobuf:"bytes,2,opt,name=vorgangId,proto3" json:"vorgangId,omitempty"`
+	// Deprecated: Marked as deprecated in postfach.model.proto.
+	PostfachId          string               `protobuf:"bytes,3,opt,name=postfachId,proto3" json:"postfachId,omitempty"`
+	PostfachAddress     *GrpcPostfachAddress `protobuf:"bytes,14,opt,name=postfachAddress,proto3" json:"postfachAddress,omitempty"`
+	CreatedAt           string               `protobuf:"bytes,4,opt,name=createdAt,proto3" json:"createdAt,omitempty"`
+	CreatedBy           string               `protobuf:"bytes,5,opt,name=createdBy,proto3" json:"createdBy,omitempty"`
+	SentAt              string               `protobuf:"bytes,6,opt,name=sentAt,proto3" json:"sentAt,omitempty"`
+	SentSuccessful      bool                 `protobuf:"varint,7,opt,name=sentSuccessful,proto3" json:"sentSuccessful,omitempty"`
+	MessageCode         string               `protobuf:"bytes,8,opt,name=messageCode,proto3" json:"messageCode,omitempty"`
+	Direction           GrpcDirection        `protobuf:"varint,9,opt,name=direction,proto3,enum=de.ozgcloud.nachrichten.postfach.GrpcDirection" json:"direction,omitempty"`
+	Subject             string               `protobuf:"bytes,10,opt,name=subject,proto3" json:"subject,omitempty"`
+	MailBody            string               `protobuf:"bytes,11,opt,name=mailBody,proto3" json:"mailBody,omitempty"`
+	ReplyOption         string               `protobuf:"bytes,12,opt,name=replyOption,proto3" json:"replyOption,omitempty"`
+	Attachment          []string             `protobuf:"bytes,13,rep,name=attachment,proto3" json:"attachment,omitempty"`
+	Address             *GrpcPostfachAddress `protobuf:"bytes,15,opt,name=address,proto3" json:"address,omitempty"`
+	ReferencedNachricht string               `protobuf:"bytes,16,opt,name=referencedNachricht,proto3" json:"referencedNachricht,omitempty"`
+}
+
+func (x *GrpcPostfachMail) Reset() {
+	*x = GrpcPostfachMail{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_postfach_model_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcPostfachMail) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcPostfachMail) ProtoMessage() {}
+
+func (x *GrpcPostfachMail) ProtoReflect() protoreflect.Message {
+	mi := &file_postfach_model_proto_msgTypes[9]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcPostfachMail.ProtoReflect.Descriptor instead.
+func (*GrpcPostfachMail) Descriptor() ([]byte, []int) {
+	return file_postfach_model_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *GrpcPostfachMail) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *GrpcPostfachMail) GetVorgangId() string {
+	if x != nil {
+		return x.VorgangId
+	}
+	return ""
+}
+
+// Deprecated: Marked as deprecated in postfach.model.proto.
+func (x *GrpcPostfachMail) GetPostfachId() string {
+	if x != nil {
+		return x.PostfachId
+	}
+	return ""
+}
+
+func (x *GrpcPostfachMail) GetPostfachAddress() *GrpcPostfachAddress {
+	if x != nil {
+		return x.PostfachAddress
+	}
+	return nil
+}
+
+func (x *GrpcPostfachMail) GetCreatedAt() string {
+	if x != nil {
+		return x.CreatedAt
+	}
+	return ""
+}
+
+func (x *GrpcPostfachMail) GetCreatedBy() string {
+	if x != nil {
+		return x.CreatedBy
+	}
+	return ""
+}
+
+func (x *GrpcPostfachMail) GetSentAt() string {
+	if x != nil {
+		return x.SentAt
+	}
+	return ""
+}
+
+func (x *GrpcPostfachMail) GetSentSuccessful() bool {
+	if x != nil {
+		return x.SentSuccessful
+	}
+	return false
+}
+
+func (x *GrpcPostfachMail) GetMessageCode() string {
+	if x != nil {
+		return x.MessageCode
+	}
+	return ""
+}
+
+func (x *GrpcPostfachMail) GetDirection() GrpcDirection {
+	if x != nil {
+		return x.Direction
+	}
+	return GrpcDirection_UNDEFINED
+}
+
+func (x *GrpcPostfachMail) GetSubject() string {
+	if x != nil {
+		return x.Subject
+	}
+	return ""
+}
+
+func (x *GrpcPostfachMail) GetMailBody() string {
+	if x != nil {
+		return x.MailBody
+	}
+	return ""
+}
+
+func (x *GrpcPostfachMail) GetReplyOption() string {
+	if x != nil {
+		return x.ReplyOption
+	}
+	return ""
+}
+
+func (x *GrpcPostfachMail) GetAttachment() []string {
+	if x != nil {
+		return x.Attachment
+	}
+	return nil
+}
+
+func (x *GrpcPostfachMail) GetAddress() *GrpcPostfachAddress {
+	if x != nil {
+		return x.Address
+	}
+	return nil
+}
+
+func (x *GrpcPostfachMail) GetReferencedNachricht() string {
+	if x != nil {
+		return x.ReferencedNachricht
+	}
+	return ""
+}
+
+type GrpcPostfachAddress struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Version          string                                 `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
+	Identifier       *de_ozgcloud_vorgang_common.GrpcObject `protobuf:"bytes,2,opt,name=identifier,proto3" json:"identifier,omitempty"`
+	Type             int32                                  `protobuf:"varint,3,opt,name=type,proto3" json:"type,omitempty"`
+	ServiceKontoType string                                 `protobuf:"bytes,4,opt,name=serviceKontoType,proto3" json:"serviceKontoType,omitempty"`
+}
+
+func (x *GrpcPostfachAddress) Reset() {
+	*x = GrpcPostfachAddress{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_postfach_model_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcPostfachAddress) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcPostfachAddress) ProtoMessage() {}
+
+func (x *GrpcPostfachAddress) ProtoReflect() protoreflect.Message {
+	mi := &file_postfach_model_proto_msgTypes[10]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcPostfachAddress.ProtoReflect.Descriptor instead.
+func (*GrpcPostfachAddress) Descriptor() ([]byte, []int) {
+	return file_postfach_model_proto_rawDescGZIP(), []int{10}
+}
+
+func (x *GrpcPostfachAddress) GetVersion() string {
+	if x != nil {
+		return x.Version
+	}
+	return ""
+}
+
+func (x *GrpcPostfachAddress) GetIdentifier() *de_ozgcloud_vorgang_common.GrpcObject {
+	if x != nil {
+		return x.Identifier
+	}
+	return nil
+}
+
+func (x *GrpcPostfachAddress) GetType() int32 {
+	if x != nil {
+		return x.Type
+	}
+	return 0
+}
+
+func (x *GrpcPostfachAddress) GetServiceKontoType() string {
+	if x != nil {
+		return x.ServiceKontoType
+	}
+	return ""
+}
+
+type GrpcResendPostfachMailRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Context        *de_ozgcloud_vorgang_grpc_command.GrpcCallContext `protobuf:"bytes,1,opt,name=context,proto3" json:"context,omitempty"`
+	CommandId      string                                            `protobuf:"bytes,2,opt,name=commandId,proto3" json:"commandId,omitempty"`
+	PostfachMailId string                                            `protobuf:"bytes,3,opt,name=postfachMailId,proto3" json:"postfachMailId,omitempty"`
+}
+
+func (x *GrpcResendPostfachMailRequest) Reset() {
+	*x = GrpcResendPostfachMailRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_postfach_model_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcResendPostfachMailRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcResendPostfachMailRequest) ProtoMessage() {}
+
+func (x *GrpcResendPostfachMailRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_postfach_model_proto_msgTypes[11]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcResendPostfachMailRequest.ProtoReflect.Descriptor instead.
+func (*GrpcResendPostfachMailRequest) Descriptor() ([]byte, []int) {
+	return file_postfach_model_proto_rawDescGZIP(), []int{11}
+}
+
+func (x *GrpcResendPostfachMailRequest) GetContext() *de_ozgcloud_vorgang_grpc_command.GrpcCallContext {
+	if x != nil {
+		return x.Context
+	}
+	return nil
+}
+
+func (x *GrpcResendPostfachMailRequest) GetCommandId() string {
+	if x != nil {
+		return x.CommandId
+	}
+	return ""
+}
+
+func (x *GrpcResendPostfachMailRequest) GetPostfachMailId() string {
+	if x != nil {
+		return x.PostfachMailId
+	}
+	return ""
+}
+
+type GrpcResendPostfachMailResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *GrpcResendPostfachMailResponse) Reset() {
+	*x = GrpcResendPostfachMailResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_postfach_model_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcResendPostfachMailResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcResendPostfachMailResponse) ProtoMessage() {}
+
+func (x *GrpcResendPostfachMailResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_postfach_model_proto_msgTypes[12]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcResendPostfachMailResponse.ProtoReflect.Descriptor instead.
+func (*GrpcResendPostfachMailResponse) Descriptor() ([]byte, []int) {
+	return file_postfach_model_proto_rawDescGZIP(), []int{12}
+}
+
+type GrpcIsPostfachConfiguredRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Context *de_ozgcloud_vorgang_grpc_command.GrpcCallContext `protobuf:"bytes,1,opt,name=context,proto3" json:"context,omitempty"`
+}
+
+func (x *GrpcIsPostfachConfiguredRequest) Reset() {
+	*x = GrpcIsPostfachConfiguredRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_postfach_model_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcIsPostfachConfiguredRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcIsPostfachConfiguredRequest) ProtoMessage() {}
+
+func (x *GrpcIsPostfachConfiguredRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_postfach_model_proto_msgTypes[13]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcIsPostfachConfiguredRequest.ProtoReflect.Descriptor instead.
+func (*GrpcIsPostfachConfiguredRequest) Descriptor() ([]byte, []int) {
+	return file_postfach_model_proto_rawDescGZIP(), []int{13}
+}
+
+func (x *GrpcIsPostfachConfiguredRequest) GetContext() *de_ozgcloud_vorgang_grpc_command.GrpcCallContext {
+	if x != nil {
+		return x.Context
+	}
+	return nil
+}
+
+type GrpcIsPostfachConfiguredResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	IsConfigured bool `protobuf:"varint,1,opt,name=isConfigured,proto3" json:"isConfigured,omitempty"`
+}
+
+func (x *GrpcIsPostfachConfiguredResponse) Reset() {
+	*x = GrpcIsPostfachConfiguredResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_postfach_model_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcIsPostfachConfiguredResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcIsPostfachConfiguredResponse) ProtoMessage() {}
+
+func (x *GrpcIsPostfachConfiguredResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_postfach_model_proto_msgTypes[14]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcIsPostfachConfiguredResponse.ProtoReflect.Descriptor instead.
+func (*GrpcIsPostfachConfiguredResponse) Descriptor() ([]byte, []int) {
+	return file_postfach_model_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *GrpcIsPostfachConfiguredResponse) GetIsConfigured() bool {
+	if x != nil {
+		return x.IsConfigured
+	}
+	return false
+}
+
+type GrpcGetPostfachConfigRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *GrpcGetPostfachConfigRequest) Reset() {
+	*x = GrpcGetPostfachConfigRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_postfach_model_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcGetPostfachConfigRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcGetPostfachConfigRequest) ProtoMessage() {}
+
+func (x *GrpcGetPostfachConfigRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_postfach_model_proto_msgTypes[15]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcGetPostfachConfigRequest.ProtoReflect.Descriptor instead.
+func (*GrpcGetPostfachConfigRequest) Descriptor() ([]byte, []int) {
+	return file_postfach_model_proto_rawDescGZIP(), []int{15}
+}
+
+type GrpcGetPostfachConfigResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Configured bool            `protobuf:"varint,1,opt,name=configured,proto3" json:"configured,omitempty"`
+	Postfach   []*GrpcPostfach `protobuf:"bytes,2,rep,name=postfach,proto3" json:"postfach,omitempty"`
+}
+
+func (x *GrpcGetPostfachConfigResponse) Reset() {
+	*x = GrpcGetPostfachConfigResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_postfach_model_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcGetPostfachConfigResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcGetPostfachConfigResponse) ProtoMessage() {}
+
+func (x *GrpcGetPostfachConfigResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_postfach_model_proto_msgTypes[16]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcGetPostfachConfigResponse.ProtoReflect.Descriptor instead.
+func (*GrpcGetPostfachConfigResponse) Descriptor() ([]byte, []int) {
+	return file_postfach_model_proto_rawDescGZIP(), []int{16}
+}
+
+func (x *GrpcGetPostfachConfigResponse) GetConfigured() bool {
+	if x != nil {
+		return x.Configured
+	}
+	return false
+}
+
+func (x *GrpcGetPostfachConfigResponse) GetPostfach() []*GrpcPostfach {
+	if x != nil {
+		return x.Postfach
+	}
+	return nil
+}
+
+type GrpcPostfach struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Type         string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
+	ReplyAllowed bool   `protobuf:"varint,2,opt,name=replyAllowed,proto3" json:"replyAllowed,omitempty"`
+}
+
+func (x *GrpcPostfach) Reset() {
+	*x = GrpcPostfach{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_postfach_model_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcPostfach) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcPostfach) ProtoMessage() {}
+
+func (x *GrpcPostfach) ProtoReflect() protoreflect.Message {
+	mi := &file_postfach_model_proto_msgTypes[17]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcPostfach.ProtoReflect.Descriptor instead.
+func (*GrpcPostfach) Descriptor() ([]byte, []int) {
+	return file_postfach_model_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *GrpcPostfach) GetType() string {
+	if x != nil {
+		return x.Type
+	}
+	return ""
+}
+
+func (x *GrpcPostfach) GetReplyAllowed() bool {
+	if x != nil {
+		return x.ReplyAllowed
+	}
+	return false
+}
+
+var File_postfach_model_proto protoreflect.FileDescriptor
+
+var file_postfach_model_proto_rawDesc = []byte{
+	0x0a, 0x14, 0x70, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x20, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c,
+	0x6f, 0x75, 0x64, 0x2e, 0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68, 0x74, 0x65, 0x6e, 0x2e,
+	0x70, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x1a, 0x11, 0x63, 0x61, 0x6c, 0x6c, 0x63, 0x6f,
+	0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x76, 0x6f, 0x72,
+	0x67, 0x61, 0x6e, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x1a, 0x12, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd0, 0x01, 0x0a, 0x1b, 0x47, 0x72, 0x70, 0x63, 0x53, 0x65, 0x6e,
+	0x64, 0x50, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x4d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c,
+	0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63,
+	0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x61, 0x6c,
+	0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78,
+	0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12,
+	0x46, 0x0a, 0x04, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e,
+	0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x6e, 0x61, 0x63, 0x68,
+	0x72, 0x69, 0x63, 0x68, 0x74, 0x65, 0x6e, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68,
+	0x2e, 0x47, 0x72, 0x70, 0x63, 0x50, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x4d, 0x61, 0x69,
+	0x6c, 0x52, 0x04, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x94, 0x01, 0x0a, 0x1d, 0x47, 0x72, 0x70, 0x63,
+	0x53, 0x61, 0x76, 0x65, 0x4e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68, 0x74, 0x44, 0x72, 0x61,
+	0x66, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x76, 0x6f, 0x72,
+	0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x6f,
+	0x72, 0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x55, 0x0a, 0x09, 0x6e, 0x61, 0x63, 0x68, 0x72,
+	0x69, 0x63, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x64, 0x65, 0x2e,
+	0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63,
+	0x68, 0x74, 0x65, 0x6e, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x2e, 0x47, 0x72,
+	0x70, 0x63, 0x50, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x4e, 0x61, 0x63, 0x68, 0x72, 0x69,
+	0x63, 0x68, 0x74, 0x52, 0x09, 0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68, 0x74, 0x22, 0x20,
+	0x0a, 0x1e, 0x47, 0x72, 0x70, 0x63, 0x53, 0x61, 0x76, 0x65, 0x4e, 0x61, 0x63, 0x68, 0x72, 0x69,
+	0x63, 0x68, 0x74, 0x44, 0x72, 0x61, 0x66, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x72, 0x70, 0x63, 0x53, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x73, 0x74,
+	0x66, 0x61, 0x63, 0x68, 0x4d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x8c, 0x01, 0x0a, 0x1b, 0x47, 0x72, 0x70, 0x63, 0x46, 0x69, 0x6e, 0x64, 0x50, 0x6f, 0x73,
+	0x74, 0x66, 0x61, 0x63, 0x68, 0x4d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x12, 0x4b, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x31, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
+	0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d,
+	0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x6e,
+	0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x20, 0x0a,
+	0x0b, 0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0b, 0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68, 0x74, 0x49, 0x64, 0x22,
+	0x70, 0x0a, 0x1c, 0x47, 0x72, 0x70, 0x63, 0x46, 0x69, 0x6e, 0x64, 0x50, 0x6f, 0x73, 0x74, 0x66,
+	0x61, 0x63, 0x68, 0x4d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+	0x50, 0x0a, 0x09, 0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x32, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64,
+	0x2e, 0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68, 0x74, 0x65, 0x6e, 0x2e, 0x70, 0x6f, 0x73,
+	0x74, 0x66, 0x61, 0x63, 0x68, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x50, 0x6f, 0x73, 0x74, 0x66, 0x61,
+	0x63, 0x68, 0x4d, 0x61, 0x69, 0x6c, 0x52, 0x09, 0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68,
+	0x74, 0x22, 0x89, 0x01, 0x0a, 0x1c, 0x47, 0x72, 0x70, 0x63, 0x46, 0x69, 0x6e, 0x64, 0x50, 0x6f,
+	0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x4d, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x12, 0x4b, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75,
+	0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63,
+	0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x61, 0x6c, 0x6c, 0x43,
+	0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12,
+	0x1c, 0x0a, 0x09, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x09, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x22, 0x69, 0x0a,
+	0x1d, 0x47, 0x72, 0x70, 0x63, 0x46, 0x69, 0x6e, 0x64, 0x50, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63,
+	0x68, 0x4d, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48,
+	0x0a, 0x05, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e,
+	0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x6e, 0x61, 0x63, 0x68,
+	0x72, 0x69, 0x63, 0x68, 0x74, 0x65, 0x6e, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68,
+	0x2e, 0x47, 0x72, 0x70, 0x63, 0x50, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x4d, 0x61, 0x69,
+	0x6c, 0x52, 0x05, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x99, 0x02, 0x0a, 0x15, 0x47, 0x72, 0x70,
+	0x63, 0x50, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x4e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63,
+	0x68, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
+	0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74,
+	0x12, 0x5a, 0x0a, 0x0f, 0x70, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x41, 0x64, 0x64, 0x72,
+	0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x64, 0x65, 0x2e, 0x6f,
+	0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e,
+	0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x50, 0x6f, 0x73, 0x74,
+	0x66, 0x61, 0x63, 0x68, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0f, 0x70, 0x6f, 0x73,
+	0x74, 0x66, 0x61, 0x63, 0x68, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07,
+	0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73,
+	0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x69, 0x6c, 0x42, 0x6f,
+	0x64, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x69, 0x6c, 0x42, 0x6f,
+	0x64, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x4f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65,
+	0x6e, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68,
+	0x6d, 0x65, 0x6e, 0x74, 0x22, 0xad, 0x05, 0x0a, 0x10, 0x47, 0x72, 0x70, 0x63, 0x50, 0x6f, 0x73,
+	0x74, 0x66, 0x61, 0x63, 0x68, 0x4d, 0x61, 0x69, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x76, 0x6f, 0x72,
+	0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x6f,
+	0x72, 0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x6f, 0x73, 0x74, 0x66,
+	0x61, 0x63, 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52,
+	0x0a, 0x70, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x49, 0x64, 0x12, 0x5f, 0x0a, 0x0f, 0x70,
+	0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0e,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f,
+	0x75, 0x64, 0x2e, 0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68, 0x74, 0x65, 0x6e, 0x2e, 0x70,
+	0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x50, 0x6f, 0x73, 0x74,
+	0x66, 0x61, 0x63, 0x68, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0f, 0x70, 0x6f, 0x73,
+	0x74, 0x66, 0x61, 0x63, 0x68, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1c, 0x0a, 0x09,
+	0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72,
+	0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63,
+	0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x74,
+	0x41, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x74, 0x41, 0x74,
+	0x12, 0x26, 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x74, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66,
+	0x75, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x65, 0x6e, 0x74, 0x53, 0x75,
+	0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x65, 0x73, 0x73,
+	0x61, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d,
+	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x4d, 0x0a, 0x09, 0x64, 0x69,
+	0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e,
+	0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x6e, 0x61, 0x63, 0x68,
+	0x72, 0x69, 0x63, 0x68, 0x74, 0x65, 0x6e, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68,
+	0x2e, 0x47, 0x72, 0x70, 0x63, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09,
+	0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62,
+	0x6a, 0x65, 0x63, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a,
+	0x65, 0x63, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x69, 0x6c, 0x42, 0x6f, 0x64, 0x79, 0x18,
+	0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x69, 0x6c, 0x42, 0x6f, 0x64, 0x79, 0x12,
+	0x20, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0c,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18,
+	0x0d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e,
+	0x74, 0x12, 0x4f, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0f, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x35, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64,
+	0x2e, 0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68, 0x74, 0x65, 0x6e, 0x2e, 0x70, 0x6f, 0x73,
+	0x74, 0x66, 0x61, 0x63, 0x68, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x50, 0x6f, 0x73, 0x74, 0x66, 0x61,
+	0x63, 0x68, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65,
+	0x73, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64,
+	0x4e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x13, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x4e, 0x61, 0x63, 0x68, 0x72,
+	0x69, 0x63, 0x68, 0x74, 0x22, 0xb7, 0x01, 0x0a, 0x13, 0x47, 0x72, 0x70, 0x63, 0x50, 0x6f, 0x73,
+	0x74, 0x66, 0x61, 0x63, 0x68, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07,
+	0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76,
+	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
+	0x66, 0x69, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x64, 0x65, 0x2e,
+	0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67,
+	0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4f, 0x62, 0x6a, 0x65,
+	0x63, 0x74, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x12,
+	0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x79,
+	0x70, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x6f, 0x6e,
+	0x74, 0x6f, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x65,
+	0x72, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x6f, 0x6e, 0x74, 0x6f, 0x54, 0x79, 0x70, 0x65, 0x22, 0xb2,
+	0x01, 0x0a, 0x1d, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x73,
+	0x74, 0x66, 0x61, 0x63, 0x68, 0x4d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x12, 0x4b, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x31, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
+	0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d,
+	0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x6e,
+	0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1c, 0x0a,
+	0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x70,
+	0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x4d, 0x61, 0x69, 0x6c, 0x49, 0x64, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x4d, 0x61, 0x69,
+	0x6c, 0x49, 0x64, 0x22, 0x20, 0x0a, 0x1e, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, 0x73, 0x65, 0x6e,
+	0x64, 0x50, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x4d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6e, 0x0a, 0x1f, 0x47, 0x72, 0x70, 0x63, 0x49, 0x73, 0x50,
+	0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65,
+	0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74,
+	0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x64, 0x65, 0x2e, 0x6f,
+	0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e,
+	0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x72, 0x70,
+	0x63, 0x43, 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f,
+	0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x46, 0x0a, 0x20, 0x47, 0x72, 0x70, 0x63, 0x49, 0x73, 0x50,
+	0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65,
+	0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x73, 0x43,
+	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x0c, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x22, 0x1e, 0x0a,
+	0x1c, 0x47, 0x72, 0x70, 0x63, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68,
+	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x8b, 0x01,
+	0x0a, 0x1d, 0x47, 0x72, 0x70, 0x63, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63,
+	0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+	0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x08, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x12,
+	0x4a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x18, 0x02, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x2e, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
+	0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68, 0x74, 0x65, 0x6e, 0x2e, 0x70, 0x6f, 0x73, 0x74,
+	0x66, 0x61, 0x63, 0x68, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x50, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63,
+	0x68, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x22, 0x46, 0x0a, 0x0c, 0x47,
+	0x72, 0x70, 0x63, 0x50, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x74,
+	0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12,
+	0x22, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x41, 0x6c, 0x6c, 0x6f,
+	0x77, 0x65, 0x64, 0x2a, 0x2f, 0x0a, 0x0d, 0x47, 0x72, 0x70, 0x63, 0x44, 0x69, 0x72, 0x65, 0x63,
+	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0d, 0x0a, 0x09, 0x55, 0x4e, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45,
+	0x44, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x4f,
+	0x55, 0x54, 0x10, 0x02, 0x42, 0x22, 0x5a, 0x20, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c,
+	0x6f, 0x75, 0x64, 0x2e, 0x6e, 0x61, 0x63, 0x68, 0x72, 0x69, 0x63, 0x68, 0x74, 0x65, 0x6e, 0x2e,
+	0x70, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_postfach_model_proto_rawDescOnce sync.Once
+	file_postfach_model_proto_rawDescData = file_postfach_model_proto_rawDesc
+)
+
+func file_postfach_model_proto_rawDescGZIP() []byte {
+	file_postfach_model_proto_rawDescOnce.Do(func() {
+		file_postfach_model_proto_rawDescData = protoimpl.X.CompressGZIP(file_postfach_model_proto_rawDescData)
+	})
+	return file_postfach_model_proto_rawDescData
+}
+
+var file_postfach_model_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_postfach_model_proto_msgTypes = make([]protoimpl.MessageInfo, 18)
+var file_postfach_model_proto_goTypes = []any{
+	(GrpcDirection)(0),                                       // 0: de.ozgcloud.nachrichten.postfach.GrpcDirection
+	(*GrpcSendPostfachMailRequest)(nil),                      // 1: de.ozgcloud.nachrichten.postfach.GrpcSendPostfachMailRequest
+	(*GrpcSaveNachrichtDraftRequest)(nil),                    // 2: de.ozgcloud.nachrichten.postfach.GrpcSaveNachrichtDraftRequest
+	(*GrpcSaveNachrichtDraftResponse)(nil),                   // 3: de.ozgcloud.nachrichten.postfach.GrpcSaveNachrichtDraftResponse
+	(*GrpcSendPostfachMailResponse)(nil),                     // 4: de.ozgcloud.nachrichten.postfach.GrpcSendPostfachMailResponse
+	(*GrpcFindPostfachMailRequest)(nil),                      // 5: de.ozgcloud.nachrichten.postfach.GrpcFindPostfachMailRequest
+	(*GrpcFindPostfachMailResponse)(nil),                     // 6: de.ozgcloud.nachrichten.postfach.GrpcFindPostfachMailResponse
+	(*GrpcFindPostfachMailsRequest)(nil),                     // 7: de.ozgcloud.nachrichten.postfach.GrpcFindPostfachMailsRequest
+	(*GrpcFindPostfachMailsResponse)(nil),                    // 8: de.ozgcloud.nachrichten.postfach.GrpcFindPostfachMailsResponse
+	(*GrpcPostfachNachricht)(nil),                            // 9: de.ozgcloud.nachrichten.postfach.GrpcPostfachNachricht
+	(*GrpcPostfachMail)(nil),                                 // 10: de.ozgcloud.nachrichten.postfach.GrpcPostfachMail
+	(*GrpcPostfachAddress)(nil),                              // 11: de.ozgcloud.nachrichten.postfach.GrpcPostfachAddress
+	(*GrpcResendPostfachMailRequest)(nil),                    // 12: de.ozgcloud.nachrichten.postfach.GrpcResendPostfachMailRequest
+	(*GrpcResendPostfachMailResponse)(nil),                   // 13: de.ozgcloud.nachrichten.postfach.GrpcResendPostfachMailResponse
+	(*GrpcIsPostfachConfiguredRequest)(nil),                  // 14: de.ozgcloud.nachrichten.postfach.GrpcIsPostfachConfiguredRequest
+	(*GrpcIsPostfachConfiguredResponse)(nil),                 // 15: de.ozgcloud.nachrichten.postfach.GrpcIsPostfachConfiguredResponse
+	(*GrpcGetPostfachConfigRequest)(nil),                     // 16: de.ozgcloud.nachrichten.postfach.GrpcGetPostfachConfigRequest
+	(*GrpcGetPostfachConfigResponse)(nil),                    // 17: de.ozgcloud.nachrichten.postfach.GrpcGetPostfachConfigResponse
+	(*GrpcPostfach)(nil),                                     // 18: de.ozgcloud.nachrichten.postfach.GrpcPostfach
+	(*de_ozgcloud_vorgang_grpc_command.GrpcCallContext)(nil), // 19: de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	(*de_ozgcloud_vorgang_vorgang.GrpcPostfachAddress)(nil),  // 20: de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress
+	(*de_ozgcloud_vorgang_common.GrpcObject)(nil),            // 21: de.ozgcloud.vorgang.common.GrpcObject
+}
+var file_postfach_model_proto_depIdxs = []int32{
+	19, // 0: de.ozgcloud.nachrichten.postfach.GrpcSendPostfachMailRequest.context:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	10, // 1: de.ozgcloud.nachrichten.postfach.GrpcSendPostfachMailRequest.mail:type_name -> de.ozgcloud.nachrichten.postfach.GrpcPostfachMail
+	9,  // 2: de.ozgcloud.nachrichten.postfach.GrpcSaveNachrichtDraftRequest.nachricht:type_name -> de.ozgcloud.nachrichten.postfach.GrpcPostfachNachricht
+	19, // 3: de.ozgcloud.nachrichten.postfach.GrpcFindPostfachMailRequest.context:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	10, // 4: de.ozgcloud.nachrichten.postfach.GrpcFindPostfachMailResponse.nachricht:type_name -> de.ozgcloud.nachrichten.postfach.GrpcPostfachMail
+	19, // 5: de.ozgcloud.nachrichten.postfach.GrpcFindPostfachMailsRequest.context:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	10, // 6: de.ozgcloud.nachrichten.postfach.GrpcFindPostfachMailsResponse.mails:type_name -> de.ozgcloud.nachrichten.postfach.GrpcPostfachMail
+	20, // 7: de.ozgcloud.nachrichten.postfach.GrpcPostfachNachricht.postfachAddress:type_name -> de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress
+	11, // 8: de.ozgcloud.nachrichten.postfach.GrpcPostfachMail.postfachAddress:type_name -> de.ozgcloud.nachrichten.postfach.GrpcPostfachAddress
+	0,  // 9: de.ozgcloud.nachrichten.postfach.GrpcPostfachMail.direction:type_name -> de.ozgcloud.nachrichten.postfach.GrpcDirection
+	11, // 10: de.ozgcloud.nachrichten.postfach.GrpcPostfachMail.address:type_name -> de.ozgcloud.nachrichten.postfach.GrpcPostfachAddress
+	21, // 11: de.ozgcloud.nachrichten.postfach.GrpcPostfachAddress.identifier:type_name -> de.ozgcloud.vorgang.common.GrpcObject
+	19, // 12: de.ozgcloud.nachrichten.postfach.GrpcResendPostfachMailRequest.context:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	19, // 13: de.ozgcloud.nachrichten.postfach.GrpcIsPostfachConfiguredRequest.context:type_name -> de.ozgcloud.vorgang.grpc.command.GrpcCallContext
+	18, // 14: de.ozgcloud.nachrichten.postfach.GrpcGetPostfachConfigResponse.postfach:type_name -> de.ozgcloud.nachrichten.postfach.GrpcPostfach
+	15, // [15:15] is the sub-list for method output_type
+	15, // [15:15] is the sub-list for method input_type
+	15, // [15:15] is the sub-list for extension type_name
+	15, // [15:15] is the sub-list for extension extendee
+	0,  // [0:15] is the sub-list for field type_name
+}
+
+func init() { file_postfach_model_proto_init() }
+func file_postfach_model_proto_init() {
+	if File_postfach_model_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_postfach_model_proto_msgTypes[0].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcSendPostfachMailRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_postfach_model_proto_msgTypes[1].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcSaveNachrichtDraftRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_postfach_model_proto_msgTypes[2].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcSaveNachrichtDraftResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_postfach_model_proto_msgTypes[3].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcSendPostfachMailResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_postfach_model_proto_msgTypes[4].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcFindPostfachMailRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_postfach_model_proto_msgTypes[5].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcFindPostfachMailResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_postfach_model_proto_msgTypes[6].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcFindPostfachMailsRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_postfach_model_proto_msgTypes[7].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcFindPostfachMailsResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_postfach_model_proto_msgTypes[8].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcPostfachNachricht); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_postfach_model_proto_msgTypes[9].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcPostfachMail); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_postfach_model_proto_msgTypes[10].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcPostfachAddress); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_postfach_model_proto_msgTypes[11].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcResendPostfachMailRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_postfach_model_proto_msgTypes[12].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcResendPostfachMailResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_postfach_model_proto_msgTypes[13].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcIsPostfachConfiguredRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_postfach_model_proto_msgTypes[14].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcIsPostfachConfiguredResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_postfach_model_proto_msgTypes[15].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcGetPostfachConfigRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_postfach_model_proto_msgTypes[16].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcGetPostfachConfigResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_postfach_model_proto_msgTypes[17].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcPostfach); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_postfach_model_proto_rawDesc,
+			NumEnums:      1,
+			NumMessages:   18,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_postfach_model_proto_goTypes,
+		DependencyIndexes: file_postfach_model_proto_depIdxs,
+		EnumInfos:         file_postfach_model_proto_enumTypes,
+		MessageInfos:      file_postfach_model_proto_msgTypes,
+	}.Build()
+	File_postfach_model_proto = out.File
+	file_postfach_model_proto_rawDesc = nil
+	file_postfach_model_proto_goTypes = nil
+	file_postfach_model_proto_depIdxs = nil
+}
diff --git a/gen/go/vorgang.model.pb.go b/gen/go/vorgang.model.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..86dfea21c2c8b4dca33c063862e2fcbd5bb1f403
--- /dev/null
+++ b/gen/go/vorgang.model.pb.go
@@ -0,0 +1,2466 @@
+//
+// Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+// Ministerpräsidenten des Landes Schleswig-Holstein
+// Staatskanzlei
+// Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+//
+// Lizenziert unter der EUPL, Version 1.2 oder - sobald
+// diese von der Europäischen Kommission genehmigt wurden -
+// Folgeversionen der EUPL ("Lizenz");
+// Sie dürfen dieses Werk ausschließlich gemäß
+// dieser Lizenz nutzen.
+// Eine Kopie der Lizenz finden Sie hier:
+//
+// https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+//
+// Sofern nicht durch anwendbare Rechtsvorschriften
+// gefordert oder in schriftlicher Form vereinbart, wird
+// die unter der Lizenz verbreitete Software "so wie sie
+// ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+// ausdrücklich oder stillschweigend - verbreitet.
+// Die sprachspezifischen Genehmigungen und Beschränkungen
+// unter der Lizenz sind dem Lizenztext zu entnehmen.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.34.2
+// 	protoc        (unknown)
+// source: vorgang.model.proto
+
+package de_ozgcloud_vorgang_vorgang
+
+import (
+	de_ozgcloud_vorgang_common "de.ozgcloud.vorgang.common"
+	de_ozgcloud_vorgang_grpc_clientAttribute "de.ozgcloud.vorgang.grpc.clientAttribute"
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type GrpcLogicalOperator int32
+
+const (
+	GrpcLogicalOperator_AND GrpcLogicalOperator = 0
+	GrpcLogicalOperator_OR  GrpcLogicalOperator = 1
+)
+
+// Enum value maps for GrpcLogicalOperator.
+var (
+	GrpcLogicalOperator_name = map[int32]string{
+		0: "AND",
+		1: "OR",
+	}
+	GrpcLogicalOperator_value = map[string]int32{
+		"AND": 0,
+		"OR":  1,
+	}
+)
+
+func (x GrpcLogicalOperator) Enum() *GrpcLogicalOperator {
+	p := new(GrpcLogicalOperator)
+	*p = x
+	return p
+}
+
+func (x GrpcLogicalOperator) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (GrpcLogicalOperator) Descriptor() protoreflect.EnumDescriptor {
+	return file_vorgang_model_proto_enumTypes[0].Descriptor()
+}
+
+func (GrpcLogicalOperator) Type() protoreflect.EnumType {
+	return &file_vorgang_model_proto_enumTypes[0]
+}
+
+func (x GrpcLogicalOperator) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use GrpcLogicalOperator.Descriptor instead.
+func (GrpcLogicalOperator) EnumDescriptor() ([]byte, []int) {
+	return file_vorgang_model_proto_rawDescGZIP(), []int{0}
+}
+
+type GrpcVorgangHeader struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id               string                                                          `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	Version          int64                                                           `protobuf:"varint,2,opt,name=version,proto3" json:"version,omitempty"`
+	Status           string                                                          `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"`
+	Name             string                                                          `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	CreatedAt        string                                                          `protobuf:"bytes,5,opt,name=createdAt,proto3" json:"createdAt,omitempty"`
+	Aktenzeichen     string                                                          `protobuf:"bytes,6,opt,name=aktenzeichen,proto3" json:"aktenzeichen,omitempty"`
+	AssignedTo       string                                                          `protobuf:"bytes,7,opt,name=assignedTo,proto3" json:"assignedTo,omitempty"`
+	Nummer           string                                                          `protobuf:"bytes,8,opt,name=nummer,proto3" json:"nummer,omitempty"`
+	ClientAttributes []*de_ozgcloud_vorgang_grpc_clientAttribute.GrpcClientAttribute `protobuf:"bytes,9,rep,name=clientAttributes,proto3" json:"clientAttributes,omitempty"`
+	FormEngineName   string                                                          `protobuf:"bytes,15,opt,name=formEngineName,proto3" json:"formEngineName,omitempty"`
+}
+
+func (x *GrpcVorgangHeader) Reset() {
+	*x = GrpcVorgangHeader{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_vorgang_model_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcVorgangHeader) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcVorgangHeader) ProtoMessage() {}
+
+func (x *GrpcVorgangHeader) ProtoReflect() protoreflect.Message {
+	mi := &file_vorgang_model_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcVorgangHeader.ProtoReflect.Descriptor instead.
+func (*GrpcVorgangHeader) Descriptor() ([]byte, []int) {
+	return file_vorgang_model_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *GrpcVorgangHeader) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *GrpcVorgangHeader) GetVersion() int64 {
+	if x != nil {
+		return x.Version
+	}
+	return 0
+}
+
+func (x *GrpcVorgangHeader) GetStatus() string {
+	if x != nil {
+		return x.Status
+	}
+	return ""
+}
+
+func (x *GrpcVorgangHeader) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *GrpcVorgangHeader) GetCreatedAt() string {
+	if x != nil {
+		return x.CreatedAt
+	}
+	return ""
+}
+
+func (x *GrpcVorgangHeader) GetAktenzeichen() string {
+	if x != nil {
+		return x.Aktenzeichen
+	}
+	return ""
+}
+
+func (x *GrpcVorgangHeader) GetAssignedTo() string {
+	if x != nil {
+		return x.AssignedTo
+	}
+	return ""
+}
+
+func (x *GrpcVorgangHeader) GetNummer() string {
+	if x != nil {
+		return x.Nummer
+	}
+	return ""
+}
+
+func (x *GrpcVorgangHeader) GetClientAttributes() []*de_ozgcloud_vorgang_grpc_clientAttribute.GrpcClientAttribute {
+	if x != nil {
+		return x.ClientAttributes
+	}
+	return nil
+}
+
+func (x *GrpcVorgangHeader) GetFormEngineName() string {
+	if x != nil {
+		return x.FormEngineName
+	}
+	return ""
+}
+
+type GrpcVorgangWithEingang struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id               string                                                          `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	Version          int64                                                           `protobuf:"varint,2,opt,name=version,proto3" json:"version,omitempty"`
+	Status           string                                                          `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"`
+	Name             string                                                          `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
+	CreatedAt        string                                                          `protobuf:"bytes,5,opt,name=createdAt,proto3" json:"createdAt,omitempty"`
+	Aktenzeichen     string                                                          `protobuf:"bytes,6,opt,name=aktenzeichen,proto3" json:"aktenzeichen,omitempty"`
+	AssignedTo       string                                                          `protobuf:"bytes,7,opt,name=assignedTo,proto3" json:"assignedTo,omitempty"`
+	Nummer           string                                                          `protobuf:"bytes,8,opt,name=nummer,proto3" json:"nummer,omitempty"`
+	ClientAttributes []*de_ozgcloud_vorgang_grpc_clientAttribute.GrpcClientAttribute `protobuf:"bytes,9,rep,name=clientAttributes,proto3" json:"clientAttributes,omitempty"`
+	Eingang          *GrpcEingang                                                    `protobuf:"bytes,10,opt,name=eingang,proto3" json:"eingang,omitempty"`
+	FormEngineName   string                                                          `protobuf:"bytes,15,opt,name=formEngineName,proto3" json:"formEngineName,omitempty"`
+	Header           *GrpcVorgangHead                                                `protobuf:"bytes,16,opt,name=header,proto3" json:"header,omitempty"`
+}
+
+func (x *GrpcVorgangWithEingang) Reset() {
+	*x = GrpcVorgangWithEingang{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_vorgang_model_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcVorgangWithEingang) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcVorgangWithEingang) ProtoMessage() {}
+
+func (x *GrpcVorgangWithEingang) ProtoReflect() protoreflect.Message {
+	mi := &file_vorgang_model_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcVorgangWithEingang.ProtoReflect.Descriptor instead.
+func (*GrpcVorgangWithEingang) Descriptor() ([]byte, []int) {
+	return file_vorgang_model_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *GrpcVorgangWithEingang) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *GrpcVorgangWithEingang) GetVersion() int64 {
+	if x != nil {
+		return x.Version
+	}
+	return 0
+}
+
+func (x *GrpcVorgangWithEingang) GetStatus() string {
+	if x != nil {
+		return x.Status
+	}
+	return ""
+}
+
+func (x *GrpcVorgangWithEingang) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *GrpcVorgangWithEingang) GetCreatedAt() string {
+	if x != nil {
+		return x.CreatedAt
+	}
+	return ""
+}
+
+func (x *GrpcVorgangWithEingang) GetAktenzeichen() string {
+	if x != nil {
+		return x.Aktenzeichen
+	}
+	return ""
+}
+
+func (x *GrpcVorgangWithEingang) GetAssignedTo() string {
+	if x != nil {
+		return x.AssignedTo
+	}
+	return ""
+}
+
+func (x *GrpcVorgangWithEingang) GetNummer() string {
+	if x != nil {
+		return x.Nummer
+	}
+	return ""
+}
+
+func (x *GrpcVorgangWithEingang) GetClientAttributes() []*de_ozgcloud_vorgang_grpc_clientAttribute.GrpcClientAttribute {
+	if x != nil {
+		return x.ClientAttributes
+	}
+	return nil
+}
+
+func (x *GrpcVorgangWithEingang) GetEingang() *GrpcEingang {
+	if x != nil {
+		return x.Eingang
+	}
+	return nil
+}
+
+func (x *GrpcVorgangWithEingang) GetFormEngineName() string {
+	if x != nil {
+		return x.FormEngineName
+	}
+	return ""
+}
+
+func (x *GrpcVorgangWithEingang) GetHeader() *GrpcVorgangHead {
+	if x != nil {
+		return x.Header
+	}
+	return nil
+}
+
+type GrpcVorgangHead struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ServiceKonto *GrpcServiceKonto `protobuf:"bytes,1,opt,name=serviceKonto,proto3" json:"serviceKonto,omitempty"`
+}
+
+func (x *GrpcVorgangHead) Reset() {
+	*x = GrpcVorgangHead{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_vorgang_model_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcVorgangHead) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcVorgangHead) ProtoMessage() {}
+
+func (x *GrpcVorgangHead) ProtoReflect() protoreflect.Message {
+	mi := &file_vorgang_model_proto_msgTypes[2]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcVorgangHead.ProtoReflect.Descriptor instead.
+func (*GrpcVorgangHead) Descriptor() ([]byte, []int) {
+	return file_vorgang_model_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *GrpcVorgangHead) GetServiceKonto() *GrpcServiceKonto {
+	if x != nil {
+		return x.ServiceKonto
+	}
+	return nil
+}
+
+type GrpcEingang struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id                      string                   `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	Header                  *GrpcEingangHeader       `protobuf:"bytes,2,opt,name=header,proto3" json:"header,omitempty"`
+	Antragsteller           *GrpcAntragsteller       `protobuf:"bytes,3,opt,name=antragsteller,proto3" json:"antragsteller,omitempty"`
+	ZustaendigeStelle       *GrpcZustaendigeStelle   `protobuf:"bytes,4,opt,name=zustaendigeStelle,proto3" json:"zustaendigeStelle,omitempty"`
+	FormData                *GrpcFormData            `protobuf:"bytes,10,opt,name=formData,proto3" json:"formData,omitempty"`
+	NumberOfAttachments     int32                    `protobuf:"varint,11,opt,name=numberOfAttachments,proto3" json:"numberOfAttachments,omitempty"`
+	NumberOfRepresentations int32                    `protobuf:"varint,12,opt,name=numberOfRepresentations,proto3" json:"numberOfRepresentations,omitempty"`
+	Attachments             []*GrpcIncomingFileGroup `protobuf:"bytes,20,rep,name=attachments,proto3" json:"attachments,omitempty"`
+	Representations         []*GrpcIncomingFile      `protobuf:"bytes,21,rep,name=representations,proto3" json:"representations,omitempty"`
+}
+
+func (x *GrpcEingang) Reset() {
+	*x = GrpcEingang{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_vorgang_model_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcEingang) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcEingang) ProtoMessage() {}
+
+func (x *GrpcEingang) ProtoReflect() protoreflect.Message {
+	mi := &file_vorgang_model_proto_msgTypes[3]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcEingang.ProtoReflect.Descriptor instead.
+func (*GrpcEingang) Descriptor() ([]byte, []int) {
+	return file_vorgang_model_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *GrpcEingang) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *GrpcEingang) GetHeader() *GrpcEingangHeader {
+	if x != nil {
+		return x.Header
+	}
+	return nil
+}
+
+func (x *GrpcEingang) GetAntragsteller() *GrpcAntragsteller {
+	if x != nil {
+		return x.Antragsteller
+	}
+	return nil
+}
+
+func (x *GrpcEingang) GetZustaendigeStelle() *GrpcZustaendigeStelle {
+	if x != nil {
+		return x.ZustaendigeStelle
+	}
+	return nil
+}
+
+func (x *GrpcEingang) GetFormData() *GrpcFormData {
+	if x != nil {
+		return x.FormData
+	}
+	return nil
+}
+
+func (x *GrpcEingang) GetNumberOfAttachments() int32 {
+	if x != nil {
+		return x.NumberOfAttachments
+	}
+	return 0
+}
+
+func (x *GrpcEingang) GetNumberOfRepresentations() int32 {
+	if x != nil {
+		return x.NumberOfRepresentations
+	}
+	return 0
+}
+
+func (x *GrpcEingang) GetAttachments() []*GrpcIncomingFileGroup {
+	if x != nil {
+		return x.Attachments
+	}
+	return nil
+}
+
+func (x *GrpcEingang) GetRepresentations() []*GrpcIncomingFile {
+	if x != nil {
+		return x.Representations
+	}
+	return nil
+}
+
+type GrpcIncomingFileGroup struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name  string              `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Files []*GrpcIncomingFile `protobuf:"bytes,2,rep,name=files,proto3" json:"files,omitempty"`
+}
+
+func (x *GrpcIncomingFileGroup) Reset() {
+	*x = GrpcIncomingFileGroup{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_vorgang_model_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcIncomingFileGroup) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcIncomingFileGroup) ProtoMessage() {}
+
+func (x *GrpcIncomingFileGroup) ProtoReflect() protoreflect.Message {
+	mi := &file_vorgang_model_proto_msgTypes[4]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcIncomingFileGroup.ProtoReflect.Descriptor instead.
+func (*GrpcIncomingFileGroup) Descriptor() ([]byte, []int) {
+	return file_vorgang_model_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *GrpcIncomingFileGroup) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *GrpcIncomingFileGroup) GetFiles() []*GrpcIncomingFile {
+	if x != nil {
+		return x.Files
+	}
+	return nil
+}
+
+type GrpcIncomingFile struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id          string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	VendorId    string `protobuf:"bytes,2,opt,name=vendorId,proto3" json:"vendorId,omitempty"`
+	Name        string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	ContentType string `protobuf:"bytes,4,opt,name=contentType,proto3" json:"contentType,omitempty"`
+	Size        int64  `protobuf:"varint,5,opt,name=size,proto3" json:"size,omitempty"`
+	Content     []byte `protobuf:"bytes,6,opt,name=content,proto3" json:"content,omitempty"`
+}
+
+func (x *GrpcIncomingFile) Reset() {
+	*x = GrpcIncomingFile{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_vorgang_model_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcIncomingFile) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcIncomingFile) ProtoMessage() {}
+
+func (x *GrpcIncomingFile) ProtoReflect() protoreflect.Message {
+	mi := &file_vorgang_model_proto_msgTypes[5]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcIncomingFile.ProtoReflect.Descriptor instead.
+func (*GrpcIncomingFile) Descriptor() ([]byte, []int) {
+	return file_vorgang_model_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *GrpcIncomingFile) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *GrpcIncomingFile) GetVendorId() string {
+	if x != nil {
+		return x.VendorId
+	}
+	return ""
+}
+
+func (x *GrpcIncomingFile) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *GrpcIncomingFile) GetContentType() string {
+	if x != nil {
+		return x.ContentType
+	}
+	return ""
+}
+
+func (x *GrpcIncomingFile) GetSize() int64 {
+	if x != nil {
+		return x.Size
+	}
+	return 0
+}
+
+func (x *GrpcIncomingFile) GetContent() []byte {
+	if x != nil {
+		return x.Content
+	}
+	return nil
+}
+
+type GrpcEingangHeader struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	RequestId string `protobuf:"bytes,1,opt,name=requestId,proto3" json:"requestId,omitempty"`
+	CreatedAt string `protobuf:"bytes,2,opt,name=createdAt,proto3" json:"createdAt,omitempty"`
+	FormId    string `protobuf:"bytes,3,opt,name=formId,proto3" json:"formId,omitempty"`
+	FormName  string `protobuf:"bytes,4,opt,name=formName,proto3" json:"formName,omitempty"`
+	Sender    string `protobuf:"bytes,5,opt,name=sender,proto3" json:"sender,omitempty"`
+	// Deprecated: Marked as deprecated in vorgang.model.proto.
+	Customer string `protobuf:"bytes,6,opt,name=customer,proto3" json:"customer,omitempty"`
+	// Deprecated: Marked as deprecated in vorgang.model.proto.
+	CustomerId string `protobuf:"bytes,7,opt,name=customerId,proto3" json:"customerId,omitempty"`
+	// Deprecated: Marked as deprecated in vorgang.model.proto.
+	Client string `protobuf:"bytes,8,opt,name=client,proto3" json:"client,omitempty"`
+	// Deprecated: Marked as deprecated in vorgang.model.proto.
+	ClientId       string            `protobuf:"bytes,9,opt,name=clientId,proto3" json:"clientId,omitempty"`
+	FormEngineName string            `protobuf:"bytes,10,opt,name=formEngineName,proto3" json:"formEngineName,omitempty"`
+	ServiceKonto   *GrpcServiceKonto `protobuf:"bytes,11,opt,name=serviceKonto,proto3" json:"serviceKonto,omitempty"`
+	VorgangNummer  string            `protobuf:"bytes,12,opt,name=vorgangNummer,proto3" json:"vorgangNummer,omitempty"`
+}
+
+func (x *GrpcEingangHeader) Reset() {
+	*x = GrpcEingangHeader{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_vorgang_model_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcEingangHeader) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcEingangHeader) ProtoMessage() {}
+
+func (x *GrpcEingangHeader) ProtoReflect() protoreflect.Message {
+	mi := &file_vorgang_model_proto_msgTypes[6]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcEingangHeader.ProtoReflect.Descriptor instead.
+func (*GrpcEingangHeader) Descriptor() ([]byte, []int) {
+	return file_vorgang_model_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *GrpcEingangHeader) GetRequestId() string {
+	if x != nil {
+		return x.RequestId
+	}
+	return ""
+}
+
+func (x *GrpcEingangHeader) GetCreatedAt() string {
+	if x != nil {
+		return x.CreatedAt
+	}
+	return ""
+}
+
+func (x *GrpcEingangHeader) GetFormId() string {
+	if x != nil {
+		return x.FormId
+	}
+	return ""
+}
+
+func (x *GrpcEingangHeader) GetFormName() string {
+	if x != nil {
+		return x.FormName
+	}
+	return ""
+}
+
+func (x *GrpcEingangHeader) GetSender() string {
+	if x != nil {
+		return x.Sender
+	}
+	return ""
+}
+
+// Deprecated: Marked as deprecated in vorgang.model.proto.
+func (x *GrpcEingangHeader) GetCustomer() string {
+	if x != nil {
+		return x.Customer
+	}
+	return ""
+}
+
+// Deprecated: Marked as deprecated in vorgang.model.proto.
+func (x *GrpcEingangHeader) GetCustomerId() string {
+	if x != nil {
+		return x.CustomerId
+	}
+	return ""
+}
+
+// Deprecated: Marked as deprecated in vorgang.model.proto.
+func (x *GrpcEingangHeader) GetClient() string {
+	if x != nil {
+		return x.Client
+	}
+	return ""
+}
+
+// Deprecated: Marked as deprecated in vorgang.model.proto.
+func (x *GrpcEingangHeader) GetClientId() string {
+	if x != nil {
+		return x.ClientId
+	}
+	return ""
+}
+
+func (x *GrpcEingangHeader) GetFormEngineName() string {
+	if x != nil {
+		return x.FormEngineName
+	}
+	return ""
+}
+
+func (x *GrpcEingangHeader) GetServiceKonto() *GrpcServiceKonto {
+	if x != nil {
+		return x.ServiceKonto
+	}
+	return nil
+}
+
+func (x *GrpcEingangHeader) GetVorgangNummer() string {
+	if x != nil {
+		return x.VorgangNummer
+	}
+	return ""
+}
+
+type GrpcServiceKonto struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Type              string                 `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
+	PostfachAddresses []*GrpcPostfachAddress `protobuf:"bytes,2,rep,name=postfachAddresses,proto3" json:"postfachAddresses,omitempty"`
+	TrustLevel        string                 `protobuf:"bytes,3,opt,name=trustLevel,proto3" json:"trustLevel,omitempty"`
+}
+
+func (x *GrpcServiceKonto) Reset() {
+	*x = GrpcServiceKonto{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_vorgang_model_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcServiceKonto) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcServiceKonto) ProtoMessage() {}
+
+func (x *GrpcServiceKonto) ProtoReflect() protoreflect.Message {
+	mi := &file_vorgang_model_proto_msgTypes[7]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcServiceKonto.ProtoReflect.Descriptor instead.
+func (*GrpcServiceKonto) Descriptor() ([]byte, []int) {
+	return file_vorgang_model_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *GrpcServiceKonto) GetType() string {
+	if x != nil {
+		return x.Type
+	}
+	return ""
+}
+
+func (x *GrpcServiceKonto) GetPostfachAddresses() []*GrpcPostfachAddress {
+	if x != nil {
+		return x.PostfachAddresses
+	}
+	return nil
+}
+
+func (x *GrpcServiceKonto) GetTrustLevel() string {
+	if x != nil {
+		return x.TrustLevel
+	}
+	return ""
+}
+
+type GrpcPostfachAddress struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Version    string                                 `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
+	Identifier *de_ozgcloud_vorgang_common.GrpcObject `protobuf:"bytes,2,opt,name=identifier,proto3" json:"identifier,omitempty"`
+	Type       int32                                  `protobuf:"varint,3,opt,name=type,proto3" json:"type,omitempty"`
+}
+
+func (x *GrpcPostfachAddress) Reset() {
+	*x = GrpcPostfachAddress{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_vorgang_model_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcPostfachAddress) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcPostfachAddress) ProtoMessage() {}
+
+func (x *GrpcPostfachAddress) ProtoReflect() protoreflect.Message {
+	mi := &file_vorgang_model_proto_msgTypes[8]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcPostfachAddress.ProtoReflect.Descriptor instead.
+func (*GrpcPostfachAddress) Descriptor() ([]byte, []int) {
+	return file_vorgang_model_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *GrpcPostfachAddress) GetVersion() string {
+	if x != nil {
+		return x.Version
+	}
+	return ""
+}
+
+func (x *GrpcPostfachAddress) GetIdentifier() *de_ozgcloud_vorgang_common.GrpcObject {
+	if x != nil {
+		return x.Identifier
+	}
+	return nil
+}
+
+func (x *GrpcPostfachAddress) GetType() int32 {
+	if x != nil {
+		return x.Type
+	}
+	return 0
+}
+
+type GrpcAntragsteller struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Anrede       string `protobuf:"bytes,1,opt,name=anrede,proto3" json:"anrede,omitempty"`
+	Nachname     string `protobuf:"bytes,2,opt,name=nachname,proto3" json:"nachname,omitempty"`
+	Vorname      string `protobuf:"bytes,3,opt,name=vorname,proto3" json:"vorname,omitempty"`
+	Geburtsdatum string `protobuf:"bytes,4,opt,name=geburtsdatum,proto3" json:"geburtsdatum,omitempty"`
+	Geburtsort   string `protobuf:"bytes,5,opt,name=geburtsort,proto3" json:"geburtsort,omitempty"`
+	Geburtsname  string `protobuf:"bytes,6,opt,name=geburtsname,proto3" json:"geburtsname,omitempty"`
+	Email        string `protobuf:"bytes,7,opt,name=email,proto3" json:"email,omitempty"`
+	Telefon      string `protobuf:"bytes,8,opt,name=telefon,proto3" json:"telefon,omitempty"`
+	Strasse      string `protobuf:"bytes,9,opt,name=strasse,proto3" json:"strasse,omitempty"`
+	Hausnummer   string `protobuf:"bytes,10,opt,name=hausnummer,proto3" json:"hausnummer,omitempty"`
+	Plz          string `protobuf:"bytes,11,opt,name=plz,proto3" json:"plz,omitempty"`
+	Ort          string `protobuf:"bytes,12,opt,name=ort,proto3" json:"ort,omitempty"`
+	// Deprecated: Marked as deprecated in vorgang.model.proto.
+	PostfachId string        `protobuf:"bytes,13,opt,name=postfachId,proto3" json:"postfachId,omitempty"`
+	OtherData  *GrpcFormData `protobuf:"bytes,30,opt,name=otherData,proto3" json:"otherData,omitempty"`
+	FirmaName  string        `protobuf:"bytes,31,opt,name=firmaName,proto3" json:"firmaName,omitempty"`
+}
+
+func (x *GrpcAntragsteller) Reset() {
+	*x = GrpcAntragsteller{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_vorgang_model_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcAntragsteller) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcAntragsteller) ProtoMessage() {}
+
+func (x *GrpcAntragsteller) ProtoReflect() protoreflect.Message {
+	mi := &file_vorgang_model_proto_msgTypes[9]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcAntragsteller.ProtoReflect.Descriptor instead.
+func (*GrpcAntragsteller) Descriptor() ([]byte, []int) {
+	return file_vorgang_model_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *GrpcAntragsteller) GetAnrede() string {
+	if x != nil {
+		return x.Anrede
+	}
+	return ""
+}
+
+func (x *GrpcAntragsteller) GetNachname() string {
+	if x != nil {
+		return x.Nachname
+	}
+	return ""
+}
+
+func (x *GrpcAntragsteller) GetVorname() string {
+	if x != nil {
+		return x.Vorname
+	}
+	return ""
+}
+
+func (x *GrpcAntragsteller) GetGeburtsdatum() string {
+	if x != nil {
+		return x.Geburtsdatum
+	}
+	return ""
+}
+
+func (x *GrpcAntragsteller) GetGeburtsort() string {
+	if x != nil {
+		return x.Geburtsort
+	}
+	return ""
+}
+
+func (x *GrpcAntragsteller) GetGeburtsname() string {
+	if x != nil {
+		return x.Geburtsname
+	}
+	return ""
+}
+
+func (x *GrpcAntragsteller) GetEmail() string {
+	if x != nil {
+		return x.Email
+	}
+	return ""
+}
+
+func (x *GrpcAntragsteller) GetTelefon() string {
+	if x != nil {
+		return x.Telefon
+	}
+	return ""
+}
+
+func (x *GrpcAntragsteller) GetStrasse() string {
+	if x != nil {
+		return x.Strasse
+	}
+	return ""
+}
+
+func (x *GrpcAntragsteller) GetHausnummer() string {
+	if x != nil {
+		return x.Hausnummer
+	}
+	return ""
+}
+
+func (x *GrpcAntragsteller) GetPlz() string {
+	if x != nil {
+		return x.Plz
+	}
+	return ""
+}
+
+func (x *GrpcAntragsteller) GetOrt() string {
+	if x != nil {
+		return x.Ort
+	}
+	return ""
+}
+
+// Deprecated: Marked as deprecated in vorgang.model.proto.
+func (x *GrpcAntragsteller) GetPostfachId() string {
+	if x != nil {
+		return x.PostfachId
+	}
+	return ""
+}
+
+func (x *GrpcAntragsteller) GetOtherData() *GrpcFormData {
+	if x != nil {
+		return x.OtherData
+	}
+	return nil
+}
+
+func (x *GrpcAntragsteller) GetFirmaName() string {
+	if x != nil {
+		return x.FirmaName
+	}
+	return ""
+}
+
+type GrpcFormData struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Field []*GrpcFormField `protobuf:"bytes,1,rep,name=field,proto3" json:"field,omitempty"`
+	Form  []*GrpcSubForm   `protobuf:"bytes,2,rep,name=form,proto3" json:"form,omitempty"`
+}
+
+func (x *GrpcFormData) Reset() {
+	*x = GrpcFormData{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_vorgang_model_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcFormData) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcFormData) ProtoMessage() {}
+
+func (x *GrpcFormData) ProtoReflect() protoreflect.Message {
+	mi := &file_vorgang_model_proto_msgTypes[10]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcFormData.ProtoReflect.Descriptor instead.
+func (*GrpcFormData) Descriptor() ([]byte, []int) {
+	return file_vorgang_model_proto_rawDescGZIP(), []int{10}
+}
+
+func (x *GrpcFormData) GetField() []*GrpcFormField {
+	if x != nil {
+		return x.Field
+	}
+	return nil
+}
+
+func (x *GrpcFormData) GetForm() []*GrpcSubForm {
+	if x != nil {
+		return x.Form
+	}
+	return nil
+}
+
+type GrpcFormField struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name  string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+	Label string `protobuf:"bytes,3,opt,name=label,proto3" json:"label,omitempty"`
+}
+
+func (x *GrpcFormField) Reset() {
+	*x = GrpcFormField{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_vorgang_model_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcFormField) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcFormField) ProtoMessage() {}
+
+func (x *GrpcFormField) ProtoReflect() protoreflect.Message {
+	mi := &file_vorgang_model_proto_msgTypes[11]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcFormField.ProtoReflect.Descriptor instead.
+func (*GrpcFormField) Descriptor() ([]byte, []int) {
+	return file_vorgang_model_proto_rawDescGZIP(), []int{11}
+}
+
+func (x *GrpcFormField) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *GrpcFormField) GetValue() string {
+	if x != nil {
+		return x.Value
+	}
+	return ""
+}
+
+func (x *GrpcFormField) GetLabel() string {
+	if x != nil {
+		return x.Label
+	}
+	return ""
+}
+
+type GrpcSubForm struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Title       string           `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"`
+	Field       []*GrpcFormField `protobuf:"bytes,2,rep,name=field,proto3" json:"field,omitempty"`
+	SubForm     []*GrpcSubForm   `protobuf:"bytes,3,rep,name=subForm,proto3" json:"subForm,omitempty"`
+	Label       string           `protobuf:"bytes,4,opt,name=label,proto3" json:"label,omitempty"`
+	ControlData *GrpcControlData `protobuf:"bytes,5,opt,name=controlData,proto3" json:"controlData,omitempty"`
+}
+
+func (x *GrpcSubForm) Reset() {
+	*x = GrpcSubForm{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_vorgang_model_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcSubForm) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcSubForm) ProtoMessage() {}
+
+func (x *GrpcSubForm) ProtoReflect() protoreflect.Message {
+	mi := &file_vorgang_model_proto_msgTypes[12]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcSubForm.ProtoReflect.Descriptor instead.
+func (*GrpcSubForm) Descriptor() ([]byte, []int) {
+	return file_vorgang_model_proto_rawDescGZIP(), []int{12}
+}
+
+func (x *GrpcSubForm) GetTitle() string {
+	if x != nil {
+		return x.Title
+	}
+	return ""
+}
+
+func (x *GrpcSubForm) GetField() []*GrpcFormField {
+	if x != nil {
+		return x.Field
+	}
+	return nil
+}
+
+func (x *GrpcSubForm) GetSubForm() []*GrpcSubForm {
+	if x != nil {
+		return x.SubForm
+	}
+	return nil
+}
+
+func (x *GrpcSubForm) GetLabel() string {
+	if x != nil {
+		return x.Label
+	}
+	return ""
+}
+
+func (x *GrpcSubForm) GetControlData() *GrpcControlData {
+	if x != nil {
+		return x.ControlData
+	}
+	return nil
+}
+
+type GrpcControlData struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Metadata bool `protobuf:"varint,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
+}
+
+func (x *GrpcControlData) Reset() {
+	*x = GrpcControlData{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_vorgang_model_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcControlData) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcControlData) ProtoMessage() {}
+
+func (x *GrpcControlData) ProtoReflect() protoreflect.Message {
+	mi := &file_vorgang_model_proto_msgTypes[13]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcControlData.ProtoReflect.Descriptor instead.
+func (*GrpcControlData) Descriptor() ([]byte, []int) {
+	return file_vorgang_model_proto_rawDescGZIP(), []int{13}
+}
+
+func (x *GrpcControlData) GetMetadata() bool {
+	if x != nil {
+		return x.Metadata
+	}
+	return false
+}
+
+type GrpcZustaendigeStelle struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	OrganisationseinheitenId    string `protobuf:"bytes,1,opt,name=organisationseinheitenId,proto3" json:"organisationseinheitenId,omitempty"`
+	Email                       string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"`
+	Bezeichnung                 string `protobuf:"bytes,3,opt,name=bezeichnung,proto3" json:"bezeichnung,omitempty"`
+	GemeindeSchluessel          string `protobuf:"bytes,4,opt,name=gemeindeSchluessel,proto3" json:"gemeindeSchluessel,omitempty"`
+	AmtlicherRegionalSchluessel string `protobuf:"bytes,5,opt,name=amtlicherRegionalSchluessel,proto3" json:"amtlicherRegionalSchluessel,omitempty"`
+	HausanschriftStrasse        string `protobuf:"bytes,6,opt,name=hausanschriftStrasse,proto3" json:"hausanschriftStrasse,omitempty"`
+	HausanschriftPlz            string `protobuf:"bytes,7,opt,name=hausanschriftPlz,proto3" json:"hausanschriftPlz,omitempty"`
+	HausanschriftOrt            string `protobuf:"bytes,8,opt,name=hausanschriftOrt,proto3" json:"hausanschriftOrt,omitempty"`
+	Telefon                     string `protobuf:"bytes,9,opt,name=telefon,proto3" json:"telefon,omitempty"`
+}
+
+func (x *GrpcZustaendigeStelle) Reset() {
+	*x = GrpcZustaendigeStelle{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_vorgang_model_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcZustaendigeStelle) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcZustaendigeStelle) ProtoMessage() {}
+
+func (x *GrpcZustaendigeStelle) ProtoReflect() protoreflect.Message {
+	mi := &file_vorgang_model_proto_msgTypes[14]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcZustaendigeStelle.ProtoReflect.Descriptor instead.
+func (*GrpcZustaendigeStelle) Descriptor() ([]byte, []int) {
+	return file_vorgang_model_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *GrpcZustaendigeStelle) GetOrganisationseinheitenId() string {
+	if x != nil {
+		return x.OrganisationseinheitenId
+	}
+	return ""
+}
+
+func (x *GrpcZustaendigeStelle) GetEmail() string {
+	if x != nil {
+		return x.Email
+	}
+	return ""
+}
+
+func (x *GrpcZustaendigeStelle) GetBezeichnung() string {
+	if x != nil {
+		return x.Bezeichnung
+	}
+	return ""
+}
+
+func (x *GrpcZustaendigeStelle) GetGemeindeSchluessel() string {
+	if x != nil {
+		return x.GemeindeSchluessel
+	}
+	return ""
+}
+
+func (x *GrpcZustaendigeStelle) GetAmtlicherRegionalSchluessel() string {
+	if x != nil {
+		return x.AmtlicherRegionalSchluessel
+	}
+	return ""
+}
+
+func (x *GrpcZustaendigeStelle) GetHausanschriftStrasse() string {
+	if x != nil {
+		return x.HausanschriftStrasse
+	}
+	return ""
+}
+
+func (x *GrpcZustaendigeStelle) GetHausanschriftPlz() string {
+	if x != nil {
+		return x.HausanschriftPlz
+	}
+	return ""
+}
+
+func (x *GrpcZustaendigeStelle) GetHausanschriftOrt() string {
+	if x != nil {
+		return x.HausanschriftOrt
+	}
+	return ""
+}
+
+func (x *GrpcZustaendigeStelle) GetTelefon() string {
+	if x != nil {
+		return x.Telefon
+	}
+	return ""
+}
+
+type GrpcQuery struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	LogicalOperator GrpcLogicalOperator           `protobuf:"varint,1,opt,name=logicalOperator,proto3,enum=de.ozgcloud.vorgang.vorgang.GrpcLogicalOperator" json:"logicalOperator,omitempty"`
+	Expressions     []*GrpcVorgangQueryExpression `protobuf:"bytes,2,rep,name=expressions,proto3" json:"expressions,omitempty"`
+	NestedQuery     *GrpcQuery                    `protobuf:"bytes,3,opt,name=nestedQuery,proto3" json:"nestedQuery,omitempty"`
+}
+
+func (x *GrpcQuery) Reset() {
+	*x = GrpcQuery{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_vorgang_model_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcQuery) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcQuery) ProtoMessage() {}
+
+func (x *GrpcQuery) ProtoReflect() protoreflect.Message {
+	mi := &file_vorgang_model_proto_msgTypes[15]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcQuery.ProtoReflect.Descriptor instead.
+func (*GrpcQuery) Descriptor() ([]byte, []int) {
+	return file_vorgang_model_proto_rawDescGZIP(), []int{15}
+}
+
+func (x *GrpcQuery) GetLogicalOperator() GrpcLogicalOperator {
+	if x != nil {
+		return x.LogicalOperator
+	}
+	return GrpcLogicalOperator_AND
+}
+
+func (x *GrpcQuery) GetExpressions() []*GrpcVorgangQueryExpression {
+	if x != nil {
+		return x.Expressions
+	}
+	return nil
+}
+
+func (x *GrpcQuery) GetNestedQuery() *GrpcQuery {
+	if x != nil {
+		return x.NestedQuery
+	}
+	return nil
+}
+
+type GrpcVorgangQueryExpression struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Path     string                                       `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
+	Operator de_ozgcloud_vorgang_common.GrpcQueryOperator `protobuf:"varint,2,opt,name=operator,proto3,enum=de.ozgcloud.vorgang.common.GrpcQueryOperator" json:"operator,omitempty"`
+	// Types that are assignable to Operand:
+	//
+	//	*GrpcVorgangQueryExpression_OperandIntValue
+	//	*GrpcVorgangQueryExpression_OperandBoolValue
+	//	*GrpcVorgangQueryExpression_OperandStringValue
+	Operand isGrpcVorgangQueryExpression_Operand `protobuf_oneof:"operand"`
+}
+
+func (x *GrpcVorgangQueryExpression) Reset() {
+	*x = GrpcVorgangQueryExpression{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_vorgang_model_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcVorgangQueryExpression) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcVorgangQueryExpression) ProtoMessage() {}
+
+func (x *GrpcVorgangQueryExpression) ProtoReflect() protoreflect.Message {
+	mi := &file_vorgang_model_proto_msgTypes[16]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcVorgangQueryExpression.ProtoReflect.Descriptor instead.
+func (*GrpcVorgangQueryExpression) Descriptor() ([]byte, []int) {
+	return file_vorgang_model_proto_rawDescGZIP(), []int{16}
+}
+
+func (x *GrpcVorgangQueryExpression) GetPath() string {
+	if x != nil {
+		return x.Path
+	}
+	return ""
+}
+
+func (x *GrpcVorgangQueryExpression) GetOperator() de_ozgcloud_vorgang_common.GrpcQueryOperator {
+	if x != nil {
+		return x.Operator
+	}
+	return de_ozgcloud_vorgang_common.GrpcQueryOperator(0)
+}
+
+func (m *GrpcVorgangQueryExpression) GetOperand() isGrpcVorgangQueryExpression_Operand {
+	if m != nil {
+		return m.Operand
+	}
+	return nil
+}
+
+func (x *GrpcVorgangQueryExpression) GetOperandIntValue() int32 {
+	if x, ok := x.GetOperand().(*GrpcVorgangQueryExpression_OperandIntValue); ok {
+		return x.OperandIntValue
+	}
+	return 0
+}
+
+func (x *GrpcVorgangQueryExpression) GetOperandBoolValue() bool {
+	if x, ok := x.GetOperand().(*GrpcVorgangQueryExpression_OperandBoolValue); ok {
+		return x.OperandBoolValue
+	}
+	return false
+}
+
+func (x *GrpcVorgangQueryExpression) GetOperandStringValue() string {
+	if x, ok := x.GetOperand().(*GrpcVorgangQueryExpression_OperandStringValue); ok {
+		return x.OperandStringValue
+	}
+	return ""
+}
+
+type isGrpcVorgangQueryExpression_Operand interface {
+	isGrpcVorgangQueryExpression_Operand()
+}
+
+type GrpcVorgangQueryExpression_OperandIntValue struct {
+	OperandIntValue int32 `protobuf:"varint,3,opt,name=operandIntValue,proto3,oneof"`
+}
+
+type GrpcVorgangQueryExpression_OperandBoolValue struct {
+	OperandBoolValue bool `protobuf:"varint,4,opt,name=operandBoolValue,proto3,oneof"`
+}
+
+type GrpcVorgangQueryExpression_OperandStringValue struct {
+	OperandStringValue string `protobuf:"bytes,5,opt,name=operandStringValue,proto3,oneof"`
+}
+
+func (*GrpcVorgangQueryExpression_OperandIntValue) isGrpcVorgangQueryExpression_Operand() {}
+
+func (*GrpcVorgangQueryExpression_OperandBoolValue) isGrpcVorgangQueryExpression_Operand() {}
+
+func (*GrpcVorgangQueryExpression_OperandStringValue) isGrpcVorgangQueryExpression_Operand() {}
+
+type GrpcCreateCollaborationVorgangRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// Types that are assignable to Request:
+	//
+	//	*GrpcCreateCollaborationVorgangRequest_CollaborationRequest
+	Request isGrpcCreateCollaborationVorgangRequest_Request `protobuf_oneof:"request"`
+}
+
+func (x *GrpcCreateCollaborationVorgangRequest) Reset() {
+	*x = GrpcCreateCollaborationVorgangRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_vorgang_model_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcCreateCollaborationVorgangRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcCreateCollaborationVorgangRequest) ProtoMessage() {}
+
+func (x *GrpcCreateCollaborationVorgangRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_vorgang_model_proto_msgTypes[17]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcCreateCollaborationVorgangRequest.ProtoReflect.Descriptor instead.
+func (*GrpcCreateCollaborationVorgangRequest) Descriptor() ([]byte, []int) {
+	return file_vorgang_model_proto_rawDescGZIP(), []int{17}
+}
+
+func (m *GrpcCreateCollaborationVorgangRequest) GetRequest() isGrpcCreateCollaborationVorgangRequest_Request {
+	if m != nil {
+		return m.Request
+	}
+	return nil
+}
+
+func (x *GrpcCreateCollaborationVorgangRequest) GetCollaborationRequest() *GrpcCollaborationRequest {
+	if x, ok := x.GetRequest().(*GrpcCreateCollaborationVorgangRequest_CollaborationRequest); ok {
+		return x.CollaborationRequest
+	}
+	return nil
+}
+
+type isGrpcCreateCollaborationVorgangRequest_Request interface {
+	isGrpcCreateCollaborationVorgangRequest_Request()
+}
+
+type GrpcCreateCollaborationVorgangRequest_CollaborationRequest struct {
+	CollaborationRequest *GrpcCollaborationRequest `protobuf:"bytes,1,opt,name=collaborationRequest,proto3,oneof"`
+}
+
+func (*GrpcCreateCollaborationVorgangRequest_CollaborationRequest) isGrpcCreateCollaborationVorgangRequest_Request() {
+}
+
+type GrpcCollaborationRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	VorgangId          string `protobuf:"bytes,1,opt,name=vorgangId,proto3" json:"vorgangId,omitempty"`
+	CollaborationLevel int32  `protobuf:"varint,2,opt,name=collaborationLevel,proto3" json:"collaborationLevel,omitempty"`
+	ZustaendigeStelle  string `protobuf:"bytes,3,opt,name=zustaendigeStelle,proto3" json:"zustaendigeStelle,omitempty"`
+}
+
+func (x *GrpcCollaborationRequest) Reset() {
+	*x = GrpcCollaborationRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_vorgang_model_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcCollaborationRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcCollaborationRequest) ProtoMessage() {}
+
+func (x *GrpcCollaborationRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_vorgang_model_proto_msgTypes[18]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcCollaborationRequest.ProtoReflect.Descriptor instead.
+func (*GrpcCollaborationRequest) Descriptor() ([]byte, []int) {
+	return file_vorgang_model_proto_rawDescGZIP(), []int{18}
+}
+
+func (x *GrpcCollaborationRequest) GetVorgangId() string {
+	if x != nil {
+		return x.VorgangId
+	}
+	return ""
+}
+
+func (x *GrpcCollaborationRequest) GetCollaborationLevel() int32 {
+	if x != nil {
+		return x.CollaborationLevel
+	}
+	return 0
+}
+
+func (x *GrpcCollaborationRequest) GetZustaendigeStelle() string {
+	if x != nil {
+		return x.ZustaendigeStelle
+	}
+	return ""
+}
+
+type GrpcCreateCollaborationVorgangResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	VorgangId string `protobuf:"bytes,1,opt,name=vorgangId,proto3" json:"vorgangId,omitempty"`
+}
+
+func (x *GrpcCreateCollaborationVorgangResponse) Reset() {
+	*x = GrpcCreateCollaborationVorgangResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_vorgang_model_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GrpcCreateCollaborationVorgangResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GrpcCreateCollaborationVorgangResponse) ProtoMessage() {}
+
+func (x *GrpcCreateCollaborationVorgangResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_vorgang_model_proto_msgTypes[19]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GrpcCreateCollaborationVorgangResponse.ProtoReflect.Descriptor instead.
+func (*GrpcCreateCollaborationVorgangResponse) Descriptor() ([]byte, []int) {
+	return file_vorgang_model_proto_rawDescGZIP(), []int{19}
+}
+
+func (x *GrpcCreateCollaborationVorgangResponse) GetVorgangId() string {
+	if x != nil {
+		return x.VorgangId
+	}
+	return ""
+}
+
+var File_vorgang_model_proto protoreflect.FileDescriptor
+
+var file_vorgang_model_proto_rawDesc = []byte{
+	0x0a, 0x13, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1b, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f,
+	0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61,
+	0x6e, 0x67, 0x1a, 0x1b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+	0x75, 0x74, 0x65, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
+	0x12, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x22, 0xf6, 0x02, 0x0a, 0x11, 0x47, 0x72, 0x70, 0x63, 0x56, 0x6f, 0x72, 0x67,
+	0x61, 0x6e, 0x67, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72,
+	0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73,
+	0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e,
+	0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
+	0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x05, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x22, 0x0a,
+	0x0c, 0x61, 0x6b, 0x74, 0x65, 0x6e, 0x7a, 0x65, 0x69, 0x63, 0x68, 0x65, 0x6e, 0x18, 0x06, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x6b, 0x74, 0x65, 0x6e, 0x7a, 0x65, 0x69, 0x63, 0x68, 0x65,
+	0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x18,
+	0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54,
+	0x6f, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x6d, 0x65, 0x72, 0x12, 0x69, 0x0a, 0x10, 0x63, 0x6c, 0x69,
+	0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x09, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75,
+	0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63,
+	0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2e, 0x47,
+	0x72, 0x70, 0x63, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+	0x74, 0x65, 0x52, 0x10, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
+	0x75, 0x74, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x45, 0x6e, 0x67, 0x69,
+	0x6e, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x66, 0x6f,
+	0x72, 0x6d, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x85, 0x04, 0x0a,
+	0x16, 0x47, 0x72, 0x70, 0x63, 0x56, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x57, 0x69, 0x74, 0x68,
+	0x45, 0x69, 0x6e, 0x67, 0x61, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69,
+	0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
+	0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
+	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a,
+	0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x61,
+	0x6b, 0x74, 0x65, 0x6e, 0x7a, 0x65, 0x69, 0x63, 0x68, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0c, 0x61, 0x6b, 0x74, 0x65, 0x6e, 0x7a, 0x65, 0x69, 0x63, 0x68, 0x65, 0x6e, 0x12,
+	0x1e, 0x0a, 0x0a, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x18, 0x07, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x12,
+	0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x06, 0x6e, 0x75, 0x6d, 0x6d, 0x65, 0x72, 0x12, 0x69, 0x0a, 0x10, 0x63, 0x6c, 0x69, 0x65, 0x6e,
+	0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x3d, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
+	0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6c, 0x69,
+	0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2e, 0x47, 0x72, 0x70,
+	0x63, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+	0x52, 0x10, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+	0x65, 0x73, 0x12, 0x42, 0x0a, 0x07, 0x65, 0x69, 0x6e, 0x67, 0x61, 0x6e, 0x67, 0x18, 0x0a, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75,
+	0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e,
+	0x67, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x45, 0x69, 0x6e, 0x67, 0x61, 0x6e, 0x67, 0x52, 0x07, 0x65,
+	0x69, 0x6e, 0x67, 0x61, 0x6e, 0x67, 0x12, 0x26, 0x0a, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x45, 0x6e,
+	0x67, 0x69, 0x6e, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e,
+	0x66, 0x6f, 0x72, 0x6d, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x44,
+	0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c,
+	0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72,
+	0x67, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x47, 0x72, 0x70,
+	0x63, 0x56, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x48, 0x65, 0x61, 0x64, 0x52, 0x06, 0x68, 0x65,
+	0x61, 0x64, 0x65, 0x72, 0x22, 0x64, 0x0a, 0x0f, 0x47, 0x72, 0x70, 0x63, 0x56, 0x6f, 0x72, 0x67,
+	0x61, 0x6e, 0x67, 0x48, 0x65, 0x61, 0x64, 0x12, 0x51, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69,
+	0x63, 0x65, 0x4b, 0x6f, 0x6e, 0x74, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e,
+	0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67,
+	0x61, 0x6e, 0x67, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x47, 0x72, 0x70, 0x63,
+	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x6f, 0x6e, 0x74, 0x6f, 0x52, 0x0c, 0x73, 0x65,
+	0x72, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x6f, 0x6e, 0x74, 0x6f, 0x22, 0xff, 0x04, 0x0a, 0x0b, 0x47,
+	0x72, 0x70, 0x63, 0x45, 0x69, 0x6e, 0x67, 0x61, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x46, 0x0a, 0x06, 0x68, 0x65,
+	0x61, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x64, 0x65, 0x2e,
+	0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67,
+	0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x45, 0x69, 0x6e,
+	0x67, 0x61, 0x6e, 0x67, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64,
+	0x65, 0x72, 0x12, 0x54, 0x0a, 0x0d, 0x61, 0x6e, 0x74, 0x72, 0x61, 0x67, 0x73, 0x74, 0x65, 0x6c,
+	0x6c, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x64, 0x65, 0x2e, 0x6f,
+	0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e,
+	0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x41, 0x6e, 0x74, 0x72,
+	0x61, 0x67, 0x73, 0x74, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x0d, 0x61, 0x6e, 0x74, 0x72, 0x61,
+	0x67, 0x73, 0x74, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x60, 0x0a, 0x11, 0x7a, 0x75, 0x73, 0x74,
+	0x61, 0x65, 0x6e, 0x64, 0x69, 0x67, 0x65, 0x53, 0x74, 0x65, 0x6c, 0x6c, 0x65, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75,
+	0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e,
+	0x67, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x5a, 0x75, 0x73, 0x74, 0x61, 0x65, 0x6e, 0x64, 0x69, 0x67,
+	0x65, 0x53, 0x74, 0x65, 0x6c, 0x6c, 0x65, 0x52, 0x11, 0x7a, 0x75, 0x73, 0x74, 0x61, 0x65, 0x6e,
+	0x64, 0x69, 0x67, 0x65, 0x53, 0x74, 0x65, 0x6c, 0x6c, 0x65, 0x12, 0x45, 0x0a, 0x08, 0x66, 0x6f,
+	0x72, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x64,
+	0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61,
+	0x6e, 0x67, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x46,
+	0x6f, 0x72, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x66, 0x6f, 0x72, 0x6d, 0x44, 0x61, 0x74,
+	0x61, 0x12, 0x30, 0x0a, 0x13, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x41, 0x74, 0x74,
+	0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13,
+	0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x12, 0x38, 0x0a, 0x17, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x52,
+	0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c,
+	0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x52, 0x65,
+	0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x54, 0x0a,
+	0x0b, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x14, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x32, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64,
+	0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67,
+	0x2e, 0x47, 0x72, 0x70, 0x63, 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c,
+	0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0b, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x12, 0x57, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x64,
+	0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61,
+	0x6e, 0x67, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x49,
+	0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x0f, 0x72, 0x65, 0x70,
+	0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x70, 0x0a, 0x15,
+	0x47, 0x72, 0x70, 0x63, 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x65,
+	0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x05, 0x66, 0x69, 0x6c,
+	0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a,
+	0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x76,
+	0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x49, 0x6e, 0x63, 0x6f, 0x6d,
+	0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x22, 0xa2,
+	0x01, 0x0a, 0x10, 0x47, 0x72, 0x70, 0x63, 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x46,
+	0x69, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x49, 0x64, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x49, 0x64, 0x12,
+	0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
+	0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79,
+	0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+	0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e,
+	0x74, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74,
+	0x65, 0x6e, 0x74, 0x22, 0xbc, 0x03, 0x0a, 0x11, 0x47, 0x72, 0x70, 0x63, 0x45, 0x69, 0x6e, 0x67,
+	0x61, 0x6e, 0x67, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74,
+	0x65, 0x64, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61,
+	0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a,
+	0x08, 0x66, 0x6f, 0x72, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x08, 0x66, 0x6f, 0x72, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e,
+	0x64, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65,
+	0x72, 0x12, 0x1e, 0x0a, 0x08, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x18, 0x06, 0x20,
+	0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x08, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65,
+	0x72, 0x12, 0x22, 0x0a, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x18,
+	0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f,
+	0x6d, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18,
+	0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e,
+	0x74, 0x12, 0x1e, 0x0a, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x09, 0x20,
+	0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49,
+	0x64, 0x12, 0x26, 0x0a, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x4e,
+	0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x45,
+	0x6e, 0x67, 0x69, 0x6e, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x73, 0x65, 0x72,
+	0x76, 0x69, 0x63, 0x65, 0x4b, 0x6f, 0x6e, 0x74, 0x6f, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x2d, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f,
+	0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x47, 0x72,
+	0x70, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x6f, 0x6e, 0x74, 0x6f, 0x52, 0x0c,
+	0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x6f, 0x6e, 0x74, 0x6f, 0x12, 0x24, 0x0a, 0x0d,
+	0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x4e, 0x75, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x0c, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0d, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x4e, 0x75, 0x6d, 0x6d,
+	0x65, 0x72, 0x22, 0xa6, 0x01, 0x0a, 0x10, 0x47, 0x72, 0x70, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69,
+	0x63, 0x65, 0x4b, 0x6f, 0x6e, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x5e, 0x0a, 0x11, 0x70,
+	0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73,
+	0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63,
+	0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x6f, 0x72,
+	0x67, 0x61, 0x6e, 0x67, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x50, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63,
+	0x68, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x11, 0x70, 0x6f, 0x73, 0x74, 0x66, 0x61,
+	0x63, 0x68, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74,
+	0x72, 0x75, 0x73, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x0a, 0x74, 0x72, 0x75, 0x73, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x8b, 0x01, 0x0a, 0x13,
+	0x47, 0x72, 0x70, 0x63, 0x50, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x41, 0x64, 0x64, 0x72,
+	0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x0a,
+	0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x26, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
+	0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x47,
+	0x72, 0x70, 0x63, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74,
+	0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xe0, 0x03, 0x0a, 0x11, 0x47, 0x72,
+	0x70, 0x63, 0x41, 0x6e, 0x74, 0x72, 0x61, 0x67, 0x73, 0x74, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x12,
+	0x16, 0x0a, 0x06, 0x61, 0x6e, 0x72, 0x65, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x06, 0x61, 0x6e, 0x72, 0x65, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x68, 0x6e,
+	0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x61, 0x63, 0x68, 0x6e,
+	0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x6f, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x6f, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a,
+	0x0c, 0x67, 0x65, 0x62, 0x75, 0x72, 0x74, 0x73, 0x64, 0x61, 0x74, 0x75, 0x6d, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0c, 0x67, 0x65, 0x62, 0x75, 0x72, 0x74, 0x73, 0x64, 0x61, 0x74, 0x75,
+	0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x62, 0x75, 0x72, 0x74, 0x73, 0x6f, 0x72, 0x74, 0x18,
+	0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x67, 0x65, 0x62, 0x75, 0x72, 0x74, 0x73, 0x6f, 0x72,
+	0x74, 0x12, 0x20, 0x0a, 0x0b, 0x67, 0x65, 0x62, 0x75, 0x72, 0x74, 0x73, 0x6e, 0x61, 0x6d, 0x65,
+	0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x65, 0x62, 0x75, 0x72, 0x74, 0x73, 0x6e,
+	0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x07, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x65, 0x6c,
+	0x65, 0x66, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x65, 0x6c, 0x65,
+	0x66, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x72, 0x61, 0x73, 0x73, 0x65, 0x18, 0x09,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x74, 0x72, 0x61, 0x73, 0x73, 0x65, 0x12, 0x1e, 0x0a,
+	0x0a, 0x68, 0x61, 0x75, 0x73, 0x6e, 0x75, 0x6d, 0x6d, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0a, 0x68, 0x61, 0x75, 0x73, 0x6e, 0x75, 0x6d, 0x6d, 0x65, 0x72, 0x12, 0x10, 0x0a,
+	0x03, 0x70, 0x6c, 0x7a, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x6c, 0x7a, 0x12,
+	0x10, 0x0a, 0x03, 0x6f, 0x72, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x72,
+	0x74, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x6f, 0x73, 0x74, 0x66, 0x61, 0x63, 0x68, 0x49, 0x64, 0x18,
+	0x0d, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x74, 0x66,
+	0x61, 0x63, 0x68, 0x49, 0x64, 0x12, 0x47, 0x0a, 0x09, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x44, 0x61,
+	0x74, 0x61, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a,
+	0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x76,
+	0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x46, 0x6f, 0x72, 0x6d, 0x44,
+	0x61, 0x74, 0x61, 0x52, 0x09, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1c,
+	0x0a, 0x09, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x09, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x8e, 0x01, 0x0a,
+	0x0c, 0x47, 0x72, 0x70, 0x63, 0x46, 0x6f, 0x72, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a,
+	0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x64,
+	0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61,
+	0x6e, 0x67, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x46,
+	0x6f, 0x72, 0x6d, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12,
+	0x3c, 0x0a, 0x04, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e,
+	0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67,
+	0x61, 0x6e, 0x67, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x47, 0x72, 0x70, 0x63,
+	0x53, 0x75, 0x62, 0x46, 0x6f, 0x72, 0x6d, 0x52, 0x04, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x4f, 0x0a,
+	0x0d, 0x47, 0x72, 0x70, 0x63, 0x46, 0x6f, 0x72, 0x6d, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x12,
+	0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
+	0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65,
+	0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x8f,
+	0x02, 0x0a, 0x0b, 0x47, 0x72, 0x70, 0x63, 0x53, 0x75, 0x62, 0x46, 0x6f, 0x72, 0x6d, 0x12, 0x14,
+	0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74,
+	0x69, 0x74, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75,
+	0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e,
+	0x67, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x46, 0x6f, 0x72, 0x6d, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52,
+	0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x42, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x46, 0x6f, 0x72,
+	0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67,
+	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x6f,
+	0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x53, 0x75, 0x62, 0x46, 0x6f, 0x72,
+	0x6d, 0x52, 0x07, 0x73, 0x75, 0x62, 0x46, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61,
+	0x62, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c,
+	0x12, 0x4e, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18,
+	0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c,
+	0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x6f, 0x72, 0x67,
+	0x61, 0x6e, 0x67, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x44,
+	0x61, 0x74, 0x61, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x44, 0x61, 0x74, 0x61,
+	0x22, 0x2d, 0x0a, 0x0f, 0x47, 0x72, 0x70, 0x63, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x44,
+	0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22,
+	0xa3, 0x03, 0x0a, 0x15, 0x47, 0x72, 0x70, 0x63, 0x5a, 0x75, 0x73, 0x74, 0x61, 0x65, 0x6e, 0x64,
+	0x69, 0x67, 0x65, 0x53, 0x74, 0x65, 0x6c, 0x6c, 0x65, 0x12, 0x3a, 0x0a, 0x18, 0x6f, 0x72, 0x67,
+	0x61, 0x6e, 0x69, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x69, 0x6e, 0x68, 0x65, 0x69,
+	0x74, 0x65, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x6f, 0x72, 0x67,
+	0x61, 0x6e, 0x69, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x69, 0x6e, 0x68, 0x65, 0x69,
+	0x74, 0x65, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x62,
+	0x65, 0x7a, 0x65, 0x69, 0x63, 0x68, 0x6e, 0x75, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0b, 0x62, 0x65, 0x7a, 0x65, 0x69, 0x63, 0x68, 0x6e, 0x75, 0x6e, 0x67, 0x12, 0x2e, 0x0a,
+	0x12, 0x67, 0x65, 0x6d, 0x65, 0x69, 0x6e, 0x64, 0x65, 0x53, 0x63, 0x68, 0x6c, 0x75, 0x65, 0x73,
+	0x73, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x67, 0x65, 0x6d, 0x65, 0x69,
+	0x6e, 0x64, 0x65, 0x53, 0x63, 0x68, 0x6c, 0x75, 0x65, 0x73, 0x73, 0x65, 0x6c, 0x12, 0x40, 0x0a,
+	0x1b, 0x61, 0x6d, 0x74, 0x6c, 0x69, 0x63, 0x68, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e,
+	0x61, 0x6c, 0x53, 0x63, 0x68, 0x6c, 0x75, 0x65, 0x73, 0x73, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x1b, 0x61, 0x6d, 0x74, 0x6c, 0x69, 0x63, 0x68, 0x65, 0x72, 0x52, 0x65, 0x67,
+	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x63, 0x68, 0x6c, 0x75, 0x65, 0x73, 0x73, 0x65, 0x6c, 0x12,
+	0x32, 0x0a, 0x14, 0x68, 0x61, 0x75, 0x73, 0x61, 0x6e, 0x73, 0x63, 0x68, 0x72, 0x69, 0x66, 0x74,
+	0x53, 0x74, 0x72, 0x61, 0x73, 0x73, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x68,
+	0x61, 0x75, 0x73, 0x61, 0x6e, 0x73, 0x63, 0x68, 0x72, 0x69, 0x66, 0x74, 0x53, 0x74, 0x72, 0x61,
+	0x73, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x68, 0x61, 0x75, 0x73, 0x61, 0x6e, 0x73, 0x63, 0x68,
+	0x72, 0x69, 0x66, 0x74, 0x50, 0x6c, 0x7a, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x68,
+	0x61, 0x75, 0x73, 0x61, 0x6e, 0x73, 0x63, 0x68, 0x72, 0x69, 0x66, 0x74, 0x50, 0x6c, 0x7a, 0x12,
+	0x2a, 0x0a, 0x10, 0x68, 0x61, 0x75, 0x73, 0x61, 0x6e, 0x73, 0x63, 0x68, 0x72, 0x69, 0x66, 0x74,
+	0x4f, 0x72, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x68, 0x61, 0x75, 0x73, 0x61,
+	0x6e, 0x73, 0x63, 0x68, 0x72, 0x69, 0x66, 0x74, 0x4f, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x74,
+	0x65, 0x6c, 0x65, 0x66, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x65,
+	0x6c, 0x65, 0x66, 0x6f, 0x6e, 0x22, 0x8c, 0x02, 0x0a, 0x09, 0x47, 0x72, 0x70, 0x63, 0x51, 0x75,
+	0x65, 0x72, 0x79, 0x12, 0x5a, 0x0a, 0x0f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x4f, 0x70,
+	0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x64,
+	0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61,
+	0x6e, 0x67, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4c,
+	0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0f,
+	0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12,
+	0x59, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f,
+	0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61,
+	0x6e, 0x67, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x56, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x51, 0x75,
+	0x65, 0x72, 0x79, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x65,
+	0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x48, 0x0a, 0x0b, 0x6e, 0x65,
+	0x73, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x26, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f,
+	0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x47, 0x72,
+	0x70, 0x63, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x0b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x51,
+	0x75, 0x65, 0x72, 0x79, 0x22, 0x92, 0x02, 0x0a, 0x1a, 0x47, 0x72, 0x70, 0x63, 0x56, 0x6f, 0x72,
+	0x67, 0x61, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73,
+	0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x49, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61,
+	0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x64, 0x65, 0x2e, 0x6f,
+	0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e,
+	0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x51, 0x75, 0x65, 0x72, 0x79,
+	0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74,
+	0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x49, 0x6e, 0x74,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x0f, 0x6f,
+	0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2c,
+	0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x10, 0x6f, 0x70, 0x65, 0x72,
+	0x61, 0x6e, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x30, 0x0a, 0x12,
+	0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c,
+	0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x12, 0x6f, 0x70, 0x65, 0x72,
+	0x61, 0x6e, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x09,
+	0x0a, 0x07, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x22, 0x9f, 0x01, 0x0a, 0x25, 0x47, 0x72,
+	0x70, 0x63, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6f, 0x72,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x12, 0x6b, 0x0a, 0x14, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x35, 0x2e, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
+	0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e,
+	0x47, 0x72, 0x70, 0x63, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x14, 0x63, 0x6f, 0x6c, 0x6c,
+	0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x42, 0x09, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x96, 0x01, 0x0a, 0x18,
+	0x47, 0x72, 0x70, 0x63, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x76, 0x6f, 0x72, 0x67,
+	0x61, 0x6e, 0x67, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x6f, 0x72,
+	0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x62,
+	0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x12, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x2c, 0x0a, 0x11, 0x7a, 0x75, 0x73, 0x74, 0x61, 0x65,
+	0x6e, 0x64, 0x69, 0x67, 0x65, 0x53, 0x74, 0x65, 0x6c, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x11, 0x7a, 0x75, 0x73, 0x74, 0x61, 0x65, 0x6e, 0x64, 0x69, 0x67, 0x65, 0x53, 0x74,
+	0x65, 0x6c, 0x6c, 0x65, 0x22, 0x46, 0x0a, 0x26, 0x47, 0x72, 0x70, 0x63, 0x43, 0x72, 0x65, 0x61,
+	0x74, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56,
+	0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c,
+	0x0a, 0x09, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x09, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x2a, 0x26, 0x0a, 0x13,
+	0x47, 0x72, 0x70, 0x63, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61,
+	0x74, 0x6f, 0x72, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4e, 0x44, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02,
+	0x4f, 0x52, 0x10, 0x01, 0x42, 0x1d, 0x5a, 0x1b, 0x64, 0x65, 0x2e, 0x6f, 0x7a, 0x67, 0x63, 0x6c,
+	0x6f, 0x75, 0x64, 0x2e, 0x76, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x6f, 0x72, 0x67,
+	0x61, 0x6e, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_vorgang_model_proto_rawDescOnce sync.Once
+	file_vorgang_model_proto_rawDescData = file_vorgang_model_proto_rawDesc
+)
+
+func file_vorgang_model_proto_rawDescGZIP() []byte {
+	file_vorgang_model_proto_rawDescOnce.Do(func() {
+		file_vorgang_model_proto_rawDescData = protoimpl.X.CompressGZIP(file_vorgang_model_proto_rawDescData)
+	})
+	return file_vorgang_model_proto_rawDescData
+}
+
+var file_vorgang_model_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_vorgang_model_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
+var file_vorgang_model_proto_goTypes = []any{
+	(GrpcLogicalOperator)(0),                       // 0: de.ozgcloud.vorgang.vorgang.GrpcLogicalOperator
+	(*GrpcVorgangHeader)(nil),                      // 1: de.ozgcloud.vorgang.vorgang.GrpcVorgangHeader
+	(*GrpcVorgangWithEingang)(nil),                 // 2: de.ozgcloud.vorgang.vorgang.GrpcVorgangWithEingang
+	(*GrpcVorgangHead)(nil),                        // 3: de.ozgcloud.vorgang.vorgang.GrpcVorgangHead
+	(*GrpcEingang)(nil),                            // 4: de.ozgcloud.vorgang.vorgang.GrpcEingang
+	(*GrpcIncomingFileGroup)(nil),                  // 5: de.ozgcloud.vorgang.vorgang.GrpcIncomingFileGroup
+	(*GrpcIncomingFile)(nil),                       // 6: de.ozgcloud.vorgang.vorgang.GrpcIncomingFile
+	(*GrpcEingangHeader)(nil),                      // 7: de.ozgcloud.vorgang.vorgang.GrpcEingangHeader
+	(*GrpcServiceKonto)(nil),                       // 8: de.ozgcloud.vorgang.vorgang.GrpcServiceKonto
+	(*GrpcPostfachAddress)(nil),                    // 9: de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress
+	(*GrpcAntragsteller)(nil),                      // 10: de.ozgcloud.vorgang.vorgang.GrpcAntragsteller
+	(*GrpcFormData)(nil),                           // 11: de.ozgcloud.vorgang.vorgang.GrpcFormData
+	(*GrpcFormField)(nil),                          // 12: de.ozgcloud.vorgang.vorgang.GrpcFormField
+	(*GrpcSubForm)(nil),                            // 13: de.ozgcloud.vorgang.vorgang.GrpcSubForm
+	(*GrpcControlData)(nil),                        // 14: de.ozgcloud.vorgang.vorgang.GrpcControlData
+	(*GrpcZustaendigeStelle)(nil),                  // 15: de.ozgcloud.vorgang.vorgang.GrpcZustaendigeStelle
+	(*GrpcQuery)(nil),                              // 16: de.ozgcloud.vorgang.vorgang.GrpcQuery
+	(*GrpcVorgangQueryExpression)(nil),             // 17: de.ozgcloud.vorgang.vorgang.GrpcVorgangQueryExpression
+	(*GrpcCreateCollaborationVorgangRequest)(nil),  // 18: de.ozgcloud.vorgang.vorgang.GrpcCreateCollaborationVorgangRequest
+	(*GrpcCollaborationRequest)(nil),               // 19: de.ozgcloud.vorgang.vorgang.GrpcCollaborationRequest
+	(*GrpcCreateCollaborationVorgangResponse)(nil), // 20: de.ozgcloud.vorgang.vorgang.GrpcCreateCollaborationVorgangResponse
+	(*de_ozgcloud_vorgang_grpc_clientAttribute.GrpcClientAttribute)(nil), // 21: de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute
+	(*de_ozgcloud_vorgang_common.GrpcObject)(nil),                        // 22: de.ozgcloud.vorgang.common.GrpcObject
+	(de_ozgcloud_vorgang_common.GrpcQueryOperator)(0),                    // 23: de.ozgcloud.vorgang.common.GrpcQueryOperator
+}
+var file_vorgang_model_proto_depIdxs = []int32{
+	21, // 0: de.ozgcloud.vorgang.vorgang.GrpcVorgangHeader.clientAttributes:type_name -> de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute
+	21, // 1: de.ozgcloud.vorgang.vorgang.GrpcVorgangWithEingang.clientAttributes:type_name -> de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute
+	4,  // 2: de.ozgcloud.vorgang.vorgang.GrpcVorgangWithEingang.eingang:type_name -> de.ozgcloud.vorgang.vorgang.GrpcEingang
+	3,  // 3: de.ozgcloud.vorgang.vorgang.GrpcVorgangWithEingang.header:type_name -> de.ozgcloud.vorgang.vorgang.GrpcVorgangHead
+	8,  // 4: de.ozgcloud.vorgang.vorgang.GrpcVorgangHead.serviceKonto:type_name -> de.ozgcloud.vorgang.vorgang.GrpcServiceKonto
+	7,  // 5: de.ozgcloud.vorgang.vorgang.GrpcEingang.header:type_name -> de.ozgcloud.vorgang.vorgang.GrpcEingangHeader
+	10, // 6: de.ozgcloud.vorgang.vorgang.GrpcEingang.antragsteller:type_name -> de.ozgcloud.vorgang.vorgang.GrpcAntragsteller
+	15, // 7: de.ozgcloud.vorgang.vorgang.GrpcEingang.zustaendigeStelle:type_name -> de.ozgcloud.vorgang.vorgang.GrpcZustaendigeStelle
+	11, // 8: de.ozgcloud.vorgang.vorgang.GrpcEingang.formData:type_name -> de.ozgcloud.vorgang.vorgang.GrpcFormData
+	5,  // 9: de.ozgcloud.vorgang.vorgang.GrpcEingang.attachments:type_name -> de.ozgcloud.vorgang.vorgang.GrpcIncomingFileGroup
+	6,  // 10: de.ozgcloud.vorgang.vorgang.GrpcEingang.representations:type_name -> de.ozgcloud.vorgang.vorgang.GrpcIncomingFile
+	6,  // 11: de.ozgcloud.vorgang.vorgang.GrpcIncomingFileGroup.files:type_name -> de.ozgcloud.vorgang.vorgang.GrpcIncomingFile
+	8,  // 12: de.ozgcloud.vorgang.vorgang.GrpcEingangHeader.serviceKonto:type_name -> de.ozgcloud.vorgang.vorgang.GrpcServiceKonto
+	9,  // 13: de.ozgcloud.vorgang.vorgang.GrpcServiceKonto.postfachAddresses:type_name -> de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress
+	22, // 14: de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress.identifier:type_name -> de.ozgcloud.vorgang.common.GrpcObject
+	11, // 15: de.ozgcloud.vorgang.vorgang.GrpcAntragsteller.otherData:type_name -> de.ozgcloud.vorgang.vorgang.GrpcFormData
+	12, // 16: de.ozgcloud.vorgang.vorgang.GrpcFormData.field:type_name -> de.ozgcloud.vorgang.vorgang.GrpcFormField
+	13, // 17: de.ozgcloud.vorgang.vorgang.GrpcFormData.form:type_name -> de.ozgcloud.vorgang.vorgang.GrpcSubForm
+	12, // 18: de.ozgcloud.vorgang.vorgang.GrpcSubForm.field:type_name -> de.ozgcloud.vorgang.vorgang.GrpcFormField
+	13, // 19: de.ozgcloud.vorgang.vorgang.GrpcSubForm.subForm:type_name -> de.ozgcloud.vorgang.vorgang.GrpcSubForm
+	14, // 20: de.ozgcloud.vorgang.vorgang.GrpcSubForm.controlData:type_name -> de.ozgcloud.vorgang.vorgang.GrpcControlData
+	0,  // 21: de.ozgcloud.vorgang.vorgang.GrpcQuery.logicalOperator:type_name -> de.ozgcloud.vorgang.vorgang.GrpcLogicalOperator
+	17, // 22: de.ozgcloud.vorgang.vorgang.GrpcQuery.expressions:type_name -> de.ozgcloud.vorgang.vorgang.GrpcVorgangQueryExpression
+	16, // 23: de.ozgcloud.vorgang.vorgang.GrpcQuery.nestedQuery:type_name -> de.ozgcloud.vorgang.vorgang.GrpcQuery
+	23, // 24: de.ozgcloud.vorgang.vorgang.GrpcVorgangQueryExpression.operator:type_name -> de.ozgcloud.vorgang.common.GrpcQueryOperator
+	19, // 25: de.ozgcloud.vorgang.vorgang.GrpcCreateCollaborationVorgangRequest.collaborationRequest:type_name -> de.ozgcloud.vorgang.vorgang.GrpcCollaborationRequest
+	26, // [26:26] is the sub-list for method output_type
+	26, // [26:26] is the sub-list for method input_type
+	26, // [26:26] is the sub-list for extension type_name
+	26, // [26:26] is the sub-list for extension extendee
+	0,  // [0:26] is the sub-list for field type_name
+}
+
+func init() { file_vorgang_model_proto_init() }
+func file_vorgang_model_proto_init() {
+	if File_vorgang_model_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_vorgang_model_proto_msgTypes[0].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcVorgangHeader); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_vorgang_model_proto_msgTypes[1].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcVorgangWithEingang); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_vorgang_model_proto_msgTypes[2].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcVorgangHead); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_vorgang_model_proto_msgTypes[3].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcEingang); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_vorgang_model_proto_msgTypes[4].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcIncomingFileGroup); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_vorgang_model_proto_msgTypes[5].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcIncomingFile); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_vorgang_model_proto_msgTypes[6].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcEingangHeader); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_vorgang_model_proto_msgTypes[7].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcServiceKonto); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_vorgang_model_proto_msgTypes[8].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcPostfachAddress); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_vorgang_model_proto_msgTypes[9].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcAntragsteller); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_vorgang_model_proto_msgTypes[10].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcFormData); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_vorgang_model_proto_msgTypes[11].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcFormField); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_vorgang_model_proto_msgTypes[12].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcSubForm); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_vorgang_model_proto_msgTypes[13].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcControlData); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_vorgang_model_proto_msgTypes[14].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcZustaendigeStelle); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_vorgang_model_proto_msgTypes[15].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcQuery); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_vorgang_model_proto_msgTypes[16].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcVorgangQueryExpression); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_vorgang_model_proto_msgTypes[17].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcCreateCollaborationVorgangRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_vorgang_model_proto_msgTypes[18].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcCollaborationRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_vorgang_model_proto_msgTypes[19].Exporter = func(v any, i int) any {
+			switch v := v.(*GrpcCreateCollaborationVorgangResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	file_vorgang_model_proto_msgTypes[16].OneofWrappers = []any{
+		(*GrpcVorgangQueryExpression_OperandIntValue)(nil),
+		(*GrpcVorgangQueryExpression_OperandBoolValue)(nil),
+		(*GrpcVorgangQueryExpression_OperandStringValue)(nil),
+	}
+	file_vorgang_model_proto_msgTypes[17].OneofWrappers = []any{
+		(*GrpcCreateCollaborationVorgangRequest_CollaborationRequest)(nil),
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_vorgang_model_proto_rawDesc,
+			NumEnums:      1,
+			NumMessages:   20,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_vorgang_model_proto_goTypes,
+		DependencyIndexes: file_vorgang_model_proto_depIdxs,
+		EnumInfos:         file_vorgang_model_proto_enumTypes,
+		MessageInfos:      file_vorgang_model_proto_msgTypes,
+	}.Build()
+	File_vorgang_model_proto = out.File
+	file_vorgang_model_proto_rawDesc = nil
+	file_vorgang_model_proto_goTypes = nil
+	file_vorgang_model_proto_depIdxs = nil
+}
diff --git a/gen/openapiv2/antragraum.model.swagger.json b/gen/openapiv2/antragraum.model.swagger.json
new file mode 100644
index 0000000000000000000000000000000000000000..81f131b95f9c0d8411558931b1b0210f414a928f
--- /dev/null
+++ b/gen/openapiv2/antragraum.model.swagger.json
@@ -0,0 +1,44 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "antragraum.model.proto",
+    "version": "version not set"
+  },
+  "consumes": [
+    "application/json"
+  ],
+  "produces": [
+    "application/json"
+  ],
+  "paths": {},
+  "definitions": {
+    "protobufAny": {
+      "type": "object",
+      "properties": {
+        "@type": {
+          "type": "string"
+        }
+      },
+      "additionalProperties": {}
+    },
+    "rpcStatus": {
+      "type": "object",
+      "properties": {
+        "code": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "message": {
+          "type": "string"
+        },
+        "details": {
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/protobufAny"
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/gen/openapiv2/antragraum.swagger.json b/gen/openapiv2/antragraum.swagger.json
new file mode 100644
index 0000000000000000000000000000000000000000..bd268c80835e6536b550a1ca5b92d470a34953aa
--- /dev/null
+++ b/gen/openapiv2/antragraum.swagger.json
@@ -0,0 +1,344 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "Antragraum Proxy API",
+    "version": "1.0",
+    "license": {
+      "name": "EUPL 1.2",
+      "url": "https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12"
+    }
+  },
+  "tags": [
+    {
+      "name": "AntragraumService",
+      "description": "Service to proxy between Antragraum Backend and NachrichtenManager in OZG-Cloud"
+    }
+  ],
+  "schemes": [
+    "http",
+    "https"
+  ],
+  "consumes": [
+    "application/json"
+  ],
+  "produces": [
+    "application/json"
+  ],
+  "paths": {
+    "/api/antworten": {
+      "post": {
+        "summary": "Summary: SendRueckfrageAnswer rpc",
+        "description": "Send a reply to a Rueckfrage",
+        "operationId": "AntragraumService_SendRueckfrageAnswer",
+        "responses": {
+          "200": {
+            "description": "Returns the id of the command created for the send order",
+            "schema": {
+              "$ref": "#/definitions/antragraumGrpcSendRueckfrageAnswerResponse"
+            }
+          },
+          "403": {
+            "description": "Returned when the user does not have permission to access the resource.",
+            "schema": {}
+          },
+          "404": {
+            "description": "Returned when the resource does not exist.",
+            "schema": {}
+          },
+          "503": {
+            "description": "Returned when the resource is temporarily unavailable.",
+            "schema": {}
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "body",
+            "in": "body",
+            "required": true,
+            "schema": {
+              "$ref": "#/definitions/antragraumGrpcSendRueckfrageAnswerRequest"
+            }
+          }
+        ],
+        "tags": [
+          "AntragraumService"
+        ]
+      }
+    },
+    "/api/rueckfrage/{id}/{samlToken}": {
+      "get": {
+        "summary": "Summary: GetRueckfrage rpc",
+        "description": "Get the Rueckfrage by id",
+        "operationId": "AntragraumService_GetRueckfrage",
+        "responses": {
+          "200": {
+            "description": "Returns the Rueckfrage",
+            "schema": {
+              "$ref": "#/definitions/antragraumGrpcGetRueckfrageResponse"
+            }
+          },
+          "403": {
+            "description": "Returned when the user does not have permission to access the resource.",
+            "schema": {}
+          },
+          "404": {
+            "description": "Returned when the resource does not exist.",
+            "schema": {}
+          },
+          "503": {
+            "description": "Returned when the resource is temporarily unavailable.",
+            "schema": {}
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "type": "string"
+          },
+          {
+            "name": "samlToken",
+            "in": "path",
+            "required": true,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "AntragraumService"
+        ]
+      }
+    },
+    "/api/rueckfragen/{postfachId}/{samlToken}": {
+      "get": {
+        "summary": "Summary: FindRueckfragen rpc",
+        "description": "Find all Rueckfragen of a postfach",
+        "operationId": "AntragraumService_FindRueckfragen",
+        "responses": {
+          "200": {
+            "description": "Returns the list of Rueckfragen Headers found.",
+            "schema": {
+              "$ref": "#/definitions/antragraumGrpcFindRueckfragenResponse"
+            }
+          },
+          "403": {
+            "description": "Returned when the user does not have permission to access the resource.",
+            "schema": {}
+          },
+          "404": {
+            "description": "Returned when the resource does not exist.",
+            "schema": {}
+          },
+          "503": {
+            "description": "Returned when the resource is temporarily unavailable.",
+            "schema": {}
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "postfachId",
+            "in": "path",
+            "required": true,
+            "type": "string"
+          },
+          {
+            "name": "samlToken",
+            "in": "path",
+            "required": true,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "AntragraumService"
+        ]
+      }
+    }
+  },
+  "definitions": {
+    "antragraumGrpcFindRueckfragenResponse": {
+      "type": "object",
+      "properties": {
+        "rueckfrageHead": {
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/antragraumGrpcRueckfrageHead"
+          }
+        }
+      }
+    },
+    "antragraumGrpcGetRueckfrageResponse": {
+      "type": "object",
+      "properties": {
+        "rueckfrage": {
+          "$ref": "#/definitions/antragraumGrpcRueckfrage"
+        }
+      }
+    },
+    "antragraumGrpcRueckfrage": {
+      "type": "object",
+      "properties": {
+        "id": {
+          "type": "string"
+        },
+        "vorgangId": {
+          "type": "string"
+        },
+        "vorgangName": {
+          "type": "string"
+        },
+        "vorgangNummer": {
+          "type": "string"
+        },
+        "sentAt": {
+          "type": "string"
+        },
+        "answeredAt": {
+          "type": "string"
+        },
+        "status": {
+          "type": "string"
+        },
+        "trustLevel": {
+          "type": "string"
+        },
+        "accessible": {
+          "type": "boolean"
+        },
+        "text": {
+          "type": "string"
+        },
+        "attachmentFileId": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "answers": {
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/antragraumGrpcRueckfrageAnswer"
+          }
+        }
+      }
+    },
+    "antragraumGrpcRueckfrageAnswer": {
+      "type": "object",
+      "properties": {
+        "rueckfrageId": {
+          "type": "string"
+        },
+        "answerText": {
+          "type": "string"
+        },
+        "attachmentFileId": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "sentAt": {
+          "type": "string"
+        }
+      }
+    },
+    "antragraumGrpcRueckfrageHead": {
+      "type": "object",
+      "properties": {
+        "id": {
+          "type": "string"
+        },
+        "vorgangId": {
+          "type": "string"
+        },
+        "vorgangName": {
+          "type": "string"
+        },
+        "vorgangNummer": {
+          "type": "string"
+        },
+        "sentAt": {
+          "type": "string"
+        },
+        "answeredAt": {
+          "type": "string"
+        },
+        "status": {
+          "type": "string"
+        },
+        "trustLevel": {
+          "type": "string"
+        },
+        "accessible": {
+          "type": "boolean"
+        }
+      }
+    },
+    "antragraumGrpcSendRueckfrageAnswerRequest": {
+      "type": "object",
+      "properties": {
+        "samlToken": {
+          "type": "string"
+        },
+        "answer": {
+          "$ref": "#/definitions/antragraumGrpcRueckfrageAnswer"
+        }
+      }
+    },
+    "antragraumGrpcSendRueckfrageAnswerResponse": {
+      "type": "object",
+      "properties": {
+        "commandId": {
+          "type": "string"
+        }
+      }
+    },
+    "protobufAny": {
+      "type": "object",
+      "properties": {
+        "@type": {
+          "type": "string"
+        }
+      },
+      "additionalProperties": {}
+    },
+    "rpcStatus": {
+      "type": "object",
+      "properties": {
+        "code": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "message": {
+          "type": "string"
+        },
+        "details": {
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/protobufAny"
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/gen/openapiv2/binaryfile.swagger.json b/gen/openapiv2/binaryfile.swagger.json
new file mode 100644
index 0000000000000000000000000000000000000000..0aa18edb3d22d423dc025a6e4dbb0912cc86fb89
--- /dev/null
+++ b/gen/openapiv2/binaryfile.swagger.json
@@ -0,0 +1,373 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "File Proxy API",
+    "version": "1.0",
+    "license": {
+      "name": "EUPL 1.2",
+      "url": "https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12"
+    }
+  },
+  "tags": [
+    {
+      "name": "BinaryFileService",
+      "description": "Service to proxy between Antragraum Backend and VorgangManager File Api in OZG-Cloud"
+    }
+  ],
+  "schemes": [
+    "http",
+    "https"
+  ],
+  "consumes": [
+    "application/json"
+  ],
+  "produces": [
+    "application/json"
+  ],
+  "paths": {
+    "/api/filecontent/{fileId}": {
+      "get": {
+        "summary": "Summary: GetBinaryFileContent rpc",
+        "description": "Get the content of a file",
+        "operationId": "BinaryFileService_GetBinaryFileContent",
+        "responses": {
+          "200": {
+            "description": "Returns file content as binary stream.",
+            "schema": {
+              "type": "object",
+              "properties": {
+                "result": {
+                  "$ref": "#/definitions/binaryFileGrpcGetBinaryFileDataResponse"
+                },
+                "error": {
+                  "$ref": "#/definitions/rpcStatus"
+                }
+              },
+              "title": "Stream result of binaryFileGrpcGetBinaryFileDataResponse"
+            }
+          },
+          "403": {
+            "description": "Returned when the user does not have permission to access the resource.",
+            "schema": {}
+          },
+          "404": {
+            "description": "Returned when the resource does not exist.",
+            "schema": {}
+          },
+          "503": {
+            "description": "Returned when the resource is temporarily unavailable.",
+            "schema": {}
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "fileId",
+            "in": "path",
+            "required": true,
+            "type": "string"
+          },
+          {
+            "name": "context.client",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "context.user.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "context.user.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "context.user.roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "context.requestId",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "BinaryFileService"
+        ]
+      }
+    },
+    "/api/filemetadata/{fileId}": {
+      "get": {
+        "summary": "Summary: FindBinaryFilesMetaData rpc",
+        "description": "Get the metadata of a file",
+        "operationId": "BinaryFileService_FindBinaryFilesMetaData",
+        "responses": {
+          "200": {
+            "description": "Returns file metadata as json.",
+            "schema": {
+              "$ref": "#/definitions/binaryFileGrpcFindFilesResponse"
+            }
+          },
+          "403": {
+            "description": "Returned when the user does not have permission to access the resource.",
+            "schema": {}
+          },
+          "404": {
+            "description": "Returned when the resource does not exist.",
+            "schema": {}
+          },
+          "503": {
+            "description": "Returned when the resource is temporarily unavailable.",
+            "schema": {}
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "fileId",
+            "in": "path",
+            "required": true,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "csv",
+            "minItems": 1
+          },
+          {
+            "name": "context.client",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "context.user.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "context.user.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "context.user.roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "context.requestId",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "BinaryFileService"
+        ]
+      }
+    }
+  },
+  "definitions": {
+    "binaryFileGrpcBinaryFile": {
+      "type": "object",
+      "properties": {
+        "id": {
+          "type": "string"
+        },
+        "name": {
+          "type": "string"
+        },
+        "size": {
+          "type": "string",
+          "format": "int64"
+        },
+        "contentType": {
+          "type": "string"
+        }
+      }
+    },
+    "binaryFileGrpcFindFilesResponse": {
+      "type": "object",
+      "properties": {
+        "file": {
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/fileGrpcOzgFile"
+          }
+        }
+      }
+    },
+    "binaryFileGrpcGetBinaryFileDataResponse": {
+      "type": "object",
+      "properties": {
+        "fileContent": {
+          "type": "string",
+          "format": "byte"
+        }
+      }
+    },
+    "binaryFileGrpcUploadBinaryFileMetaData": {
+      "type": "object",
+      "properties": {
+        "context": {
+          "$ref": "#/definitions/commandGrpcCallContext"
+        },
+        "vorgangId": {
+          "type": "string"
+        },
+        "field": {
+          "type": "string"
+        },
+        "fileName": {
+          "type": "string"
+        },
+        "contentType": {
+          "type": "string"
+        },
+        "size": {
+          "type": "string",
+          "format": "int64"
+        }
+      }
+    },
+    "binaryFileGrpcUploadBinaryFileResponse": {
+      "type": "object",
+      "properties": {
+        "fileId": {
+          "type": "string"
+        }
+      }
+    },
+    "commandGrpcCallContext": {
+      "type": "object",
+      "properties": {
+        "client": {
+          "type": "string"
+        },
+        "user": {
+          "$ref": "#/definitions/commandGrpcUser"
+        },
+        "requestId": {
+          "type": "string"
+        }
+      }
+    },
+    "commandGrpcUser": {
+      "type": "object",
+      "properties": {
+        "id": {
+          "type": "string"
+        },
+        "name": {
+          "type": "string"
+        },
+        "roles": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      }
+    },
+    "fileGrpcOzgFile": {
+      "type": "object",
+      "properties": {
+        "id": {
+          "type": "string"
+        },
+        "name": {
+          "type": "string"
+        },
+        "size": {
+          "type": "string",
+          "format": "int64"
+        },
+        "contentType": {
+          "type": "string"
+        }
+      }
+    },
+    "grpcbinaryFileGrpcGetAttachmentsResponse": {
+      "type": "object",
+      "properties": {
+        "file": {
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/binaryFileGrpcBinaryFile"
+          }
+        }
+      }
+    },
+    "grpcbinaryFileGrpcGetRepresentationsResponse": {
+      "type": "object",
+      "properties": {
+        "file": {
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/binaryFileGrpcBinaryFile"
+          }
+        }
+      }
+    },
+    "protobufAny": {
+      "type": "object",
+      "properties": {
+        "@type": {
+          "type": "string"
+        }
+      },
+      "additionalProperties": {}
+    },
+    "rpcStatus": {
+      "type": "object",
+      "properties": {
+        "code": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "message": {
+          "type": "string"
+        },
+        "details": {
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/protobufAny"
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/gen/openapiv2/callcontext.swagger.json b/gen/openapiv2/callcontext.swagger.json
new file mode 100644
index 0000000000000000000000000000000000000000..da4bf025523f6a246061ef3eaa7446f855fbc9b3
--- /dev/null
+++ b/gen/openapiv2/callcontext.swagger.json
@@ -0,0 +1,44 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "callcontext.proto",
+    "version": "version not set"
+  },
+  "consumes": [
+    "application/json"
+  ],
+  "produces": [
+    "application/json"
+  ],
+  "paths": {},
+  "definitions": {
+    "protobufAny": {
+      "type": "object",
+      "properties": {
+        "@type": {
+          "type": "string"
+        }
+      },
+      "additionalProperties": {}
+    },
+    "rpcStatus": {
+      "type": "object",
+      "properties": {
+        "code": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "message": {
+          "type": "string"
+        },
+        "details": {
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/protobufAny"
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/gen/openapiv2/clientattribute.model.swagger.json b/gen/openapiv2/clientattribute.model.swagger.json
new file mode 100644
index 0000000000000000000000000000000000000000..5c23621f99a110280bb7b2473778c2b14ec5008f
--- /dev/null
+++ b/gen/openapiv2/clientattribute.model.swagger.json
@@ -0,0 +1,44 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "clientattribute.model.proto",
+    "version": "version not set"
+  },
+  "consumes": [
+    "application/json"
+  ],
+  "produces": [
+    "application/json"
+  ],
+  "paths": {},
+  "definitions": {
+    "protobufAny": {
+      "type": "object",
+      "properties": {
+        "@type": {
+          "type": "string"
+        }
+      },
+      "additionalProperties": {}
+    },
+    "rpcStatus": {
+      "type": "object",
+      "properties": {
+        "code": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "message": {
+          "type": "string"
+        },
+        "details": {
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/protobufAny"
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/gen/openapiv2/command.model.swagger.json b/gen/openapiv2/command.model.swagger.json
new file mode 100644
index 0000000000000000000000000000000000000000..82851af649a8da7a9322e7570effb6f790aa9a14
--- /dev/null
+++ b/gen/openapiv2/command.model.swagger.json
@@ -0,0 +1,44 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "command.model.proto",
+    "version": "version not set"
+  },
+  "consumes": [
+    "application/json"
+  ],
+  "produces": [
+    "application/json"
+  ],
+  "paths": {},
+  "definitions": {
+    "protobufAny": {
+      "type": "object",
+      "properties": {
+        "@type": {
+          "type": "string"
+        }
+      },
+      "additionalProperties": {}
+    },
+    "rpcStatus": {
+      "type": "object",
+      "properties": {
+        "code": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "message": {
+          "type": "string"
+        },
+        "details": {
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/protobufAny"
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/gen/openapiv2/command.swagger.json b/gen/openapiv2/command.swagger.json
new file mode 100644
index 0000000000000000000000000000000000000000..b460d5e33d6ea5a99c130829af21c5b80a6ca3ef
--- /dev/null
+++ b/gen/openapiv2/command.swagger.json
@@ -0,0 +1,307 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "COmmand Proxy API",
+    "version": "1.0",
+    "license": {
+      "name": "EUPL 1.2",
+      "url": "https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12"
+    }
+  },
+  "tags": [
+    {
+      "name": "CommandService",
+      "description": "Service to proxy between Antragraum Backend and VorgangManager Command Api in OZG-Cloud"
+    }
+  ],
+  "schemes": [
+    "http",
+    "https"
+  ],
+  "consumes": [
+    "application/json"
+  ],
+  "produces": [
+    "application/json"
+  ],
+  "paths": {
+    "/api/command/{id}": {
+      "get": {
+        "summary": "Summary: GetCommand rpc",
+        "description": "Get the command by id",
+        "operationId": "CommandService_GetCommand",
+        "responses": {
+          "200": {
+            "description": "Returns command as json.",
+            "schema": {
+              "$ref": "#/definitions/commandGrpcCommand"
+            }
+          },
+          "403": {
+            "description": "Returned when the user does not have permission to access the resource.",
+            "schema": {}
+          },
+          "404": {
+            "description": "Returned when the resource does not exist.",
+            "schema": {}
+          },
+          "503": {
+            "description": "Returned when the resource is temporarily unavailable.",
+            "schema": {}
+          },
+          "default": {
+            "description": "An unexpected error response.",
+            "schema": {
+              "$ref": "#/definitions/rpcStatus"
+            }
+          }
+        },
+        "parameters": [
+          {
+            "name": "id",
+            "in": "path",
+            "required": true,
+            "type": "string"
+          },
+          {
+            "name": "context.client",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "context.user.id",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "context.user.name",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          },
+          {
+            "name": "context.user.roles",
+            "in": "query",
+            "required": false,
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "collectionFormat": "multi"
+          },
+          {
+            "name": "context.requestId",
+            "in": "query",
+            "required": false,
+            "type": "string"
+          }
+        ],
+        "tags": [
+          "CommandService"
+        ]
+      }
+    }
+  },
+  "definitions": {
+    "commandGrpcCallContext": {
+      "type": "object",
+      "properties": {
+        "client": {
+          "type": "string"
+        },
+        "user": {
+          "$ref": "#/definitions/commandGrpcUser"
+        },
+        "requestId": {
+          "type": "string"
+        }
+      }
+    },
+    "commandGrpcCommand": {
+      "type": "object",
+      "properties": {
+        "id": {
+          "type": "string"
+        },
+        "vorgangId": {
+          "type": "string"
+        },
+        "createdAt": {
+          "type": "string"
+        },
+        "finishedAt": {
+          "type": "string"
+        },
+        "createdBy": {
+          "type": "string"
+        },
+        "createdByName": {
+          "type": "string"
+        },
+        "status": {
+          "type": "string"
+        },
+        "errorMessage": {
+          "type": "string"
+        },
+        "relationId": {
+          "type": "string"
+        },
+        "body": {
+          "$ref": "#/definitions/commandGrpcCommandBody"
+        },
+        "bodyObj": {
+          "$ref": "#/definitions/commonGrpcObject"
+        },
+        "redirectRequest": {
+          "$ref": "#/definitions/commandGrpcRedirectRequest"
+        },
+        "orderString": {
+          "type": "string"
+        },
+        "createdResource": {
+          "type": "string"
+        }
+      }
+    },
+    "commandGrpcCommandBody": {
+      "type": "object",
+      "properties": {
+        "field": {
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/commandGrpcCommandBodyField"
+          }
+        }
+      }
+    },
+    "commandGrpcCommandBodyField": {
+      "type": "object",
+      "properties": {
+        "name": {
+          "type": "string"
+        },
+        "value": {
+          "type": "string"
+        }
+      }
+    },
+    "commandGrpcRedirectRequest": {
+      "type": "object",
+      "properties": {
+        "context": {
+          "$ref": "#/definitions/commandGrpcCallContext"
+        },
+        "email": {
+          "type": "string"
+        },
+        "password": {
+          "type": "string"
+        }
+      }
+    },
+    "commandGrpcUser": {
+      "type": "object",
+      "properties": {
+        "id": {
+          "type": "string"
+        },
+        "name": {
+          "type": "string"
+        },
+        "roles": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      }
+    },
+    "commonGrpcObject": {
+      "type": "object",
+      "properties": {
+        "property": {
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/commonGrpcProperty"
+          }
+        },
+        "subObject": {
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/commonGrpcSubObject"
+          }
+        }
+      }
+    },
+    "commonGrpcProperty": {
+      "type": "object",
+      "properties": {
+        "name": {
+          "type": "string"
+        },
+        "value": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      }
+    },
+    "commonGrpcSubObject": {
+      "type": "object",
+      "properties": {
+        "name": {
+          "type": "string"
+        },
+        "property": {
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/commonGrpcProperty"
+          }
+        },
+        "subObject": {
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/commonGrpcSubObject"
+          }
+        }
+      }
+    },
+    "protobufAny": {
+      "type": "object",
+      "properties": {
+        "@type": {
+          "type": "string"
+        }
+      },
+      "additionalProperties": {}
+    },
+    "rpcStatus": {
+      "type": "object",
+      "properties": {
+        "code": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "message": {
+          "type": "string"
+        },
+        "details": {
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/protobufAny"
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/gen/openapiv2/common.model.swagger.json b/gen/openapiv2/common.model.swagger.json
new file mode 100644
index 0000000000000000000000000000000000000000..e10c2ad4146a54a21a780565a6b2b84470044db5
--- /dev/null
+++ b/gen/openapiv2/common.model.swagger.json
@@ -0,0 +1,44 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "common.model.proto",
+    "version": "version not set"
+  },
+  "consumes": [
+    "application/json"
+  ],
+  "produces": [
+    "application/json"
+  ],
+  "paths": {},
+  "definitions": {
+    "protobufAny": {
+      "type": "object",
+      "properties": {
+        "@type": {
+          "type": "string"
+        }
+      },
+      "additionalProperties": {}
+    },
+    "rpcStatus": {
+      "type": "object",
+      "properties": {
+        "code": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "message": {
+          "type": "string"
+        },
+        "details": {
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/protobufAny"
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/gen/openapiv2/filemodel.swagger.json b/gen/openapiv2/filemodel.swagger.json
new file mode 100644
index 0000000000000000000000000000000000000000..719022809aec211a008a9f0462c41e164af6a4bf
--- /dev/null
+++ b/gen/openapiv2/filemodel.swagger.json
@@ -0,0 +1,44 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "filemodel.proto",
+    "version": "version not set"
+  },
+  "consumes": [
+    "application/json"
+  ],
+  "produces": [
+    "application/json"
+  ],
+  "paths": {},
+  "definitions": {
+    "protobufAny": {
+      "type": "object",
+      "properties": {
+        "@type": {
+          "type": "string"
+        }
+      },
+      "additionalProperties": {}
+    },
+    "rpcStatus": {
+      "type": "object",
+      "properties": {
+        "code": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "message": {
+          "type": "string"
+        },
+        "details": {
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/protobufAny"
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/gen/openapiv2/postfach.model.swagger.json b/gen/openapiv2/postfach.model.swagger.json
new file mode 100644
index 0000000000000000000000000000000000000000..e754167b9780c827346cebbf0147b47916da8868
--- /dev/null
+++ b/gen/openapiv2/postfach.model.swagger.json
@@ -0,0 +1,44 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "postfach.model.proto",
+    "version": "version not set"
+  },
+  "consumes": [
+    "application/json"
+  ],
+  "produces": [
+    "application/json"
+  ],
+  "paths": {},
+  "definitions": {
+    "protobufAny": {
+      "type": "object",
+      "properties": {
+        "@type": {
+          "type": "string"
+        }
+      },
+      "additionalProperties": {}
+    },
+    "rpcStatus": {
+      "type": "object",
+      "properties": {
+        "code": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "message": {
+          "type": "string"
+        },
+        "details": {
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/protobufAny"
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/gen/openapiv2/vorgang.model.swagger.json b/gen/openapiv2/vorgang.model.swagger.json
new file mode 100644
index 0000000000000000000000000000000000000000..12d02dc746ff2112d810a3a0b5f16a939e42670f
--- /dev/null
+++ b/gen/openapiv2/vorgang.model.swagger.json
@@ -0,0 +1,44 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "vorgang.model.proto",
+    "version": "version not set"
+  },
+  "consumes": [
+    "application/json"
+  ],
+  "produces": [
+    "application/json"
+  ],
+  "paths": {},
+  "definitions": {
+    "protobufAny": {
+      "type": "object",
+      "properties": {
+        "@type": {
+          "type": "string"
+        }
+      },
+      "additionalProperties": {}
+    },
+    "rpcStatus": {
+      "type": "object",
+      "properties": {
+        "code": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "message": {
+          "type": "string"
+        },
+        "details": {
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/protobufAny"
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000000000000000000000000000000000000..f22b380d3e970477cc81dfafcba1641954049bc8
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,24 @@
+module antragsraum-proxy
+
+go 1.23.0
+
+require (
+	github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0
+	github.com/kelseyhightower/envconfig v1.4.0
+	github.com/stretchr/testify v1.9.0
+	google.golang.org/grpc v1.64.0
+	gopkg.in/yaml.v3 v3.0.1
+)
+
+require (
+	github.com/davecgh/go-spew v1.1.1 // indirect
+	github.com/kr/text v0.2.0 // indirect
+	github.com/pmezard/go-difflib v1.0.0 // indirect
+	github.com/rogpeppe/go-internal v1.12.0 // indirect
+	golang.org/x/net v0.26.0 // indirect
+	golang.org/x/sys v0.21.0 // indirect
+	golang.org/x/text v0.16.0 // indirect
+	google.golang.org/genproto/googleapis/api v0.0.0-20240513163218-0867130af1f8 // indirect
+	google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8 // indirect
+	google.golang.org/protobuf v1.34.2 // indirect
+)
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000000000000000000000000000000000000..173f968cb7f566a098f97265b6ee4ae8866407e1
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,38 @@
+github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k=
+github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8=
+github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg=
+github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
+github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ=
+golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE=
+golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
+golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
+golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
+google.golang.org/genproto/googleapis/api v0.0.0-20240513163218-0867130af1f8 h1:W5Xj/70xIA4x60O/IFyXivR5MGqblAb8R3w26pnD6No=
+google.golang.org/genproto/googleapis/api v0.0.0-20240513163218-0867130af1f8/go.mod h1:vPrPUTsDCYxXWjP7clS81mZ6/803D8K4iM9Ma27VKas=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8 h1:mxSlqyb8ZAHsYDCfiXN1EDdNTdvjUJSLY+OnAUtYNYA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8/go.mod h1:I7Y+G38R2bu5j1aLzfFmQfTcU/WnFuqDwLZAbvKTKpM=
+google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY=
+google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg=
+google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
+google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/internal/config/config.go b/internal/config/config.go
new file mode 100644
index 0000000000000000000000000000000000000000..b246c3d63d3ad026e142c890f9532722f122358e
--- /dev/null
+++ b/internal/config/config.go
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2023-2024
+ * Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+
+package config
+
+import (
+	"github.com/kelseyhightower/envconfig"
+	"gopkg.in/yaml.v3"
+	"log"
+	"os"
+	"regexp"
+	"testing"
+)
+
+const (
+	defaultFilePath = "config/config.yml"
+	testFilePath    = "testdata/test_config.yml"
+	grpcUrlRegex    = `^[A-Za-z\d-]+(\.[A-Za-z\d-]+){0,512}:\d{1,5}$`
+)
+
+type Config struct {
+	Server struct {
+		Port int `yaml:"port" envconfig:"SERVER_PORT"`
+	} `yaml:"server"`
+	Grpc struct {
+		Mock bool   `yaml:"mock" envconfig:"GRPC_MOCK"`
+		Url  string `yaml:"url" envconfig:"GRPC_URL"`
+	} `yaml:"grpc"`
+	Logging struct {
+		Level string `yaml:"level" envconfig:"LOGGING_LEVEL"`
+	} `yaml:"logging"`
+}
+
+func LoadConfig(configFilePath ...string) Config {
+	var config Config
+
+	fp := defaultFilePath
+	if len(configFilePath) > 0 {
+		fp = configFilePath[0]
+	} else if testing.Testing() {
+		fp = testFilePath
+	}
+
+	file, err := os.ReadFile(fp)
+	if err != nil {
+		log.Fatalf("FATAL: error reading YAML file: %v", err)
+	}
+
+	err = yaml.Unmarshal(file, &config)
+	if err != nil {
+		log.Fatalf("FATAL: error unmarshalling YAML file: %v", err)
+	}
+
+	err = envconfig.Process("", &config)
+	if err != nil {
+		log.Fatalf("FATAL: error reading env: %v", err)
+	}
+
+	if len(config.Grpc.Url) > 0 && !ValidateGrpcUrl(config.Grpc.Url) {
+		log.Fatalf("FATAL: gRPC URL is not in host:port format")
+	}
+
+	return config
+}
+
+func ValidateGrpcUrl(grpcUrl string) bool {
+	return regexp.MustCompile(grpcUrlRegex).MatchString(grpcUrl)
+}
diff --git a/internal/config/config_test.go b/internal/config/config_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..38cd14245895c0ba67c51af3f41cd7d3faf899f9
--- /dev/null
+++ b/internal/config/config_test.go
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2023-2024
+ * Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+
+package config
+
+import (
+	"os"
+	"testing"
+
+	"github.com/stretchr/testify/assert"
+)
+
+func TestLoadConfig(t *testing.T) {
+	t.Run("should load config from file", func(t *testing.T) {
+		config := LoadConfig()
+
+		expectedConfig := Config{}
+		expectedConfig.Server.Port = 8080
+		expectedConfig.Grpc.Url = "localhost:50051"
+		expectedConfig.Grpc.Mock = false
+		expectedConfig.Logging.Level = "DEBUG"
+
+		assert.Equal(t, expectedConfig, config)
+	})
+
+	t.Run("should load config from env", func(t *testing.T) {
+		envVars := map[string]string{
+			"SERVER_PORT":   "9090",
+			"GRPC_URL":      "localhost:99999",
+			"LOGGING_LEVEL": "ERROR",
+		}
+
+		for key, value := range envVars {
+			assert.NoError(t, os.Setenv(key, value), "Setenv "+key+" should not return an error")
+		}
+
+		config := LoadConfig("testdata/empty_test_config.yml")
+
+		for key := range envVars {
+			assert.NoError(t, os.Unsetenv(key), "Unsetenv "+key+" should not return an error")
+		}
+
+		expectedConfig := Config{}
+		expectedConfig.Server.Port = 9090
+		expectedConfig.Grpc.Url = "localhost:99999"
+		expectedConfig.Grpc.Mock = false
+		expectedConfig.Logging.Level = "ERROR"
+
+		assert.Equal(t, expectedConfig, config)
+	})
+
+	t.Run("should overwrite config with env", func(t *testing.T) {
+		assert.NoError(t, os.Setenv("SERVER_PORT", "9090"), "Setenv SERVER_PORT should not return an error")
+
+		config := LoadConfig()
+
+		assert.NoError(t, os.Unsetenv("SERVER_PORT"), "Unsetenv SERVER_PORT should not return an error")
+
+		expectedConfig := Config{}
+		expectedConfig.Server.Port = 9090
+		expectedConfig.Grpc.Url = "localhost:50051"
+		expectedConfig.Grpc.Mock = false
+		expectedConfig.Logging.Level = "DEBUG"
+
+		assert.Equal(t, expectedConfig, config)
+	})
+}
+
+func TestValidateGrpcUrl(t *testing.T) {
+	testData := []struct {
+		grpcUrl        string
+		expectedResult bool
+	}{
+		{"localhost:56789", true},
+		{"test.example.com:20", true},
+		{"invalidUrl", false},
+		{"%test%:2345", false},
+		{"localhost:234567", false},
+		{"example.com:", false},
+		{":6789", false},
+		{"example..com:8080", false},
+		{"example.com:abc", false},
+	}
+
+	for _, data := range testData {
+		result := ValidateGrpcUrl(data.grpcUrl)
+
+		assert.Equal(t, data.expectedResult, result)
+	}
+}
diff --git a/internal/config/testdata/empty_test_config.yml b/internal/config/testdata/empty_test_config.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/internal/config/testdata/test_config.yml b/internal/config/testdata/test_config.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ea8925db9cb5af5c351a1af92d6fb7f878de4359
--- /dev/null
+++ b/internal/config/testdata/test_config.yml
@@ -0,0 +1,6 @@
+server:
+  port: 8080
+grpc:
+  url: "localhost:50051"
+logging:
+  level: "DEBUG"
\ No newline at end of file
diff --git a/internal/logging/logger.go b/internal/logging/logger.go
new file mode 100644
index 0000000000000000000000000000000000000000..f37932b73352d551789403462e99675969dd1365
--- /dev/null
+++ b/internal/logging/logger.go
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2023-2024
+ * Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+
+package logging
+
+import (
+	"antragsraum-proxy/internal/config"
+	"fmt"
+	"log"
+	"os"
+	"sync"
+)
+
+const (
+	logLevelNumError = iota
+	logLevelNumWarning
+	logLevelNumInfo
+	logLevelNumDebug
+	LogLevelError   = "ERROR"
+	LogLevelWarning = "WARN"
+	LogLevelInfo    = "INFO"
+	LogLevelDebug   = "DEBUG"
+)
+
+type Logger struct {
+	BaseLogger *log.Logger
+	level      int
+}
+
+var (
+	logger *Logger
+	once   sync.Once
+)
+
+func GetLogger() *Logger {
+	initializeLogger()
+
+	return logger
+}
+
+func initializeLogger() {
+	once.Do(func() {
+		logger = &Logger{
+			BaseLogger: log.New(os.Stdout, "", log.LstdFlags),
+			level:      getLoggingLevel(),
+		}
+	})
+}
+
+func getLoggingLevel() int {
+	logLevelMap := map[string]int{
+		LogLevelError:   logLevelNumError,
+		LogLevelWarning: logLevelNumWarning,
+		LogLevelInfo:    logLevelNumInfo,
+		LogLevelDebug:   logLevelNumDebug,
+	}
+
+	conf := config.LoadConfig()
+	logLevel, exists := logLevelMap[conf.Logging.Level]
+	if !exists {
+		logLevel = logLevelMap[LogLevelInfo]
+	}
+
+	return logLevel
+}
+
+func (l *Logger) log(level int, prefix, format string, v ...any) {
+	if l.level >= level {
+		l.BaseLogger.Println(fmt.Sprintf("%v: %v", prefix, fmt.Sprintf(format, v...)))
+	}
+}
+
+func (l *Logger) Fatal(format string, v ...any) {
+	l.BaseLogger.Fatalln(fmt.Sprintf("FATAL: "+format, v...))
+}
+
+func (l *Logger) Error(format string, v ...any) {
+	l.log(logLevelNumError, "ERROR", format, v...)
+}
+
+func (l *Logger) Warning(format string, v ...any) {
+	l.log(logLevelNumWarning, "WARNING", format, v...)
+}
+
+func (l *Logger) Info(format string, v ...any) {
+	l.log(logLevelNumInfo, "INFO", format, v...)
+}
+
+func (l *Logger) Debug(format string, v ...any) {
+	l.log(logLevelNumDebug, "DEBUG", format, v...)
+}
diff --git a/internal/logging/logger_test.go b/internal/logging/logger_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..11eff2f85f749fc9bcd884ee9d57c7a9b13fe12d
--- /dev/null
+++ b/internal/logging/logger_test.go
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2023-2024
+ * Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+
+package logging
+
+import (
+	"bytes"
+	"github.com/stretchr/testify/assert"
+	"log"
+	"testing"
+)
+
+func setUpLogger(t *testing.T, level string, msg string) *bytes.Buffer {
+	logger := GetLogger()
+
+	var buf bytes.Buffer
+	logger.BaseLogger.SetOutput(&buf)
+
+	originalFlags := log.Flags()
+	t.Cleanup(func() {
+		log.SetOutput(nil)
+		log.SetFlags(originalFlags)
+	})
+
+	if level == LogLevelError {
+		logger.Error(msg)
+	} else if level == LogLevelWarning {
+		logger.Warning(msg)
+	} else if level == LogLevelInfo {
+		logger.Info(msg)
+	} else {
+		logger.Debug(msg)
+	}
+
+	return &buf
+}
+
+func TestError(t *testing.T) {
+	buf := setUpLogger(t, LogLevelError, "test error")
+	logOutput := buf.String()
+	assert.Contains(t, logOutput, "ERROR: test error")
+}
+
+func TestWarning(t *testing.T) {
+	buf := setUpLogger(t, LogLevelWarning, "test warning")
+	logOutput := buf.String()
+	assert.Contains(t, logOutput, "WARNING: test warning")
+}
+
+func TestInfo(t *testing.T) {
+	buf := setUpLogger(t, LogLevelInfo, "test info")
+	logOutput := buf.String()
+	assert.Contains(t, logOutput, "INFO: test info")
+}
+
+func TestDebug(t *testing.T) {
+	buf := setUpLogger(t, LogLevelDebug, "test debug")
+	logOutput := buf.String()
+	assert.Empty(t, logOutput)
+}
diff --git a/internal/logging/testdata/test_config.yml b/internal/logging/testdata/test_config.yml
new file mode 100644
index 0000000000000000000000000000000000000000..6021893b2e1982f4f8d4215707fa6300e2cd6e8e
--- /dev/null
+++ b/internal/logging/testdata/test_config.yml
@@ -0,0 +1,6 @@
+server:
+  port: 8080
+grpc:
+  url: "localhost:50051"
+logging:
+  level: "INFO"
\ No newline at end of file
diff --git a/internal/mock/globals.go b/internal/mock/globals.go
new file mode 100644
index 0000000000000000000000000000000000000000..31fa60051edb5bca313299a9718b29e08372001c
--- /dev/null
+++ b/internal/mock/globals.go
@@ -0,0 +1,5 @@
+package mock
+
+import "antragsraum-proxy/internal/logging"
+
+var logger = logging.GetLogger()
diff --git a/internal/mock/grpc_server.go b/internal/mock/grpc_server.go
new file mode 100644
index 0000000000000000000000000000000000000000..a07c47c85d78d78241c099c8bfe203fd34b9645c
--- /dev/null
+++ b/internal/mock/grpc_server.go
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2023-2024
+ * Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+
+package mock
+
+import (
+	"context"
+	pb "antragsraum-proxy/gen/go"
+	"fmt"
+	"google.golang.org/grpc"
+	"google.golang.org/grpc/codes"
+	"google.golang.org/grpc/status"
+	"net"
+)
+
+const GrpcMockPort = 50051
+
+type server struct {
+	pb.UnimplementedFachstelleRegistrationServiceServer
+}
+
+func (s *server) Register(ctx context.Context, in *pb.GrpcFachstelleRegistrationRequest) (*pb.GrpcFachstelleRegistrationResponse, error) {
+	if in.Fachstelle == nil {
+		return nil, status.Error(codes.InvalidArgument, "Fachstelle is missing")
+	}
+
+	if in.Fachstelle.MukId == "conflictMukId" {
+		return nil, status.Error(codes.AlreadyExists, "Conflict mukId")
+	} else if in.Fachstelle.MukId == "unavailableMukId" {
+		return nil, status.Error(codes.Unavailable, "Unavailable mukId")
+	} else if in.Fachstelle.MukId == "erroneousMukId" {
+		return nil, status.Error(codes.Internal, "Erroneous mukId")
+	}
+
+	return &pb.GrpcFachstelleRegistrationResponse{}, nil
+}
+
+func StartGrpcServer() *grpc.Server {
+	s := grpc.NewServer()
+	pb.RegisterFachstelleRegistrationServiceServer(s, &server{})
+
+	lis, err := net.Listen("tcp", fmt.Sprintf(":%d", GrpcMockPort))
+	if err != nil {
+		logger.Fatal("gRPC server failed to listen: %v", err)
+	}
+
+	logger.Info("gRPC server listening on port %v", GrpcMockPort)
+	if err := s.Serve(lis); err != nil {
+		logger.Fatal("gRPC server failed to serve: %v", err)
+	}
+
+	return s
+}
diff --git a/internal/mock/grpc_server_test.go b/internal/mock/grpc_server_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..b2e35b57ace8a4c8b2f4a2b12405f522ec7b27ef
--- /dev/null
+++ b/internal/mock/grpc_server_test.go
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2023-2024
+ * Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+
+package mock
+
+import (
+	"context"
+	pb "antragsraum-proxy/gen/go"
+	"fmt"
+	"github.com/stretchr/testify/assert"
+	"google.golang.org/grpc"
+	"google.golang.org/grpc/credentials/insecure"
+	"testing"
+)
+
+func TestStartGrpcServer(t *testing.T) {
+	setUpGrpcEnv := func() (pb.FachstelleRegistrationServiceClient, func()) {
+		SetUpGrpcServer()
+
+		conn, err := grpc.NewClient(fmt.Sprintf("localhost:%d", GrpcMockPort), grpc.WithTransportCredentials(insecure.NewCredentials()))
+		assert.NoError(t, err)
+
+		cleanup := func() {
+			conn.Close()
+		}
+		client := pb.NewFachstelleRegistrationServiceClient(conn)
+
+		return client, cleanup
+	}
+
+	t.Run("should have no error", func(t *testing.T) {
+		client, cleanUp := setUpGrpcEnv()
+		defer cleanUp()
+
+		resp, err := client.Register(context.Background(), &pb.GrpcFachstelleRegistrationRequest{Fachstelle: &pb.GrpcFachstelle{MukId: "testMukId"}})
+
+		assert.NoError(t, err)
+		assert.NotNil(t, resp)
+	})
+
+	t.Run("should have error", func(t *testing.T) {
+		client, cleanUp := setUpGrpcEnv()
+		defer cleanUp()
+
+		resp, err := client.Register(context.Background(), &pb.GrpcFachstelleRegistrationRequest{})
+
+		assert.Error(t, err)
+		assert.Nil(t, resp)
+	})
+}
diff --git a/internal/mock/test_setup.go b/internal/mock/test_setup.go
new file mode 100644
index 0000000000000000000000000000000000000000..24fe3fc1cd864e14338fb9ca00f60aa24dc73492
--- /dev/null
+++ b/internal/mock/test_setup.go
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2023-2024
+ * Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+
+package mock
+
+import (
+	"sync"
+	"time"
+)
+
+var setUpOnce sync.Once
+
+func SetUpGrpcServer() {
+	setUpOnce.Do(func() {
+		go StartGrpcServer()
+		time.Sleep(time.Second) // Wait for the server to start
+	})
+}
diff --git a/internal/mock/testdata/test_config.yml b/internal/mock/testdata/test_config.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ea8925db9cb5af5c351a1af92d6fb7f878de4359
--- /dev/null
+++ b/internal/mock/testdata/test_config.yml
@@ -0,0 +1,6 @@
+server:
+  port: 8080
+grpc:
+  url: "localhost:50051"
+logging:
+  level: "DEBUG"
\ No newline at end of file
diff --git a/internal/server/globals.go b/internal/server/globals.go
new file mode 100644
index 0000000000000000000000000000000000000000..716148066b508fd9a36f664498985295aeccf356
--- /dev/null
+++ b/internal/server/globals.go
@@ -0,0 +1,5 @@
+package server
+
+import "antragsraum-proxy/internal/logging"
+
+var logger = logging.GetLogger()
diff --git a/internal/server/handler.go b/internal/server/handler.go
new file mode 100644
index 0000000000000000000000000000000000000000..3d22eb8fc72bcd32d2e28f676fb07f87aeafdd13
--- /dev/null
+++ b/internal/server/handler.go
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2023-2024
+ * Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+
+package server
+
+import (
+	"context"
+	"fmt"
+	"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
+	"google.golang.org/grpc/codes"
+	"google.golang.org/grpc/status"
+	"net/http"
+)
+
+func RegisterHomeEndpoint(mux *runtime.ServeMux) {
+	err := mux.HandlePath("GET", "/", func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) {
+		defer func() {
+			if err := recover(); err != nil {
+				logger.Error("failed to recover: %v", err)
+				http.Error(w, fmt.Sprintf("failed to recover: %v", err), http.StatusInternalServerError)
+			}
+		}()
+	})
+
+	if err != nil {
+		logger.Fatal("failed to register home endpoint: %v", err)
+	}
+}
+
+func ErrorHandler(ctx context.Context, mux *runtime.ServeMux, marshaler runtime.Marshaler, w http.ResponseWriter, r *http.Request, err error) {
+	st, ok := status.FromError(err)
+	if !ok {
+		runtime.DefaultHTTPErrorHandler(ctx, mux, marshaler, w, r, err)
+		return
+	}
+
+	statusCodeMap := map[codes.Code]int{
+		codes.InvalidArgument: http.StatusBadRequest,
+		codes.AlreadyExists:   http.StatusConflict,
+		codes.Unavailable:     http.StatusServiceUnavailable,
+	}
+
+	httpStatusCode := http.StatusInternalServerError
+
+	if code, exists := statusCodeMap[st.Code()]; exists {
+		httpStatusCode = code
+	}
+
+	w.Header().Set("Content-Type", marshaler.ContentType(r))
+	w.WriteHeader(httpStatusCode)
+
+	_, writeErr := w.Write([]byte(st.Message()))
+	if writeErr != nil {
+		logger.Fatal("failed to handle grpc error: %v", writeErr)
+	}
+}
diff --git a/internal/server/handler_test.go b/internal/server/handler_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..aec2c7850f5bf4b3d62492afc3f2f395b73cf437
--- /dev/null
+++ b/internal/server/handler_test.go
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2023-2024
+ * Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+
+package server
+
+import (
+	"bytes"
+	"antragsraum-proxy/internal/mock"
+	"fmt"
+	"github.com/stretchr/testify/assert"
+	"net/http"
+	"testing"
+)
+
+func TestRegisterHomeEndpoint(t *testing.T) {
+	SetUpHttpGateway()
+
+	resp, err := http.Get("http://localhost:8080/")
+
+	assert.NoError(t, err)
+	assert.Equal(t, http.StatusOK, resp.StatusCode)
+}
+
+func TestErrorHandler(t *testing.T) {
+	assertErroneousRequest := func(jsonData []byte, expectedStatusCode int) {
+		mock.SetUpGrpcServer()
+		SetUpHttpGateway()
+
+		resp, err := http.Post(fmt.Sprintf("http://localhost:8080%v", RegisterFachstelleUrlPath), "application/json", bytes.NewBuffer(jsonData))
+
+		assert.NoError(t, err)
+		assert.Equal(t, expectedStatusCode, resp.StatusCode)
+	}
+
+	t.Run("should have bad request error", func(t *testing.T) {
+		jsonData := []byte(`{}`)
+
+		assertErroneousRequest(jsonData, http.StatusBadRequest)
+	})
+
+	t.Run("should have conflict error", func(t *testing.T) {
+		jsonData := []byte(`{"fachstelle": {"mukId": "conflictMukId"}}`)
+
+		assertErroneousRequest(jsonData, http.StatusConflict)
+	})
+
+	t.Run("should have unavailable error", func(t *testing.T) {
+		jsonData := []byte(`{"fachstelle": {"mukId": "unavailableMukId"}}`)
+
+		assertErroneousRequest(jsonData, http.StatusServiceUnavailable)
+	})
+
+	t.Run("should have internal server error", func(t *testing.T) {
+		jsonData := []byte(`{"fachstelle": {"mukId": "erroneousMukId"}}`)
+
+		assertErroneousRequest(jsonData, http.StatusInternalServerError)
+	})
+}
diff --git a/internal/server/http_gateway.go b/internal/server/http_gateway.go
new file mode 100644
index 0000000000000000000000000000000000000000..684217d6f4ed61b0c2bf447386ef30c1e06f7658
--- /dev/null
+++ b/internal/server/http_gateway.go
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2023-2024
+ * Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+
+package server
+
+import (
+	"context"
+	"antragsraum-proxy/internal/config"
+	"antragsraum-proxy/internal/mock"
+	"fmt"
+	"google.golang.org/grpc/credentials/insecure"
+	"net/http"
+
+	"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
+	"google.golang.org/grpc"
+
+	pb "antragsraum-proxy/gen/go"
+)
+
+func StartHttpGateway(conf config.Config) *http.Server {
+	ctx := context.Background()
+	ctx, cancel := context.WithCancel(ctx)
+	defer cancel()
+
+	grpcEndpoint := conf.Grpc.Url
+	if conf.Grpc.Mock {
+		grpcEndpoint = fmt.Sprintf("localhost:%d", mock.GrpcMockPort)
+	}
+
+	mux := runtime.NewServeMux(runtime.WithErrorHandler(ErrorHandler))
+	opts := []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials())}
+	err := pb.RegisterFachstelleRegistrationServiceHandlerFromEndpoint(ctx, mux, grpcEndpoint, opts)
+	if err != nil {
+		logger.Fatal("failed to start HTTP gateway: %v", err)
+	}
+
+	RegisterHomeEndpoint(mux)
+
+	httpServer := &http.Server{
+		Addr:    fmt.Sprintf(":%d", conf.Server.Port),
+		Handler: RequestLoggingMiddleware(mux),
+	}
+
+	logger.Info("HTTP gateway listening on port %d", conf.Server.Port)
+	if err := httpServer.ListenAndServe(); err != nil {
+		logger.Fatal("HTTP gateway failed to serve: %v", err)
+	}
+
+	return httpServer
+}
diff --git a/internal/server/http_gateway_test.go b/internal/server/http_gateway_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..8ed43e5bb99955c89ae081b354774c5a96e52cef
--- /dev/null
+++ b/internal/server/http_gateway_test.go
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2023-2024
+ * Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+
+package server
+
+import (
+	"bytes"
+	"antragsraum-proxy/internal/mock"
+	"fmt"
+	"github.com/stretchr/testify/assert"
+	"net/http"
+	"testing"
+)
+
+func TestStartHttpGateway(t *testing.T) {
+	mock.SetUpGrpcServer()
+	SetUpHttpGateway()
+
+	jsonData := []byte(`{"fachstelle": {"mukId": "testMukId"}}`)
+	resp, err := http.Post(fmt.Sprintf("http://localhost:8080%v", RegisterFachstelleUrlPath), "application/json", bytes.NewBuffer(jsonData))
+
+	assert.NoError(t, err)
+	assert.Equal(t, http.StatusOK, resp.StatusCode)
+}
diff --git a/internal/server/middleware.go b/internal/server/middleware.go
new file mode 100644
index 0000000000000000000000000000000000000000..418e545718a9a8f247192e917dd07611dd0685b3
--- /dev/null
+++ b/internal/server/middleware.go
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2023-2024
+ * Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+
+package server
+
+import (
+	"bytes"
+	"fmt"
+	"io"
+	"net/http"
+)
+
+const RegisterFachstelleUrlPath = "/api/antragsraum"
+
+type logResponseWriter struct {
+	http.ResponseWriter
+	statusCode int
+}
+
+func (rsp *logResponseWriter) WriteHeader(statusCode int) {
+	rsp.statusCode = statusCode
+	rsp.ResponseWriter.WriteHeader(statusCode)
+}
+
+func RequestLoggingMiddleware(h http.Handler) http.Handler {
+	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+		if r.URL.Path != RegisterFachstelleUrlPath {
+			h.ServeHTTP(w, r)
+			return
+		}
+
+		body, err := io.ReadAll(r.Body)
+		if err != nil {
+			logger.Error("failed to read request body: %v", err)
+			http.Error(w, fmt.Sprintf("failed to read request body: %v", err), http.StatusBadRequest)
+			return
+		}
+		r.Body = io.NopCloser(bytes.NewReader(body))
+
+		logger.Debug("received request with body: %v", string(body))
+
+		lw := &logResponseWriter{w, http.StatusOK}
+		h.ServeHTTP(lw, r)
+
+		if lw.statusCode == http.StatusOK {
+			logger.Debug("successfully handled request with body: %v", string(body))
+		} else {
+			logger.Error("failed handling request with body: %v, status code: %d", string(body), lw.statusCode)
+		}
+	})
+}
diff --git a/internal/server/middleware_test.go b/internal/server/middleware_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..2924854bca7a23768967846fadf525fa4886f647
--- /dev/null
+++ b/internal/server/middleware_test.go
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2023-2024
+ * Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+
+package server
+
+import (
+	"bytes"
+	"antragsraum-proxy/internal/mock"
+	"fmt"
+	"github.com/stretchr/testify/assert"
+	"log"
+	"net/http"
+	"testing"
+)
+
+func TestRequestLoggingMiddleware(t *testing.T) {
+	mock.SetUpGrpcServer()
+	SetUpHttpGateway()
+
+	var buf bytes.Buffer
+	logger.BaseLogger.SetOutput(&buf)
+
+	originalFlags := log.Flags()
+	defer func() {
+		log.SetOutput(nil)
+		log.SetFlags(originalFlags)
+	}()
+
+	jsonData := []byte(`{"fachstelle": {"mukId": "testMukId"}}`)
+	http.Post(fmt.Sprintf("http://localhost:8080%v", RegisterFachstelleUrlPath), "application/json", bytes.NewBuffer(jsonData))
+
+	logOutput := buf.String()
+	assert.Contains(t, logOutput, "received request with body: {\"fachstelle\": {\"mukId\": \"testMukId\"}}")
+	assert.Contains(t, logOutput, "successfully handled request with body: {\"fachstelle\": {\"mukId\": \"testMukId\"}}")
+}
diff --git a/internal/server/test_setup.go b/internal/server/test_setup.go
new file mode 100644
index 0000000000000000000000000000000000000000..4933a714311a5c4877c3182d0533c52d9fddf62d
--- /dev/null
+++ b/internal/server/test_setup.go
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2023-2024
+ * Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+
+package server
+
+import (
+	"antragsraum-proxy/internal/config"
+	"sync"
+	"time"
+)
+
+var setUpOnce sync.Once
+
+func SetUpHttpGateway() {
+	setUpOnce.Do(func() {
+		conf := config.LoadConfig()
+
+		go StartHttpGateway(conf)
+		time.Sleep(time.Second) // Wait for the server to start
+	})
+}
diff --git a/internal/server/testdata/test_config.yml b/internal/server/testdata/test_config.yml
new file mode 100644
index 0000000000000000000000000000000000000000..6235966c8828f67d39820aeb96b70781ca9300f7
--- /dev/null
+++ b/internal/server/testdata/test_config.yml
@@ -0,0 +1,6 @@
+server:
+  port: 8080
+grpc:
+  mock: true
+logging:
+  level: "DEBUG"
\ No newline at end of file
diff --git a/run_helm_test.sh b/run_helm_test.sh
new file mode 100755
index 0000000000000000000000000000000000000000..2bae426e6327e0d169891a6cd4eec42cd5377d87
--- /dev/null
+++ b/run_helm_test.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+set -e
+set -x
+
+helm template  ./src/main/helm/ -f src/test/helm-linter-values.yaml
+helm lint -f src/test/helm-linter-values.yaml ./src/main/helm/
+cd src/main/helm && helm unittest -f '../../test/helm/**/*test.yaml'  .
\ No newline at end of file
diff --git a/src/main/helm/.helmignore b/src/main/helm/.helmignore
new file mode 100644
index 0000000000000000000000000000000000000000..3d0dbe446770be5127eb719b695414c427b09715
--- /dev/null
+++ b/src/main/helm/.helmignore
@@ -0,0 +1 @@
+tests/
\ No newline at end of file
diff --git a/src/main/helm/Chart.yaml b/src/main/helm/Chart.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..53a2363abd9292eafc6810509274669a4f02805c
--- /dev/null
+++ b/src/main/helm/Chart.yaml
@@ -0,0 +1,30 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+apiVersion: v1
+appVersion: "v1.0.0-beta.1"
+description: A Helm chart for Anragsraum-Proxy
+name: antragsraum-proxy
+version: 0.0.0-MANAGED-BY-JENKINS
+icon: https://simpleicons.org/icons/helm.svg
diff --git a/src/main/helm/templates/_helpers.tpl b/src/main/helm/templates/_helpers.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..5ddef57b817b10ba5cd4fdbba26a6f2509740601
--- /dev/null
+++ b/src/main/helm/templates/_helpers.tpl
@@ -0,0 +1,42 @@
+
+{{/* Default Labels: Helm recommended best-practice labels https://helm.sh/docs/chart_best_practices/labels/ */}}
+{{- define "app.defaultLabels" }}
+app.kubernetes.io/instance: antragsraum-proxy
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+app.kubernetes.io/name: {{ .Release.Name }}
+app.kubernetes.io/namespace: {{ .Release.Namespace }}
+app.kubernetes.io/part-of: ozgcloud
+app.kubernetes.io/version: {{ .Chart.Version }}
+helm.sh/chart: {{ printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" }}
+app.kubernetes.io/component: antragsraum-proxy
+component: antragsraum-proxy
+{{- end -}}
+
+{{- define "app.matchLabels" }}
+app.kubernetes.io/name: {{ .Release.Name }}
+app.kubernetes.io/namespace: {{ .Release.Namespace }}
+component: antragsraum-proxy
+{{- end -}}
+
+
+{{- define "app.serviceAccountName" -}}
+{{ printf "%s" ( (.Values.serviceAccount).name | default "antragsraum-proxy-service-account" ) }}
+{{- end -}}
+
+{{- define "app.getCustomList" -}}
+{{- with (.Values.env).customList -}}
+{{- if kindIs "map" . -}}
+{{ include "app.dictToList" . }}
+{{- else if kindIs "slice" . -}}
+{{ . | toYaml }}
+{{- end -}}
+{{- end -}}
+{{- end -}}
+
+{{- define "app.dictToList" -}}
+{{- $customList := list -}}
+{{- range $key, $value := . -}}
+{{- $customList = append $customList (dict "name" $key "value" $value) }}
+{{- end -}}
+{{- $customList | toYaml -}}
+{{- end -}}
\ No newline at end of file
diff --git a/src/main/helm/templates/deployment.yaml b/src/main/helm/templates/deployment.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..ae27d298452488566cb916119818eeea7553b2f3
--- /dev/null
+++ b/src/main/helm/templates/deployment.yaml
@@ -0,0 +1,128 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: { { .Release.Name } }
+  namespace: { { .Release.Namespace } }
+  labels:
+    { { - include "app.defaultLabels" . | indent 4 } }
+spec:
+  progressDeadlineSeconds: 600
+  replicas: { { .Values.replicaCount } }
+  revisionHistoryLimit: 10
+  selector:
+    matchLabels:
+      { { - include "app.matchLabels" . | indent 6 } }
+  strategy:
+    rollingUpdate:
+      maxSurge: 1
+      maxUnavailable: 0
+    type: RollingUpdate
+  template:
+    metadata:
+      labels:
+        { { - include "app.defaultLabels" . | indent 8 } }
+    spec:
+      { { - if (.Values.serviceAccount).create } }
+      serviceAccountName: { { include "app.serviceAccountName" . } }
+      { { - end } }
+      topologySpreadConstraints:
+        - maxSkew: 1
+          topologyKey: kubernetes.io/hostname
+          whenUnsatisfiable: ScheduleAnyway
+          labelSelector:
+            matchLabels:
+              app.kubernetes.io/name: { { .Release.Name } }
+      containers:
+        - env:
+            - name: SERVER_PORT
+              value: "8082"
+            - name: GRPC_MOCK
+              value: "{{ (.Values.grpc).mock | default false }}"
+            - name: GRPC_URL
+              value: "{{ required ".Values.grpc.url must be set" (.Values.grpc).url }}"
+            { { - with include "app.getCustomList" . } }
+  { { . | indent 10 } }
+  { { - end } }
+
+image: "{{ .Values.image.repo }}/{{ .Values.image.name }}:{{ coalesce (.Values.image).tag "latest" }}"
+imagePullPolicy: Always
+name: antragsraum-proxy
+ports:
+  - containerPort: 8082
+    name: 8082tcp1
+    protocol: TCP
+readinessProbe:
+  httpGet:
+    path: /
+    port: 8082
+    scheme: HTTP
+  timeoutSeconds: 1
+  periodSeconds: 10
+  successThreshold: 1
+  failureThreshold: 3
+startupProbe:
+  httpGet:
+    path: /
+    port: 8082
+    scheme: HTTP
+  timeoutSeconds: 1
+  periodSeconds: 10
+  successThreshold: 1
+  failureThreshold: 3
+resources:
+  { { - with .Values.resources } }
+  { { toYaml . | indent 10 } }
+  { { - end } }
+securityContext:
+  allowPrivilegeEscalation: false
+  privileged: false
+  readOnlyRootFilesystem: false
+  runAsNonRoot: true
+  { { - with (.Values.securityContext).runAsUser } }
+  runAsUser: { { . } }
+  { { - end } }
+  { { - with (.Values.securityContext).runAsGroup } }
+  runAsGroup: { { . } }
+  { { - end } }
+stdin: true
+terminationMessagePath: /dev/termination-log
+terminationMessagePolicy: File
+tty: true
+
+dnsConfig: { }
+dnsPolicy: ClusterFirst
+imagePullSecrets:
+  - name: { { required "imagePullSecret must be set" .Values.imagePullSecret } }
+
+restartPolicy: Always
+  { { - with .Values.hostAliases } }
+hostAliases:
+  { { toYaml . | indent 8 } }
+  { { - end } }
+schedulerName: default-scheduler
+securityContext: { }
+terminationGracePeriodSeconds: 30
diff --git a/src/main/helm/templates/network_policy.yaml b/src/main/helm/templates/network_policy.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..c972abf6e3fe157fb660da854bfd0ff606f47595
--- /dev/null
+++ b/src/main/helm/templates/network_policy.yaml
@@ -0,0 +1,83 @@
+#
+# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+  { { - if not (.Values.networkPolicy).disabled } }
+apiVersion: networking.k8s.io/v1
+kind: NetworkPolicy
+metadata:
+  name: network-policy-antragsraum-proxy
+  namespace: { { .Release.Namespace } }
+spec:
+  podSelector:
+    matchLabels:
+      component: antragsraum-proxy
+  policyTypes:
+    - Ingress
+    - Egress
+  ingress:
+    - ports:
+        - port: 8082
+      from:
+        - namespaceSelector: { }
+          podSelector:
+            matchLabels:
+              component: fachstelle-server
+  { { - with (.Values.networkPolicy).additionalIngressConfigLocal } }
+  { { toYaml . | indent 2 } }
+  { { - end } }
+  { { - with (.Values.networkPolicy).additionalIngressConfigGlobal } }
+  { { toYaml . | indent 2 } }
+  { { - end } }
+egress:
+  - to:
+      - namespaceSelector:
+          matchLabels:
+            kubernetes.io/metadata.name: { { required "zufiManager.namespace must be set" (.Values.zufiManager).namespace } }
+        podSelector:
+          matchLabels:
+            component: zufi-server
+    ports:
+      - port: 9090
+        protocol: TCP
+  - to:
+      - namespaceSelector:
+          matchLabels:
+            kubernetes.io/metadata.name: { { required "networkPolicy.dnsServerNamespace must be set" (.Values.networkPolicy).dnsServerNamespace } }
+    ports:
+      - port: 53
+        protocol: UDP
+      - port: 53
+        protocol: TCP
+      - port: 5353
+        protocol: UDP
+      - port: 5353
+        protocol: TCP
+  { { - with (.Values.networkPolicy).additionalEgressConfigLocal } }
+  { { toYaml . | indent 2 } }
+  { { - end } }
+  { { - with (.Values.networkPolicy).additionalEgressConfigGlobal } }
+  { { toYaml . | indent 2 } }
+  { { - end } }
+
+  { { - end } }
\ No newline at end of file
diff --git a/src/main/helm/templates/service.yaml b/src/main/helm/templates/service.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..c5a4caff37e14e02bbb3bd975631f0237bd4703b
--- /dev/null
+++ b/src/main/helm/templates/service.yaml
@@ -0,0 +1,40 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+apiVersion: v1
+kind: Service
+metadata:
+  name: {{.Release.Name }}
+  namespace: {{ .Release.Namespace }}
+  labels:
+    {{- include "app.defaultLabels" . | indent 4 }}
+spec:
+  type: ClusterIP
+  ports:
+    - name: 8082tcp1
+      port: 8082
+      targetPort: 8082
+      protocol: TCP
+  selector:
+    {{- include "app.matchLabels" . | indent 4 }}
diff --git a/src/main/helm/values.yaml b/src/main/helm/values.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..09010a8f931a92ced5a05fe62a39127da4ed36c9
--- /dev/null
+++ b/src/main/helm/values.yaml
@@ -0,0 +1,36 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+
+replicaCount: 1
+
+
+image:
+  repo: docker.ozg-sh.de
+  name: antragsraum-proxy
+  tag: latest # [default: latest]
+
+
+
+
diff --git a/src/test/helm-linter-values.yaml b/src/test/helm-linter-values.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..bab44e4f88591b71dd0cb0220909949f70cfc0e4
--- /dev/null
+++ b/src/test/helm-linter-values.yaml
@@ -0,0 +1,14 @@
+
+
+networkPolicy:
+  dnsServerNamespace: test-dns-namespace
+
+
+zufiManager:
+  namespace: zufi
+
+imagePullSecret: ozgcloud-image-pull-secret
+server:
+  port: 8080
+grpc:
+  url: "zufi.de:9090"
\ No newline at end of file
diff --git a/src/test/helm/deployment_defaults_labels_test.yaml b/src/test/helm/deployment_defaults_labels_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..ac363ba7a7749a76df4bf2cbc60cfaf99379ca60
--- /dev/null
+++ b/src/test/helm/deployment_defaults_labels_test.yaml
@@ -0,0 +1,75 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+suite: test deployment default labels
+release:
+  name: antragsraum-proxy
+  namespace: sh-helm-test
+templates:
+  - templates/deployment.yaml
+set:
+  imagePullSecret: image-pull-secret
+  server:
+    port: 8080
+  grpc:
+    url: "zufi.de:9090"
+tests:
+  - it: check metadata.labels
+    asserts:
+      - equal:
+          path: metadata.labels
+          value:
+            app.kubernetes.io/instance: antragsraum-proxy
+            app.kubernetes.io/managed-by: Helm
+            app.kubernetes.io/name: antragsraum-proxy
+            app.kubernetes.io/namespace: sh-helm-test
+            app.kubernetes.io/part-of: ozgcloud
+            app.kubernetes.io/version: 0.0.0-MANAGED-BY-JENKINS
+            helm.sh/chart: antragsraum-proxy-0.0.0-MANAGED-BY-JENKINS
+            app.kubernetes.io/component: antragsraum-proxy
+            component: antragsraum-proxy
+
+  - it: should set spec.selector.matchLabels
+    asserts:
+      - equal:
+          path: spec.selector.matchLabels
+          value:
+            app.kubernetes.io/name: antragsraum-proxy
+            app.kubernetes.io/namespace: sh-helm-test
+            component: antragsraum-proxy
+
+  - it: should have correct deyploment spec.template.metadata.labels
+    asserts:
+      - equal:
+          path: spec.template.metadata.labels
+          value:
+            app.kubernetes.io/instance: antragsraum-proxy
+            app.kubernetes.io/managed-by: Helm
+            app.kubernetes.io/name: antragsraum-proxy
+            app.kubernetes.io/namespace: sh-helm-test
+            app.kubernetes.io/part-of: ozgcloud
+            app.kubernetes.io/version: 0.0.0-MANAGED-BY-JENKINS
+            helm.sh/chart: antragsraum-proxy-0.0.0-MANAGED-BY-JENKINS
+            app.kubernetes.io/component: antragsraum-proxy
+            component: antragsraum-proxy
diff --git a/src/test/helm/deployment_env_test.yaml b/src/test/helm/deployment_env_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..291459906207c5e4cceb50f29962d43e5e58ed6c
--- /dev/null
+++ b/src/test/helm/deployment_env_test.yaml
@@ -0,0 +1,94 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+suite: test deployment container environments 
+templates:
+  - templates/deployment.yaml
+set:
+  imagePullSecret: image-pull-secret
+tests:
+  - it: check customList as list
+    set:
+      env.customList:
+        - name: my_test_environment_name
+          value: "A test value"
+        - name: test_environment
+          value: "B test value"
+      grpc:
+        url: "zufi.de:9090"
+    asserts:
+      - contains:
+          path: spec.template.spec.containers[0].env
+          content:
+            name: my_test_environment_name
+            value: "A test value"
+      - contains:
+          path: spec.template.spec.containers[0].env
+          content:
+            name: test_environment
+            value: "B test value"
+  - it: check customList as dict
+    set:
+      env.customList:
+        my_test_environment_name: "A test value"
+        test_environment: "B test value"
+      grpc:
+        url: "zufi.de:9090"
+    asserts:
+      - contains:
+          path: spec.template.spec.containers[0].env
+          content:
+            name: my_test_environment_name
+            value: "A test value"
+      - contains:
+          path: spec.template.spec.containers[0].env
+          content:
+            name: test_environment
+            value: "B test value"
+
+  - it: check envs
+    set:       
+      grpc:
+        url: "zufi.de:9090"
+    asserts:
+      - contains:
+          path: spec.template.spec.containers[0].env
+          content:
+            name: GRPC_URL
+            value: "zufi.de:9090"
+      - contains:
+          path: spec.template.spec.containers[0].env
+          content:
+            name: GRPC_MOCK
+            value: "false"
+      - contains:
+          path: spec.template.spec.containers[0].env
+          content:
+            name: SERVER_PORT
+            value: "8082"
+  - it: should fail template if grpc.url not set
+    set:
+    asserts:
+      - failedTemplate:
+          errormessage: ".Values.grpc.url must be set"
\ No newline at end of file
diff --git a/src/test/helm/deployment_imagepull_secret_test.yaml b/src/test/helm/deployment_imagepull_secret_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..dd810c502c3f036ebcacdb2e9f8ba5f4631b032b
--- /dev/null
+++ b/src/test/helm/deployment_imagepull_secret_test.yaml
@@ -0,0 +1,47 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+suite: test deployment image pull secret
+release:
+  name: antragsraum-proxy
+  namespace: sh-helm-test
+templates:
+  - templates/deployment.yaml
+set:
+  server:
+    port: 8080
+  grpc:
+    url: "zufi.de:9090"
+tests:
+  - it: should use correct imagePull secret
+    set:
+      imagePullSecret: ozgcloud-image-pull-secret
+    asserts:
+      - equal:
+          path: spec.template.spec.imagePullSecrets[0].name
+          value: ozgcloud-image-pull-secret
+  - it: should fail template if imagepullsecret not set
+    asserts:
+      - failedTemplate:
+          errormessage: imagePullSecret must be set
\ No newline at end of file
diff --git a/src/test/helm/deployment_resources_test.yaml b/src/test/helm/deployment_resources_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..198f990ae5062013bafa697a216c2bcae607486d
--- /dev/null
+++ b/src/test/helm/deployment_resources_test.yaml
@@ -0,0 +1,64 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+suite: test deployment container resources
+release:
+  name: antragsraum-proxy
+templates:
+  - templates/deployment.yaml
+set:
+  imagePullSecret: image-pull-secret
+  server:
+    port: 8080
+  grpc:
+    url: "zufi.de:9090"
+
+tests:
+  - it: should generate resources when values set
+    set:
+      resources:
+        limits:
+          cpu: 11m
+          memory: 22Mi
+        requests:
+          cpu: 33m
+          memory: 44Mi
+    asserts:
+      - equal:
+          path: spec.template.spec.containers[0].resources.limits.cpu
+          value: 11m
+      - equal:
+          path: spec.template.spec.containers[0].resources.limits.memory
+          value: 22Mi
+      - equal:
+          path: spec.template.spec.containers[0].resources.requests.cpu
+          value: 33m
+      - equal:
+          path: spec.template.spec.containers[0].resources.requests.memory
+          value: 44Mi
+  - it: should not generate resources when values not set
+    asserts:
+      - isEmpty:
+          path: spec.template.spec.containers[0].resources
+
diff --git a/src/test/helm/deployment_test.yaml b/src/test/helm/deployment_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..b60e9e11b2675d381f5012fb98eef99087307621
--- /dev/null
+++ b/src/test/helm/deployment_test.yaml
@@ -0,0 +1,201 @@
+#
+# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+suite: deployment
+release:
+  name: antragsraum-proxy
+templates:
+  - templates/deployment.yaml
+set:
+  imagePullSecret: image-pull-secret
+  server:
+    port: 8080
+  grpc:
+    url: "zufi.de:9090"
+
+tests:
+  - it: should have metadata values
+    asserts:
+      - isKind:
+          of: Deployment
+      - isAPIVersion:
+          of: apps/v1
+      - equal:
+          path: metadata.name
+          value: "antragsraum-proxy"
+      - equal:
+          path: metadata.namespace
+          value: "NAMESPACE"
+      - exists:
+          path: metadata.labels
+  - it: should have correct general settings
+    asserts:
+      - equal:
+          path: spec.progressDeadlineSeconds
+          value: 600
+      - equal:
+          path: spec.replicas
+          value: 1
+      - equal:
+          path: spec.revisionHistoryLimit
+          value: 10
+      - exists:
+          path: spec.selector
+      - equal:
+          path: spec.selector.matchLabels["app.kubernetes.io/name"]
+          value: "antragsraum-proxy"
+      - equal:
+          path: spec.selector.matchLabels["app.kubernetes.io/namespace"]
+          value: "NAMESPACE"
+      - equal:
+          path: spec.strategy.rollingUpdate.maxSurge
+          value: 1
+      - equal:
+          path: spec.strategy.rollingUpdate.maxUnavailable
+          value: 0
+      - equal:
+          path: spec.strategy.type
+          value: "RollingUpdate"
+  - it: should have correct template configuration
+    asserts:
+      - equal:
+          path: spec.template.metadata.labels["app.kubernetes.io/instance"]
+          value: "antragsraum-proxy"
+      - equal:
+          path: spec.template.metadata.labels.component
+          value: "antragsraum-proxy"
+      - equal:
+          path: spec.template.spec.topologySpreadConstraints[0].maxSkew
+          value: 1
+      - equal:
+          path: spec.template.spec.topologySpreadConstraints[0].topologyKey
+          value: "kubernetes.io/hostname"
+      - equal:
+          path: spec.template.spec.topologySpreadConstraints[0].whenUnsatisfiable
+          value: "ScheduleAnyway"
+      - equal:
+          path: spec.template.spec.topologySpreadConstraints[0].labelSelector.matchLabels["app.kubernetes.io/name"]
+          value: "antragsraum-proxy"
+      - isEmpty:
+          path: spec.template.spec.dnsConfig
+      - equal:
+          path: spec.template.spec.dnsPolicy
+          value: "ClusterFirst"
+      - equal:
+          path: spec.template.spec.restartPolicy
+          value: "Always"
+      - equal:
+          path: spec.template.spec.schedulerName
+          value: "default-scheduler"
+      - isEmpty:
+          path: spec.template.spec.securityContext
+      - equal:
+          path: spec.template.spec.terminationGracePeriodSeconds
+          value: 30
+  - it: should have correct container configuration
+    asserts:
+      - equal:
+          path: spec.template.spec.containers[0].name
+          value: "antragsraum-proxy"
+      - equal:
+          path: spec.template.spec.containers[0].image
+          value: "docker.ozg-sh.de/antragsraum-proxy:latest"
+      - equal:
+          path: spec.template.spec.containers[0].imagePullPolicy
+          value: "Always"
+      - equal:
+          path: spec.template.spec.containers[0].ports[0].containerPort
+          value: 8082
+      - equal:
+          path: spec.template.spec.containers[0].ports[0].name
+          value: "8082tcp1"
+      - equal:
+          path: spec.template.spec.containers[0].ports[0].protocol
+          value: "TCP"
+
+
+      - equal:
+          path: spec.template.spec.containers[0].securityContext.allowPrivilegeEscalation
+          value: false
+      - equal:
+          path: spec.template.spec.containers[0].securityContext.privileged
+          value: false
+      - equal:
+          path: spec.template.spec.containers[0].securityContext.readOnlyRootFilesystem
+          value: false
+      - equal:
+          path: spec.template.spec.containers[0].securityContext.runAsNonRoot
+          value: true
+      - equal:
+          path: spec.template.spec.containers[0].stdin
+          value: true
+      - equal:
+          path: spec.template.spec.containers[0].terminationMessagePath
+          value: "/dev/termination-log"
+      - equal:
+          path: spec.template.spec.containers[0].terminationMessagePolicy
+          value: "File"
+      - equal:
+          path: spec.template.spec.containers[0].tty
+          value: true
+      - equal:
+          path: spec.template.spec.containers[0].readinessProbe.failureThreshold
+          value: 3
+      - equal:
+          path: spec.template.spec.containers[0].readinessProbe.httpGet.path
+          value: "/"
+      - equal:
+          path: spec.template.spec.containers[0].readinessProbe.httpGet.port
+          value: 8082
+      - equal:
+          path: spec.template.spec.containers[0].readinessProbe.httpGet.scheme
+          value: "HTTP"
+      - equal:
+          path: spec.template.spec.containers[0].readinessProbe.periodSeconds
+          value: 10
+      - equal:
+          path: spec.template.spec.containers[0].readinessProbe.successThreshold
+          value: 1
+      - equal:
+          path: spec.template.spec.containers[0].readinessProbe.timeoutSeconds
+          value: 1
+      - equal:
+          path: spec.template.spec.containers[0].startupProbe.httpGet.path
+          value: "/"
+      - equal:
+          path: spec.template.spec.containers[0].startupProbe.httpGet.port
+          value: 8082
+      - equal:
+          path: spec.template.spec.containers[0].startupProbe.failureThreshold
+          value: 3
+
+      - equal:
+          path: spec.template.spec.containers[0].startupProbe.periodSeconds
+          value: 10
+      - equal:
+          path: spec.template.spec.containers[0].startupProbe.successThreshold
+          value: 1
+      - equal:
+          path: spec.template.spec.containers[0].startupProbe.timeoutSeconds
+          value: 1
diff --git a/src/test/helm/network_policy_test.yaml b/src/test/helm/network_policy_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..8041ca80dcc4752b230b7632022d3b0e8f93a5fa
--- /dev/null
+++ b/src/test/helm/network_policy_test.yaml
@@ -0,0 +1,234 @@
+#
+# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+suite: network policy test
+release:
+  namespace: by-helm-test
+templates:
+  - templates/network_policy.yaml
+
+
+tests:
+  - it: should match apiVersion
+    set:
+      zufiManager:
+        namespace: zufi
+      networkPolicy:
+        dnsServerNamespace: test-dns-namespace
+    asserts:
+      - isAPIVersion:
+          of: networking.k8s.io/v1
+
+  - it: should match kind
+    set:
+      zufiManager:
+        namespace: zufi
+      networkPolicy:
+        dnsServerNamespace: test-dns-namespace
+    asserts:
+      - isKind:
+          of: NetworkPolicy
+
+  - it: should match metadata
+    set:
+      zufiManager:
+        namespace: zufi
+      networkPolicy:
+        dnsServerNamespace: test-dns-namespace
+    asserts:
+      - equal:
+          path: metadata
+          value:
+            name: network-policy-antragsraum-proxy
+            namespace: by-helm-test
+
+  - it: should generate spec
+    set:
+      zufiManager:
+        namespace: zufi
+      networkPolicy:
+        dnsServerNamespace: test-dns-namespace
+    asserts:
+      - equal:
+          path: spec
+          value:
+            egress:
+              - ports:
+                  - port: 9090
+                    protocol: TCP
+                to:
+                  - namespaceSelector:
+                      matchLabels:
+                        kubernetes.io/metadata.name: zufi
+                    podSelector:
+                      matchLabels:
+                        component: zufi-server
+              - ports:
+                  - port: 53
+                    protocol: UDP
+                  - port: 53
+                    protocol: TCP
+                  - port: 5353
+                    protocol: UDP
+                  - port: 5353
+                    protocol: TCP
+                to:
+                  - namespaceSelector:
+                      matchLabels:
+                        kubernetes.io/metadata.name: test-dns-namespace
+            ingress:
+              - from:
+                  - namespaceSelector: { }
+                    podSelector:
+                      matchLabels:
+                        component: fachstelle-server
+                ports:
+                  - port: 8082
+            podSelector:
+              matchLabels:
+                component: antragsraum-proxy
+            policyTypes:
+              - Ingress
+              - Egress
+
+  - it: add ingress rule by values local
+    set:
+      zufiManager:
+        namespace: zufi
+      networkPolicy:
+        dnsServerNamespace: test-namespace-dns
+        additionalIngressConfigLocal:
+          - from:
+              - podSelector:
+                  matchLabels:
+                    component: client2
+    asserts:
+      - contains:
+          path: spec.ingress
+          content:
+            from:
+              - podSelector:
+                  matchLabels:
+                    component: client2
+  - it: add ingress rule by values global
+    set:
+      zufiManager:
+        namespace: zufi
+      networkPolicy:
+        dnsServerNamespace: test-namespace-dns
+        additionalIngressConfigGlobal:
+          - from:
+              - podSelector:
+                  matchLabels:
+                    component: client2
+    asserts:
+      - contains:
+          path: spec.ingress
+          content:
+            from:
+              - podSelector:
+                  matchLabels:
+                    component: client2
+
+  - it: add egress rules by values local
+    set:
+      zufiManager:
+        namespace: zufi
+      networkPolicy:
+        dnsServerNamespace: test-dns-namespace
+        additionalEgressConfigLocal:
+          - to:
+              - ipBlock:
+                  cidr: 1.2.3.4/32
+    asserts:
+      - contains:
+          path: spec.egress
+          content:
+            to:
+              - ipBlock:
+                  cidr: 1.2.3.4/32
+  - it: add egress rules by values Global
+    set:
+      zufiManager:
+        namespace: zufi
+      networkPolicy:
+        dnsServerNamespace: test-dns-namespace
+        additionalEgressConfigGlobal:
+          - to:
+              - ipBlock:
+                  cidr: 1.2.3.4/32
+    asserts:
+      - contains:
+          path: spec.egress
+          content:
+            to:
+              - ipBlock:
+                  cidr: 1.2.3.4/32
+
+  - it: test network policy disabled
+    set:
+      networkPolicy:
+        disabled: true
+    asserts:
+      - hasDocuments:
+          count: 0
+
+  - it: test network policy unset should be disabled
+    set:
+      zufiManager:
+        namespace: zufi
+      networkPolicy:
+        disabled: false
+        dnsServerNamespace: test-dns-namespace
+    asserts:
+      - hasDocuments:
+          count: 1
+  - it: test dnsServerNamespace must be set message
+    set:
+      zufiManager:
+        namespace: zufi
+      networkPolicy:
+        disabled: false
+    asserts:
+      - failedTemplate:
+          errorMessage: networkPolicy.dnsServerNamespace must be set
+
+  - it: test zufiManager Namespace must be set message
+    set:
+      networkPolicy:
+        disabled: false
+        dnsServerNamespace: test-dns-server-namespace
+    asserts:
+      - failedTemplate:
+          errorMessage: zufiManager.namespace must be set
+
+  - it: test network policy should be enabled by default
+    set:
+      zufiManager:
+        namespace: zufi
+      networkPolicy:
+        dnsServerNamespace: test-dns-server-namespace
+    asserts:
+      - hasDocuments:
+          count: 1
\ No newline at end of file
diff --git a/src/test/helm/service_test.yaml b/src/test/helm/service_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..63057afeeb26337337964b90856a850403ca1f8b
--- /dev/null
+++ b/src/test/helm/service_test.yaml
@@ -0,0 +1,77 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+suite: test service
+release:
+  name: antragsraum-proxy
+  namespace: sh-helm-test
+templates:
+  - templates/service.yaml
+tests:
+  - it: should have the label component with correct value
+    asserts:
+      - isKind:
+          of: Service
+      - isAPIVersion:
+          of: v1
+      - equal:
+          path: metadata.labels.component
+          value: antragsraum-proxy
+  - it: should be of type ClusterIP
+    asserts:
+      - equal:
+          path: spec.type
+          value: ClusterIP
+  - it: ports should contain the grpc port
+    asserts:
+      - contains:
+          path: spec.ports
+          content:
+            name: 8082tcp1
+            port: 8082
+            targetPort: 8082
+            protocol: TCP
+          count: 1
+          any: true
+
+  - it: selector should contain the component label with correct value
+    asserts:
+      - equal:
+          path: spec.selector.component
+          value: antragsraum-proxy
+
+  - it: selector should contain helm recommended labels name and namespace
+    asserts:
+      - equal:
+          path: spec.selector
+          value:
+            app.kubernetes.io/name: antragsraum-proxy
+            app.kubernetes.io/namespace: sh-helm-test
+            component: antragsraum-proxy
+
+  - it: check component label for service
+    asserts:
+      - equal:
+          path: metadata.labels["component"]
+          value: antragsraum-proxy
\ No newline at end of file