openapi: 3.0.0
info:
  version: 0.18.0
  title: Submission API für Antragsverfahren und Berichtspflichten
  description: |
    Die FIT-Connect Submission API ermöglicht das Einreichen von Anträgen und Berichten aus vorgelagerten Systemen (z. B. Onlineantragsdiensten, Fachportalen oder Berichtssystemen) an die Systeme der Verwaltung zur elektronischen Verfahrensbearbeitung (z. B. Fachverfahren, Dokumentenmanagementsystem oder Prozessplattformen).
  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://submission-api-testing.fit-connect.fitko.dev'
    description: FIT-Connect Testserver
externalDocs:
  description: FIT-Connect-Dokumentationsportal mit Dokumentation zur API-Nutzung
  url: 'https://docs.fitko.de/fit-connect'
tags:
  - name: Zustellpunktverwaltung
    description: 'Unter dieser Gruppe sind alle Endpunkte organisiert, über welche Zustellpunkte verwaltet werden können.'
  - name: Einreichungsübermittlung
    description: 'Diese Gruppe enthält alle Endpunkte, die für das Versenden von Einreichungen an einen Zustellpunkt notwendig sind.'
    externalDocs:
      url: 'https://docs.fitko.de/fit-connect/getting-started/sending/overview'
  - name: Einreichungsempfang
    description: 'Diese Gruppe umfasst alle Endpunkte, die für den Empfang und die Abfrage von Einreichungen notwendig sind.'
    externalDocs:
      url: 'https://docs.fitko.de/fit-connect/getting-started/receiving/overview'
  - name: Technisch
    description: 'Unter dieser Gruppe sind alle Endpunkte organisiert, die technische Informationen über die Instanz des Zustelldienstes liefern.'
