openapi: 3.0.0
info:
  version: 1.0.0-alpha
  title: Antragsmanagement API für Antragsverfahren und Berichtspflichten
  description: Übergreifende API Schnittstelle des Zustelldienstes.
  contact:
    name: FITKO
    url: 'https://www.fitko.de/'
  license:
    url: 'https://creativecommons.org/licenses/by-sa/4.0/'
    name: Creative Commons Attribution Share Alike 4.0 (CC BY-SA 4.0)
  termsOfService: 'https://www.fitko.de/'
servers:
  - url: 'https://sender-test.fiep-poc.de/beta8'
    description: Testsystem
tags:
  - name: Destination Management
  - name: Vorgänge
  - name: Application Transfer
  - name: Application Retrieval
  - name: Technical
paths:
  /destinations:
    get:
      operationId: get-my-destinations
      summary: Selbst angelegte Zustellpunkte auflisten
      description: Mit diesem Request können alle selbst angelegten Zustellpunkte sowie deren Konfigurationen abgerufen werden.
      tags:
        - Destination Management
      security:
        - OAuth20:
            - 'destination:subscribe'
            - 'destination:manage'
      responses:
        '200':
          description: OK
          headers:
            Cache-Control:
              required: true
              description: Zustellpunkte dürfen aufgrund ihrer Schlüssel nicht gecached werden
              schema:
                type: string
                default: no-cache
                enum:
                  - no-cache
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DestinationList'
              examples:
                example-1:
                  $ref: '#/components/examples/DestinationList'
        '400':
          description: Bad Request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
    post:
      operationId: create-destination
      summary: Zustellpunkt anlegen
      description: Erstellung eines neuen Zustellpunktes mit Konfiguration zum Empfang von Anträgen
      tags:
        - Destination Management
      security:
        - OAuth20:
            - 'destination:manage'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateDestination'
            examples:
              example-1:
                $ref: '#/components/examples/CreateDestination'
      responses:
        '201':
          description: Created
          headers:
            Cache-Control:
              $ref: '#/paths/~1destinations/get/responses/200/headers/Cache-Control'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Destination'
              examples:
                example-1:
                  $ref: '#/components/examples/Destination'
        '400':
          description: Bad Request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
      callbacks:
        ApplicationSubmitted:
          '{$request.body#/callback}':
            post:
              requestBody:
                required: true
                content:
                  application/json:
                    schema:
                      $ref: '#/components/schemas/ListOfApplicationIds'
              responses:
                '202':
                  description: Accepted
  '/destinations/{destinationId}':
    parameters:
      - $ref: '#/components/parameters/destinationId'
    get:
      operationId: get-destination-info
      summary: Zustellpunkt abfragen RÜCKKANAL
      description: Ruft die öffentlich zugänglichen Informationen über einen Zustellpunkt ab.
      tags:
        - Destination Management
      security:
        - OAuth20:
            - 'destination:subscribe'
            - 'destination:send'
      responses:
        '200':
          description: OK
          headers:
            Cache-Control:
              $ref: '#/paths/~1destinations/get/responses/200/headers/Cache-Control'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Destination'
              examples:
                example-1:
                  $ref: '#/components/examples/Destination'
        '401':
          description: Unauthorized
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
    put:
      operationId: update-destination
      summary: Zustellpunkt aktualisieren
      tags:
        - Destination Management
      security:
        - OAuth20:
            - 'destination:manage'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateDestination'
            examples:
              example-1:
                value:
                  contactInformation:
                    legalName: Max
                    address: 'Musterstr. 31, 10000 Berlin, Deutschland'
                    phone: '+49170123456789'
                    email: max@mustermann.not
                    unit: Department XYZ
                  schemas:
                    - schemaURI: 'urn:fitko:schema-x'
                  callback: 'http://127.0.0.1:4010/voluptas'
                  encryptionKid: my-key-id-0xfff
                  publicKeys:
                    keys:
                      - kty: RSA
                        kid: my-key-id-0xfff
      responses:
        '200':
          description: OK
          headers:
            Cache-Control:
              $ref: '#/paths/~1destinations/get/responses/200/headers/Cache-Control'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Destination'
              examples:
                example-1:
                  $ref: '#/components/examples/Destination'
        '400':
          description: Bad Request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
    delete:
      operationId: delete-destination
      summary: Zustellpunkt löschen
      description: Löscht einen Zustellpunkt.
      tags:
        - Destination Management
      security:
        - OAuth20:
            - 'destination:manage'
      responses:
        '200':
          description: Zustellpunkt erfolgreich gelöscht.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmptyBody'
        '400':
          description: Bad Request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
  /cases:
    get:
      operationId: get-my-cases
      summary: Eigene Vorgänge auflisten RÜCKKANAL
      description: Mit diesem Request können alle eigenen Vorgänge abgerufen werden.
      tags:
        - Vorgänge
      security:
        - OAuth20:
            - 'destination:send'
            - 'destination:subscribe'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  caseIds:
                    type: array
                    minItems: 0
                    items:
                      type: string
                    description: Eine Auflistung aller eigenen Vorgangs-IDs
              examples:
                example-1:
                  value:
                    caseIds:
                      - 09b68658-9aa0-413b-b9ee-d782f082ce91
                      - 4c063554-b068-4586-a64b-c2fe3c1a7107
        '400':
          description: Bad Request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
  '/cases/{caseId}':
    parameters:
      - name: caseId
        in: path
        required: true
        schema:
          type: string
          format: uuid
          minLength: 32
          maxLength: 36
        description: Die UUID des Vorgangs
    get:
      operationId: get-event-log
      summary: Event Log zu Vorgang abrufen RÜCKKANAL
      tags:
        - Vorgänge
      security:
        - OAuth20:
            - 'destination:send'
            - 'destination:subscribe'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
              examples:
                example-1:
                  value:
                    todo: Hier SET ergänzen
        '400':
          description: Bad Request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
  /submissions:
    post:
      operationId: create-application
      summary: Antrag anlegen RÜCKKANAL
      description: Endpunkt zum Erstellen eines Antrags
      tags:
        - Application Transfer
      security:
        - OAuth20:
            - 'destination:send'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateApplication'
            examples:
              example-1:
                $ref: '#/components/examples/CreateApplication'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationCreated'
              examples:
                example-1:
                  $ref: '#/components/examples/ApplicationCreated'
        '400':
          description: Bad Request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '413':
          description: Request Entity Too Large
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
  '/submissions/{submissionId}':
    parameters:
      - $ref: '#/components/parameters/submissionId'
    get:
      operationId: get-application
      summary: Antrag abrufen
      tags:
        - Application Retrieval
      security:
        - OAuth20:
            - 'destination:manage'
            - 'destination:subscribe'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
              examples:
                example-1:
                  $ref: '#/components/examples/Application'
        '400':
          description: Bad Request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
    post:
      operationId: submit-application
      summary: Antrag einreichen RÜCKKANAL
      tags:
        - Application Transfer
      security:
        - OAuth20:
            - 'destination:send'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmitApplication'
            examples:
              example-1:
                value:
                  encryptedMetadata: eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.nlXGAufYH36IABDy0En0LXEhGfC20IZSSchs27ADalHpRoTZKfXhc7hcMk8Y9V8yTP0jYbmrq6NtEg-QS2O5TQFD9Hluhpb631PBgKjPXHYX1Y6iUcR1sXxSUPjePi8F8PcZUZuUJLnhz6myyc9scdAq9BXG2cDJVgkfLI8eZdrqnrY24Hh32_7d5OKLFSpSDrBlqfyQuY8Wbs2h8Wy4Z4hwT1aWDO7b-SqJA181hUbNcF_rR4Mze3Fdtu-3uOIQYgLBBRmN1ZHDLk0EKNCI4B8MyDKLGPoM0ZomV5lVwVWjAMRI4CgQkIQ9rnm-Adof-GbegQL3yJSoNIWRWgzCnZBYZ638QgPllCMVW3WvEVvsgj0Hj16PbofqXTQ5S73LINfP6FZawfC0yMrYjSV_N2L0Lkp2KI3BkJcy-PcFhBnhwu2IsJGAlyDRCnXdVqig8m5yLHuSMQTpLW69LzPEskfsjhnNDR-CEBZpicjMfc-4CL6U7E7YoGc_99DzE5U5._JfqyKH23GiKsnDW.ZtMMjZ3GgcgHss8qbFRhrjl4L0kAfbco-oXICkk.VBHJ00FyDTYjOA_OYfiz5g
                  encryptedData: eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.nlXGAufYH36IABDy0En0LXEhGfC20IZSSchs27ADalHpRoTZKfXhc7hcMk8Y9V8yTP0jYbmrq6NtEg-QS2O5TQFD9Hluhpb631PBgKjPXHYX1Y6iUcR1sXxSUPjePi8F8PcZUZuUJLnhz6myyc9scdAq9BXG2cDJVgkfLI8eZdrqnrY24Hh32_7d5OKLFSpSDrBlqfyQuY8Wbs2h8Wy4Z4hwT1aWDO7b-SqJA181hUbNcF_rR4Mze3Fdtu-3uOIQYgLBBRmN1ZHDLk0EKNCI4B8MyDKLGPoM0ZomV5lVwVWjAMRI4CgQkIQ9rnm-Adof-GbegQL3yJSoNIWRWgzCnZBYZ638QgPllCMVW3WvEVvsgj0Hj16PbofqXTQ5S73LINfP6FZawfC0yMrYjSV_N2L0Lkp2KI3BkJcy-PcFhBnhwu2IsJGAlyDRCnXdVqig8m5yLHuSMQTpLW69LzPEskfsjhnNDR-CEBZpicjMfc-4CL6U7E7YoGc_99DzE5U5._JfqyKH23GiKsnDW.ZtMMjZ3GgcgHss8qbFRhrjl4L0kAfbco-oXICkk.VBHJ00FyDTYjOA_OYfiz5g
                  contactInfo:
                    phone:
                      phonenumber: +49 42 123 4567
                      ringback: false
                      sms: true
                    email:
                      address: max.mustermann@example.com
                      pgp:
                        - '-----BEGIN PGP PUBLIC KEY BLOCK-----'
                        - 'Comment: Alice''s OpenPGP certificate'
                        - 'Comment: https://www.ietf.org/id/draft-bre-openpgp-samples-01.html'
                        - ''
                        - mDMEXEcE6RYJKwYBBAHaRw8BAQdArjWwk3FAqyiFbFBKT4TzXcVBqPTB3gmzlC/U
                        - b7O1u120JkFsaWNlIExvdmVsYWNlIDxhbGljZUBvcGVucGdwLmV4YW1wbGU+iJAE
                        - ExYIADgCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQTrhbtfozp14V6UTmPy
                        - MVUMT0fjjgUCXaWfOgAKCRDyMVUMT0fjjukrAPoDnHBSogOmsHOsd9qGsiZpgRnO
                        - dypvbm+QtXZqth9rvwD9HcDC0tC+PHAsO7OTh1S1TC9RiJsvawAfCPaQZoed8gK4
                        - OARcRwTpEgorBgEEAZdVAQUBAQdAQv8GIa2rSTzgqbXCpDDYMiKRVitCsy203x3s
                        - E9+eviIDAQgHiHgEGBYIACAWIQTrhbtfozp14V6UTmPyMVUMT0fjjgUCXEcE6QIb
                        - DAAKCRDyMVUMT0fjjlnQAQDFHUs6TIcxrNTtEZFjUFm1M0PJ1Dng/cDW4xN80fsn
                        - 0QEA22Kr7VkCjeAEC08VSTeV+QFsmz55/lntWkwYWhmvOgE=
                        - '=iIGO'
                        - '-----END PGP PUBLIC KEY BLOCK-----'
                    fink:
                      address: mx43oqirumxoi43womtcq
                    elster:
                      address: slkdfjlj4lwekjfwlea23
                      server: elster-01.example.com
                    fitconnect:
                      schemas:
                        - schemaURI: 'urn:xoev-de:bmk:standard:xbau_2.2#baugenehmigung.bescheid.0404'
                          mimeType: application/json
                      publicKey:
                        kty: RSA
                        use: enc
                        kid: 3-wY7cjlD2fKD62ws3AbREgQMHBb_l-O6NOfpOyYOcg
                        alg: RSA-OAEP-256
                        x5c:
                          - MIIE6jCCAtKgAwIBAgIGAXk9tL3TMA0GCSqGSIb3DQEBCwUAMDYxNDAyBgNVBAMMKzMtd1k3Y2psRDJmS0Q2MndzM0FiUkVnUU1IQmJfbC1PNk5PZnBPeVlPY2cwHhcNkMjEwNTA1MTgwNTI1WhcNMjIwMzAxMTgwNTI1WjA2MTQwMgYDVQQDDCszLXdZN2NqbEQyZktENjJ3czNBYlJFZ1FNSEJiX2wtTzZOT2ZwT3lZT2NnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmpqgL1HOskjIMvsS2YVneGlW0rlALmHMbVcguoDbVB1dVag7Bd20k+cVNSO4jaV3qSbZ9vyxtkFs59BmdlMFIq/oow8OEJCo7TC2g1qjHszZQJsoNXn8Xo5cB25aM/nqrRMP7aHJ7B0QeKhwI+Bf5qsOdMcICapqw5TW2KiW0iXBmWqSqfgfOayEpTQNoIkc1sJSyUp2/jwQNOuLnZvB8tor5dw4OY/F5IpjLYXFO642khadiKH75spQ+7in2vpmgqkpA3vtMNa212YWKmJG0/8i0nyOWL/LWjMoql67SXIXzjzvhTbChOyswr9PtXm7TF20l5tfYnvrE+t1t17rq/vk6vCEYuIcTe12bQzdJdqBZyeEcp6Pg9yL24wdowygZZSWPUSry+n23auNqETBj72pZxeaDJ5vHdrotPXkuCI3Goavt9VnBUlIoJgXF8TafsAFUogdXpAbUi9hFsWTbdMYvjp8veWNuVTithU+KN9XyJRMzTsmHmyU2gNeqnvD/YLzdhtJD8rTAm0GxkxZon19tEf8QUmwRXK7pLMbBm/k/seNEIAReg+kkTPCduj9mgGZ5+JADauE+UZZO9EaBcxAYa0B8/ax8pkt8BBdHJ6i/JEpOPD/wS4LyNqtlRF6sNajRd+xdMDWj06EhmpNnNq3CK1qwdC1HW6KPcXhr0kCAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAD0ORw1nVF6bcLW7uBWsV2h6wPHFHR+Dagqch9cfZKJQI3Ci4GAClGFuD23UO7ZyqFVQh39HXtL4GwQ5pWfJ08lbekqxIGmDysejH2EeaHtIPqJ2HakXPiuKJ2sNECZ87172bgcLV7oHbpQP01oJSvrH1y4Ow5nmQ2FuFzui4jG0qoUF/RScbCgPdRb4RYA+GOlowNrkoFeI3Xo9/p6pcnooOttf3g9gnDvwSAArJCzXZAE+yAe4niRo4QdCDt2bcehkSLnSh0zoRwHPusYzKAaBVmDgoE5q1t1ctuiKOrEUvLb6iXHebLrOoocxo57WPmo6SDKwK/fPLYR9tV20joRTsv15N106MAtAjKQAC1u8lwRykEij0zr+ZeovxFF1m9SFPDmBMpQjmlrwctQWx+DCoXCK9BHQJBEX2Hl1o4PDsAWuOBYHGsfwNx6VuRI/3uLGO3fPyRj6dIE2dXu3+J0zQg2Xmqaw3Eqs9GTveFjavRRkGn02B4uVDl3tf5rTAmgYFf1yEaiFzNBBrd4ZP9bswtEYrg8iPWuRvF1M8apFmZ/wsMaXFonzf8y9ECKsz0wq2NH+YQ9WXMCAUY1yXLcVSTM8lhjfbkPUaNa3LZ1haExGxkeSI2BXeT7n+jlMdeN3jxqlgviUSjYy5Kco91FGkYspMhfQVVNF3vw3Faes=
                    webpush:
                      pushSubscription:
                        endpoint: 'https://updates.push.services.mozilla.com/wpush/v1/aaabbbccc'
                        expirationTime: 1519211809934
                      p256dh: BNP2cOO5bM6sPCgVeF1dkR_3mfwq3_IGO5olc1aVLASBahRqrYlcJWjTgPdtInf_hDH6wAfYo4w9sadOqyDY74Q
                      auth: he930AQXRmTpTWhTyksPiA
                  webhook:
                    callbackUrl: 'https://onlinedienst.example.com/send/callback/here'
                    secret: TpTWhTyksPiAhe930AQXRm
      responses:
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
              examples:
                example-1:
                  $ref: '#/components/examples/Application'
        '400':
          description: Bad Request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '413':
          description: Request Entity Too Large
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '415':
          description: Unsupported Media Type (wrong content type sent)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Gesamtantrag unvollständig. Angekündigte Anlagen noch nicht hochgeladen.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
    put:
      operationId: acknowledge-application
      summary: Abholung des Antrags bestätigen
      tags:
        - Application Retrieval
      security:
        - OAuth20:
            - 'destination:subscribe'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmptyBody'
            examples:
              example-1:
                $ref: '#/components/examples/EmptyBody'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmptyBody'
              examples:
                example-1:
                  $ref: '#/components/examples/EmptyBody'
        '400':
          description: Bad Request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
  '/submissions/{submissionId}/attachments/{attachmentId}':
    parameters:
      - $ref: '#/components/parameters/submissionId'
      - $ref: '#/components/parameters/attachmentId'
    get:
      operationId: get-application-attachment
      summary: Anhang abrufen
      description: Ruft einen Anhang des Antrags ab.
      tags:
        - Application Retrieval
      security:
        - OAuth20:
            - 'destination:manage'
            - 'destination:subscribe'
      responses:
        '200':
          description: OK
          content:
            application/jose:
              schema:
                $ref: '#/components/schemas/Attachment'
              examples:
                example-1:
                  $ref: '#/components/examples/EncryptedMessage'
        '400':
          description: Bad Request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
    put:
      operationId: add-application-attachment
      summary: Anhang hinzufügen
      description: Upload des in announcedContentStructure angekündigten Anhangs als JSON Web Encryption unter der mitgeteilten UUID.
      tags:
        - Application Transfer
      security:
        - OAuth20:
            - 'destination:send'
      requestBody:
        required: true
        content:
          application/jose:
            schema:
              $ref: '#/components/schemas/CreateAttachment'
            examples:
              example-1:
                $ref: '#/components/examples/EncryptedMessage'
      responses:
        '201':
          description: Anhang erfolgreich hinzugefügt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmptyBody'
        '400':
          description: Bad Request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '413':
          description: Request Entity Too Large
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '415':
          description: Unsupported Media Type (wrong content type sent)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
  /info:
    get:
      operationId: get-info
      summary: Rufe technische Serviceinformationen ab
      description: Für Debugging oder Informationszwecke angebotener Endpunkt
      tags:
        - Technical
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Info'
              examples:
                example-1:
                  $ref: '#/components/examples/Info'
  /status:
    get:
      operationId: get-status
      summary: Rufe Servicestatus ab
      description: Nützlich für Monitoring und Debugging
      tags:
        - Technical
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Status'
              example:
                status: UP
components:
  securitySchemes:
    OAuth20:
      description: 'Authentifizierungsmethode, um den Zugriff nach RFC8725 zu autorisieren'
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: 'https://sender-test-token.fiep-poc.de/auth/realms/test/protocol/openid-connect/token'
          scopes:
            'destination:send': Erlaubt das Versenden von Anträgen an Zustellpunkte
            'destination:manage': Erlaubt die Verwaltung der eigenen Zustellpunkte
            'destination:susbcribe': Erlaubt die Abholung von Anträgen und Dokumenten (Anhängen)
  parameters:
    submissionId:
      name: submissionId
      in: path
      required: true
      schema:
        type: string
        format: uuid
        minLength: 32
        maxLength: 36
      description: Die UUID des Antrags
    destinationId:
      name: destinationId
      in: path
      required: true
      schema:
        type: string
        format: uuid
        minLength: 32
        maxLength: 36
      description: Die UUID des Zustellpunktes
    attachmentId:
      name: attachmentId
      in: path
      required: true
      schema:
        type: string
        format: uuid
        minLength: 32
        maxLength: 36
      description: 'Die UUID des Anhangs. Wird vom Client erstellt, um auf diese z.B. in den Antragsfachdaten zu referenzieren.'
  schemas:
    AnnouncedContentStructure:
      type: object
      required:
        - data
        - attachments
      properties:
        data:
          type: boolean
        attachments:
          type: array
          minItems: 0
          items:
            type: string
            format: uuid
            minLength: 32
            maxLength: 36
    Application:
      title: Antrag
      description: Die Repräsentation eines Antrags
      type: object
      required:
        - destinationId
        - submissionId
        - attachments
        - currentStatus
      properties:
        destinationId:
          type: string
          format: uuid
          minLength: 32
          maxLength: 36
        submissionId:
          description: ID des Antrags
          type: string
          format: uuid
          minLength: 32
          maxLength: 36
        attachments:
          type: array
          items:
            type: string
            format: uuid
            minLength: 32
            maxLength: 36
        currentStatus:
          $ref: '#/components/schemas/ApplicationState'
        encryptedMetadata:
          title: JWE Encrypted Message
          description: 'Content that is encrypted with JSON Web Encryption Compact Serialization, RFC 7516'
          type: string
          pattern: '^[a-zA-Z0-9-_=.]+$'
        encryptedData:
          title: JWE Encrypted Message
          description: 'Content that is encrypted with JSON Web Encryption Compact Serialization, RFC 7516'
          type: string
          pattern: '^[a-zA-Z0-9-_=.]+$'
        statusHistory:
          type: array
          items:
            $ref: '#/components/schemas/StateTransition'
        announcedContentStructure:
          $ref: '#/components/schemas/AnnouncedContentStructure'
    ApplicationCreated:
      title: Erstellter Antrag
      description: Antwort bei Erzeugen eines Antrags für einen Zustellpunkt.
      type: object
      required:
        - submissionId
        - caseId
        - destinationId
      properties:
        destinationId:
          description: ID der Destination
          type: string
          format: uuid
          minLength: 32
          maxLength: 36
        caseId:
          description: Zum Antrag gehörige Vorgangs-ID (vom Zustelldienst neu vergeben oder im Request angegeben).
          type: string
          format: uuid
          minLength: 32
          maxLength: 36
        submissionId:
          description: ID des Antrags
          type: string
          format: uuid
          minLength: 32
          maxLength: 36
    ApplicationSchema:
      title: Fachdatenschema
      description: 'Referenz auf ein Schema, das die Struktur der Fachdaten eines Antrags beschreibt.'
      type: object
      required:
        - schemaURI
      additionalProperties: false
      properties:
        schemaURI:
          type: string
          format: uri
          description: 'URI (URL oder URN) des Fachdaten-Schemas. Wird hier eine URL verwendet, sollte das Schema unter der angegebenen URL abrufbar sein. Eine Verfügbarkeit des Schemas unter der angegebenen URL darf jedoch nicht vorausgesetzt werden.'
        mimeType:
          type: string
          description: Mimetype (z.B. application/json oder application/xml) des referenzierten Schemas (z.B. XSD- oder JSON-Schema).
    ApplicationState:
      title: Antragsstatus
      description: |
        Beschreibt den Zustand eines Antrags: - `incomplete`: Der Antrag wurde angelegt und die Fachdaten/Dokumente können hinterlegt werden. - `queued`: Die Übertragung wurde vollständig eingeliefert, akzeptiert und sobald möglich weitergeleitet. - `forwarded`: Die Übertragung an die direkt angebundene Destination wurde abgeschlossen. - `delivered`: Der Erhalt des Antrags und aller Unterlagen wurde vom vorgesehenen Endpunkt bestätigt.
      type: string
      enum:
        - incomplete
        - queued
        - forwarded
        - delivered
    Attachment:
      title: Anhang
      description: Verschlüsselter Anhang im Format JSON Web Encryption (JWE) laut RFC7516
      type: string
      pattern: '^[a-zA-Z0-9-_=.]+$'
    ContactInformation:
      title: Kontakt
      description: Angaben zum Ansprechpartner des Zustellpunktes
      type: object
      additionalProperties: false
      required:
        - legalName
        - address
        - phone
        - email
      properties:
        legalName:
          type: string
          description: Juristischer Name der verantwortlichen Organisation
        address:
          type: string
          description: Adresse der verantwortlichen Organisation
        phone:
          type: string
          description: Telefonnummer der verantwortlichen Stelle
        email:
          type: string
          description: 'Funktionspostfachadresse der verantwortlichen Stelle. Falls nicht vorhanden, kann auch eine personalisierte Adresse des Supportverantwortlichen eingetragen werden.'
        unit:
          type: string
          description: 'Verantwortliche Untereinheit (Abteilung, Referat, etc.) der Organisation. Kann zur Vereinfachung von Klärungsfragen angegeben werden.'
    CreateApplication:
      title: Objekt zum Erzeugen eines Antrags
      description: 'Metadaten eines Antrags noch ohne ID, zum Anlegen eines neuen Antrags.'
      type: object
      additionalProperties: false
      required:
        - destinationId
        - announcedContentStructure
      properties:
        destinationId:
          type: string
          format: uuid
          minLength: 32
          maxLength: 36
        caseId:
          description: 'Optionale Vorgangs-ID. Wird keine Vorgangs-ID angegeben, wird durch den Zustelldienst ein neuer Vorgang eröffnet und eine neue Vorgangs-ID zugeteilt.'
          type: string
          format: uuid
          minLength: 32
          maxLength: 36
        announcedContentStructure:
          $ref: '#/components/schemas/AnnouncedContentStructure'
    CreateAttachment:
      title: Objekt zum Erzeugen eines Dokuments
      description: 'Repräsentation eines Dokumentes, das mit einem Antrag verknüpft wird. JSON Web Encryption Compact Serialization, RFC 7516'
      type: string
      minLength: 1
      pattern: '^[a-zA-Z0-9-_=.]+$'
    CreateDestination:
      title: Objekt zum Erzeugen eines Zustellpunkts
      description: 'Notwendige Struktur, um einen Zustellpunkt zu hinterlegen.'
      type: object
      additionalProperties: false
      required:
        - contactInformation
        - schemas
        - callback
        - encryptionKid
        - publicKeys
      properties:
        contactInformation:
          $ref: '#/components/schemas/ContactInformation'
        schemas:
          uniqueItems: true
          minItems: 1
          type: array
          description: Auflistung aller unterstützten Antragsschemata des Zustellpunktes.
          items:
            $ref: '#/components/schemas/ApplicationSchema'
        callback:
          type: string
          minLength: 1
          format: uri
          description: 'Öffentlich erreichbare Callbackadresse, um Benachrichtigungen beim Vorliegen neuer Anträge zu empfangen.'
        encryptionKid:
          type: string
          maxLength: 64
          description: Öffentlicher Teil des Verschlüsselungsschlüssels der Destination. Ist im Attribut `publicKeys` abrufbar.
        publicKeys:
          $ref: '#/components/schemas/JWKS'
    Destination:
      title: Zustellpunkt
      description: Repräsentation eines Zustellpunktes mit den öffentlich einsehbaren Attributen
      type: object
      required:
        - destinationId
        - schemas
        - encryptionKid
        - publicKeys
        - contactInformation
        - callback
        - replyChannel
      properties:
        destinationId:
          type: string
          minLength: 32
          format: uuid
          maxLength: 36
          description: Identifikator des Zustellpunktes
        schemas:
          uniqueItems: true
          minItems: 1
          type: array
          description: Auflistung aller unterstützten Antragsschemata des Zustellpunktes.
          items:
            $ref: '#/components/schemas/ApplicationSchema'
        encryptionKid:
          type: string
          maxLength: 64
          description: Öffentlicher Teil des Verschlüsselungsschlüssels der Destination. Ist im Attribut `publicKeys` abrufbar.
        publicKeys:
          $ref: '#/components/schemas/JWKS'
        contactInformation:
          $ref: '#/components/schemas/ContactInformation'
        callback:
          type: string
          minLength: 1
          format: uri
          description: 'Öffentlich erreichbare Callbackadresse, um Benachrichtigungen beim Vorliegen neuer Anträge zu empfangen.'
        replyChannel:
          description: Vom antragsbearbeitenden System unterstützte Rückkanäle
          type: array
          items:
            type: string
            enum:
              - phone
              - sms
              - email
              - fink
              - elster
              - fitconnect
              - webpush
    DestinationList:
      title: Liste selbst angelegter Zustellpunkte
      type: object
      required:
        - destinations
      properties:
        destinations:
          type: array
          minItems: 0
          items:
            $ref: '#/components/schemas/Destination'
          description: Eine Auflistung aller selbst angelegten Zustellpunkte
    EmptyBody:
      title: Leeres JSON-Objekt
      type: object
      additionalProperties: false
    Error:
      title: Fehler
      type: object
      description: Der Inhalt von HTTP Responses bei Fehlern nach RFC7807.
      required:
        - type
        - title
        - status
      properties:
        type:
          type: string
        title:
          type: string
        status:
          type: integer
          minimum: 100
          maximum: 599
        detail:
          type: string
        instance:
          type: string
          format: uri
    Info:
      title: Technisches Serviceinformationen
      type: object
      required:
        - version
      properties:
        version:
          $ref: '#/components/schemas/Version'
    JWK:
      title: JSON Web Key (JWK)
      type: object
      description: JSON Web Key - RFC 7517
      additionalProperties: false
      required:
        - kty
        - kid
      properties:
        kty:
          type: string
          description: Key Type
          enum:
            - EC
            - RSA
            - oct
            - OKP
        use:
          type: string
          description: Public Key Use
          enum:
            - sig
            - enc
        key_ops:
          type: array
          description: Key Operations
          items:
            type: string
            enum:
              - sign
              - verify
              - encrypt
              - decrypt
              - wrapKey
              - unwrapKey
              - deriveKey
              - deriveBits
        alg:
          type: string
          description: Algorithm
        kid:
          description: Key ID
          type: string
        x5u:
          type: string
          description: X.509 URL
          format: uri
        x5c:
          description: X.509 Certificate Chain
          type: array
          items:
            type: string
        x5t:
          type: string
        x5t#S256:
          type: string
    JWKS:
      title: JSON Web Key Set (JWKS)
      description: 'JWKS nach https://datatracker.ietf.org/doc/html/rfc7517#section-5'
      type: object
      required:
        - keys
      properties:
        keys:
          type: array
          uniqueItems: true
          minItems: 1
          items:
            $ref: '#/components/schemas/JWK'
    ListOfApplicationIds:
      title: Liste abholbereiter Anträge
      description: 'Liste von Destination-IDs aller Anträge, die für den Zustellpunkt zur Abholung bereitstehen'
      type: array
      minItems: 1
      items:
        type: string
        format: uuid
        minLength: 32
        maxLength: 36
    StateTransition:
      title: Statusübergang
      description: Stellt einen Statusübergang eines Antrags dar.
      type: object
      required:
        - sourceState
        - targetState
        - timestamp
      additionalProperties: false
      properties:
        sourceState:
          $ref: '#/components/schemas/ApplicationState'
        targetState:
          $ref: '#/components/schemas/ApplicationState'
        details:
          type: string
        timestamp:
          type: string
          format: date-time
    Status:
      title: Servicestatus
      type: object
      required:
        - status
      properties:
        status:
          type: string
    SubmitApplication:
      title: Antrag absenden
      description: Datenstruktur für den Abschluss eines Antrags.
      type: object
      required:
        - encryptedMetadata
      properties:
        encryptedMetadata:
          description: Verschlüsselte Antragsmetadaten im Format JSON Web Encryption (JWE) laut RFC7516
          type: string
          pattern: '^[a-zA-Z0-9-_=.]+$'
        encryptedData:
          description: Verschlüsselte Antragsdaten im Format JSON Web Encryption (JWE) laut RFC7516
          type: string
          pattern: '^[a-zA-Z0-9-_=.]+$'
        contactInfo:
          description: Kontaktmöglichkeiten der anstragstellenden Person durch die antragsbearbeitenden Behörde (-> in Metadata verschieben!)
          type: object
          properties:
            phone:
              description: Telefonnummer der anstragstellenden Person
              type: object
              required:
                - phonenumber
                - sms
                - ringback
              properties:
                phonenumber:
                  description: 'Telefonnummer im Format E.123, z.B. "+49 42 123 4567"'
                  type: string
                ringback:
                  description: Einverständniserklärung zur telefonischen Rückfrage (Sprachkommunikation)
                  type: boolean
                sms:
                  description: Einverständniserklärung zum Empfang von SMS
                  type: boolean
            email:
              description: Informatione zur Mail-Adresse der anstragstellenden Person
              type: object
              required:
                - address
              properties:
                address:
                  description: Mailadresse der anstragstellenden Person
                  type: string
                  format: email
                pgp:
                  description: PGP-Key der anstragstellenden Person
                  type: array
                  items:
                    type: string
            fink:
              description: FINK-Postfach der anstragstellenden Person
              type: object
              required:
                - address
              properties:
                address:
                  description: FINK-Postfachadresse
                  type: string
            elster:
              description: Elster-Postfach der anstragstellenden (juristischen) Person
              type: object
              required:
                - address
                - server
              properties:
                address:
                  description: Elster-Postfachadresse
                  type: string
                server:
                  description: zuständiger Elster-Postfachserver
                  type: string
                  format: host
            fitconnect:
              description: 'Maschinenlesbarer Rückkanal via FIT-Connect. Rückkanalnachrichten können vom Fachverfahren nur eingereicht werden, wenn der Onlinedienst einen Webhook definiert hat. Andernfalls werden diese vom Zusteldienst abgelehnt.'
              type: object
              required:
                - schemas
                - publicKey
              properties:
                schemas:
                  uniqueItems: true
                  minItems: 1
                  type: array
                  description: Auflistung aller unterstützten Antragsschemata des Onlinedienstes.
                  items:
                    $ref: '#/components/schemas/ApplicationSchema'
                publicKey:
                  $ref: '#/components/schemas/JWK'
            webpush:
              description: 'Konfiguration für Push-Notifications an das Endgerät der anstragstellenden Person, siehe https://developer.mozilla.org/en-US/docs/Web/API/Push_API'
              type: object
              required:
                - pushSubscription
                - p256dh
                - auth
              properties:
                pushSubscription:
                  description: 'PushSubscription-Objekt, siehe https://developer.mozilla.org/en-US/docs/Web/API/PushSubscription'
                  required:
                    - endpoint
                    - expirationTime
                  properties:
                    endpoint:
                      type: string
                    expirationTime:
                      type: integer
                p256dh:
                  type: string
                auth:
                  type: string
        webhook:
          description: 'Callback-Adresse, um über Änderungen des Vorgangsstatus informiert zu werden.'
          type: object
          required:
            - callbackUrl
            - secret
          properties:
            callbackUrl:
              description: Callback-URL
              type: string
              format: uri
              example: 'https://onlinedienst.example.com/send/callback/here'
            secret:
              description: Secret zur Authentifizierung des Zustelldienst (Callback wird an `callbackUrl?s=secret` geschickt)
              type: string
              minLength: 16
              maxLength: 64
    UpdateDestination:
      title: Aktualisierung eines Zustellpunktes
      description: 'Struktur mit Attributen, die aktualisiert werden sollen.'
      type: object
      additionalProperties: false
      required:
        - contactInformation
        - schemas
        - callback
        - encryptionKid
        - publicKeys
      properties:
        contactInformation:
          $ref: '#/components/schemas/ContactInformation'
        schemas:
          uniqueItems: true
          minItems: 1
          type: array
          description: Auflistung aller unterstützten Antragsschemata des Zustellpunktes.
          items:
            $ref: '#/components/schemas/ApplicationSchema'
        callback:
          type: string
          minLength: 1
          format: uri
          description: 'Öffentlich erreichbare Callbackadresse, um Benachrichtigungen beim Vorliegen neuer Anträge zu empfangen.'
        encryptionKid:
          type: string
          maxLength: 64
          description: Öffentlicher Teil des Verschlüsselungsschlüssels der Destination. Ist im Attribut `publicKeys` abrufbar.
        publicKeys:
          $ref: '#/components/schemas/JWKS'
    Version:
      title: Serviceversion
      type: object
      required:
        - major
        - minor
        - patch
      properties:
        major:
          type: integer
        minor:
          type: integer
        patch:
          type: integer
  examples:
    Application:
      value:
        destinationId: 879ee109-a690-4db8-ab32-424284184d79
        submissionId: ce75a6b8-d72f-4b94-b09e-af6be35bc2ae
        attachments:
          - 879ee109-a690-4db8-ab32-424284184d7d
          - 2046f9f1-dc89-4440-9c24-c76a8f40d668
        encryptedMetadata: eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.nlXGAufYH36IABDy0En0LXEhGfC20IZSSchs27ADalHpRoTZKfXhc7hcMk8Y9V8yTP0jYbmrq6NtEg-QS2O5TQFD9Hluhpb631PBgKjPXHYX1Y6iUcR1sXxSUPjePi8F8PcZUZuUJLnhz6myyc9scdAq9BXG2cDJVgkfLI8eZdrqnrY24Hh32_7d5OKLFSpSDrBlqfyQuY8Wbs2h8Wy4Z4hwT1aWDO7b-SqJA181hUbNcF_rR4Mze3Fdtu-3uOIQYgLBBRmN1ZHDLk0EKNCI4B8MyDKLGPoM0ZomV5lVwVWjAMRI4CgQkIQ9rnm-Adof-GbegQL3yJSoNIWRWgzCnZBYZ638QgPllCMVW3WvEVvsgj0Hj16PbofqXTQ5S73LINfP6FZawfC0yMrYjSV_N2L0Lkp2KI3BkJcy-PcFhBnhwu2IsJGAlyDRCnXdVqig8m5yLHuSMQTpLW69LzPEskfsjhnNDR-CEBZpicjMfc-4CL6U7E7YoGc_99DzE5U5._JfqyKH23GiKsnDW.ZtMMjZ3GgcgHss8qbFRhrjl4L0kAfbco-oXICkk.VBHJ00FyDTYjOA_OYfiz5g
        encryptedData: eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.nlXGAufYH36IABDy0En0LXEhGfC20IZSSchs27ADalHpRoTZKfXhc7hcMk8Y9V8yTP0jYbmrq6NtEg-QS2O5TQFD9Hluhpb631PBgKjPXHYX1Y6iUcR1sXxSUPjePi8F8PcZUZuUJLnhz6myyc9scdAq9BXG2cDJVgkfLI8eZdrqnrY24Hh32_7d5OKLFSpSDrBlqfyQuY8Wbs2h8Wy4Z4hwT1aWDO7b-SqJA181hUbNcF_rR4Mze3Fdtu-3uOIQYgLBBRmN1ZHDLk0EKNCI4B8MyDKLGPoM0ZomV5lVwVWjAMRI4CgQkIQ9rnm-Adof-GbegQL3yJSoNIWRWgzCnZBYZ638QgPllCMVW3WvEVvsgj0Hj16PbofqXTQ5S73LINfP6FZawfC0yMrYjSV_N2L0Lkp2KI3BkJcy-PcFhBnhwu2IsJGAlyDRCnXdVqig8m5yLHuSMQTpLW69LzPEskfsjhnNDR-CEBZpicjMfc-4CL6U7E7YoGc_99DzE5U5._JfqyKH23GiKsnDW.ZtMMjZ3GgcgHss8qbFRhrjl4L0kAfbco-oXICkk.VBHJ00FyDTYjOA_OYfiz5g
        currentStatus: queued
        statusHistory:
          - sourceState: incomplete
            targetState: queued
            timestamp: '2021-01-30T08:30:00Z'
        announcedContentStructure:
          data: true
          attachments:
            - 879ee109-a690-4db8-ab32-424284184d7d
            - 2046f9f1-dc89-4440-9c24-c76a8f40d668
        contactInfo:
          phone:
            phonenumber: +49 42 123 4567
            ringback: false
            sms: true
          email:
            address: max.mustermann@example.com
            pgp:
              - '-----BEGIN PGP PUBLIC KEY BLOCK-----'
              - 'Comment: Alice''s OpenPGP certificate'
              - 'Comment: https://www.ietf.org/id/draft-bre-openpgp-samples-01.html'
              - ''
              - mDMEXEcE6RYJKwYBBAHaRw8BAQdArjWwk3FAqyiFbFBKT4TzXcVBqPTB3gmzlC/U
              - b7O1u120JkFsaWNlIExvdmVsYWNlIDxhbGljZUBvcGVucGdwLmV4YW1wbGU+iJAE
              - ExYIADgCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQTrhbtfozp14V6UTmPy
              - MVUMT0fjjgUCXaWfOgAKCRDyMVUMT0fjjukrAPoDnHBSogOmsHOsd9qGsiZpgRnO
              - dypvbm+QtXZqth9rvwD9HcDC0tC+PHAsO7OTh1S1TC9RiJsvawAfCPaQZoed8gK4
              - OARcRwTpEgorBgEEAZdVAQUBAQdAQv8GIa2rSTzgqbXCpDDYMiKRVitCsy203x3s
              - E9+eviIDAQgHiHgEGBYIACAWIQTrhbtfozp14V6UTmPyMVUMT0fjjgUCXEcE6QIb
              - DAAKCRDyMVUMT0fjjlnQAQDFHUs6TIcxrNTtEZFjUFm1M0PJ1Dng/cDW4xN80fsn
              - 0QEA22Kr7VkCjeAEC08VSTeV+QFsmz55/lntWkwYWhmvOgE=
              - '=iIGO'
              - '-----END PGP PUBLIC KEY BLOCK-----'
          fink:
            address: mx43oqirumxoi43womtcq
          elster:
            address: slkdfjlj4lwekjfwlea23
            server: elster-01.example.com
          fitconnect:
            schemas:
              - schemaURI: 'urn:xoev-de:bmk:standard:xbau_2.2#baugenehmigung.bescheid.0404'
                mimeType: application/json
            publicKey:
              kty: RSA
              use: enc
              kid: 3-wY7cjlD2fKD62ws3AbREgQMHBb_l-O6NOfpOyYOcg
              alg: RSA-OAEP-256
              x5c:
                - MIIE6jCCAtKgAwIBAgIGAXk9tL3TMA0GCSqGSIb3DQEBCwUAMDYxNDAyBgNVBAMMKzMtd1k3Y2psRDJmS0Q2MndzM0FiUkVnUU1IQmJfbC1PNk5PZnBPeVlPY2cwHhcNkMjEwNTA1MTgwNTI1WhcNMjIwMzAxMTgwNTI1WjA2MTQwMgYDVQQDDCszLXdZN2NqbEQyZktENjJ3czNBYlJFZ1FNSEJiX2wtTzZOT2ZwT3lZT2NnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmpqgL1HOskjIMvsS2YVneGlW0rlALmHMbVcguoDbVB1dVag7Bd20k+cVNSO4jaV3qSbZ9vyxtkFs59BmdlMFIq/oow8OEJCo7TC2g1qjHszZQJsoNXn8Xo5cB25aM/nqrRMP7aHJ7B0QeKhwI+Bf5qsOdMcICapqw5TW2KiW0iXBmWqSqfgfOayEpTQNoIkc1sJSyUp2/jwQNOuLnZvB8tor5dw4OY/F5IpjLYXFO642khadiKH75spQ+7in2vpmgqkpA3vtMNa212YWKmJG0/8i0nyOWL/LWjMoql67SXIXzjzvhTbChOyswr9PtXm7TF20l5tfYnvrE+t1t17rq/vk6vCEYuIcTe12bQzdJdqBZyeEcp6Pg9yL24wdowygZZSWPUSry+n23auNqETBj72pZxeaDJ5vHdrotPXkuCI3Goavt9VnBUlIoJgXF8TafsAFUogdXpAbUi9hFsWTbdMYvjp8veWNuVTithU+KN9XyJRMzTsmHmyU2gNeqnvD/YLzdhtJD8rTAm0GxkxZon19tEf8QUmwRXK7pLMbBm/k/seNEIAReg+kkTPCduj9mgGZ5+JADauE+UZZO9EaBcxAYa0B8/ax8pkt8BBdHJ6i/JEpOPD/wS4LyNqtlRF6sNajRd+xdMDWj06EhmpNnNq3CK1qwdC1HW6KPcXhr0kCAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAD0ORw1nVF6bcLW7uBWsV2h6wPHFHR+Dagqch9cfZKJQI3Ci4GAClGFuD23UO7ZyqFVQh39HXtL4GwQ5pWfJ08lbekqxIGmDysejH2EeaHtIPqJ2HakXPiuKJ2sNECZ87172bgcLV7oHbpQP01oJSvrH1y4Ow5nmQ2FuFzui4jG0qoUF/RScbCgPdRb4RYA+GOlowNrkoFeI3Xo9/p6pcnooOttf3g9gnDvwSAArJCzXZAE+yAe4niRo4QdCDt2bcehkSLnSh0zoRwHPusYzKAaBVmDgoE5q1t1ctuiKOrEUvLb6iXHebLrOoocxo57WPmo6SDKwK/fPLYR9tV20joRTsv15N106MAtAjKQAC1u8lwRykEij0zr+ZeovxFF1m9SFPDmBMpQjmlrwctQWx+DCoXCK9BHQJBEX2Hl1o4PDsAWuOBYHGsfwNx6VuRI/3uLGO3fPyRj6dIE2dXu3+J0zQg2Xmqaw3Eqs9GTveFjavRRkGn02B4uVDl3tf5rTAmgYFf1yEaiFzNBBrd4ZP9bswtEYrg8iPWuRvF1M8apFmZ/wsMaXFonzf8y9ECKsz0wq2NH+YQ9WXMCAUY1yXLcVSTM8lhjfbkPUaNa3LZ1haExGxkeSI2BXeT7n+jlMdeN3jxqlgviUSjYy5Kco91FGkYspMhfQVVNF3vw3Faes=
          webpush:
            pushSubscription:
              endpoint: 'https://updates.push.services.mozilla.com/wpush/v1/aaabbbccc'
              expirationTime: 1519211809934
            p256dh: BNP2cOO5bM6sPCgVeF1dkR_3mfwq3_IGO5olc1aVLASBahRqrYlcJWjTgPdtInf_hDH6wAfYo4w9sadOqyDY74Q
            auth: he930AQXRmTpTWhTyksPiA
        webhook:
          callbackUrl: 'https://onlinedienst.example.com/send/callback/here'
          secret: TpTWhTyksPiAhe930AQXRm
    ApplicationCreated:
      value:
        destinationId: 879ee109-a690-4db8-ab32-424284184d7d
        submissionId: ce75a6b8-d72f-4b94-b09e-af6be35bc2ae
        caseId: 4c063554-b068-4586-a64b-c2fe3c1a7107
    ApplicationState:
      value:
        status: queued
    CreateApplication:
      value:
        destinationId: 879ee109-a690-4db8-ab32-424284184d7d
        caseId: 4c063554-b068-4586-a64b-c2fe3c1a7107
        announcedContentStructure:
          data: true
          attachments:
            - 123ee109-a690-4db8-ab32-424284184d7d
            - 456ee109-a690-4db8-ab32-424284184d7d
    CreateDestination:
      value:
        contactInformation:
          legalName: Max
          address: 'Musterstr. 31, 10000 Berlin, Deutschland'
          phone: '+49170123456789'
          email: max@mustermann.not
          unit: Department XYZ
        schemas:
          - schemaURI: 'urn:fitko:schema-x'
        callback: 'http://127.0.0.1:4010/voluptas'
        encryptionKid: my-key-id-0xfff
        publicKeys:
          keys:
            - kty: RSA
              kid: my-key-id-0xfff
    Destination:
      value:
        destinationId: 7881dba9-4055-4854-8b6d-11ea5b7f3047
        schemas:
          - schemaURI: 'urn:fitko:schema-x'
        encryptionKid: my-key-id-0xfff
        publicKeys:
          keys:
            - kty: RSA
              kid: my-key-id-0xfff
        contactInformation:
          legalName: Max
          address: 'Musterstr. 31, 10000 Berlin, Deutschland'
          phone: '+49170123456789'
          email: max@mustermann.not
          unit: Department XYZ
        callback: 'http://127.0.0.1:4010/voluptas'
        replyChannel:
          - fink
          - fitconnect
          - email
          - sms
    DestinationList:
      value:
        destinations:
          - destinationId: de735e92-8ced-4298-a021-5f4aa124cc47
            schemas:
              - schemaURI: 'urn:fitko:schema-x'
            encryptionKid: my-key-id-0xfff
            publicKeys:
              keys:
                - kty: RSA
                  kid: my-key-id-0xfff
            contactInformation:
              legalName: Max
              address: 'Musterstr. 31, 10000 Berlin, Deutschland'
              phone: '+49170123456789'
              email: max@mustermann.not
              unit: Department XYZ
            callback: 'http://127.0.0.1:4010/voluptas'
            replyChannel:
              - fink
              - email
          - destinationId: 2f59b8c6-3206-4734-aa21-a7b2a4d92f7a
            schemas:
              - schemaURI: 'urn:fitko:schema-x'
              - schemaURI: 'urn:fitko:schema-y'
                mimeType: application/xml
            encryptionKid: my-key-id-0xeee
            publicKeys:
              keys:
                - kty: RSA
                  kid: my-key-id-0xeee
            contactInformation:
              legalName: Max
              address: 'Musterstr. 31, 10000 Berlin, Deutschland'
              phone: '+49170123456789'
              email: max@mustermann.not
              unit: Department XYZ
            callback: 'http://127.0.0.1:4010/voluptas'
            replyChannel:
              - fitconnect
              - elster
    EmptyBody:
      value: {}
    EncryptedMessage:
      value: eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.nlXGAufYH36IABDy0En0LXEhGfC20IZSSchs27ADalHpRoTZKfXhc7hcMk8Y9V8yTP0jYbmrq6NtEg-QS2O5TQFD9Hluhpb631PBgKjPXHYX1Y6iUcR1sXxSUPjePi8F8PcZUZuUJLnhz6myyc9scdAq9BXG2cDJVgkfLI8eZdrqnrY24Hh32_7d5OKLFSpSDrBlqfyQuY8Wbs2h8Wy4Z4hwT1aWDO7b-SqJA181hUbNcF_rR4Mze3Fdtu-3uOIQYgLBBRmN1ZHDLk0EKNCI4B8MyDKLGPoM0ZomV5lVwVWjAMRI4CgQkIQ9rnm-Adof-GbegQL3yJSoNIWRWgzCnZBYZ638QgPllCMVW3WvEVvsgj0Hj16PbofqXTQ5S73LINfP6FZawfC0yMrYjSV_N2L0Lkp2KI3BkJcy-PcFhBnhwu2IsJGAlyDRCnXdVqig8m5yLHuSMQTpLW69LzPEskfsjhnNDR-CEBZpicjMfc-4CL6U7E7YoGc_99DzE5U5._JfqyKH23GiKsnDW.ZtMMjZ3GgcgHss8qbFRhrjl4L0kAfbco-oXICkk.VBHJ00FyDTYjOA_OYfiz5g
    Info:
      value:
        version:
          major: 1
          minor: 0
          patch: 1