paths:
  /v1/destinations:
    get:
      operationId: get-my-destinations
      summary: Eigene Zustellpunkte auflisten
      description: Mit diesem Request können alle selbst angelegten Zustellpunkte sowie deren Konfigurationen abgerufen werden.
      tags:
        - Zustellpunktverwaltung
      security:
        - OAuth2:
            - 'subscribe:destination:<id>'
            - 'manage:destination:<id>'
      parameters:
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/offset'
      responses:
        '200':
          description: OK
          headers:
            Cache-Control:
              $ref: '#/components/headers/Cache-Control-No-Cache'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DestinationList'
              examples:
                Beispiel:
                  $ref: '#/components/examples/DestinationList'
        '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 entsprechender Konfiguration zum Empfang von Einreichungen. Ein detaillierte Beschreibung ist in der [Dokumentation](https://docs.fitko.de/fit-connect/getting-started/receiving/destination) zu finden.
      tags:
        - Zustellpunktverwaltung
      security:
        - OAuth2:
            - 'create:destination'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateDestination'
            examples:
              Beispiel:
                $ref: '#/components/examples/CreateDestination'
      callbacks:
        NewSubmissions:
          $ref: '#/components/callbacks/NewSubmissions'
      responses:
        '201':
          description: Created
          headers:
            Cache-Control:
              $ref: '#/components/headers/Cache-Control-No-Cache'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PrivateDestination'
              examples:
                Beispiel:
                  $ref: '#/components/examples/PrivateDestination'
        '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'
  '/v1/destinations/{destinationId}':
    parameters:
      - $ref: '#/components/parameters/destinationId'
    get:
      operationId: get-destination-info
      summary: Zustellpunkt abfragen
      description: Ruft die Details eines Zustellpunktes ab.
      tags:
        - Zustellpunktverwaltung
      security:
        - OAuth2:
            - 'subscribe:destination:<id>'
            - 'manage:destination:<id>'
            - 'send:region:DE<region-id>+send:service:<service-uri>'
            - 'send:region:DE<region-id>'
      responses:
        '200':
          description: OK
          headers:
            Cache-Control:
              $ref: '#/components/headers/Cache-Control-No-Cache'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Destination'
              examples:
                Beispiel-Any:
                  $ref: '#/components/examples/Destination'
                Beispiel-Public:
                  $ref: '#/components/examples/PublicDestination'
        '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 vollständig aktualisieren
      description: 'Ermöglicht es, einen Zustellpunkt vollständig zu aktualisieren.'
      tags:
        - Zustellpunktverwaltung
      security:
        - OAuth2:
            - 'manage:destination:<id>'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateDestination'
            examples:
              Beispiel:
                value:
                  status: active
                  contactInformation:
                    legalName: Max
                    address: 'Musterstr. 31, 10000 Berlin, Deutschland'
                    phone: '+49170123456789'
                    email: max@mustermann.not
                    unit: Department XYZ
                  services:
                    - identifier: 'urn:de:fim:leika:leistung:99010003001006'
                      submissionSchemas:
                        - schemaUri: 'https://schema.fitko.de/fim/s00000121_1.0.0.schema.json'
                          mimeType: application/json
                      regions:
                        - DE094750156156
                        - DE09330411
                  callback:
                    url: 'https://fachverfahren.beispielstadt.example.org/callbacks/fit-connect'
                    secret: insecure_unsafe_qHScgrg_kP-R31jHUwp3GkVkGJolvBchz65b74Lzue0
                  encryptionKid: c66e4423-e28d-4a1f-911d-818f9ab60221
                  metadataVersions:
                    - 1.0.1
                    - 2.1.2
      callbacks:
        NewSubmissions:
          $ref: '#/components/callbacks/NewSubmissions'
      responses:
        '200':
          description: OK
          headers:
            Cache-Control:
              $ref: '#/components/headers/Cache-Control-No-Cache'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PrivateDestination'
              examples:
                Beispiel:
                  $ref: '#/components/examples/PrivateDestination'
        '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'
    patch:
      operationId: patch-destination
      summary: Zustellpunkt partiell aktualisieren
      description: |
        Ermöglicht es einen Zustellpunkt partiell zu aktualisieren. Ein Beispiel wäre die Änderung des Feldes `encryptionKid` bei Schlüssel-Rollover.
      tags:
        - Zustellpunktverwaltung
      security:
        - OAuth2:
            - 'manage:destination:<id>'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchDestination'
            examples:
              Beispiel Kontakt:
                value:
                  contactInformation:
                    legalName: Max
                    address: 'Musterstr. 31, 10000 Berlin, Deutschland'
                    phone: '+49170123456789'
                    email: max@mustermann.not
                    unit: Department XYZ
              Beispiel Status:
                value:
                  status: active
      callbacks:
        NewSubmissions:
          $ref: '#/components/callbacks/NewSubmissions'
      responses:
        '200':
          description: OK
          headers:
            Cache-Control:
              $ref: '#/components/headers/Cache-Control-No-Cache'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PrivateDestination'
              examples:
                Beispiel:
                  $ref: '#/components/examples/PrivateDestination'
        '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: 'Dieser Endpunkt ermöglicht es, einen Zustellpunkt zu löschen.'
      tags:
        - Zustellpunktverwaltung
      security:
        - OAuth2:
            - 'manage:destination:<id>'
      responses:
        '204':
          description: Zustellpunkt erfolgreich gelöscht.
        '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'
  '/v1/destinations/{destinationId}/keys':
    parameters:
      - $ref: '#/components/parameters/destinationId'
    post:
      operationId: add-destination-key
      summary: Fügt dem Zustellpunkt einen JWK hinzu.
      tags:
        - Zustellpunktverwaltung
      security:
        - OAuth2:
            - 'manage:destination:<id>'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JWK'
            examples:
              Beispiel Signatur-Public-Key:
                $ref: '#/components/examples/JWKVerify'
              Beispiel Verschlüsselungs-Public-Key:
                $ref: '#/components/examples/JWKWrapKey'
      responses:
        '204':
          description: Schlüssel hinzugefügt
        '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'
  '/v1/destinations/{destinationId}/keys/{keyId}':
    parameters:
      - $ref: '#/components/parameters/destinationId'
      - name: keyId
        in: path
        required: true
        schema:
          type: string
          minLength: 8
          maxLength: 36
        description: Die Id eines JWK
    get:
      operationId: get-destination-key
      summary: Ruft einen JWK des Zustelldienstes ab
      description: 'Ermöglicht es, Public Keys eines Zustellpunktes abzufragen.'
      tags:
        - Zustellpunktverwaltung
        - Einreichungsübermittlung
      responses:
        '200':
          description: OK
          headers:
            Cache-Control:
              $ref: '#/components/headers/Cache-Control-No-Cache'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JWK'
              examples:
                Beispiel Signatur-Public-Key:
                  $ref: '#/components/examples/JWKVerify'
                Beispiel Verschlüsselungs-Public-Key:
                  $ref: '#/components/examples/JWKWrapKey'
        '404':
          description: Not Found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
  '/v1/cases/{caseId}/events':
    parameters:
      - name: caseId
        in: path
        required: true
        schema:
          type: string
          format: uuid
          minLength: 32
          maxLength: 36
        description: Die UUID des Vorgangs
    get:
      operationId: get-case-events
      summary: Event Log auslesen
      description: |
        Über diesen Endpunkt kann der [Event Log](https://docs.fitko.de/fit-connect/details/event-log) eines Vorgangs abgerufen werden, um z.B. den Status des Vorgangs zu überprüfen.
      tags:
        - Einreichungsempfang
        - Einreichungsübermittlung
      security:
        - OAuth2:
            - 'subscribe:destination:<id>'
            - 'manage:destination:<id>'
            - 'send:region:DE<region-id>+send:service:<service-uri>'
            - 'send:region:DE<region-id>'
      parameters:
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/offset'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventLog'
              examples:
                Beispiel:
                  value:
                    count: 2
                    offset: 0
                    totalCount: 2
                    eventLog:
                      - eyJraWQiOiJkZDA0MDllNS00MTBlLTRkOTgtODViNi1mODFhNDBiOGQ5ODAiLCJ0eXAiOiJzZWNldmVudCtqd3QiLCJhbGciOiJQUzUxMiJ9.ewogICJpc3MiOiAiaHR0cHM6Ly9hcGkuZml0a28uZGUvZml0LWNvbm5lY3QvIiwKICAiaWF0IjogMTYyMjc5NDMxOSwKICAianRpIjogIkVEQ0ZCRjIxLTVCMTYtNEQwNi05OUQwLURDNEMyNkY0RkI5RSIsCiAgInN1YiI6ICJzdWJtaXNzaW9uOkY2NUZFQUIyLTQ4ODMtNERGRi04NUZCLTE2OTQ0ODU0NUQ5RiIsCiAgImV2ZW50cyI6IHsKICAgICJodHRwczovL3NjaGVtYS5maXRrby5kZS9maXQtY29ubmVjdC9ldmVudHMvY3JlYXRlLXN1Ym1pc3Npb24iOiB7fQogIH0sCiAgInR4biI6ICJjYXNlOkY3M0QzMEM2LTg4OTQtNDQ0NC04Njg3LTAwQUU3NTZGRUE5MCIKfQ.TQBR_CBsoULi3cGaGg4oqFelQ9GVn8G-cNokzTVDZgZf4D7x_8wjsDcgTd0aamiy8ErlnV1xoAoDcPw81vajrBCaYgf9KI4sNhsW78jlDi_ywK04YhFbkvloDMioGf_5zCNTBreN9bTnU_VYuWB23R_YrYGi2exONft-ZReN_crEvDaKLdG9hqnaCRFwKJ1t8TbLvIyBKLqQYEqP0Oh6m3WA9IRz3EB41S-PZgJCIzmz_GvXdRvw_1B8A_Q7aHr2SQ6Dc-c406UJ5P_7FuypE6tLyuYf5GkmFZSauQ51H4LLl8pLrsW2PJJ28cMavOEx0AWoRLwB7yKK5bAGtcALWw-0W7Wmw1QEX3DZGTpXbEUM0U_7iXeEFrdtfCCbFPMVbmlK-b66IyKK_6yeaOAEjQvCUOrALfa2sSOS6RWiNOKyA1l1L29VoIBXgQ8np72NMV8-AP7UnQO1NPBghBM6LW6tcXceWeP8ayy4eEaZQ639pqH4TJRRkQqnuoTeADpYL9sX2hM9173O4abWiE-Z8zW2AQ1jhUvVXJ8w9ddtMIyjZJZOqoy3TbHxUYpn4UqbedlDyahpUiKCT7-qU2jOjeXAXEPQvWlSzLigNtFvYCEq-fOe1lpeNktoQQrC3Y-szk2vNj5fT_KmJY1QG1bhyrUMoGbA-pe45c-FcCE7ErQ
                      - eyJraWQiOiJkZDA0MDllNS00MTBlLTRkOTgtODViNi1mODFhNDBiOGQ5ODAiLCJ0eXAiOiJzZWNldmVudCtqd3QiLCJhbGciOiJQUzUxMiJ9.ewogICJpc3MiOiAiaHR0cHM6Ly9hcGkuZml0a28uZGUvZml0LWNvbm5lY3QvIiwKICAiaWF0IjogMTYyMjc5NDMxOSwKICAianRpIjogIkVEQ0ZCRjIxLTVCMTYtNEQwNi05OUQwLURDNEMyNkY0RkI5RSIsCiAgInN1YiI6ICJzdWJtaXNzaW9uOkY2NUZFQUIyLTQ4ODMtNERGRi04NUZCLTE2OTQ0ODU0NUQ5RiIsCiAgImV2ZW50cyI6IHsKICAgICJodHRwczovL3NjaGVtYS5maXRrby5kZS9maXQtY29ubmVjdC9ldmVudHMvY3JlYXRlLXN1Ym1pc3Npb24iOiB7fQogIH0sCiAgInR4biI6ICJjYXNlOkY3M0QzMEM2LTg4OTQtNDQ0NC04Njg3LTAwQUU3NTZGRUE5MCIKfQ.TQBR_CBsoULi3cGaGg4oqFelQ9GVn8G-cNokzTVDZgZf4D7x_8wjsDcgTd0aamiy8ErlnV1xoAoDcPw81vajrBCaYgf9KI4sNhsW78jlDi_ywK04YhFbkvloDMioGf_5zCNTBreN9bTnU_VYuWB23R_YrYGi2exONft-ZReN_crEvDaKLdG9hqnaCRFwKJ1t8TbLvIyBKLqQYEqP0Oh6m3WA9IRz3EB41S-PZgJCIzmz_GvXdRvw_1B8A_Q7aHr2SQ6Dc-c406UJ5P_7FuypE6tLyuYf5GkmFZSauQ51H4LLl8pLrsW2PJJ28cMavOEx0AWoRLwB7yKK5bAGtcALWw-0W7Wmw1QEX3DZGTpXbEUM0U_7iXeEFrdtfCCbFPMVbmlK-b66IyKK_6yeaOAEjQvCUOrALfa2sSOS6RWiNOKyA1l1L29VoIBXgQ8np72NMV8-AP7UnQO1NPBghBM6LW6tcXceWeP8ayy4eEaZQ639pqH4TJRRkQqnuoTeADpYL9sX2hM9173O4abWiE-Z8zW2AQ1jhUvVXJ8w9ddtMIyjZJZOqoy3TbHxUYpn4UqbedlDyahpUiKCT7-qU2jOjeXAXEPQvWlSzLigNtFvYCEq-fOe1lpeNktoQQrC3Y-szk2vNj5fT_KmJY1QG1bhyrUMoGbA-pe45c-FcCE7ErQ
        '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: Case not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
    post:
      operationId: send-case-event
      summary: Event senden
      description: |
        Als empfangendes System ist es notwendig die Einreichung entweder zu akzeptieren oder abzulehnen und dadurch die Zustellung abzuschließen. Hierfür muss ein entsprechendes Event im Vorgang hinterlegt werden, indem es den Zustelldienst gesendet wird. Dieses Event kann nach der Validierung der Rahmenstruktur der Einreichung versendet werden, wie [hier](https://docs.fitko.de/fit-connect/getting-started/receiving/process-and-acknowledge) beschrieben ist.
      tags:
        - Einreichungsempfang
      security:
        - OAuth2:
            - 'subscribe:destination:<id>'
      requestBody:
        required: true
        content:
          application/octet-stream:
            schema:
              $ref: '#/components/schemas/SecurityEventToken'
            examples:
              Beispiel:
                value: eyJraWQiOiJkZDA0MDllNS00MTBlLTRkOTgtODViNi1mODFhNDBiOGQ5ODAiLCJ0eXAiOiJzZWNldmVudCtqd3QiLCJhbGciOiJQUzUxMiJ9.ewogICJpc3MiOiAiaHR0cHM6Ly9hcGkuZml0a28uZGUvZml0LWNvbm5lY3QvIiwKICAiaWF0IjogMTYyMjc5NDMxOSwKICAianRpIjogIkVEQ0ZCRjIxLTVCMTYtNEQwNi05OUQwLURDNEMyNkY0RkI5RSIsCiAgInN1YiI6ICJzdWJtaXNzaW9uOkY2NUZFQUIyLTQ4ODMtNERGRi04NUZCLTE2OTQ0ODU0NUQ5RiIsCiAgImV2ZW50cyI6IHsKICAgICJodHRwczovL3NjaGVtYS5maXRrby5kZS9maXQtY29ubmVjdC9ldmVudHMvY3JlYXRlLXN1Ym1pc3Npb24iOiB7fQogIH0sCiAgInR4biI6ICJjYXNlOkY3M0QzMEM2LTg4OTQtNDQ0NC04Njg3LTAwQUU3NTZGRUE5MCIKfQ.TQBR_CBsoULi3cGaGg4oqFelQ9GVn8G-cNokzTVDZgZf4D7x_8wjsDcgTd0aamiy8ErlnV1xoAoDcPw81vajrBCaYgf9KI4sNhsW78jlDi_ywK04YhFbkvloDMioGf_5zCNTBreN9bTnU_VYuWB23R_YrYGi2exONft-ZReN_crEvDaKLdG9hqnaCRFwKJ1t8TbLvIyBKLqQYEqP0Oh6m3WA9IRz3EB41S-PZgJCIzmz_GvXdRvw_1B8A_Q7aHr2SQ6Dc-c406UJ5P_7FuypE6tLyuYf5GkmFZSauQ51H4LLl8pLrsW2PJJ28cMavOEx0AWoRLwB7yKK5bAGtcALWw-0W7Wmw1QEX3DZGTpXbEUM0U_7iXeEFrdtfCCbFPMVbmlK-b66IyKK_6yeaOAEjQvCUOrALfa2sSOS6RWiNOKyA1l1L29VoIBXgQ8np72NMV8-AP7UnQO1NPBghBM6LW6tcXceWeP8ayy4eEaZQ639pqH4TJRRkQqnuoTeADpYL9sX2hM9173O4abWiE-Z8zW2AQ1jhUvVXJ8w9ddtMIyjZJZOqoy3TbHxUYpn4UqbedlDyahpUiKCT7-qU2jOjeXAXEPQvWlSzLigNtFvYCEq-fOe1lpeNktoQQrC3Y-szk2vNj5fT_KmJY1QG1bhyrUMoGbA-pe45c-FcCE7ErQ
      responses:
        '204':
          description: SET angenommen
        '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: Case not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: 'Conflict: Invalid state transition'
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
  /v1/submissions:
    get:
      operationId: get-submissions-for-pickup
      summary: Abholbereite Einreichungen auflisten
      description: Mit diesem Request werden alle abholbereiten Einreichungen sowie deren Zustellpunkte aufgelistet.
      tags:
        - Einreichungsempfang
      security:
        - OAuth2:
            - 'subscribe:destination:<id>'
      parameters:
        - $ref: '#/components/parameters/destinationIdInQuery'
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/offset'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmissionsForPickup'
              examples:
                Beispiel:
                  value:
                    count: 3
                    offset: 0
                    totalCount: 3
                    submissions:
                      - destinationId: 879ee109-a690-4db8-ab32-424284184d7d
                        submissionId: ce75a6b8-d72f-4b94-b09e-af6be35bc2ae
                        caseId: e89e107e-ed79-40e6-ad34-4e770f9df261
                      - destinationId: 19c8489b-29b8-422f-b7db-919852cfb04b
                        submissionId: e364430f-5a3b-4284-ba9a-f2867ba421e6
                        caseId: e89e107e-ed79-40e6-ad34-4e770f9df262
                      - destinationId: 80a0aac3-148d-42bb-9366-516ce6355348
                        submissionId: 530ba588-2db9-4899-ab0d-0c0b57689271
                        caseId: e89e107e-ed79-40e6-ad34-4e770f9df263
        '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-submission
      summary: Einreichung erstellen
      description: |
        Dieser Endpunkt ist der erste, initiale Schritt zum Erstellen einer Einreichung. Danach können Anlagen hochgeladen und schließlich die Einreichung an den Zustellpunkt versendet werden, der in diesem Endpunkt angegeben wurde.
      tags:
        - Einreichungsübermittlung
      security:
        - OAuth2:
            - 'send:region:DE<region-id>+send:service:<service-uri>'
            - 'send:region:DE<region-id>'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSubmission'
            examples:
              Beispiel:
                $ref: '#/components/examples/CreateSubmission'
      callbacks:
        NewEvents:
          $ref: '#/components/callbacks/NewEvents'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmissionCreated'
              examples:
                Beispiel:
                  $ref: '#/components/examples/SubmissionCreated'
        '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: Destination 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'
  '/v1/submissions/{submissionId}':
    parameters:
      - $ref: '#/components/parameters/submissionId'
    get:
      operationId: get-submission
      summary: Einreichung abrufen
      description: |
        Hierüber können die Fachdaten, Metadaten und Strukturinformation einer Einreichung abgefragt und dann ausgewertet werden. Eine Beschreibung, wie diese Daten weiter verarbeitet werden ist [hier](https://docs.fitko.de/fit-connect/getting-started/receiving/download-submission) zu finden.
      tags:
        - Einreichungsempfang
      security:
        - OAuth2:
            - 'subscribe:destination:<id>'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Submission'
              examples:
                Beispiel:
                  $ref: '#/components/examples/Submission'
        '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: submit-submission
      summary: Einreichung versenden
      description: |
        Über den Aufruf dieses Endpunktes wird eine vollständige Einreichung an den Zustellpunk versendet. Als sendendes System kann der Status der Einreichung überprüft werden, um herauszufinden, ob die Einreichung den Zustellpunkt erreicht hat bzw. von diesem akzeptiert wurde.
      tags:
        - Einreichungsübermittlung
      security:
        - OAuth2:
            - 'send:region:DE<region-id>+send:service:<service-uri>'
            - 'send:region:DE<region-id>'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmitSubmission'
      callbacks:
        NewEvents:
          $ref: '#/components/callbacks/NewEvents'
      responses:
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmissionReduced'
              examples:
                Beispiel:
                  value:
                    destinationId: 879ee109-a690-4db8-ab32-424284184d7d
                    submissionId: ce75a6b8-d72f-4b94-b09e-af6be35bc2ae
                    caseId: e89e107e-ed79-40e6-ad34-4e770f9df26d
                    attachments:
                      - 879ee109-a690-4db8-ab32-424284184d7d
                      - 2046f9f1-dc89-4440-9c24-c76a8f40d668
                    serviceType:
                      name: Bauantrag
                      identifier: 'urn:de:fim:leika:leistung:99010003001006'
        '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: Submission 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'
  '/v1/submissions/{submissionId}/attachments/{attachmentId}':
    parameters:
      - $ref: '#/components/parameters/submissionId'
      - $ref: '#/components/parameters/attachmentId'
    get:
      operationId: get-submission-attachment
      summary: Anlage abrufen
      description: |
        Ruft eine Anlage einer Einreichung im JOSE-Format ab. Genaueres ist in der [Dokumentation](https://docs.fitko.de/fit-connect/getting-started/receiving/download-submission) beschrieben
      tags:
        - Einreichungsempfang
      security:
        - OAuth2:
            - 'subscribe:destination:<id>'
      responses:
        '200':
          description: OK
          content:
            application/jose:
              schema:
                $ref: '#/components/schemas/Attachment'
              examples:
                Beispiel:
                  $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: Submission or attachment not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
    put:
      operationId: add-submission-attachment
      summary: Anlage hinzufügen
      description: |
        Hochladen der in `announcedAttachments` angekündigten Anlage im JOSE-Format unter der mitgeteilten UUID. Genaueres ist in der [Dokumentation](https://docs.fitko.de/fit-connect/getting-started/sending/attachments) beschrieben.
      tags:
        - Einreichungsübermittlung
      security:
        - OAuth2:
            - 'send:region:DE<region-id>+send:service:<service-uri>'
            - 'send:region:DE<region-id>'
      requestBody:
        required: true
        content:
          application/jose:
            schema:
              $ref: '#/components/schemas/CreateAttachment'
            examples:
              Beispiel:
                $ref: '#/components/examples/EncryptedMessage'
      responses:
        '204':
          description: Anlage erfolgreich hinzugefügt/überschrieben
        '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'
        '422':
          description: Attachment not announced. Must upload attachments under their announced UUIDs.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Error'
  /v1/info:
    get:
      operationId: get-info
      summary: Rufe technische Serviceinformationen der Instanz ab
      description: Für Debugging oder Informationszwecke angebotener Endpunkt
      tags:
        - Technisch
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Info'
              examples:
                Beispiel:
                  $ref: '#/components/examples/Info'
  /.well-known/jwks.json:
    get:
      operationId: get-jwks.json
      summary: Rufe die öffentlichen Schlüssel des Zustelldienstes ab
      description: Kann z.B. zur Validierung der SETs des Zustelldienstes genutzt werden.
      tags:
        - Technisch
        - Einreichungsübermittlung
        - Einreichungsempfang
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JWKS'
              examples:
                Beispiel:
                  value:
                    keys:
                      - kty: RSA
                        key_ops:
                          - verify
                        alg: PS512
                        x5c:
                          - ...(base64 encoded cert)...
                          - ...(base64 encoded intermediate cert)...
                          - ...(base64 encoded root cert)...
                        kid: c66e4423-e28d-4a1f-911d-818f9ab60221
                        'n': hGALqq-nbAymF5MyZIXV9RY-pW4r39BrBnxryp6ukjdrGacVhwKtm-zqN9urUETAhjfQo7CsxuJ7de291In9uPIhXYSvZcTQXH930Gpkv1BeAsU9x5uP6EnfrgRZfODwpmw1HJmAOK6aJ_ARJV7iJ1a_AGSK5ZO1bsmUWhJk-V-tFbs3xTbsmOZxVfxJWC-0pDxmEljmoi4q8f-LtNzVPEIC3-T5LaGEYy0stCU-YkJ-uDKGUJh01fQWRYaG7gCRnoIT9BJNQWUE0kfRjrZ9nOqNHibs9CreliIhD6k0310DDT0JV6-Y55AgOCqWoYCw7Xn3_AACx1aJccaRojC7FqwI6FWx2d3HkAz6o4l1llfTkgELhYjpUdW-m7dfQTbZzVlZRrVWE8lzbza2GXv6IFi3RzEWNso6KJMo-kRJxG-ZCruVhTt6FIyiZk6HpWGH6AGR62Fku8O_GR6YaNchKSB4nkj76iSPGTasLeJi2Sjw7kVZxhiL6MN4bBTT9jAB_sYcSrd9H12-KGV9IwnW8JnO3derCI6gfdGTKOzHTS3z231fDcCsXtDD4tJHHIXsW7_ytDprkwBwl9OLBW1xAniOgAH8sqgX3SGOYFcbd6Zxx0zgSlRNMdj4qkswS7KhC9-vyCA2qBnRdowPd9_1H9CpuHAyo3-iMf3UaBsPj0s
                        e: AQAB
components:
  securitySchemes:
    OAuth2:
      description: 'Authentifizierungsmethode, um den Zugriff nach RFC8725 zu autorisieren'
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: 'https://auth.fit-connect.example.org/oauth/token/'
          scopes:
            'subscribe:destination:<id>': Erlaubt die Abholung von Anträgen und Dokumenten (Anhängen) des Zustellpunktes
            'manage:destination:<id>': Erlaubt die Verwaltung des Zustellpunktes
            'send:region:DE<region-id>+send:service:<service-uri>': Erlaubt das Versenden von Anträgen an Zustellpunkte mit Region/Leistung Kombination
            'send:region:DE<region-id>': Erlaubt das Versenden von Anträgen an Zustellpunkte der Region
            'create:destination': Erlaubt das Anlegen von Zustellpunkten
  parameters:
    submissionId:
      name: submissionId
      in: path
      required: true
      schema:
        type: string
        format: uuid
        minLength: 32
        maxLength: 36
      description: Die UUID der Einreichung
    destinationId:
      name: destinationId
      in: path
      required: true
      schema:
        type: string
        format: uuid
        minLength: 32
        maxLength: 36
      description: Die UUID des Zustellpunktes
    destinationIdInQuery:
      name: destinationId
      in: query
      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 der Anlage. Wird vom Client erstellt, um auf diese z. B. in den Fachdaten zu referenzieren.'
    limit:
      name: limit
      in: query
      description: Anzahl der zurückzugebenden Ergebnisse. Maximum ist 500. Standard ist 100.
      required: false
      schema:
        type: integer
        format: int32
        minimum: 1
        maximum: 500
    offset:
      name: offset
      in: query
      description: Startposition der Teilmenge zurückzugebender Ergebnisse aus der Gesamtergebnismenge. Standard ist 0.
      required: false
      schema:
        type: integer
        format: int32
        minimum: 0
    Callback-Authentication:
      in: header
      name: callback-authentication
      required: true
      description: Der Message Authentication Code des übertragenen Callbacks
      schema:
        type: string
    Callback-Timestamp:
      in: header
      name: callback-timestamp
      required: true
      description: Der Timestamp des Message Authentication Code.
      schema:
        type: integer
  schemas:
    Submission:
      title: Einreichung
      description: Die Repräsentation einer Einreichung
      type: object
      required:
        - destinationId
        - submissionId
        - caseId
        - attachments
        - serviceType
      allOf:
        - $ref: '#/components/schemas/SubmissionReduced'
        - type: object
          properties:
            encryptedMetadata:
              title: JWE verschlüsselte Nachricht
              description: 'Der Inhalt ist nach JSON Web Encryption Compact Serialization, RFC 7516, verschlüsselt'
              type: string
              pattern: '^[a-zA-Z0-9-_=.]+$'
        - type: object
          properties:
            encryptedData:
              title: JWE Encrypted Message
              description: 'Der Inhalt ist nach JSON Web Encryption Compact Serialization, RFC 7516, verschlüsselt'
              type: string
              pattern: '^[a-zA-Z0-9-_=.]+$'
    SubmissionReduced:
      title: Einreichung
      description: Die Repräsentation einer Einreichung (ohne `encryptedMetadata` und `encryptedData`)
      type: object
      required:
        - destinationId
        - submissionId
        - caseId
        - attachments
        - serviceType
      properties:
        destinationId:
          type: string
          description: 'UUID des Zustellpunktes, an den die Einreichung vermittelt werden soll.'
          format: uuid
          minLength: 32
          maxLength: 36
        submissionId:
          description: Identifikator der Einreichung im Format einer UUID
          type: string
          format: uuid
          minLength: 32
          maxLength: 36
        caseId:
          description: 'ID des Vorgangs, zu dem die Einreichung gehört'
          type: string
          format: uuid
          minLength: 32
          maxLength: 36
        attachments:
          type: array
          description: 'Liste von UUIDs der Anlagen, die bereits hochgeladen wurden'
          items:
            type: string
            format: uuid
            minLength: 32
            maxLength: 36
        serviceType:
          $ref: '#/components/schemas/ServiceType'
        callback:
          $ref: '#/components/schemas/Callback'
    SubmissionCreated:
      title: Erstellte Einreichung
      description: Antwort bei erfolgreicher Erstellung einer Einreichung für einen Zustellpunkt.
      type: object
      required:
        - submissionId
        - destinationId
        - caseId
      properties:
        destinationId:
          description: 'UUID des Zustellpunktes, an den die Einreichung vermittelt werden soll.'
          type: string
          format: uuid
          minLength: 32
          maxLength: 36
        submissionId:
          description: Identifikator der Einreichung im Format einer UUID
          type: string
          format: uuid
          minLength: 32
          maxLength: 36
        caseId:
          type: string
          format: uuid
          minLength: 32
          maxLength: 36
          description: 'Vorgangsreferenz des Vorgangs, zu der die Einreichung gehört.'
    SubmissionSchema:
      title: Fachdatenschema
      description: 'Referenz auf ein Schema, das die Struktur der Fachdaten einer Einreichung beschreibt.'
      type: object
      required:
        - schemaUri
        - mimeType
      properties:
        schemaUri:
          type: string
          format: uri
          description: 'URI des Fachschemas. 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).
          enum:
            - application/json
            - application/xml
    Attachment:
      title: Anlage
      description: Verschlüsselte Anlage 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
      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
          format: email
          description: 'E-Mail-Adresse der verantwortlichen Stelle (Funktionspostfach). Falls kein Funktionspostfach vorhanden ist, 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.'
    CreateSubmission:
      title: Objekt zum Erzeugen einer Einreichung
      description: Initiales Objekt zum Erzeugen und ankündigen einer Einreichung
      type: object
      required:
        - destinationId
        - announcedAttachments
        - serviceType
      properties:
        destinationId:
          type: string
          description: 'UUID des Zustellpunktes, an den die Einreichung vermittelt werden soll.'
          format: uuid
          minLength: 32
          maxLength: 36
        announcedAttachments:
          type: array
          description: Eine Liste mit den `attachmentId`s die mit der Einreichung hochgeladen werden sollen.
          minItems: 0
          items:
            type: string
            format: uuid
            minLength: 32
            maxLength: 36
        caseId:
          type: string
          format: uuid
          minLength: 32
          maxLength: 36
          description: 'Optionale Vorgangsreferenz. Wird keine Vorgangsreferenz angegeben, wird ein neuer Vorgang eröffnet. Wird eine bestehende Vorgangsreferenz angegeben, so wird innerhalb eines bestehenden Vorgangs eine neue Einreichung erstellt (Reply).'
        serviceType:
          $ref: '#/components/schemas/ServiceType'
        callback:
          $ref: '#/components/schemas/CreateCallback'
    CreateAttachment:
      title: Objekt zum Erzeugen einer Anlage
      description: 'Repräsentation einer Anlage im Format JSON Web Encryption (JWE), die mit einer Einreichung verknüpft wird.'
      type: string
      minLength: 1
      pattern: '^[a-zA-Z0-9-_=.]+$'
    CreateDestination:
      title: Struktur zum Erzeugen eines Zustellpunktes
      description: 'Notwendige Struktur, um einen Zustellpunkt anzulegen.'
      type: object
      required:
        - contactInformation
        - services
        - encryptionKid
        - encryptionPublicKey
        - signingPublicKey
        - metadataVersions
      properties:
        contactInformation:
          $ref: '#/components/schemas/ContactInformation'
        services:
          title: Unterstützte Verwaltungsleistungen
          description: Auflistung aller unterstützten Verwaltungsleistungen des Zustellpunktes.
          type: array
          uniqueItems: true
          minItems: 1
          items:
            $ref: '#/components/schemas/DestinationService'
        callback:
          $ref: '#/components/schemas/CreateCallback'
        encryptionKid:
          type: string
          maxLength: 64
          description: Identifikator des Schlüssels der Destination. Muss zur `kid` im Feld `encryptionPublicKey` passen.
        encryptionPublicKey:
          $ref: '#/components/schemas/JWK'
        signingPublicKey:
          $ref: '#/components/schemas/JWK'
        replyChannels:
          $ref: '#/components/schemas/ReplyChannel'
        metadataVersions:
          $ref: '#/components/schemas/SupportedMetadataVersions'
    Destination:
      anyOf:
        - $ref: '#/components/schemas/PublicDestination'
        - $ref: '#/components/schemas/PrivateDestination'
    PrivateDestination:
      allOf:
        - $ref: '#/components/schemas/PublicDestination'
        - type: object
          required:
            - contactInformation
          properties:
            contactInformation:
              $ref: '#/components/schemas/ContactInformation'
            callback:
              $ref: '#/components/schemas/Callback'
    PublicDestination:
      title: Zustellpunkt
      description: Repräsentation eines Zustellpunktes
      type: object
      required:
        - destinationId
        - status
        - services
        - encryptionKid
        - metadataVersions
      properties:
        destinationId:
          type: string
          minLength: 32
          format: uuid
          maxLength: 36
          description: Identifikator des Zustellpunktes im Format einer UUID
        status:
          type: string
          enum:
            - created
            - active
            - inactive
            - decommissioned
          description: 'Status des Zustellpunktes. Eine Beschreibung der Status finden Sie in den Detailinformationen unter [Zustellpunktverwaltung](https://docs.fitko.de/fit-connect/docs/details/destination-management).'
        services:
          title: Unterstützte Verwaltungsleistungen
          description: Auflistung aller unterstützten Verwaltungsleistungen des Zustellpunktes.
          type: array
          uniqueItems: true
          minItems: 1
          items:
            $ref: '#/components/schemas/DestinationService'
        encryptionKid:
          type: string
          maxLength: 64
          description: Key-ID des Verschlüsselungsschlüssels der Destination. Zu finden in der Subressource `keys/<keyId>`.
        replyChannels:
          $ref: '#/components/schemas/ReplyChannel'
        metadataVersions:
          $ref: '#/components/schemas/SupportedMetadataVersions'
    DestinationList:
      title: Liste selbst angelegter Zustellpunkte
      type: object
      required:
        - destinations
      properties:
        count:
          type: integer
          format: int32
          description: Anzahl zurückgegebener Zustellpunkte
          maximum: 500
          minimum: 0
        offset:
          type: integer
          format: int32
          description: Startposition der Teilmenge zurückgegebener Zustellpunkte aus der Gesamtergebnismenge.
          minimum: 0
        totalCount:
          type: integer
          format: int32
          description: Gesamtanzahl der Zustellpunkte
          minimum: 0
        destinations:
          type: array
          items:
            $ref: '#/components/schemas/PrivateDestination'
          description: Eine Auflistung aller selbst angelegten Zustellpunkte
          maxItems: 500
          minItems: 0
    DestinationService:
      title: Verwaltungsleistung
      description: Verwaltungsleistung die eine Destination anbietet.
      type: object
      required:
        - identifier
        - submissionSchemas
        - regions
      properties:
        identifier:
          title: Leistungs-Identifikator
          description: |
            URN einer Leistung. Im Falle einer Leistung aus dem Leistungskatalog sollte hier `urn:de:fim:leika:leistung:` vorangestellt werden.
          type: string
          minLength: 7
          maxLength: 255
          pattern: '^urn:[a-z0-9][a-z0-9-]{0,31}:[a-z0-9()+,.:=@;$_!*''%/?#-]+$'
        submissionSchemas:
          title: Unterstützte Fachschemata
          description: Auflistung aller unterstützten Fachschemata des Zustellpunktes.
          uniqueItems: true
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/SubmissionSchema'
        regions:
          description: Amtliche Regionalschlüssel (ARS) der Regionen in denen die Leistung angeboten wird. Vorangestellt mit 'DE'.
          uniqueItems: true
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/ServiceRegion'
    Error:
      title: Fehler
      type: object
      description: Der Inhalt von HTTP Responses bei Fehlern nach RFC7807.
      required:
        - type
        - title
        - status
      properties:
        type:
          type: string
          description: 'Eine URI-Referenz, die den Problemtyp identifiziert.'
        title:
          type: string
          description: 'Eine kurze, von Menschen lesbare Zusammenfassung des Problems.'
        status:
          type: integer
          description: Der HTTP-Statuscode der vom Ursprungsserver für dieses Auftreten des Problems generiert wurde.
          minimum: 100
          maximum: 599
        detail:
          type: string
          description: Eine von Menschen lesbare Erklärung speziell für dieses Auftreten des Problems.
        instance:
          type: string
          format: uri
          description: |
            Eine URI-Referenz, die das spezifische Auftreten des Problems identifiziert. Sie kann, muss aber nicht, weitere Informationen liefern, wenn sie dereferenziert wird.
    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
      required:
        - kty
        - key_ops
        - alg
        - x5c
        - kid
        - 'n'
        - e
      properties:
        kty:
          type: string
          description: |
            Der Parameter "kty" (Schlüsseltyp) identifiziert die kryptografische Algorithmus Familie, die mit dem Schlüssel verwendet wird, z. B. "RSA" oder "EC". In FIT-Connect sind aktuell nur RSA-Schlüssel erlaubt.
          enum:
            - RSA
        key_ops:
          type: array
          description: |
            Der Parameter "key_ops" (Schlüsseloperationen) identifiziert die Operation(en) für die der Schlüssel verwendet werden soll. Die Bedeutung der Erlaubten Operationen sind:
              - `verify`: Digitale Signatur oder MAC überprüfen
              - `wrapKey`: Verschlüsselungsschlüssel
          items:
            type: string
            enum:
              - verify
              - wrapKey
        alg:
          type: string
          description: |
            Der Parameter "alg" (Algorithmus) identifiziert den Algorithmus, der für Verwendung mit dem Schlüssel vorgesehen ist. In FIT-Connect wird `PS512` für Signaturschlüssel und `RSA-OAEP-256` für Verschlüsselungsschlüssel genutzt.
          enum:
            - PS512
            - RSA-OAEP-256
        x5c:
          type: array
          description: |
            Der Parameter "x5c" (X.509 certificate chain) enthält eine Kette von einem oder mehreren PKIX-Zertifikaten [RFC5280]. Die Zertifikatskette wird als JSON-Array von Zertifikatswert-Strings dargestellt.
          minItems: 1
          items:
            type: string
        kid:
          type: string
          description: |
            Der Parameter "kid" (Schlüssel-Id) wird verwendet, um einen bestimmten Schlüssel zu finden. Dieser wird z. B. verwendet, um zwischen einer Reihe von Schlüsseln innerhalb eines JWK-Sets zu wählen während des Schlüssel-Rollover.
          minLength: 8
          maxLength: 64
        'n':
          type: string
          description: Modulus des Schlüssels. Die minimale Länge von 683 Zeichen repräsentiert eine Schlüssellange von mindestens 4096 Bit.
          minLength: 683
        e:
          type: string
          description: Öffentliche Exponent des Schlüssels
          enum:
            - AQAB
    JWKS:
      title: JSON Web Key Set (JWKS)
      description: 'JWKS nach [RFC 7517](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'
    CallbackNewSubmissions:
      title: Callback
      description: 'Callback, der über abholbereite Einreichungen informiert.'
      type: object
      properties:
        type:
          title: Art des Callbacks
          description: Es liegen neue Einreichungen vor
          type: string
          enum:
            - 'https://schema.fitko.de/fit-connect/callbacks/new-submissions'
        submissionIds:
          title: Liste abholbereiter Einreichungen
          description: 'Liste von `submissionId`s aller Einreichungen, die zur Abholung bereitstehen'
          type: array
          minItems: 1
          items:
            type: string
            format: uuid
            minLength: 32
            maxLength: 36
    CallbackNewEvents:
      title: Callback
      description: 'Callback, der über neue Events im Event Log informiert.'
      type: object
      properties:
        type:
          title: Art des Callbacks
          description: Es liegen neue Events im Event Log vor
          type: string
          enum:
            - 'https://schema.fitko.de/fit-connect/callbacks/new-events'
        submissionIds:
          title: Liste der zugehörigen `submissionId`s
          description: 'Liste der `submissionId`s, für die neue Events im Event Log bereitstehen.'
          type: array
          minItems: 1
          items:
            type: string
            format: uuid
            minLength: 32
            maxLength: 36
    PatchDestination:
      title: Partielle Aktualisierung eines Zustellpunktes
      description: 'Struktur mit Attributen, die aktualisiert werden sollen. Eine Teilaktualisierung einzelner Datenfelder innherhalb der Attribute ist nicht möglich.'
      type: object
      properties:
        status:
          type: string
          enum:
            - created
            - active
            - inactive
            - decommissioned
          description: 'Status des Zustellpunktes. Eine Beschreibung der Status finden Sie in den Detailinformationen unter [Zustellpunktverwaltung](https://docs.fitko.de/fit-connect/docs/details/destination-management).'
        contactInformation:
          $ref: '#/components/schemas/ContactInformation'
        services:
          title: Unterstützte Verwaltungsleistungen
          description: Auflistung aller unterstützten Verwaltungsleistungen des Zustellpunktes.
          type: array
          uniqueItems: true
          minItems: 1
          items:
            $ref: '#/components/schemas/DestinationService'
        callback:
          $ref: '#/components/schemas/CreateCallback'
        encryptionKid:
          type: string
          maxLength: 64
          description: Schlüssel-Id des Verschlüsselungsschlüssels des Zustellpunktes.
        replyChannels:
          $ref: '#/components/schemas/ReplyChannel'
        metadataVersions:
          $ref: '#/components/schemas/SupportedMetadataVersions'
    ServiceRegion:
      title: Region
      type: string
      description: 'Amtlicher Regionalschlüssel (ARS), vorangestellt mit ''DE''.'
      minLength: 2
      maxLength: 14
      pattern: '^DE[0-9]{0,12}$'
    SubmissionForPickup:
      type: object
      title: Abholbereite Einreichungen
      description: 'Eine einzelne abholbereite Einreichung, abzurufen beim Zustellpunkt mit der angegebenen `destinationId`.'
      required:
        - destinationId
        - submissionId
        - caseId
      properties:
        destinationId:
          type: string
          format: uuid
          minLength: 32
          maxLength: 36
          description: Identifikator des Zustellpunktes im Format einer UUID
        submissionId:
          type: string
          format: uuid
          minLength: 32
          maxLength: 36
          description: Identifikator der Einreichung im Format einer UUID
        caseId:
          type: string
          format: uuid
          minLength: 32
          maxLength: 36
          description: 'Vorgangsreferenz des Vorgangs, zu der die Einreichung gehört.'
    SubmissionsForPickup:
      type: object
      title: Abholbereite Einreichungen
      description: Beschreibt alle abholbereiten Einreichungen.
      required:
        - submissions
      properties:
        count:
          type: integer
          format: int32
          description: Anzahl zurückgegebener Einreichungen
          maximum: 500
          minimum: 0
        offset:
          type: integer
          format: int32
          description: Startposition der Teilmenge zurückgegebener Einreichungen aus der Gesamtergebnismenge.
          minimum: 0
        totalCount:
          type: integer
          format: int32
          description: Gesamtanzahl der abholbereiten Einreichungen
          minimum: 0
        submissions:
          type: array
          uniqueItems: true
          items:
            $ref: '#/components/schemas/SubmissionForPickup'
          maxItems: 500
          minItems: 0
    SubmitSubmission:
      title: Einreichung absenden
      description: Datenstruktur für den Abschluss einer Einreichung.
      type: object
      required:
        - encryptedMetadata
      properties:
        encryptedMetadata:
          description: Verschlüsselte Metadaten im Format JSON Web Encryption (JWE) laut RFC7516
          type: string
          pattern: '^[a-zA-Z0-9-_=.]+$'
        encryptedData:
          description: Verschlüsselte Einreichungsdaten im Format JSON Web Encryption (JWE) laut RFC7516
          type: string
          pattern: '^[a-zA-Z0-9-_=.]+$'
    UpdateDestination:
      title: Aktualisierung eines Zustellpunktes
      description: 'Struktur mit Attributen, die aktualisiert werden sollen.'
      type: object
      required:
        - status
        - contactInformation
        - services
        - encryptionKid
        - metadataVersions
      properties:
        status:
          type: string
          enum:
            - created
            - active
            - inactive
            - decommissioned
          description: 'Status des Zustellpunktes. Eine Beschreibung der Status finden Sie in den Detailinformationen unter [Zustellpunktverwaltung](https://docs.fitko.de/fit-connect/docs/details/destination-management).'
        contactInformation:
          $ref: '#/components/schemas/ContactInformation'
        services:
          title: Unterstützte Verwaltungsleistungen
          description: Auflistung aller unterstützten Verwaltungsleistungen des Zustellpunktes.
          type: array
          uniqueItems: true
          minItems: 1
          items:
            $ref: '#/components/schemas/DestinationService'
        callback:
          $ref: '#/components/schemas/CreateCallback'
        encryptionKid:
          type: string
          maxLength: 64
          description: Schlüssel-Id des Verschlüsselungsschlüssels des Zustellpunktes.
        replyChannels:
          $ref: '#/components/schemas/ReplyChannel'
        metadataVersions:
          $ref: '#/components/schemas/SupportedMetadataVersions'
    Version:
      title: Serviceversion
      type: object
      required:
        - major
        - minor
        - patch
      properties:
        major:
          type: integer
        minor:
          type: integer
        patch:
          type: integer
    ServiceType:
      type: object
      title: Verwaltungsleistung
      description: 'Beschreibung der Art der Verwaltungsleistung. Eine Verwaltungsleistung sollte immer mit einem LeiKa-Schlüssel beschrieben werden. Ist für die gegebene Verwaltungsleistung kein LeiKa-Schlüssel vorhanden, kann die Verwaltungsleistung übergangsweise über die Angabe einer anderen eindeutigen Schema-URN beschrieben werden.'
      required:
        - name
        - identifier
      properties:
        name:
          type: string
          description: Name/Bezeichnung der Verwaltungsleistung
        description:
          type: string
          description: (Kurz-)Beschreibung der Verwaltungsleistung
        identifier:
          title: Leistungs-Identifikator
          description: |
            URN einer Leistung. Im Falle einer Leistung aus dem Leistungskatalog sollte hier `urn:de:fim:leika:leistung:` vorangestellt werden.
          type: string
          minLength: 7
          maxLength: 255
          pattern: '^urn:[a-z0-9][a-z0-9-]{0,31}:[a-z0-9()+,.:=@;$_!*''%/?#-]+$'
    SecurityEventToken:
      title: Security Event Token
      description: |
        Ein Security Event Token ist ein signiertes JWT, das verschiedene Events darstellt. Beispiel: Das Akzeptieren bzw. Ablehnen einer Einreichung. Der Aufbau und die Bedeutung der Felder sind [in der Dokumentation beschrieben](https://docs.fitko.de/fit-connect/details/event-log#aufbau-eines-security-event-token-set).
      type: string
      pattern: \w+\.\w+\.\w+
    EventLog:
      title: Event Log einer Einreichung
      description: 'Dieses Objekt enthält den [Event Log einer Einreichung](https://docs.fitko.de/fit-connect/details/event-log).'
      type: object
      required:
        - eventLog
      properties:
        count:
          type: integer
          format: int32
          description: Anzahl zurückgegebener Events
          maximum: 500
          minimum: 0
        offset:
          type: integer
          format: int32
          description: Startposition der Teilmenge zurückgegebener Events aus der Gesamtergebnismenge.
          minimum: 0
        totalCount:
          type: integer
          format: int32
          description: Gesamtanzahl der Events
          minimum: 0
        eventLog:
          type: array
          items:
            $ref: '#/components/schemas/SecurityEventToken'
          maxItems: 500
          minItems: 0
    ReplyChannel:
      type: object
      description: 'Hier kann eine empfangende Stelle angeben, welche elektronischen Rückkanäle es für Einreichungen an diesen Zustellpunkt unterstützt. Sofern keine Channels angegeben werden, kann ein sendendes System  davon ausgehen, dass die Behörde nur über den Papierweg im Rückkanal kommuniziert.'
      minProperties: 1
      properties:
        eMail:
          description: 'Hiermit kann den sendenden Systemen signalisiert werden, dass die empfangende Stelle für Einreichungen an diesen Zustellpunkt eine Rückkanalkommunikation per E-Mail unterstützt.'
          type: object
          properties:
            usePgp:
              type: boolean
              description: 'Hiermit kann den sendenden Systemen signalisiert werden, dass die empfangende Stelle für die Rückkanalkommunikation per E-Mail eine Verschlüsselung mit PGP unterstützt, sofern eine PGP Schlüssel über die Metadaten der Einreichung oder einen anderen Mechanismus übermittelt wurden.'
        deMail:
          type: object
          description: 'Hiermit kann den sendenden Systemen signalisiert werden, dass die empfangende Stelle für Einreichungen an diesen Zustellpunkt eine Rückkanalkommunikation per DE-Mail unterstützt.'
        fink:
          type: object
          description: 'Hiermit kann den sendenden Systemen signalisiert werden, dass die empfangende Stelle für Einreichungen an diesen Zustellpunkt eine Rückkanalkommunikation an die interoperablen Postfächer der FINK Föderation unterstützt.'
        elster:
          type: object
          description: 'Hiermit kann den sendenden Systemen signalisiert werden, dass die empfangende Stelle für Einreichungen an diesen Zustellpunkt eine Rückkanalkommunikation per Elster-Transfer unterstützt.'
    Callback:
      title: Konfiguration des eingerichteten Callbacks
      type: object
      required:
        - url
      properties:
        url:
          title: Callback-URL
          description: 'Öffentlich erreichbare Callbackadresse, um Benachrichtigungen durch den Zustelldienst zu empfangen. Muss eine valide HTTPS-URL sein.'
          type: string
          minLength: 9
          format: uri
          pattern: '^https://.+'
    SupportedMetadataVersions:
      title: Liste unterstützter Metadatenschemataversionen
      description: Eine Liste von semver kompatiblen Versionen des Metadatenschemas.
      type: array
      uniqueItems: true
      minItems: 1
      items:
        type: string
        pattern: '^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$'
    CreateCallback:
      title: Objekt zur Konfiguration von Callbacks
      type: object
      required:
        - url
        - secret
      properties:
        url:
          title: Callback-URL
          description: 'Öffentlich erreichbare Callbackadresse, um Benachrichtigungen durch den Zustelldienst zu empfangen. Muss eine valide HTTPS-URL sein.'
          type: string
          minLength: 9
          format: uri
          pattern: '^https://.+'
        secret:
          title: Callback-Secret
          description: 'Callback-Secret zur Erzeugung des zur Absicherung eines Callback verwendeten HMACs. Das Callback-Secret kann über die API nur geschrieben, aber nicht abgerufen werden.'
          type: string
          minLength: 32
          maxLength: 512
  examples:
    Submission:
      value:
        destinationId: 879ee109-a690-4db8-ab32-424284184d7d
        submissionId: ce75a6b8-d72f-4b94-b09e-af6be35bc2ae
        caseId: e89e107e-ed79-40e6-ad34-4e770f9df26d
        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
        serviceType:
          name: Bauantrag
          identifier: 'urn:de:fim:leika:leistung:99010003001006'
        callback:
          url: 'https://my-onlineservice.example.org/callbacks/fit-connect'
    SubmissionCreated:
      value:
        destinationId: 879ee109-a690-4db8-ab32-424284184d7d
        submissionId: ce75a6b8-d72f-4b94-b09e-af6be35bc2ae
        caseId: e89e107e-ed79-40e6-ad34-4e770f9df26d
    CreateSubmission:
      value:
        destinationId: 879ee109-a690-4db8-ab32-424284184d7d
        announcedAttachments:
          - 123ee109-a690-4db8-ab32-424284184d7d
          - 456ee109-a690-4db8-ab32-424284184d7d
        serviceType:
          name: Bauantrag
          identifier: 'urn:de:fim:leika:leistung:99010003001006'
        callback:
          url: 'https://my-onlineservice.example.org/callbacks/fit-connect'
          secret: insecure_unsafe_qHScgrg_kP-R31jHUwp3GkVkGJolvBchz65b74Lzue0
    CreateDestination:
      value:
        contactInformation:
          legalName: Max
          address: 'Musterstr. 31, 10000 Berlin, Deutschland'
          phone: '+49170123456789'
          email: max@mustermann.not
          unit: Department XYZ
        services:
          - identifier: 'urn:de:fim:leika:leistung:99010003001006'
            submissionSchemas:
              - schemaUri: 'https://schema.fitko.de/fim/s00000121_1.0.0.schema.json'
                mimeType: application/json
            regions:
              - DE094750156156
              - DE09330411
        callback:
          url: 'https://fachverfahren.beispielstadt.example.org/callbacks/fit-connect'
          secret: insecure_unsafe_qHScgrg_kP-R31jHUwp3GkVkGJolvBchz65b74Lzue0
        encryptionKid: c66e4423-e28d-4a1f-911d-818f9ab60221
        encryptionPublicKey:
          $ref: '#/components/examples/JWKWrapKey/value'
        signingPublicKey:
          kty: RSA
          key_ops:
            - verify
          alg: PS512
          x5c:
            - ...(base64 encoded cert)...
            - ...(base64 encoded intermediate cert)...
            - ...(base64 encoded root cert)...
          kid: a11e4423-e28d-4a1f-911d-818f9ab64321
          'n': hGALqq-nbAymF5MyZIXV9RY-pW4r39BrBnxryp6ukjdrGacVhwKtm-zqN9urUETAhjfQo7CsxuJ7de291In9uPIhXYSvZcTQXH930Gpkv1BeAsU9x5uP6EnfrgRZfODwpmw1HJmAOK6aJ_ARJV7iJ1a_AGSK5ZO1bsmUWhJk-V-tFbs3xTbsmOZxVfxJWC-0pDxmEljmoi4q8f-LtNzVPEIC3-T5LaGEYy0stCU-YkJ-uDKGUJh01fQWRYaG7gCRnoIT9BJNQWUE0kfRjrZ9nOqNHibs9CreliIhD6k0310DDT0JV6-Y55AgOCqWoYCw7Xn3_AACx1aJccaRojC7FqwI6FWx2d3HkAz6o4l1llfTkgELhYjpUdW-m7dfQTbZzVlZRrVWE8lzbza2GXv6IFi3RzEWNso6KJMo-kRJxG-ZCruVhTt6FIyiZk6HpWGH6AGR62Fku8O_GR6YaNchKSB4nkj76iSPGTasLeJi2Sjw7kVZxhiL6MN4bBTT9jAB_sYcSrd9H12-KGV9IwnW8JnO3derCI6gfdGTKOzHTS3z231fDcCsXtDD4tJHHIXsW7_ytDprkwBwl9OLBW1xAniOgAH8sqgX3SGOYFcbd6Zxx0zgSlRNMdj4qkswS7KhC9-vyCA2qBnRdowPd9_1H9CpuHAyo3-iMf3UaBsPj0s
          e: AQAB
        replyChannel:
          deMail: null
        metadataVersions:
          - 1.0.1
          - 2.1.1
    Destination:
      value:
        destinationId: 7881dba9-4055-4854-8b6d-11ea5b7f3047
        status: active
        services:
          - identifier: 'urn:de:fim:leika:leistung:99010003001006'
            submissionSchemas:
              - schemaUri: 'https://schema.fitko.de/fim/s00000121_1.0.0.schema.json'
                mimeType: application/json
            regions:
              - DE094750156156
              - DE09330411
        encryptionKid: c66e4423-e28d-4a1f-911d-818f9ab60221
        contactInformation:
          legalName: Max
          address: 'Musterstr. 31, 10000 Berlin, Deutschland'
          phone: '+49170123456789'
          email: max@mustermann.not
          unit: Department XYZ
        callback:
          url: 'https://fachverfahren.beispielstadt.example.org/callbacks/fit-connect'
        metadataVersions:
          - 1.0.1
          - 2.1.2
    PrivateDestination:
      value:
        destinationId: 7881dba9-4055-4854-8b6d-11ea5b7f3047
        status: created
        services:
          - identifier: 'urn:de:fim:leika:leistung:99010003001006'
            submissionSchemas:
              - schemaUri: 'https://schema.fitko.de/fim/s00000121_1.0.0.schema.json'
                mimeType: application/json
            regions:
              - DE094750156156
              - DE09330411
        encryptionKid: c66e4423-e28d-4a1f-911d-818f9ab60221
        contactInformation:
          legalName: Max
          address: 'Musterstr. 31, 10000 Berlin, Deutschland'
          phone: '+49170123456789'
          email: max@mustermann.not
          unit: Department XYZ
        callback:
          url: 'https://fachverfahren.beispielstadt.example.org/callbacks/fit-connect'
        metadataVersions:
          - 1.0.1
          - 2.1.2
    PublicDestination:
      value:
        destinationId: 13ad2349-975c-4167-bcd8-da606b4e1d84
        status: active
        services:
          - identifier: 'urn:de:fim:leika:leistung:99107004018000'
            submissionSchemas:
              - schemaUri: 'https://schema.fitko.de/fim/s00000122_1.0.0.schema.json'
                mimeType: application/json
            regions:
              - DE09415061516
              - DE09420411
        encryptionKid: e4142167-7f03-4d4f-a8c9-c7ecc78f55f8
        replyChannels:
          elster: {}
        metadataVersions:
          - 1.0.0
          - 2.1.2
    DestinationList:
      value:
        count: 1
        offset: 1
        totalCount: 2
        destinations:
          - destinationId: de735e92-8ced-4298-a021-5f4aa124cc47
            status: active
            services:
              - identifier: 'urn:de:fim:leika:leistung:99010003001006'
                submissionSchemas:
                  - schemaUri: 'https://schema.fitko.de/fim/s00000121_1.0.0.schema.json'
                    mimeType: application/json
                regions:
                  - DE094750156156
                  - DE09330411
              - identifier: 'urn:nuernberg:installation-einer-fahrradreparaturstation'
                submissionSchemas:
                  - schemaUri: 'https://schema.fitko.de/etc/installation-fahrradreparaturstation.json'
                    mimeType: application/json
                regions:
                  - DE09
            encryptionKid: 132642dc-f8b0-401a-b519-65f51c6ab728
            contactInformation:
              legalName: Max
              address: 'Musterstr. 31, 10000 Berlin, Deutschland'
              phone: '+49170123456789'
              email: max@mustermann.not
              unit: Department XYZ
            callback:
              url: 'https://fachverfahren.beispielstadt.example.org/callbacks/fit-connect'
            metadataVersions:
              - 1.0.1
              - 2.1.2
          - destinationId: 2f59b8c6-3206-4734-aa21-a7b2a4d92f7a
            status: created
            services:
              - identifier: 'urn:de:fim:leika:leistung:99010003001006'
                submissionSchemas:
                  - schemaUri: 'https://schema.fitko.de/fim/s00000121_1.0.0.schema.json'
                    mimeType: application/json
                regions:
                  - DE094750156156
            encryptionKid: c66e4423-e28d-4a1f-911d-818f9ab60221
            contactInformation:
              legalName: Max
              address: 'Musterstr. 31, 10000 Berlin, Deutschland'
              phone: '+49170123456789'
              email: max@mustermann.not
              unit: Department XYZ
            callback:
              url: 'https://fachverfahren.beispielstadt.example.org/callbacks/fit-connect'
            metadataVersions:
              - 1.0.1
              - 2.1.2
    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
    JWKVerify:
      value:
        kty: RSA
        key_ops:
          - verify
        alg: PS512
        x5c:
          - ...(base64 encoded cert)...
          - ...(base64 encoded intermediate cert)...
          - ...(base64 encoded root cert)...
        kid: c66e4423-e28d-4a1f-911d-818f9ab60221
        'n': hGALqq-nbAymF5MyZIXV9RY-pW4r39BrBnxryp6ukjdrGacVhwKtm-zqN9urUETAhjfQo7CsxuJ7de291In9uPIhXYSvZcTQXH930Gpkv1BeAsU9x5uP6EnfrgRZfODwpmw1HJmAOK6aJ_ARJV7iJ1a_AGSK5ZO1bsmUWhJk-V-tFbs3xTbsmOZxVfxJWC-0pDxmEljmoi4q8f-LtNzVPEIC3-T5LaGEYy0stCU-YkJ-uDKGUJh01fQWRYaG7gCRnoIT9BJNQWUE0kfRjrZ9nOqNHibs9CreliIhD6k0310DDT0JV6-Y55AgOCqWoYCw7Xn3_AACx1aJccaRojC7FqwI6FWx2d3HkAz6o4l1llfTkgELhYjpUdW-m7dfQTbZzVlZRrVWE8lzbza2GXv6IFi3RzEWNso6KJMo-kRJxG-ZCruVhTt6FIyiZk6HpWGH6AGR62Fku8O_GR6YaNchKSB4nkj76iSPGTasLeJi2Sjw7kVZxhiL6MN4bBTT9jAB_sYcSrd9H12-KGV9IwnW8JnO3derCI6gfdGTKOzHTS3z231fDcCsXtDD4tJHHIXsW7_ytDprkwBwl9OLBW1xAniOgAH8sqgX3SGOYFcbd6Zxx0zgSlRNMdj4qkswS7KhC9-vyCA2qBnRdowPd9_1H9CpuHAyo3-iMf3UaBsPj0s
        e: AQAB
    JWKWrapKey:
      value:
        kty: RSA
        key_ops:
          - wrapKey
        alg: RSA-OAEP-256
        x5c:
          - ...(base64 encoded cert)...
          - ...(base64 encoded intermediate cert)...
          - ...(base64 encoded root cert)...
        kid: c66e4423-e28d-4a1f-911d-818f9ab60221
        'n': hGALqq-nbAymF5MyZIXV9RY-pW4r39BrBnxryp6ukjdrGacVhwKtm-zqN9urUETAhjfQo7CsxuJ7de291In9uPIhXYSvZcTQXH930Gpkv1BeAsU9x5uP6EnfrgRZfODwpmw1HJmAOK6aJ_ARJV7iJ1a_AGSK5ZO1bsmUWhJk-V-tFbs3xTbsmOZxVfxJWC-0pDxmEljmoi4q8f-LtNzVPEIC3-T5LaGEYy0stCU-YkJ-uDKGUJh01fQWRYaG7gCRnoIT9BJNQWUE0kfRjrZ9nOqNHibs9CreliIhD6k0310DDT0JV6-Y55AgOCqWoYCw7Xn3_AACx1aJccaRojC7FqwI6FWx2d3HkAz6o4l1llfTkgELhYjpUdW-m7dfQTbZzVlZRrVWE8lzbza2GXv6IFi3RzEWNso6KJMo-kRJxG-ZCruVhTt6FIyiZk6HpWGH6AGR62Fku8O_GR6YaNchKSB4nkj76iSPGTasLeJi2Sjw7kVZxhiL6MN4bBTT9jAB_sYcSrd9H12-KGV9IwnW8JnO3derCI6gfdGTKOzHTS3z231fDcCsXtDD4tJHHIXsW7_ytDprkwBwl9OLBW1xAniOgAH8sqgX3SGOYFcbd6Zxx0zgSlRNMdj4qkswS7KhC9-vyCA2qBnRdowPd9_1H9CpuHAyo3-iMf3UaBsPj0s
        e: AQAB
  callbacks:
    NewEvents:
      'https://example.org/callback':
        post:
          summary: Callback für neue Events im Event Log
          description: |
            Bei neuen Events im Event Log wird ein Zustellpunkt mit Hilfe dieses Callbacks benachrichtigt. Voraussetzung ist die vorherige Konfiguration der [Callback-URL](https://docs.fitko.de/fit-connect/getting-started/receiving/query#callback).
          parameters:
            - $ref: '#/components/parameters/Callback-Authentication'
            - $ref: '#/components/parameters/Callback-Timestamp'
          requestBody:
            required: true
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/CallbackNewEvents'
          responses:
            '200':
              description: OK
    NewSubmissions:
      'https://example.org/callback':
        post:
          summary: Callback für eine neue Einreichung
          description: |
            Bei neue eintreffenden Submissions wird ein Zustellpunkt mit Hilfe dieses Callbacks benachrichtigt. Voraussetzung ist die vorherige Konfiguration der [Callback-URL](https://docs.fitko.de/fit-connect/getting-started/receiving/query#callback).
          parameters:
            - $ref: '#/components/parameters/Callback-Authentication'
            - $ref: '#/components/parameters/Callback-Timestamp'
          requestBody:
            required: true
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/CallbackNewSubmissions'
          responses:
            '200':
              description: OK
  headers:
    Cache-Control-No-Cache:
      required: true
      description: Zustellpunkte dürfen aufgrund ihrer Schlüssel nicht gecached werden
      schema:
        type: string
        default: no-cache
        enum:
          - no-cache
