diff --git a/.gitignore b/.gitignore
index c766674e45149800ea3fe8f5968a93c2b8268bb2..ccc3312f137c31086962c00ec64799a357f8e9c5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,4 +2,4 @@
 ._*
 *.iml
 .idea/
-ui/config.js
\ No newline at end of file
+ui/config.js
diff --git a/assets/images/encryption/pki-check.png b/assets/images/encryption/pki-check.png
new file mode 100644
index 0000000000000000000000000000000000000000..337af106baac793a91c37cbd0c499672c63332a9
Binary files /dev/null and b/assets/images/encryption/pki-check.png differ
diff --git a/assets/images/encryption/tls-no-tls.png b/assets/images/encryption/tls-no-tls.png
new file mode 100644
index 0000000000000000000000000000000000000000..ee71544a842cd13ca2db2241eebd0e1225a03109
Binary files /dev/null and b/assets/images/encryption/tls-no-tls.png differ
diff --git a/assets/images/oauth/JWT-Konzept.png b/assets/images/oauth/JWT-Konzept.png
new file mode 100644
index 0000000000000000000000000000000000000000..4bbbfb3950afbb307e6ddd925bf07d8e8aefea55
Binary files /dev/null and b/assets/images/oauth/JWT-Konzept.png differ
diff --git a/assets/images/oauth/JWT_konzept.png b/assets/images/oauth/JWT_konzept.png
new file mode 100644
index 0000000000000000000000000000000000000000..4bbbfb3950afbb307e6ddd925bf07d8e8aefea55
Binary files /dev/null and b/assets/images/oauth/JWT_konzept.png differ
diff --git a/docs/Detailinformationen/Authentifizierung_von_Usern.md b/docs/Detailinformationen/Authentifizierung_von_Usern.md
new file mode 100644
index 0000000000000000000000000000000000000000..dba4a721410d730037bfbfbb7b7c297c895d93c4
--- /dev/null
+++ b/docs/Detailinformationen/Authentifizierung_von_Usern.md
@@ -0,0 +1,142 @@
+# Authentifizierung von Usern an Zustelldiensten
+
+Jeder Onlineantragsdienst muss bei FIT-Connect registriert sein, um FIT-Connect Formulare darstellen und übermitteln zu können. Bei der Registrierung von Onlinediensten wird festgelegt, welche Anträge die Onlinedienste auf welchen Domains ausspielen dürfen. Im Rahmen dieses Prozesses wird für jeden Onlinedienst außerdem ein Public Key hinterlegt. Nach der Anmeldung erhält jeder Onlineantragsdienst OAuth2-Credentials für den Authentifizierungstyp "Client-Credentials".
+
+Eine Registrierung eines Onlinedienstes ist über das Self-Service-Portal der FITKO möglich. (TODO: link) Dort müssen folgende Informationen über einen Onlinedienst hinterlegt werden:
+
+- Freigegebene Domains, von denen der Onlinedienst Formulare übermittelt.
+- Erlaubte Destination-IDs, an die Anträge übermittelt werden dürfen.
+- Ein Public Key des Onlinedienstes, die er für die Erstellung von JWTs benutzt.
+
+Wenn ein Onlinedienst einem User ermöglichen möchte, einen Antrag zu übermitteln, muss er mithilfe seiner Client-Credentials beim FIT-Connect-Authentifizierungsserver einen JWT-Access-Token (Onlinedienst-Token) abrufen. Dieser Onlinedienst-Token enthält den Public-Key, der für den Onlinedienst bei der Anmeldung festgelegt wurde, im signierten Datensatz.
+
+Nun muss der Onlinedienst auf Basis des zum Public Key gehörenden Private Key einen weiteren JWT Token (User-Token) erzeugen, der Informationen dazu enthält, das der Onlinedienst dem User erlaubt, einen Antrag an eine spezifische Destinationen zu übermitteln. 
+
+Wenn der User nun einen Antrag an den Onlinedienst übermittelt, muss dieser sowohl den User-Token als auch den Onlinedienst-Token im Header mitübermitteln. Mithilfe der beiden Tokens kann das FIT-Connect API-Gateway nachvollziehen, von wo ein Antrag zu welcher Destination übermittelt wird und kann somit überprüfen, ob der User/Onlinedienst dafür autorisiert ist.
+
+<img src="../../assets/images/oauth/JWT_konzept.png" alt="JWT Konzept" width="400"/>
+
+### Warum ist die anonyme Authentifizierung notwendig?
+
+Im Rahmen von FIT-Connect soll das massenhafte absenden (spammen) von Anträgen über Ratelimiting verhindert werden und es sollen nur vertrauenswürdige Webseiten, die dem FIT-Connect-Standards entsprechen, die Möglichkeit bekommen, Anträge über FIT-Connect zu übermitteln. Um diese Maßnahmen umsetzen und einen User über mehrere Requests hinweg sicher identifizieren zu können, ist eine Form der anonymen Authentifizierung notwendig.
+
+## Generierung der JWT-Tokens
+
+Jedes Backend eines FIT-Connect Onlineantragsdienstes muss über ein System verfügen, welches JWT-Tokens für diese Instanz erzeugen und an den Browser des Users übermitteln kann. Es sollte dabei eine geeignete Form von Rate-Limiting, für die Ausstellung der Public Keys passend zum Usecase des Onlinedienstes implementieren. Es sollte die Menge der mit einem JWT-Token freigegebenen Destinationen minimieren. **Es dürfen in denen vom Onlineservice generierten JWT-Tokens keinen Informationen hinterlegt werden, die zur Identifikation des Users führen könnten.**
+
+### Anforderungen an die Keypairs
+
+Der Onlinedienst muss zur Registrierung bei FIT-Connect neben den Angaben dazu, welche Destinationen er unter welchen Domains verwendenden möchte, auch noch einen Public Key eines Keypairs, das nach folgenden Standards erzeugt wurde, übermitteln:
+
+| Feld               | Inhalt     | **Erläuterung**                                              |
+| ------------------ | ---------- | ------------------------------------------------------------ |
+| Hashingalgorithmus | SHA-512    | Algorithmus der zur digitalen Signatur des Keys verwendet werden muss an. Dieser muss im Fall von FIT-Connect immer SHA-512 sein. (vgl. [BSI TR-02102-1 Tabelle 4.1](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.html)) |
+| Keylänge           | 4096       | Länge des zugrundeliegenden RSA-Keys. Diese entspricht der Empfehlung des BSIs für ab dem Jahr 2023. (vgl. [BSI TR-02102-1 Tabelle 3.1](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.html)) |
+| Signaturstandard   | RSASSA-PSS | Entspricht dem Standard beschrieben in [RFC 4056](https://tools.ietf.org/html/rfc4056)  und vom BSI empfohlen in [BSI TR-02102-1 Abschnitt 5.4.1.](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.html) |
+
+Bei der Erstellung und Signierung des Keys sind alle Regeln und Standards aus BSI [TR-02103](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02103/BSI-TR-02103.pdf?__blob=publicationFile&v=4) zu beachten. 
+
+### Anforderung an die JWT-Tokens
+
+Die vom Onlinedienst generierten JWT-Tokens müssen nach [RFC 7519](https://tools.ietf.org/html/rfc7519) über folgende Attribute verfügen:
+
+#### Header
+
+Entsprechend [RFC 7519 Abschnnitt 8](https://tools.ietf.org/html/rfc7519#section-8):
+
+| Feld | Inhalt | **Erläuterung**                                 |
+| ---- | ------ | ----------------------------------------------- |
+| typ  | JWT    | Es handelt sich um einen JWT-Token.             |
+| alg  | RS512  | Der JWT Token verwendet RSASSA-PSS und SHA-512. |
+|      |        |                                                 |
+
+**Beispiel**
+
+```json
+{
+  "typ":"JWT",
+  "alg":"HS256"
+}
+```
+
+#### Body des User-JWT-Tokens
+
+Entsprechend den [standartisierten Feldern](http://www.iana.org/assignments/jose/jose.xhtml#web-signature-encryption-algorithms):
+
+| Feld    | Inhalt                    | **Erläuterung**                                              |
+| ------- | ------------------------- | ------------------------------------------------------------ |
+| iat     | Unix Timestamp            | Zeitpunkt wann der Token ausgestellt wurde als Unix Timestamp. |
+| exp     | Unix Timestamp            | Zeitpunkt wann der Token abläuft als Unix Timestamp (Token sollte max. 2 Stunden gültig sein vgl [BSI APP.3.1](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Grundschutz/Kompendium_Einzel_PDFs/06_APP_Anwendungen/APP_3_1_Webanwendungen_Edition_2020.pdf?__blob=publicationFile&v=1)). |
+| scope   | Liste von Destination-IDs | Eine Liste der Destination-IDs, für die der JWT eine Übermittlung erlaubt. |
+| sid     | UUID4 der Session         | Eine unique ID zur Identifizierung der Session (muss garantiert für jede Übermittlung anders sein) |
+| iss     | ID des Onlinedienstes     | Wird bei der Anmeldung des Onlinedienstes festgelegt und dient zur Identifizierung am API-Gateway |
+| domains | Liste von Domains         | Eine Liste der Domains, von denen der Onlineservice Anträge übermitteln kann.  Sie muss einem Subset der Domains entsprechen, die im domains Feld des Onlinedienst-JWT angegeben wurden. (Subdomains müssen explizit angegeben werden) |
+
+**Beispiel**
+
+```json
+{  
+	"iat":"1620072619",  
+	"exp":"1620079819",
+	"scope": ["leika:99108008252000:36141427-d405-40a4-8f8b-3592d544e85b", "custom:15:655c6eb6-e80a-4d7b-a8d2-3f3250b6b9b1"],
+	"sid": "8d4dcbfd-a528-4e9b-abc3-477c4cc857aa",
+	"iss": "639c5be8-eb9c-4741-834e-4ad11629898a"
+}
+
+```
+
+#### Body des Onlinedienst-JWT-Tokens
+
+Entsprechend den [standartisierten Feldern](http://www.iana.org/assignments/jose/jose.xhtml#web-signature-encryption-algorithms):
+
+| Feld    | Inhalt                        | **Erläuterung**                                              |
+| ------- | ----------------------------- | ------------------------------------------------------------ |
+| iat     | Unix Timestamp                | Zeitpunkt wann der Token ausgestellt wurde als Unix Timestamp. |
+| exp     | Unix Timestamp                | Zeitpunkt wann der Token abläuft als Unix Timestamp (Token sollte max. 24 Stunden gültig sein vgl [BSI APP.3.1](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Grundschutz/Kompendium_Einzel_PDFs/06_APP_Anwendungen/APP_3_1_Webanwendungen_Edition_2020.pdf?__blob=publicationFile&v=1)). |
+| scope   | Liste von Destination-IDs     | Eine Liste der Destination-IDs oder Präfixes, für die der JWT eine Übermittlung erlaubt. |
+| epk     | Public Key des Onlinedienstes | Der Public Key, der dem Onlinedienst bei der Anmeldung zugeordnet wurde im JWK Format nach [RFC-7517](https://tools.ietf.org/html/rfc7517) |
+| aud     | ID des Onlinedienstes         | Wird bei der Anmeldung des Onlinedienstes festgelegt und dient zur Identifizierung des Onlineservices |
+| domains | Liste von Domains             | Eine Liste der Domains, von denen der Onlineservice Anträge übermitteln kann. (Subdomains müssen explizit angegeben werden) |
+
+**Beispiel**
+
+```json
+{  
+	"iat":"1620072619",  
+	"exp":"1620079819",
+	"scope": ["custom:15:655c6eb6-e80a-4d7b-a8d2-3f3250b6b9b1", "leika:99108008252000"],
+	"epk": {
+    "kty": "RSA",
+    "e": "AQAB",
+    "key_ops": ["verify"],
+    "alg": "PS512",
+    "n": "...Public Key..."
+  },
+  "aud": "639c5be8-eb9c-4741-834e-4ad11629898a",
+  "domains": ["example.com", "sub.example.com"]
+}
+
+```
+
+## Validierung der JWT-Tokens durch die Sender-API/API-Gateway
+
+Bei jedem eingegangen Antrag muss der JWT-Token des Users validiert werden, um so Missbrauch der Antragsübermittlungsschnittstelle zu verhindern und nur korrekt implementierten FIT-Connect-Clients Zugang zur Antragsübermittlung zu geben.
+
+Nach dem Anlegen eines Antragsübertragungsprozesses kann auf diesen nur mit JWT-Tokens von demselben Onlinedienst und mit derselben Session-ID zugegriffen werden.	
+
+Das API-Gateway muss die JWT-Tokens validieren:
+
+1. Überprüfen, ob diese noch gültig sind und
+   1.  der User-JWT-Token maximal für 2h ausgestellt wurde.
+   2. der Onlinedienst-JWT-Token für max. 24h ausgestellt wurde.
+2. Mithilfe des Public Keys des Authentifizierungsservers die Signatur des Onlinedienst-JWT überprüfen. 
+3. Mithilfe des im JWT-Token des Onlinedienst enthaltenen Public Key die Signatur des User JWT überprüfen
+4. Überprüfen, ob die Destination-ID teil der in den Scopes (**scope** Parameter in den JWT Tokens) beider JWT-Tokens ist. (Zugangsberechtigung des Onlinedienstes und des Users). Bzw. ob der im Präfix des Onlineservice-Tokens dem Präfix der Destination-ID(s) entspricht.
+5. Überprüfen, ob die Website (origin), von der der Antrag abgesendet wurde, im domain Feld beider JWKs verzeichnet ist. (Verhindern von gefälschten Onlinediensten, die nicht den FIT-Connect-Standards entsprechen)
+
+Das API-Gateway kann aufgrund der folgenden Parameter Rate-Limiting für API-Calls (angepasst an die jeweiligen Use Cases des Onlineservices) betreiben:
+
+- sid
+- IP-Addresse des Users
+- Website von der der Antrag übermittelt wird bzw. das Fehlen eines Referers
+- Onlineservice-ID
\ No newline at end of file
diff --git a/docs/Detailinformationen/Destination-IDs.md b/docs/Detailinformationen/Destination-IDs.md
new file mode 100644
index 0000000000000000000000000000000000000000..a9cf48b8cfd1760556af0dc22879adeae868496b
--- /dev/null
+++ b/docs/Detailinformationen/Destination-IDs.md
@@ -0,0 +1,42 @@
+# Destination-IDs
+
+Die Destination-IDs entscheiden darüber wohin ein Antrag zugestellt wird. Jeder Zustellpunkt eines spezifischen Antrags im FIT-Connect System verfügt über eine Destination ID.
+
+Ein Empfangspunkt kann dabei die Nachrichten für mehrere Destination-IDs empfangen und ein Antrag kann auch an mehrere Destination-IDs versendet werden.
+
+## Zusammensetzung der Destination-IDs
+
+Eine Destination-ID ist immer eine ID in Verbindung mit einem Prefix für die Art der Leistung, die über sie zugestellt wird. 
+
+Das Format sieht dabei wie folgt aus
+
+```
+[leika|custom]:[leika-ID|service-ID]:[Destination-UUID]
+```
+
+| Feld             | Inhalt                                                       | Erläuterung                                                  |
+| ---------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| Type             | leika oder custom                                            | Leika steht dafür, das die folgende ID einer Leistung im [Leistungskatalog der öffentlichen Verwaltung](https://leitfaden.ozg-umsetzung.de/display/OZG/2.1+Verwaltungsleistungen+im+Sinne+des+OZG) verzeichnet ist. Custom bedeutet, das es sich um eine Leistung handelt, die nicht Teil des Leistungskatalogs ist und nur in FIT-Connect angelegt wurde |
+| ID               | eine maximal 9-Stellige Nummer, die die Art des übermittelten Antrags angibt | Wenn der Typ "leika" entspricht, handelt es sich um eine ID, die einer Leistung im Leistungskatalog entspricht. Wenn der Typ "custom" entspricht, dann handelt es sich um eine ID, die einer Custom-Leistung im FIT-Connect Admin-Panel entspricht. |
+| Destination-UUID | UUID der Destination                                         | UUID der Destination, an die der Antrag versendet werden soll. |
+
+## Beispiele
+
+LeiKa-Leistung für die [Begutachung von abgeschleppten Fahrzeugen](https://fimportal.de/detail/L/99108008252000):
+
+```
+leika:99108008252000:36141427-d405-40a4-8f8b-3592d544e85b
+```
+
+Eine Custom-Leistung:
+
+```
+custom:15:655c6eb6-e80a-4d7b-a8d2-3f3250b6b9b1
+```
+
+## Regex zur Validierung
+
+```
+(custom|leika):([0-9]{4,15}):([0-9A-F]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89AB][0-9a-f]{3}-[0-9a-f]{12})
+```
+
diff --git a/docs/Detailinformationen/Encryption.md b/docs/Detailinformationen/Encryption.md
index 259bb417fd1d767883b1c28b2065d557cc837227..768fa91e97dbc197a2811c254d7934308a42de5c 100644
--- a/docs/Detailinformationen/Encryption.md
+++ b/docs/Detailinformationen/Encryption.md
@@ -1,77 +1,93 @@
 # Verschlüsselte Übertragung
 
-## Architektur
+## Einleitung
+FIT-Connect verwendet zur Übertragung von Antragsdaten und Antragsmetadaten (abgesehen von den für die Übermittlung zwingend notwendigen Daten, z.B. Destination-ID) eine Ende-zu-Ende-Verschlüsselung. Diese ist auf Basis der Standards [JSON Web Encryption (JWE)](https://tools.ietf.org/html/rfc7516) und [JSON Web Keys (JWK)](https://tools.ietf.org/html/rfc7517) umgesetzt.
 
-![FIT-Connect Architektur](https://raw.githubusercontent.com/fiep-poc/assets/fa582b1bf765cbe5059b5f22f100923da595d6f9/images/encryption/Architektur_PoC_einfach_2.svg "FIT-Connect Architektur")
+Die Informationen auf dieser Seite sind relevant, wenn man:
+- ein **Fachverfahren** mit FIT-Connect-Anbindung entwickelt oder aufsetzt
+- einen **Onlinedienst** mit FIT-Connect-Anbindung entwickelt oder aufsetzt
 
-Kern von FIT-Connect ist der Zustelldienst, der über die beiden APIs "Application Sender API" und "Application Subscriber API" den Absender (Sender) und Empfänger (Subscriber) eines Antrags verbindet.
+### Warum ist Ende-zu-Ende-Verschlüsselung wichtig?
+Im Kontext von Anträgen an Behörden werden häufig höchstsensible Daten übermittelt, die im Rahmen von [Vorgaben des BSI](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR03107/TR-03107-1.pdf?__blob=publicationFile&v=4) nur Ende-zu-Ende-verschlüsselt übertragen werden dürfen.
+Bei FIT-Connect ist die Zielsetzung einen möglichst einfachen, sicheren und klar definierten Standard zu etablieren. Deshalb ist die verschlüsselte Übertragung von Antragsdaten ein integraler Bestandteil von FIT-Connect. Eine Übertragung von Antragsdaten erfolgt mit FIT-Connect ausschließlich verschlüsselt.
 
-## Vorgaben
+## Grundlagen zur sicheren Implementierung von FIT-Connect
 
-Unter Berücksichtigung der Vorgaben des BSI in der Richtlinie [TR-02102-1](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.html) wurden die [Liste der möglichen Algorithmen](https://www.iana.org/assignments/jose/jose.xhtml#web-signature-encryption-algorithms) eingeschränkt.
+### Ende-zu-Ende-Verschlüsselung
 
-- Asymmetrisches Verschlüsselungsverfahren, um den "Content Encryption Key" zu verschlüsseln ("alg"): "RSA-OAEP-256"
-- Symmetrisches Verschlüsselungsverfahren zur Verschlüsselung des Payloads ("enc"): "A128GCM" oder "A256GCM"
+FIT-Connect basiert auf dem Ansatz von Ende-zu-Ende-Verschlüsselung. Das bedeutet, dass Daten immer vom Endgerät der Nutzer*in bis in die Zielbehörde bzw. das Fachverfahren asymmetrisch verschlüsselt sein müssen.
 
-## Konzept
+<img src="../../assets/images/encryption/tls-no-tls.png" alt="Ende-zu-Ende-Verschlüsselung Bedeutung" width="400" height="320">
 
-### Aufbau der Ãœbertragung
+Zur Realisierung einer Ende-zu-Ende-Verschlüsselung vom Endgerät der Anwender:in bis zum Fachverfahren einer Behörde, dürfen Daten nicht unverschlüsselt oder nur per TLS gesichert an ein Backend übermittelt und erst dort die für FIT-Connect spezifizierte Verschlüsselung angewendet werden. Sollte eine längerfristige Speicherung der Antragsdaten nötig sein, so muss diese immer clientseitig (z.B. in der IndexDB des Browsers, per Download, …) erfolgen.
 
-Eine Übertragung über FIT-Connect besteht aus einem Metadatensatz, optionalen Fachdaten und beliebig vielen (0-∞) Dokumenten (Anlagen). Da die Metadaten transportrelevante Informationen enthalten, werden diese immer unverschlüsselt übertragen. Bei aktivierter Verschlüsselung werden nur die Fachdaten und Anlagen verschlüsselt.
+### Zertifikate von Zustellpunkten müssen der Verwaltungs-PKI entstammen
 
-### Destination
+Jeder verwendete Public Key (idR. in Form eines JSON Web Keys) muss einem digitalen Zertifikat entstammen und von einer Zertifizierungsstelle innerhalb der Verwaltungs-PKI signiert werden. JSON Web Keys müssen immer mit der komplette Zertifikatskette bis zum Wurzelzertifikat ausgeliefert werden, um clientseitig korrekt validierbar zu sein.
 
-Ein Antrag wird an eine Destination (Zielort) geschickt. Diese Destination legt der Empfänger über die "Application Subscriber API" an. Der Absender muss die ID der Destination kennen und kann dann Anträge über die "Application Sender API" an diese ID senden. Der Empfänger legt in der Destination fest, ob die Übertragung optional oder verpflichtend verschlüsselt werden muss. Hierzu enthält die Destination eine Liste von Schemas, aus denen der Absender eines auswählen muss. Diese Schemas enthalten unter anderem eine Angabe zum Encoding, über das eine Verschüsselung vorgegeben wird.
+### Kryptografisches Material muss vor der Verwendung immer geprüft werden
 
-## Application Schema
+Die für die Verschlüsselung verwendeten JSON Web Keys müssen vor Verwendung anhand des zugehörigen Zertifikats aus der Verwaltungs-PKI auf Gültigkeit überprüft werden.
 
-Das Application Schema wurde in der Beta 7 um die Angabe "encoding" erweitert. Es kann drei verschiedene Werte annehmen: "plain", "base64" und "jwe".
+<img src="../../assets/images/encryption/pki-check.png" alt="PKI-um Man-in-the-Middle zu verhindern" width="400" height="320" >
 
-### encoding: plain
+Nicht vertrauenswürdige Schlüssel dürfen nicht für die Verschlüsselung von Anträgen verwendet werden. Das soll Angriffe wie Man-in-the-middle-Attacken verhindern.
 
-"plain" ist der Defaultwert und entspricht der Arbeitsweise bis Beta 6. Hierbei werden die Fachdaten und Anlagen uncodierter Form übermittelt.
+## Architektur
 
-#### Beispiel
+Kern von FIT-Connect ist der Zustelldienst, der über die beiden APIs "Application Sender API" und "Application Subscriber API" den Absender (Sender) und Empfänger (Subscriber) eines Antrags verbindet.
 
-```json
-{"test":true,"hello":"world"}
-```
+Jedes antragsempfangende System (Fachverfahren / virtuelle Poststelle) verfügt über einen oder mehrere Endpunkt, an den Anträge gesendet werden (Zustellpunkt) und einen oder mehrere Endpunkte von denen Anträge verschlüsselt versendet werden (in der Regel: Onlinedienst, App, …).
 
-### encoding: base64
+Ein Antrag wird an einen Zustellpunkt (Zielort) geschickt. Diesen Zustellpunkt legt der Empfänger über die "Application Subscriber API" an. Der Absender muss die Destination-ID des Zustellpunktes kennen und kann dann Anträge über die "Application Sender API" an diese Destination-ID senden.
 
-"base64" legt fest, dass die Daten base64-codiert übertragen werden.
+### Application Sender API
 
-#### Beispiel
+Der Absender muss die Destination-ID vorliegen haben und erfagt über die Application Sender API die Informationen zum Zustellpunkt. Diesen entnimmt er die Liste der möglichen Schemas und wählt eines aus. Sofern es sich um eine verschlüsselte Übertragung handelt, wählt er einen öffentlichen Schlüssel.
 
-```
-eyJ0ZXN0Ijp0cnVlLCJoZWxsbyI6IndvcmxkIn0K
-```
+Derzeit muss die Destination-ID manuell vom Empfänger an den Absender übergeben werden. Dies soll in Zukunft automatisch mithilfe bestehender Mechanismen, z.B. XZufi oder DVDV passieren.
 
-### encoding: jwe
+Das gewählte Schema wird in den Metadaten des Antrags (Application Metadata) eingetragen und legt die Art der Übertragung fest.
 
-Beim Encoding "jwe" werden die Fachdaten und Anlagen mit der JSON Web Encryption (RFC 7516) verschlüsselt.
+### Application Subscriber API
 
-#### Beispiel
+Über die Application Subscriber API werden die Destinations verwaltet, an die die Anträge gesendet werden. Eine Destination enthält eine Liste von Schemas, welche Formate der Empfänger akzeptiert.
 
-```
-eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.nlXGAufYH36IABDy0En0LXEhGfC2
-0IZSSchs27ADalHpRoTZKfXhc7hcMk8Y9V8yTP0jYbmrq6NtEg-QS2O5TQFD9Hluhpb631PBgKjPXHYX
-1Y6iUcR1sXxSUPjePi8F8PcZUZuUJLnhz6myyc9scdAq9BXG2cDJVgkfLI8eZdrqnrY24Hh32_7d5OKL
-FSpSDrBlqfyQuY8Wbs2h8Wy4Z4hwT1aWDO7b-SqJA181hUbNcF_rR4Mze3Fdtu-3uOIQYgLBBRmN1ZHD
-Lk0EKNCI4B8MyDKLGPoM0ZomV5lVwVWjAMRI4CgQkIQ9rnm-Adof-GbegQL3yJSoNIWRWgzCnZBYZ638
-QgPllCMVW3WvEVvsgj0Hj16PbofqXTQ5S73LINfP6FZawfC0yMrYjSV_N2L0Lkp2KI3BkJcy-PcFhBnh
-wu2IsJGAlyDRCnXdVqig8m5yLHuSMQTpLW69LzPEskfsjhnNDR-CEBZpicjMfc-4CL6U7E7YoGc_99Dz
-E5U5._JfqyKH23GiKsnDW.ZtMMjZ3GgcgHss8qbFRhrjl4L0kAfbco-oXICkk.VBHJ00FyDTYjOA_OYf
-iz5g
-```
+Der Empfänger kann in der Destination mehrere Schemas und mehrere öffentliche Schlüssel hinterlegen. Der Absender sucht sich davon für die Übertragung ein Schema und einen öffentlichen Schlüssel aus. Es wird empfohlen, genau ein Schema und genau einen öffentlichen Schlüssel anzubieten.
+
+Es ist geplant, dass die hinterlegten öffentlichen Schlüssel so organisiert werden, dass ein kontrolliertes Key-Rollover stattfinden kann. Dazu werden zu den Schlüsseln die Gültigkeitszeiträume ergänzt.
 
-## Application Subscriber API
+### Ablauf eines Antrags aus Bürger*innen-Client-Perspektive
 
-Über die Application Subscriber API werden die Destinations verwaltet, an die die Anträge gesenet werden. Eine Destination enthält eine Liste von Schemas, welche Formate der Empfänger akzeptiert. Um sicherzustellen, dass immer eine verschlüsselte Übertragung stattfindet muss jedes dieser Schemas bei der Eigenschaft "encoding" den Wert "jwe" enthalten. Sofern mindestens ein verschlüsseltes Schema angeboten wird, muss auch mindestens ein öffentlicher Schlüssel angeboten werden.
+Wenn eine Bürger*in nun einen Antrag im Web oder in einer App übermitteln möchte, läuft das in der Regel wie folgt ab:
 
-Der Empfänger kann in der Destination mehrere Schemas und mehrere öffentliche Schlüssel hinterlegen. Der Absender sucht sich davon für die Übertragung ein Schema udn einen öffentlichen Schlüssel aus. Es wird empfohlen, genau ein Schema und genau einen öffentlichen Schlüssel anzubieten.
+- Bürger*in findet den passenden Antrag über einen Zuständigkeitsfinder.
+- Die Applikation erhält aus dem Zuständigkeitsfinder die passende Destination-ID zum Antrag.
+- Die Applikation ruft über die Sender-API die Formular und Datenstruktur, Verschlüsselungszertifikat, … ab.
+- Die Applikation prüft das Verschlüsselungszertifikat.
+- Die Applikation übermittelt die Antragsdaten und optional einen Public Key des Users verschlüsselt an die Sender-API und erhält dafür einen Status-Token.
+- Mit dem Status-Token ruft die Applikation verschlüsselte Statusinformationen zum Antrag aus der Sender-API ab.
 
-Es ist geplant, dass die hinterlegten öffentlichen Schlüssel so organisiert werden, dass ein kontrolliertes Key-Rollover stattfinden kann. Dazu werden zu den Schlüsseln die Gültigkeitszeiträume ergänzt.
+**TODO: add here some doc links about oauth**
+
+## Bereitstellung eines Destination-Endpunktes
+
+### Erstellung eines FIT-Connect-kompatiblen JSON Web Keys
+
+JSON Web Keys sind das Austauschformat in dem kryptografische Schlüssel in FIT-Connect zwischen der Destination und dem Onlinedienst ausgetauscht werden. Die kryptografischen Anforderungen an die Keys findet man unter **TODO**. Die Keys sollten bereits dort generiert werden, wo sie am Ende eingesetzt werden. Ein unnötiges übertragen von Privat Keys zwischen Servern/Computern sollte vermieden werden. Sollte dies doch notwendig sein, so muss die Übermittlung wenn dann nur verschlüsselt erfolgen.
+
+Im folgenden eine beispielhafte Schritt-für-Schritt-Anleitung um einen JSON-Web-Key zu generieren:
+
+1. Lokale Generierung eines X.509 zugrundeliegenden RSA-Keys. `openssl genrsa -out fachverfahren1.meineverwaltung.de.key 4096`
+2. Generierung des Zertifikatsrequests `openssl req -new -sha256 -key fachverfahren1.meineverwaltung.de.key -out fachverfahren1.meineverwaltung.de.csr`
+3. Dieser Zertifikatsrequest muss nun von einer Verwaltungs-PKI signiert werden.
+4. Das von der Verwaltungs-PKI signierte Zertifikat muss nun in einen JWK umgewandelt werden: … **TODO(Lilith): einfügen nachdem wir das einmal gemacht haben**
+
+Das dabei entstandene Zertifikat muss zur dem Fachverfahren gehörende Destination hinzugefügt werden
+
+### Anlegen eines Zustellpunktes
+
+Ein Zustellpunkt benötigt mindestens immer ein erlaubtes Fachdaten-Schema sowie einen Verschlüsselungs- und einen Signaturkey. Diese müssen in das Format JSON Web Key konvertiert und über den Zustelldienst als JSON Web Key bereitgestellt werden.
 
 #### Beispiel
 
@@ -81,16 +97,27 @@ Es ist geplant, dass die hinterlegten öffentlichen Schlüssel so organisiert we
     "keys": [
       {
         "kty": "RSA",
-        "e": "AQAB",
-        "use": "enc",
-        "kid": "c3bb7326-c498-4027-85f4-b102d0c69ebb",
-        "n": "zcKRdaV9RjpekpyYqlbXQRhNgs_L2RwerlZKJJWdSaQWCD90yHk-bOlG6gjadalWpL
-OF9aOPqqviVKRO2Gq-_mkdBJVuX2pLcx7IuxbEFaFRi81CXPUB3rbKiV_L5bQ2U9_m3X97wV72bkV07R
-IJgH9QfCxcGwohN9hU_qLNMfrbwiwOF2WWgxL-x3NpnKhmWiXmIH0b17NH0NTeLTkXnKPWvFmTd_fCwW
-Y-Z3L3hQik170z2R-hT4SpQOHN-UhXAbZ-SOER3roGObjHj3K8scFOhyOfd0wUPYP8gX_Lz6nR4AU-Ty
-qqfpJ_kaeJdcWbH1z0HWXAenNxTGHOJeyYJGCjctphlSUwJVqrrtNAq15ilFWCw38vvOHbnt8WIqfE-j
-hjtz80el2ieb4wQwcwFLGefKcnaNs5K82bIBXF993RqKKKtJfimz8KJAIPYsxpJ9swx4voPjUAdV99Ek
-ofh__YzMgEdzoIJ6_pd3nojtm1vRKfcKWiT4Z09DW8qoF1"
+        "key_ops": ["wrapKey"],
+        "alg": "PS512",
+        "kid": "……(Key ID)……",
+        "x5t": "……(Fingerprint)……",
+        "x5c": [
+            "……(base64 encoded root cert)……",
+            "……(base64 encoded intermediate cert)……",
+            "……(base64 encoded cert)……"
+        ]
+      },
+     {
+        "kty": "RSA",
+        "key_ops": ["verify"],
+        "alg": "PS512",
+        "kid": "……(Key ID)……",
+        "x5t": "……(Fingerprint)……",
+        "x5c": [
+            "……(base64 encoded root cert)……",
+            "……(base64 encoded intermediate cert)……",
+            "……(base64 encoded cert)……"
+        ]
       }
     ]
   },
@@ -98,29 +125,34 @@ ofh__YzMgEdzoIJ6_pd3nojtm1vRKfcKWiT4Z09DW8qoF1"
     {
       "schemaSource": "none",
       "mimeType": "json",
-      "encoding": "jwe"
     },
     {
       "schemaSource": "none",
       "mimeType": "xml",
-      "encoding": "jwe"
     }
   ],
   "destinationId": "b444a551-74af-4a98-aa65-d1ffccd385d1"
 }
 ```
 
-## Application Sender API
+## Implementierung eines Onlinedienstes
 
-Der Absender muss die Destination-ID vorliegen haben und erfagt über die Application Sender API die Informationen zur Destination. Diesen entnimmt er die Liste der möglichen Schemas und wählt eines aus. Sofern es sich um eine verschlüsselte Übertragung handelt, wählt er einen öffentlichen Schlüssel.
+### Abrufen der Endpunktinformationen
 
-Derzeit muss die Destination-ID manuell vom Empfänger an den Absender übergeben werden. Dies soll in Zukunft automatisch mithilfe bestehender Mechanismen, z.B. XZufi oder DVDV passieren.
+### Überprüfen der Json Web Keys
+
+Die JSON Web Keys müssen vor der Verwendung im Client auf Gültigkeit geprüft werden. Das umfasst insbesondere folgende Punkte:
+
+- Überprüfung gegen eine Certificate Revocation List und/oder einen OCSP-Endpunkt mit signierten Antworten.
+- Überprüfung der Zertifikats-Kette bis zum Wurzelzertifikat (BSI).
+
+### Aufbau der Ãœbertragung
 
-## Ãœbertragungsvarianten
+Eine Übertragung über FIT-Connect besteht aus einem Metadatensatz, optionalen Fachdaten und beliebig vielen (0-∞) Dokumenten (Anlagen). Ein Teil der Metadaten enthälten transportrelevante Informationen und werden deshalb unverschlüsselt übertragen. Alle nicht transportrelevanten Metadaten, die Fachdaten und Anlagen werden verschlüsselt übertragen.
 
-Das gewählte Schema wird in den Metadaten des Antrags (Application Metadata) eingetragen und legt die Art der Übertragung fest. Im folgenden Beispiel wird ein verschlüsselter Fachdatensatz im JSON-Format und ein PDF-Dokument übertragen.
+Die Metadaten, Fachdaten und Anlagen werden gemäß dem Standard JSON Web Encryption RFC 7516) verschlüsselt. Als Datenformat für die Übertragung wird die sogenannte [JWE-Compact Serialisierung](https://tools.ietf.org/html/rfc7516#section-7.1) verwendet. Alle angehängten Dokumente müssen als Binärdateien und nicht als Strings enkodiert verschlüsselt werden.
 
-**Hinweis:** Das Encoding der Anlagen ist an das Encoding der Fachdaten gebunden. Alle Anlagen müssen mit dem gleichen Encoding wie die Fachdaten übertragen werden. Hier im Beispiel also verschlüsselt.
+Zur Verschlüsselung wird ein JSON Web Key mit dem Typ "wrap_key" verwendet.
 
 #### Beispiel (Metadaten)
 
@@ -131,7 +163,6 @@ Das gewählte Schema wird in den Metadaten des Antrags (Application Metadata) ei
       "schema": {
         "schemaSource": "none",
         "mimeType": "json",
-        "encoding": "jwe"
       }
     },
     "docs": [
@@ -149,57 +180,15 @@ Das gewählte Schema wird in den Metadaten des Antrags (Application Metadata) ei
 
 #### Beispiel (Fachdaten)
 
-```
-eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.yTSVS7re6hZKO46aDriHrRFOyc5-
-3TIIrvcKUf2qAfGdH7InufWPCrDyEnazSDI7HtOa5X2MU3iUnmmiEuP-Lef76xTPv2lmL4_lyhW5D8zq
-7zbrIaIaVhtg7ekF1r9Oy9nLsEBQWLD4EWda2PfAibV7iQbOVMn1rVk4DzKtCykj5RSrH96i-lbPVFl-
-Xw_E2G5XsL0gOHrdbAsjTF1h67bvh2hnojc9SH1GnlD0TlUO30n0GKLgC7tNNiLGtNrRo8ih3LUWYo-m
-34Q6NGjaNTycHnWMYZzXHbIcBzYr6WLTsrB07rKXEyrHGLaRL88y2c-ACyEzpgv4qR5DAp98Su2u45ar
-pfGU_7HxX4d-PLEoDfIRnh32nprarbaIesj9Ppgiu7QciWRApcyszk0a5rzZ7Dk_6-ydMfD92H2p3tdt
-OcFhj3XGUshVKec2nRhtCZPOMPTIjxFpozsiRetjZo9LFHzRcvr1eSS_hpteKJ3ltioY9nzt1IX2JqQm
-TGtY.VGOCnGM9LEZP5mUO.LQeKj4SKqsUNsBp4ZRN_56QbS8MQ01YTzRVFStk.Z0YMEua9kvCV7LkeJH
-kprA
-````
-
-### encoding: plain
+Bei der verschlüsselten Übertragung der Fachdaten und Anlagen wird der Content-Type "application/jose" (Achtung: jose, nicht json) verwendet.
 
-Bei der Übertragung der Fachdaten muss der passende Content-Type gesetzt werden, also "application/json" bzw. "application/xml". Alternativ ist "text/json" und "text/xml" auch zulässig. Bei der Übertragung der Anlage ist der in den Metadaten angegebene Datentyp (z.B. "application/pdf") zu verwenden.
+Beispiel:
 
-#### Beispiel
-
-```
-PUT /delivery-service-beta7/sender/destinations/e1009dea-d97e-4104-b389-bf653d8bd30e/applications//data HTTP/1.1
-Content-Type: application/json
-Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjM1ZTM2Nzk2LTM1NDAtNDUwMy1iYT...
- 
-{"test":true,"hello":"world"}
 ```
-
-### encoding: base64
-
-Bei der Übertragung der Fachdaten und Anlagen wird der Content-Type "text/plain" für Base64 verwendet.
-
-#### Beispiel
-
-```
-PUT /delivery-service-beta7/sender/destinations/e1009dea-d97e-4104-b389-bf653d8bd30e/applications//data HTTP/1.1
-Content-Type: text/plain
-Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjM1ZTM2Nzk2LTM1NDAtNDUwMy1iYT...
- 
-eyJ0ZXN0Ijp0cnVlLCJoZWxsbyI6IndvcmxkIn0K
-```
-
-### encoding: jwe
-
-Bei der Ãœbertragung der Fachdaten und Anlagen wird der Content-Type "application/jose" (Achtung: jose, nicht json) verwendet.
-
-#### Beispiel
-
-```
-PUT /delivery-service-beta7/sender/destinations/e1009dea-d97e-4104-b389-bf653d8bd30e/applications//data HTTP/1.1
+PUT /delivery-service-beta7/sender/destinations/e1009dea-d97e-4104-b389-bf653d8bd30e/applications/6f7b00f1-2f0c-46da-93c9-ca020aa1758f/data HTTP/1.1
 Content-Type: application/jose
 Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjM1ZTM2Nzk2LTM1NDAtNDUwMy1iYT...
- 
+
 eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.yTSVS7re6hZKO46aDriHrRFOyc5-
 3TIIrvcKUf2qAfGdH7InufWPCrDyEnazSDI7HtOa5X2MU3iUnmmiEuP-Lef76xTPv2lmL4_lyhW5D8zq
 7zbrIaIaVhtg7ekF1r9Oy9nLsEBQWLD4EWda2PfAibV7iQbOVMn1rVk4DzKtCykj5RSrH96i-lbPVFl-
diff --git a/docs/Detailinformationen/Encryption_Key_Requirements.md b/docs/Detailinformationen/Encryption_Key_Requirements.md
new file mode 100644
index 0000000000000000000000000000000000000000..69c199902a2072f91b613392c7363cdcb9c61c76
--- /dev/null
+++ b/docs/Detailinformationen/Encryption_Key_Requirements.md
@@ -0,0 +1,146 @@
+# Anforderungen an das kryptografische Material
+
+FIT-Connect verwendet zur Übertragung von Antragsdaten und Metadaten mit direktem Bezug zu Anträgen eine Ende-zu-Ende-Verschlüsselung. Diese ist auf Basis des Standards [JSON Web Encryption (JWE)](https://tools.ietf.org/html/rfc7516) unter Verwendung von Schlüsseln gemäß des Standards [JSON Web Keys (JWK)](https://tools.ietf.org/html/rfc7517) umgesetzt.
+
+Zudem bietet FIT-Connect digital signierte Eingangsbestätigungen für Anträge. Die ausgestellten Signaturen werden auf Basis von [Security Event Tokens (SET)](https://tools.ietf.org/html/rfc8417) erzeugt und die dazugehörigen Schlüssel gemäß des Standards [JSON Web Keys (JWK)](https://tools.ietf.org/html/rfc7517) implementiert.
+
+#### Allgemeine Anforderungen an die JSON Web Keys und JSON Web Encryption
+
+Die [Liste der standardisierten Algorithmen](https://www.iana.org/assignments/jose/jose.xhtml#web-signature-encryption-algorithms) für Signaturen und Verschlüsselung mit JWE/JWT wird für die Nutzung in FIT-Connect unter Berücksichtigung der Vorgaben des BSI gemäß der Richtlinie [TR-02102-1](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.html) eingeschränkt. Diese Einschränkung der zu unterstützenden Algorithmen senkt die Komplexität in Implementierungen der angebundenen Systeme und erfolgte unter Berücksichtigung der praktischen Nutzbarkeit der Algorithmen durch eine breite Unterstützung in Implementierungen der Standards.
+
+### Regeln zur Erstellung des JSON Web Keys zur Verschlüsselung von Antragsdaten und der Signatur von Eingangsbestätigungen
+
+Dem JSON Web Key zur **Verschlüsselung von Antragsdaten** muss ein für die Empfangsbehörde des Antrags signiertes X.509 Zertifikat zugrundeliegen. Dem für die **Signaturprüfung von digitalen Eingangsbestätigungen** verwendete JSON Web Key muss ein für die Behörde, die den Antrag im FIT-Connect-System zwischenspeichert oder empfängt, signiertes X.509 Zertifikat zugrundeliegen.
+
+Für die den JSON Web Keys zugrundeliegenden X.509-Zertifikate gelten die folgenden kryptographischen Vorgaben:
+
+| Feld                 | Inhalt     | **Erläuterung**                                              |
+| -------------------- | ---------- | ------------------------------------------------------------ |
+| Hashfunktion         | SHA-512    | Hashfunktion, die bei der Signatur des Zertifikats verwendet werden muss. (vgl. [BSI TR-02102-1 Tabelle 4.1](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.html)). |
+| asym. Schlüssellänge | 4096 Bit   | Länge des zugrundeliegenden RSA-Schlüssels (vgl. [BSI TR-02102-1 Tabelle 3.1](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.html)) |
+| Signaturalgorithmus  | RSASSA-PSS | Entspricht dem Standard beschrieben in [RFC 4056](https://tools.ietf.org/html/rfc4056) und vom BSI empfohlen in [BSI TR-02102-1 Abschnitt 5.4.1.](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.html) |
+
+### Signatur der X.509 Zertifikate durch die Verwaltung-PKI
+
+Die X.509-Zertifikate müssen der Verwaltungs-PKI entstammen. CA-Zertifikate der Zertifizierungsstellen innerhalb der Verwaltungs-PKI werden gemäß den [Vorgaben des BSI zur Verwaltungs-PKI](https://www.bsi.bund.de/VPKI) durch die Wurzelzertifizierungsstelle des BSI ausgestellt.
+
+Bei der Erstellung und Signatur der Zertifikate sind die Regelungen und Standards aus BSI [TR-02103](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02103/BSI-TR-02103.pdf?__blob=publicationFile&v=4) zu beachten.
+
+**Für die Nutzung von Zertifikaten in FIT-Connect sind die folgenden Anforderungen von besonderer Bedeutung:**
+
+- Zertifikate müssen der [Verwaltungs-PKI](https://www.bsi.bund.de/VPKI) entstammen.
+- Für Zertifikate müssen CRL Distribution Points (siehe 8.5 BSI [TR-02103](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02103/BSI-TR-02103.pdf?__blob=publicationFile&v=4)) oder ein OCSP-Endpunkt (siehe 8.5.5 BSI [TR-02103](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02103/BSI-TR-02103.pdf?__blob=publicationFile&v=4)) mit signierten Antworten nach [RFC 6125](https://tools.ietf.org/html/rfc6125) bereitstehen.
+
+### Vorgaben für JSON Web Keys zur Verschlüsselung
+
+Eine Verschlüsselung erfolgt in FIT-Connect auf Basis des Standards JSON Web Encryption gemäß [RFC 7516](https://tools.ietf.org/html/rfc7516).
+
+Zur Nutzung von Zertifikaten in FIT-Connect müssen diese in das JSON Web Key-Format konvertiert werden. Das eingesetzte Zertifikat, alle Zertifikate im Zertifizierungspfad und das Wurzelzertifikat müssen dabei im Attribut `x5c` des JSON Web Key hinterlegt werden. Der JSON Web Key muss über die folgenden Attribute gemäß [RFC 7517](https://tools.ietf.org/html/rfc7517#section-4) verfügen.
+
+Die Auswahl, welcher JSON Web Key aus der Liste der zur Verfügung gestellten Keys verwendet werden muss, wird anhand der `kid` entschieden. Deshalb ist diese verpflichtend anzugeben und muss pro Destination-ID einmalig sein.
+
+| Feld    | Inhalt                                | **Erläuterung**                                              |
+| ------- | ------------------------------------- | ------------------------------------------------------------ |
+| kty     | RSA                                   | Keytype gemäß [RFC 7517, Abschnitt 4](https://tools.ietf.org/html/rfc7517#section-4) |
+| key_ops | [wrapKey]                             | Funktion des Keys (Verschlüsselung des symmetrischen Verschlüsselungskeys) gemäß [RFC 7517, Abschnitt 4.3](https://tools.ietf.org/html/rfc7517#section-4.3) |
+| alg     | RSA-OAEP-256                          | Vorgesehener Algorithmus zur Ver- und Entschlüsselung in Kombination mit diesem JWK. Vorgabe gemäß [BSI TR-02102-1, Abschnitt 3.6](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.html) |
+| x5c     | Die gemäß RFC kodierte Zertifikatskette | Zertifikatskette vom Teilnehmer:innen-Zertifikat bis zum Wurzelzertifikat einschließlich aller Zwischenzertifikate gemäß [Abschnitt 4.7 RFC 7518](https://tools.ietf.org/html/rfc7517#section-4.7). Hinweis: Gemäß RFC muss das erste Zertifikat der hinterlegten Zertifikatskette dem Teilnehmer:innen-Zertifikat entsprechen. |
+| x5t     | Zertifikatsfingerprint                | Der Fingerprint des Zertifikats gemäß [RFC 7516, Abschnitt 4.1.6](https://datatracker.ietf.org/doc/html/rfc7516#section-4.1.6) |
+| kid     | Eindeutige ID des Keys                | Eindeutige ID zur Referenzierung des JSON Web Key gemäß [RFC 7516, Abschnitt 4.1.6](https://tools.ietf.org/html/rfc7516#section-4.1.6) dar. Es wird empfohlen, hierfür eine UUID gemäß [RFC 4122](https://tools.ietf.org/html/rfc4122) zu verwenden. |
+| n       | *Modulus des Public Key zum Zertifikat* | Der Modulus des Public Key gemäß [RFC 7518, Abschitt 6.3.1.1](https://tools.ietf.org/html/rfc7518.html#section-6.3.1.1) ("Base64urlUInt" enkodiert) |
+| e       | "AQAB"                                | Der Exponent des Public Key gemäß [RFC 7518, Abschitt 6.3.1.2](https://tools.ietf.org/html/rfc7518.html#section-6.3.1.2)) |
+
+Das bedeutet, der JSON Web Key zur Verschlüsselung muss diesem Format entsprechen:
+
+```json
+{
+  "kty": "RSA",
+  "key_ops": ["wrapKey"],
+  "alg": "RSA-OAEP-256",
+  "kid": "……(Key ID)……",
+  "x5t": "……(Fingerprint)……",
+  "x5c": [
+      "……(base64 encoded cert)……",
+      "……(base64 encoded intermediate cert)……",
+      "……(base64 encoded root cert)……"
+  ]
+}
+```
+
+### Vorgaben für JSON Web Keys zur Signaturprüfung
+
+Eine Signaturprüfung erfolgt in FIT-Connect auf Basis des Standards JSON Web Signature gemäß [RFC 7515](https://tools.ietf.org/html/rfc7515).
+
+Zur Nutzung von Zertifikaten in FIT-Connect müssen diese in das JSON Web Key-Format konvertiert werden. Das eingesetzte Zertifikat, alle Zertifikate im Zertifizierungspfad und das Wurzelzertifikat müssen dabei im Attribut `x5c` des JSON Web Key hinterlegt werden. Der JSON Web Key muss über die folgenden Attribute gemäß [RFC 7515](https://tools.ietf.org/html/rfc7515#section-4) verfügen.
+
+| Feld    | Inhalt                                | **Erläuterung**                                              |
+| ------- | ------------------------------------- | ------------------------------------------------------------ |
+| kty     | RSA                                   | Keytype gemäß [RFC 7517, Abschnitt 4](https://tools.ietf.org/html/rfc7517#section-4) |
+| key_ops | [verify]                             | Funktion des Keys (Prüfung von digitalen Signaturen) gemäß [RFC 7517, Abschnitt 4.3](https://tools.ietf.org/html/rfc7517#section-4.3) |
+| alg     | PS512                                 | Vorgesehener Algorithmus zur Erstellung und Prüfung von Signaturen in Kombination mit diesem JWK. Vorgabe gemäß [BSI TR-02102-1, Abschnitt 5.4.1](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.html) |
+| x5c     | Die gemäß RFC kodierte Zertifikatskette | Zertifikatskette vom Teilnehmer:innen-Zertifikat bis zum Wurzelzertifikat einschließlich aller Zwischenzertifikate gemäß [Abschnitt 4.7 RFC 7518](https://tools.ietf.org/html/rfc7517#section-4.7). Hinweis: Gemäß RFC muss das erste Zertifikat der hinterlegten Zertifikatskette dem Teilnehmer:innen-Zertifikat entsprechen. |
+| x5t     | Zertifikatsfingerprint                | Der Fingerprint des Zertifikats gemäß [RFC 7517, Abschnitt 4.5](https://datatracker.ietf.org/doc/html/rfc7517#section-4.7) |
+| kid     | Eindeutige ID des Keys                | Eindeutige ID zur Referenzierung des JSON Web Key gemäß [RFC 7515, Abschnitt 4.1.4](https://tools.ietf.org/html/rfc7515#section-4.1.4) dar. Es wird empfohlen, hierfür eine UUID gemäß [RFC 4122](https://tools.ietf.org/html/rfc4122) zu verwenden. |
+| n       | *Modulus des Public Key zum Zertifikat* | Der Modulus des Public Key gemäß [RFC 7518, Abschitt 6.3.1.1](https://tools.ietf.org/html/rfc7518.html#section-6.3.1.1) ("Base64urlUInt" enkodiert) |
+| e       | "AQAB"                                | Der Exponent des Public Key gemäß [RFC 7518, Abschitt 6.3.1.2](https://tools.ietf.org/html/rfc7518.html#section-6.3.1.2)) |
+
+Das bedeutet, der JSON Web Key zur Prüfung von digitalen Signaturen muss dem folgenden Format entsprechen:
+
+```json
+{
+  "kty": "RSA",
+  "key_ops": ["verify"],
+  "alg": "PS512",
+  "kid": "……(Key ID)……",
+  "x5t": "……(Fingerprint)……",
+  "x5c": [
+      "……(base64 encoded cert)……"
+      "……(base64 encoded intermediate cert)……",
+      "……(base64 encoded root cert)……",
+  ]
+}
+```
+
+Nicht mehr verwendete JSON Web Keys für Signaturen müssen nach Ende der Verwendung weiterhin bis zum Ende ihrer Gültigkeitsdauer über den Endpunkt (bzw. die Destination-ID) abrufbar sein. Das soll sicherstellen, das auch bei bereits versendete Anträgen weiterhin der Antragsstatus verifiziert werden kann.
+
+## Algorithmen zur Verschlüsselung des Antragsinhalts mit JSON Web Encryption
+
+Zur Verschlüsselung des eigentlichen Antragsinhalts wird ein symmetrisches Verschlüsselungsverfahren mit symmetrischem Schlüssel verwendet. Dieser symmetrische Schlüssel wird mit den asymmetrischen JSON Web Keys, die vom **Fachverfahren** generiert werden und die Verwendungsart **"wrapKey"** haben müssen, asymmetrisch verschlüsselt.
+
+### Verschlüsselungsverfahren
+
+Der Content im verschlüsselten JSON Web Encryption Objekt muss mit den folgenden Methoden verschlüsselt werden:
+
+- Symmetrisches Verschlüsselungsverfahren zur Verschlüsselung der Formularinhalts- sowie der Metadaten ("Payload"): AES-256 mit der Betriebsart Galois/Counter-Mode (GCM) gemäß [TR-02102, Abschnitt 2.1](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.html)
+- Asymmetrisches Verschlüsselungsverfahren, um den symmetrischen Schlüssel zu verschlüsseln: RSA-OAEP-256 (RSA mit Optimal Asymmetric Encryption Padding (OAEP) unter Verwendung der Mask Generation Function MGF1 und der Hashfunktion SHA-256). Vorgabe gemäß [BSI TR-02102-1, Abschnitt 3.6](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.html)
+
+#### JSON Web Encryption Header
+
+Im Header des JSON Web Encryption Objektes werden die Verschlüsselungs-Metadaten zu den verschlüsselten Inhaltsdaten übergeben. Header-Attribute werden in [RFC 7516](https://tools.ietf.org/html/rfc7516) definiert. Zu Übermittlung der verschlüsselten Daten wird das in [RFC 7516 Abschnitt 7.1](https://tools.ietf.org/html/rfc7516#section-7.1) beschriebene Verfahren "JWE Compact Serialization" verwendet.
+
+Die folgenden Felder müssen im JOSE-Header bei der Übertragung verschlüsselter Daten in FIT-Connect zwingend definiert sein.
+
+| Feld | Inhalt             | **Erläuterung**                                              |
+| ---- | ------------------ | ------------------------------------------------------------ |
+| alg  | RSA-OAEP-256       | Asymmetrisches Verschlüsselungsverfahren, um den „Content Encryption Key“ (CEK) zu verschlüsseln, mit dem der Payload über das in „enc“ angegebene Verfahren symmetrisch verschlüsselt wurde. Hierfür wird der im Header per "kid" referenzierte öffentliche Schlüssel genutzt. Bezeichner des Algorithmus gemäß [RFC 7518, Abschnitt 4.1](https://tools.ietf.org/html/rfc7518#section-4.1). Vorgabe gemäß [BSI TR-02102-1, Abschnitt 3.6](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.html) |
+| enc  | A256GCM            | Symmetrisches Verschlüsselungsverfahren zur Verschlüsselung des Payloads. Bezeichner gemäß [RFC 7518 5.1](https://tools.ietf.org/html/rfc7518#section-5.1). Vorgabe gemäß [TR-02102, Abschnitt 2.1](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.html) |
+| zip  | DEF                | Der Komprimieriungsalgorithmus für die Inhaltsdaten nach [RFC 7516 Abschnit 4.1.3](https://tools.ietf.org/html/rfc7516#section-4.1.3) |
+| kid  | *ID des Public Keys* | Die ID des JSON Web Keys mit dem Attribute "wrapKey", der zur Verschlüsselung des symmetrischen Keys verwendet wurde. Gemäß [RFC 7516, Abschnitt 4.1.6](https://tools.ietf.org/html/rfc7516#section-4.1.6)). Als Format der ID wird UUID nach [RFC 4122](https://tools.ietf.org/html/rfc4122) empfohlen. |
+| cty  | *MIME-Type der Inhaltsdaten* | MIME-Type der Inhaltsdaten (Fachdaten, Medatadaten) nach [RFC 7516, Abschnitt 4.1.12](https://tools.ietf.org/html/rfc7516#section-4.1.12) |
+
+
+## Algorithmen zur Signierung von Security Event Tokens
+
+Für die Bereitstellung von signierten Statusinformationen über Security Event Tokens gemäß [RFC 8417](https://tools.ietf.org/html/rfc8417) wird der Standard [JSON Web Signature](https://tools.ietf.org/html/rfc7515) eingesetzt.
+
+Zur Signatur der Event Tokens verfügt der Server, der die Tokens ausstellt, über einen Signaturschlüssel. Bei der Verwaltung der Signaturschlüssel sind insbesondere die Hinweise in [BSI TR-03116-4, Abschnitt 6](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR03116/BSI-TR-03116-4.html) und [BSI TR-02102-1, Abschnitt 8](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.html) zu beachten. Der zu dem auf dem Server verwendeten Signaturschlüssel zugehörige Public Key muss als JSON Web Key bereitgestellt werden.
+
+Als Algorithmus für die Signatur muss RSASSA-PSS in Verbindung mit SHA-512 eingesetzt werden. Das Entspricht dem Standard beschrieben in [RFC 7518 Abschnitt 3.5](https://tools.ietf.org/html/rfc7518.html#section-3.5) und wird vom BSI als Signaturverfahren in [BSI TR-02102-1 Abschnitt 5.4.1](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.html) empfohlen.
+
+Zu Übermittlung der Signatur wird das in [RFC 7515, Abschnitt 7.1](https://tools.ietf.org/html/rfc7515#section-7.1) beschriebene Verfahren "JWS Compact Serialization" verwendet. Die folgende Attribute müssen bei der Verwendung in FIT-Connect zwingend Teil des Base64URL Safe encodierten JOSE Headers sein:
+
+| Feld | Inhalt             | Erläuterung                                                  |
+| ---- | ------------------ | ------------------------------------------------------------ |
+| alg  | PS512              | Legt RSASSA-PSS mit SHA512 als Algorithmus für die Signatur fest. Bezeichner gemäß [RFC 7518, Abschnitt 3.5](https://tools.ietf.org/html/rfc7518.html#section-3.5)) |
+| kid  | *ID des Public Keys* | Die ID des JSON Web Keys mit dem Attribute "verify" aus dem von der Subscriber-API bereitgestellten Keysets, der zur Verifizierung der Signatur dient. Gemäß [RFC7515, Abschnitt 4.1.4](https://tools.ietf.org/html/rfc7515#section-4.1.4). |
+| cty  | *MIME-Type der Inhaltsdaten* | MIME-Type der Inhaltsdaten (Fachdaten, Medatadaten) nach [RFC 7515, Abschnitt 4.1.10](https://tools.ietf.org/html/rfc7515#section-4.1.10) |
diff --git a/models/application/metadata-no-id.json b/models/application/metadata-no-id.json
new file mode 100644
index 0000000000000000000000000000000000000000..4935f437d7935fdbbfe1c66327b657fdba30d5ec
--- /dev/null
+++ b/models/application/metadata-no-id.json
@@ -0,0 +1,108 @@
+{
+  "type": "object",
+  "title": "Application Metadata without ID",
+  "description": "Metadaten eines Antrags noch ohne ID, zum Anlegen eines neuen Antrags. Nach dem Zuweisen der `application-id` wird das Modell [Application Metadata](metadata.json) verwendet.",
+  "x-examples": {
+    "example-1": {
+      "additionalReferenceInfo": {
+        "subject": "Anmeldung eines Gewerbes in Musterstadt",
+        "caseId": "DF/8923"
+      },
+      "contentStructure": {
+        "data": {
+          "schema": {
+            "mimeType": "application/json",
+            "schemaSource": "none"
+          }
+        },
+        "docs": [
+          {
+            "docId": "1",
+            "purpose": "form",
+            "size": 13046,
+            "mimeType": "application/pdf",
+            "filename": "test.pdf",
+            "description": "Das Antragsformular",
+            "lang": {
+              "lang": "de",
+              "region": "DE"
+            },
+            "hash": {
+              "algorithm": "SHA-256",
+              "digest": "bf37d894fdf9aeade63975ed648d49c3e8a7a773923597d2418915f54cd7c3b9"
+            }
+          }
+        ]
+      },
+      "publicServiceType": {
+        "name": "Gewerbeanmeldung",
+        "description": "Eine Gewerbeanmeldung ist immer dann notwendig, wenn Sie einen stehenden Gewerbebetrieb beginnen.",
+        "leikaId": "99050012104000",
+        "otherIdentifiers": [
+          {
+            "id": "8664844",
+            "schemeID": "service.niedersachsen.de",
+            "schemeName": "Serviceportal Niedersachsen"
+          },
+          {
+            "id": "354824",
+            "schemeID": "buerger.thueringen.de",
+            "schemeName": "Zuständigkeitsfinder Thüringen"
+          }
+        ]
+      }
+    }
+  },
+  "properties": {
+    "publicServiceType": {
+      "$ref": "./public-service-type.json"
+    },
+    "contentStructure": {
+      "type": "object",
+      "additionalProperties": false,
+      "required": [
+        "docs"
+      ],
+      "properties": {
+        "data": {
+          "type": "object",
+          "additionalProperties": false,
+          "properties": {
+            "schema": {
+              "$ref": "./schema.json"
+            }
+          },
+          "required": [
+            "schema"
+          ]
+        },
+        "docs": {
+          "type": "array",
+          "items": {
+            "$ref": "./document.json"
+          }
+        }
+      }
+    },
+    "additionalReferenceInfo": {
+      "type": "object",
+      "additionalProperties": false,
+      "properties": {
+        "subject": {
+          "type": "string"
+        },
+        "caseId": {
+          "type": "string"
+        },
+        "applicationDate": {
+          "type": "string",
+          "format": "date",
+          "description": "Antragsdatum"
+        }
+      }
+    }
+  },
+  "required": [
+    "contentStructure"
+  ]
+}
\ No newline at end of file
diff --git a/models/application/metadata.json b/models/application/metadata.json
new file mode 100644
index 0000000000000000000000000000000000000000..6b4b96872a9e7ee4b4243e3083924cd46806687d
--- /dev/null
+++ b/models/application/metadata.json
@@ -0,0 +1,74 @@
+{
+  "title": "Application Metadata",
+  "allOf": [
+    {
+      "type": "object",
+      "properties": {
+        "applicationId": {
+          "type": "string",
+          "pattern": "^[-_.A-Za-z0-9]+$",
+          "description": "ID des Antrags"
+        }
+      },
+      "required": [
+        "applicationId"
+      ]
+    },
+    {
+      "$ref": "./metadata-no-id.json"
+    }
+  ],
+  "description": "Metadaten zu einem Antrag.",
+  "x-examples": {
+    "example-1": {
+      "additionalReferenceInfo": {
+        "subject": "Anmeldung eines Gewerbes in Musterstadt",
+        "caseId": "DF/8923"
+      },
+      "contentStructure": {
+        "data": {
+          "schema": {
+            "mimeType": "application/json",
+            "schemaSource": "none"
+          }
+        },
+        "docs": [
+          {
+            "docId": "1",
+            "purpose": "form",
+            "size": 13046,
+            "mimeType": "application/pdf",
+            "filename": "test.pdf",
+            "description": "Das Antragsformular",
+            "lang": {
+              "lang": "de",
+              "region": "DE"
+            },
+            "hash": {
+              "algorithm": "SHA-256",
+              "digest": "bf37d894fdf9aeade63975ed648d49c3e8a7a773923597d2418915f54cd7c3b9"
+            }
+          }
+        ]
+      },
+      "publicServiceType": {
+        "name": "Gewerbeanmeldung",
+        "description": "Eine Gewerbeanmeldung ist immer dann notwendig, wenn Sie einen stehenden Gewerbebetrieb beginnen.",
+        "leikaId": "99050012104000",
+        "otherIdentifiers": [
+          {
+            "id": "8664844",
+            "schemeID": "service.niedersachsen.de",
+            "schemeName": "Serviceportal Niedersachsen"
+          },
+          {
+            "id": "354824",
+            "schemeID": "buerger.thueringen.de",
+            "schemeName": "Zuständigkeitsfinder Thüringen"
+          }
+        ]
+      },
+      "applicationId": "ce75a6b8-d72f-4b94-b09e-af6be35bc2ae"
+    }
+  }
+}
\ No newline at end of file
diff --git a/models/application/schema.json b/models/application/schema.json
new file mode 100644
index 0000000000000000000000000000000000000000..afb2bf5a61d694afa895c5f8be34dfd0bc84dd3c
--- /dev/null
+++ b/models/application/schema.json
@@ -0,0 +1,61 @@
+{
+  "type": "object",
+  "title": "Application Schema",
+  "description": "Strukturinformationen zu übertragbaren oder übertragenen Daten.",
+  "additionalProperties": false,
+  "x-examples": {
+    "example-1": {
+      "mimeType": "application/json",
+      "schemaSource": "none",
+      "schemaId": "JSON-DOC"
+    },
+    "example-2": {
+      "mimeType": "application/xml",
+      "schemaSource": "none",
+      "schemaId": "XML-DOC"
+
+    },
+    "example-3": {
+      "mimeType": "application/xml",
+      "schemaSource": "fim",
+      "schemaId": "S99000001V1.0"
+    },
+    "example-4": {
+      "mimeType": "application/json",
+      "schemaSource": "fitconnect",
+      "schemaId": "applicant-person"
+    },
+    "example-5": {
+      "mimeType": "application/json",
+      "schemaSource": "fitconnect",
+      "schemaId": "payment-info"
+    }
+  },
+  "properties": {
+    "schemaId": {
+      "type": "string",
+      "description": "ID des Schemas, abhängig von der ausgewählten Quelle."
+    },
+    "schemaSource": {
+      "type": "string",
+      "enum": [
+        "fim",
+        "none"
+      ],
+      "description": "Quelle, von der das Schema bezogen werden kann."
+    },
+    "mimeType": {
+      "type": "string",
+      "enum": [
+        "application/json",
+        "application/xml"
+      ],
+      "description": "Gibt das zulässige Format (JSON oder XML) der Fachdaten an."
+    }
+  },
+  "required": [
+    "schemaSource",
+    "mimeType",
+    "schemaId"
+  ]
+}
\ No newline at end of file
diff --git a/models/common/jwe.json b/models/common/jwe.json
new file mode 100644
index 0000000000000000000000000000000000000000..6266d884ed9e99ae300594e958af81c06c4b1721
--- /dev/null
+++ b/models/common/jwe.json
@@ -0,0 +1,73 @@
+{
+  "title": "JSON Web Encryption (JWE)",
+  "type": "object",
+  "description": "JSON Web Encryption - JSON Serialization - RFC 7516",
+  "properties": {
+    "protected": {
+      "$ref": "./base64url.json"
+    },
+    "unprotected": {
+      "type": "object",
+      "properties": {
+        "alg": {
+          "type": "string",
+          "description": "Algorithm",
+          "enum": [
+            "RSA-OAEP-256"
+          ]
+        },
+        "enc": {
+          "type": "string",
+          "description": "Encryption Algorithm",
+          "enum": [
+            "A256GCM"
+          ]
+        },
+        "zip": {
+          "type": "string",
+          "description": "Compression Algorithm",
+          "enum": [
+            "DEF"
+          ]
+        },
+        "kid": {
+          "description": "Key ID"
+        }
+        }
+    },
+    "recipients": {
+      "type": "array",
+      "items": {
+        "type": "object",
+        "properties": {
+          "header": {
+            "$ref": "#/properties/unprotected"
+          },
+          "encrypted_key": {
+            "$ref": "./base64url.json"
+          }
+        }
+      }
+    },
+    "encrypted_key": {
+      "type": "object"
+    },
+    "iv": {
+      "$ref": "./base64url.json"
+    },
+    "aad": {
+      "$ref": "./base64url.json"
+    },
+    "ciphertext": {
+      "$ref": "./base64url.json"
+    },
+    "tag": {
+      "$ref": "./base64url.json"
+    }
+  },
+  "required": [
+    "protected",
+    "recipients",
+    "ciphertext"
+  ]
+}
\ No newline at end of file
diff --git a/models/common/jwk.json b/models/common/jwk.json
new file mode 100644
index 0000000000000000000000000000000000000000..062688873f57b080d9c3f1f8f2e391ff69942262
--- /dev/null
+++ b/models/common/jwk.json
@@ -0,0 +1,54 @@
+{
+  "title": "JSON Web Key (JWK)",
+  "type": "object",
+  "description": "JSON Web Key - RFC 7517",
+  "properties": {
+    "kty": {
+      "type": "string",
+      "description": "Key Type",
+      "enum": [
+        "RSA"
+      ]
+    },
+    "key_ops": {
+      "type": "array",
+      "enum": [
+        "verify",
+        "wrapKey"
+      ],
+      "description": "Key Operations",
+      "items": {
+        "type": "string"
+      }
+    },
+    "alg": {
+      "type": "string",
+      "description": "Algorithm",
+      "enum": [
+        "PS512",
+      ]
+    },
+    "kid": {
+      "description": "Key ID",
+      "type": "string"
+    },
+    "x5c": {
+      "description": "X.509 Certificate Chain",
+      "type": "array",
+      "items": {
+        "$ref": "./base64.json"
+      }
+    },
+    "x5t": {
+      "$ref": "./base64url.json"
+    }
+  },
+  "required": [
+    "kty",
+    "kid",
+    "key_ops",
+    "alg",
+    "x5c",
+    "x5t"
+  ]
+}
\ No newline at end of file
diff --git a/models/destination-no-id.json b/models/destination-no-id.json
new file mode 100644
index 0000000000000000000000000000000000000000..158a4b611e6d37ef8917989c67fe842d9e47f496
--- /dev/null
+++ b/models/destination-no-id.json
@@ -0,0 +1,185 @@
+{
+  "type": "object",
+  "title": "Destination without ID",
+  "description": "Daten eines technischen Ãœbergabepunkts (Ziel der Ãœbertragung - z.B. ein Fachverfahren) noch ohne ID, zum Anlegen eines neuen Ãœbergabepunkts. Nach dem Zuweisen der `destination-id` wird das Modell [Destination](destination.json) verwendet.",
+  "x-examples": {
+    "example-1": {
+      "publicOrganization": {
+        "organizationName": "Gewerbeamt Musterstadt",
+        "address": {
+          "type": "national",
+          "street": "Kurzer Weg",
+          "houseNumber": "7",
+          "postalCode": "12345",
+          "city": "Ankh-Morpork"
+        },
+        "contact": {
+          "telephones": [
+            {
+              "number": "+49 89 32168-0",
+              "mobile": false,
+              "description": "work"
+            }
+          ],
+          "email": "behoerde@example.com"
+        }
+      },
+      "technicalContact": [
+        {
+          "formOfAddress": "Herr",
+          "doctoralDegrees": "Dr.",
+          "firstName": "Kunibert",
+          "lastName": "Vonundzu",
+          "contact": {
+            "telephones": [
+              {
+                "number": "+49 89 32168-42",
+                "mobile": false,
+                "description": "work"
+              },
+              {
+                "number": "+49 123 456789",
+                "mobile": true,
+                "description": "work"
+              }
+            ],
+            "email": "kunibert.vonundzu@example.com"
+          }
+        }
+      ],
+      "schemas": [
+        {
+          "mimeType": "application/json",
+          "schemaSource": "none"
+        }
+      ],
+      "callback": {
+        "callbackURI": "http://127.0.0.1:4010/voluptas"
+      },
+      "publicKeys": {
+        "keys": [
+          {
+            "kty": "RSA",
+            "alg": "PS512",
+            "key_ops": ["wrapKey"],
+            "kid": "d4d3bd67-420f-4b39-85d9-92dd800c57b5",
+            "x5t": "……(Fingerprint)……",
+            "x5c": [
+                "……(base64 encoded root cert)……",
+                "……(base64 encoded intermediate cert)……",
+                "……(base64 encoded cert)……"
+            ]
+          },
+          {
+            "kty": "RSA",
+            "key_ops": ["verify"],
+            "alg": "PS512",
+            "kid": "……(Key ID)……",
+            "x5t": "……(Fingerprint)……",
+            "x5c": [
+                "……(base64 encoded root cert)……",
+                "……(base64 encoded intermediate cert)……",
+                "……(base64 encoded cert)……"
+            ]
+          }
+        ]
+      }
+    }
+  },
+  "properties": {
+    "publicOrganization": {
+      "type": "object",
+      "properties": {
+        "organizationName": {
+          "type": "string"
+        },
+        "address": {
+          "description": "Adresse als Alternative (Choice) von nationaler und internationaler Adresse.",
+          "oneOf": [
+            {
+              "$ref": "./common/address-national.json"
+            },
+            {
+              "$ref": "./common/address-postbox.json"
+            },
+            {
+              "$ref": "./common/address-international.json"
+            }
+          ],
+          "discriminator": {
+            "propertyName": "type",
+            "mapping": {
+              "national": "./common/address-national.json",
+              "international": "./common/address-international.json",
+              "postbox": "./common/address-postbox.json"
+            }
+          }
+        },
+        "identifiers": {
+          "type": "array",
+          "description": "Externe Identifikatoren der Person",
+          "items": {
+            "$ref": "./common/identifier.json"
+          }
+        },
+        "contact": {
+          "description": "Kontaktmöglichkeiten der Behörde",
+          "type": "object",
+          "properties": {
+            "telephones": {
+              "type": "array",
+              "description": "Liste der Telefonnummern, außer Fax",
+              "items": {
+                "$ref": "./common/phone.json"
+              }
+            },
+            "email": {
+              "type": "string",
+              "format": "email",
+              "description": "E-Mail-Adresse"
+            },
+            "www": {
+              "type": "string",
+              "format": "uri",
+              "description": "Webadresse"
+            },
+            "telefax": {
+              "$ref": "./common/phone.json#/properties/number"
+            }
+          }
+        }
+      }
+    },
+    "technicalContact": {
+      "type": "array",
+      "description": "Technischer Ansprechpartner",
+      "items": {
+        "$ref": "./common/individual.json"
+      }
+    },
+    "schemas": {
+      "type": "array",
+      "description": "Zulässige Schemas, die zu diesem Ziel übertragen werden können. Sofern leer dürfen Anträge (Application) keinen Datensatz (ApplicationData) enthalten.",
+      "items": {
+        "$ref": "./application/schema.json"
+      }
+    },
+    "callback": {
+      "type": "object",
+      "description": "Callback zur Benachrichtigung bei neuen Anträgen",
+      "properties": {
+        "callbackURI": {
+          "type": "string",
+          "description": "URL auf die der Callback als POST durchgeführt wird",
+          "format": "uri"
+        }
+      },
+      "required": [
+        "callbackURI"
+      ]
+    },
+    "publicKey": {
+      "$ref": "./common/jwk.json"
+    }
+  }
+}
\ No newline at end of file
diff --git a/models/destination.json b/models/destination.json
new file mode 100644
index 0000000000000000000000000000000000000000..75497ff6896efabc425ec36a2b0e598c736502e6
--- /dev/null
+++ b/models/destination.json
@@ -0,0 +1,107 @@
+{
+  "title": "Destination",
+  "allOf": [
+    {
+      "type": "object",
+      "properties": {
+        "destinationId": {
+          "description": "Vom Zustelldienst für dieses Ziel vergebene ID. Wird beim Anlegen eines neuen Ziels leer gelassen.",
+          "pattern": "^[-_.A-Za-z0-9]+$",
+          "type": "string"
+        }
+      },
+      "required": [
+        "destinationId"
+      ]
+    },
+    {
+      "$ref": "./destination-no-id.json"
+    }
+  ],
+  "description": "Beschreibung eines technischen Ãœbergabepunkts",
+  "x-examples": {
+    "example-1": {
+      "publicOrganization": {
+        "organizationName": "Gewerbeamt Musterstadt",
+        "address": {
+          "type": "national",
+          "street": "Kurzer Weg",
+          "houseNumber": "7",
+          "postalCode": "12345",
+          "city": "Ankh-Morpork"
+        },
+        "contact": {
+          "telephones": [
+            {
+              "number": "+49 89 32168-0",
+              "mobile": false,
+              "description": "work"
+            }
+          ],
+          "email": "behoerde@example.com"
+        }
+      },
+      "technicalContact": [
+        {
+          "formOfAddress": "Herr",
+          "doctoralDegrees": "Dr.",
+          "firstName": "Kunibert",
+          "lastName": "Vonundzu",
+          "contact": {
+            "telephones": [
+              {
+                "number": "+49 89 32168-42",
+                "mobile": false,
+                "description": "work"
+              },
+              {
+                "number": "+49 123 456789",
+                "mobile": true,
+                "description": "work"
+              }
+            ],
+            "email": "kunibert.vonundzu@example.com"
+          }
+        }
+      ],
+      "schemas": [
+        {
+          "mimeType": "application/json",
+          "schemaSource": "none"
+        }
+      ],
+      "callback": {
+        "callbackURI": "http://127.0.0.1:4010/voluptas"
+      },
+      "publicKeys": {
+        "keys": [
+          {
+            "kty": "RSA",
+            "key_ops": ["wrapKey"],
+            "alg": "PS512",
+            "kid": "……(Key ID)……",
+            "x5t": "……(Fingerprint)……",
+            "x5c": [
+                "……(base64 encoded root cert)……",
+                "……(base64 encoded intermediate cert)……",
+                "……(base64 encoded cert)……"
+            ]
+          },
+          {
+            "kty": "RSA",
+            "key_ops": ["verify"],
+            "alg": "PS512",
+            "kid": "……(Key ID)……",
+            "x5t": "……(Fingerprint)……",
+            "x5c": [
+                "……(base64 encoded root cert)……",
+                "……(base64 encoded intermediate cert)……",
+                "……(base64 encoded cert)……"
+            ]
+          }
+        ]
+      },
+      "destinationId": "7881dba9-4055-4854-8b6d-11ea5b7f3047"
+    }
+  }
+}
\ No newline at end of file
diff --git a/reference/1_sender.json b/reference/1_sender.json
new file mode 100644
index 0000000000000000000000000000000000000000..ddfa9c29cd7e1ca24b86bb86ee30527c9ca17bf4
--- /dev/null
+++ b/reference/1_sender.json
@@ -0,0 +1,1131 @@
+{
+  "openapi": "3.0.0",
+  "info": {
+    "title": "Application Sender API",
+    "version": "0.7",
+    "description": "API vom Onlineantragsdienst zum Zustelldienst",
+    "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)"
+    }
+  },
+  "servers": [
+    {
+      "url": "https://sender-test.fiep-poc.de/beta7",
+      "description": "Testsystem"
+    }
+  ],
+  "paths": {
+    "/destinations/{destinationId}": {
+      "parameters": [
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "destinationId",
+          "in": "path",
+          "required": true
+        }
+      ],
+      "get": {
+        "summary": "Get Destination Info",
+        "operationId": "get-destination-info",
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/destination.json"
+                },
+                "examples": {
+                  "example-1": {
+                    "value": {
+                      "publicOrganization": {
+                        "organizationName": "Gewerbeamt Musterstadt",
+                        "address": {
+                          "type": "national",
+                          "street": "Kurzer Weg",
+                          "houseNumber": "7",
+                          "postalCode": "12345",
+                          "city": "Ankh-Morpork"
+                        },
+                        "contact": {
+                          "telephones": [
+                            {
+                              "number": "+49 89 32168-0",
+                              "mobile": false,
+                              "description": "work"
+                            }
+                          ],
+                          "email": "behoerde@example.com"
+                        }
+                      },
+                      "technicalContact": [
+                        {
+                          "formOfAddress": "Herr",
+                          "doctoralDegrees": "Dr.",
+                          "firstName": "Kunibert",
+                          "lastName": "Vonundzu",
+                          "contact": {
+                            "telephones": [
+                              {
+                                "number": "+49 89 32168-42",
+                                "mobile": false,
+                                "description": "work"
+                              },
+                              {
+                                "number": "+49 123 456789",
+                                "mobile": true,
+                                "description": "work"
+                              }
+                            ],
+                            "email": "kunibert.vonundzu@example.com"
+                          }
+                        }
+                      ],
+                      "schemas": [
+                        {
+                          "mimeType": "application/json",
+                          "schemaSource": "none",
+                        }
+                      ],
+                      "callback": {
+                        "callbackURI": "http://127.0.0.1:4010/voluptas"
+                      },
+                      "destinationId": "7881dba9-4055-4854-8b6d-11ea5b7f3047"
+                    }
+                  }
+                }
+              }
+            }
+          },
+          "401": {
+            "description": "Unauthorized",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "403": {
+            "description": "Forbidden",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "404": {
+            "description": "Not Found",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          }
+        },
+        "description": "Ruft die Information über eine Destination ab",
+        "tags": [
+          "Transfer related Information"
+        ],
+        "security": [
+          {
+            "OAuth20": [
+              "destination:send"
+            ]
+          }
+        ]
+      }
+    },
+    "/destinations/{destinationId}/applications/{applicationId}/docs/{docId}": {
+      "parameters": [
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "destinationId",
+          "in": "path",
+          "required": true
+        },
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "applicationId",
+          "in": "path",
+          "required": true
+        },
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "docId",
+          "in": "path",
+          "required": true
+        }
+      ],
+      "put": {
+        "summary": "Add Application Document",
+        "operationId": "add-application-doc",
+        "responses": {
+          "202": {
+            "description": "Accepted",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "object",
+                  "additionalProperties": false,
+                  "properties": {
+                    "result": {
+                      "type": "string",
+                      "enum": [
+                        "success"
+                      ]
+                    }
+                  },
+                  "required": [
+                    "result"
+                  ]
+                }
+              }
+            }
+          },
+          "400": {
+            "description": "Bad Request",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "401": {
+            "description": "Unauthorized",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "403": {
+            "description": "Forbidden",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "404": {
+            "description": "Not Found",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          }
+        },
+        "description": "Lädt ein Antragsformuar oder einen Anhang hoch, um ihn dem Antrag hinzuzufügen.",
+        "requestBody": {
+          "content": {
+            "*/*": {
+              "schema": {
+                "type": "string",
+                "format": "binary"
+              }
+            }
+          }
+        },
+        "tags": [
+          "Application Transfer"
+        ],
+        "security": [
+          {
+            "OAuth20": [
+              "destination:send"
+            ]
+          }
+        ]
+      }
+    },
+    "/destinations/{destinationId}/applications/{applicationId}/data": {
+      "parameters": [
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "destinationId",
+          "in": "path",
+          "required": true
+        },
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "applicationId",
+          "in": "path",
+          "required": true
+        }
+      ],
+      "put": {
+        "summary": "Add Application Data",
+        "operationId": "add-application-data",
+        "responses": {
+          "202": {
+            "description": "Accepted",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "object",
+                  "additionalProperties": false,
+                  "properties": {
+                    "result": {
+                      "type": "string",
+                      "enum": [
+                        "success"
+                      ]
+                    }
+                  },
+                  "required": [
+                    "result"
+                  ]
+                }
+              }
+            }
+          },
+          "400": {
+            "description": "Bad Request",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "401": {
+            "description": "Unauthorized",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "403": {
+            "description": "Forbidden",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "404": {
+            "description": "Not Found",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "415": {
+            "description": "Unsupported Media Type",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          }
+        },
+        "description": "Datensatz übertragen",
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "properties": {},
+                "type": "object"
+              },
+              "examples": {
+                "example-1": {
+                  "value": {
+                    "F99000001": "string",
+                    "G99000001": {
+                      "F99000002": "string",
+                      "F99000003": 42
+                    },
+                    "G99000002": [
+                      {
+                        "F99000004": true,
+                        "G99000001": {
+                          "F99000002": "string",
+                          "F99000003": 17
+                        }
+                      },
+                      {
+                        "F99000004": true,
+                        "G99000001": {
+                          "F99000002": "string",
+                          "F99000003": 24
+                        }
+                      }
+                    ]
+                  }
+                }
+              }
+            },
+            "application/xml": {
+              "schema": {
+                "type": "object",
+                "properties": {}
+              }
+            },
+            "application/jose": {
+              "schema": {
+                "type": "string",
+                "pattern": "^[a-zA-Z0-9-_=.]+$",
+                "description": "JSON Web Encryption Compact Serialization, RFC 7516"
+              },
+              "examples": {
+                "example-1": {
+                  "value": "eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.nlXGAufYH36IABDy0En0LXEhGfC20IZSSchs27ADalHpRoTZKfXhc7hcMk8Y9V8yTP0jYbmrq6NtEg-QS2O5TQFD9Hluhpb631PBgKjPXHYX1Y6iUcR1sXxSUPjePi8F8PcZUZuUJLnhz6myyc9scdAq9BXG2cDJVgkfLI8eZdrqnrY24Hh32_7d5OKLFSpSDrBlqfyQuY8Wbs2h8Wy4Z4hwT1aWDO7b-SqJA181hUbNcF_rR4Mze3Fdtu-3uOIQYgLBBRmN1ZHDLk0EKNCI4B8MyDKLGPoM0ZomV5lVwVWjAMRI4CgQkIQ9rnm-Adof-GbegQL3yJSoNIWRWgzCnZBYZ638QgPllCMVW3WvEVvsgj0Hj16PbofqXTQ5S73LINfP6FZawfC0yMrYjSV_N2L0Lkp2KI3BkJcy-PcFhBnhwu2IsJGAlyDRCnXdVqig8m5yLHuSMQTpLW69LzPEskfsjhnNDR-CEBZpicjMfc-4CL6U7E7YoGc_99DzE5U5._JfqyKH23GiKsnDW.ZtMMjZ3GgcgHss8qbFRhrjl4L0kAfbco-oXICkk.VBHJ00FyDTYjOA_OYfiz5g"
+                }
+              }
+            },
+            "text/plain": {
+              "schema": {
+                "$ref": "../models/common/base64.json"
+              }
+            }
+          },
+          "description": "JSON oder XML Daten JWE-verschlüsselt"
+        },
+        "tags": [
+          "Application Transfer"
+        ],
+        "security": [
+          {
+            "OAuth20": [
+              "destination:send"
+            ]
+          }
+        ]
+      }
+    },
+    "/destinations/{destinationId}/applications/{applicationId}/status/history": {
+      "parameters": [
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "applicationId",
+          "in": "path",
+          "required": true
+        },
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "destinationId",
+          "in": "path",
+          "required": true
+        }
+      ],
+      "get": {
+        "summary": "Get Status History",
+        "tags": [
+          "status"
+        ],
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "object",
+                  "additionalProperties": false,
+                  "properties": {
+                    "current": {
+                      "$ref": "../models/status-overview.json"
+                    },
+                    "history": {
+                      "type": "array",
+                      "maxItems": 3,
+                      "minItems": 0,
+                      "items": {
+                        "$ref": "../models/status-overview.json"
+                      }
+                    }
+                  }
+                },
+                "examples": {
+                  "example-1": {
+                    "value": {
+                      "current": {
+                        "code": "queued",
+                        "timestamp": "2020-05-20T08:31:01+02:00",
+                        "number": 2
+                      },
+                      "history": [
+                        {
+                          "code": "incomplete",
+                          "timestamp": "2020-05-20T08:30:08+02:00",
+                          "number": 1
+                        }
+                      ]
+                    }
+                  }
+                }
+              }
+            }
+          },
+          "401": {
+            "description": "Unauthorized",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "403": {
+            "description": "Forbidden",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "404": {
+            "description": "Not Found",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          }
+        },
+        "operationId": "get-application-status-history",
+        "description": "Ruft den aktuellen Status der Ãœbermittlung sowie einer Ãœbersicht der bisherigen Ãœbertragungshistorie ab.",
+        "security": [
+          {
+            "OAuth20": [
+              "destination:send"
+            ]
+          }
+        ]
+      }
+    },
+    "/destinations/{destinationId}/applications/{applicationId}/upload-status": {
+      "parameters": [
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "destinationId",
+          "in": "path",
+          "required": true
+        },
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "applicationId",
+          "in": "path",
+          "required": true
+        }
+      ],
+      "get": {
+        "summary": "Get Application Upload Status",
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "object",
+                  "additionalProperties": false,
+                  "properties": {
+                    "data": {
+                      "type": "object",
+                      "additionalProperties": false,
+                      "properties": {
+                        "status": {
+                          "type": "string",
+                          "enum": [
+                            "missing",
+                            "partial",
+                            "complete"
+                          ]
+                        },
+                        "length": {
+                          "type": "integer",
+                          "minimum": 0
+                        }
+                      },
+                      "required": [
+                        "status",
+                        "length"
+                      ]
+                    },
+                    "docs": {
+                      "type": "array",
+                      "items": {
+                        "type": "object",
+                        "additionalProperties": false,
+                        "properties": {
+                          "docId": {
+                            "type": "string",
+                            "pattern": "^[-_.A-Za-z0-9]+$",
+                            "description": "Id des Dokuments. Diese muss nur innerhalb des Antrags (Application) eindeutig sein. Es wird daher empfohlen, die IDs fortlaufend (1, 2 etc.) zu vergeben."
+                          },
+                          "status": {
+                            "type": "string",
+                            "enum": [
+                              "missing",
+                              "partial",
+                              "complete"
+                            ]
+                          },
+                          "length": {
+                            "type": "integer",
+                            "minimum": 0
+                          }
+                        },
+                        "required": [
+                          "docId",
+                          "status",
+                          "length"
+                        ]
+                      }
+                    }
+                  }
+                },
+                "examples": {
+                  "example-1": {
+                    "value": {
+                      "data": {
+                        "status": "complete",
+                        "length": 0
+                      },
+                      "docs": [
+                        {
+                          "status": "complete",
+                          "docId": "1",
+                          "length": 13046
+                        }
+                      ]
+                    }
+                  }
+                }
+              }
+            }
+          },
+          "401": {
+            "description": "Unauthorized",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "403": {
+            "description": "Forbidden",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "404": {
+            "description": "Not Found",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          }
+        },
+        "operationId": "get-application-upload-status",
+        "description": "Abfrage des Ãœbermittlungsstatus. Listet alle Unterresourcen (data und docs) mit Ãœbermittlungsstatus auf.",
+        "tags": [
+          "Transfer related Information"
+        ],
+        "security": [
+          {
+            "OAuth20": [
+              "destination:send"
+            ]
+          }
+        ]
+      }
+    },
+    "/destinations/{destinationId}/applications": {
+      "parameters": [
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "destinationId",
+          "in": "path",
+          "required": true
+        }
+      ],
+      "post": {
+        "summary": "Create Application",
+        "operationId": "create-application",
+        "responses": {
+          "201": {
+            "description": "Created",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "object",
+                  "additionalProperties": false,
+                  "properties": {
+                    "applicationId": {
+                      "type": "string"
+                    }
+                  },
+                  "required": [
+                    "applicationId"
+                  ]
+                },
+                "examples": {
+                  "example-1": {
+                    "value": {
+                      "applicationId": "0c508e3f-2353-4206-9a1e-34b2e864d5a8"
+                    }
+                  }
+                }
+              }
+            }
+          },
+          "400": {
+            "description": "Bad Request",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "401": {
+            "description": "Unauthorized",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "403": {
+            "description": "Forbidden",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "404": {
+            "description": "Not Found"
+          },
+          "413": {
+            "description": "Request Entity Too Large",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          }
+        },
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "../models/application/metadata-no-id.json"
+              },
+              "examples": {
+                "example-1": {
+                  "value": {
+                    "additionalReferenceInfo": {
+                      "subject": "Anmeldung eines Gewerbes in Musterstadt",
+                      "caseId": "DF/8923"
+                    },
+                    "contentStructure": {
+                      "data": {
+                        "schema": {
+                          "mimeType": "application/json",
+                          "schemaSource": "none",
+                        }
+                      },
+                      "docs": [
+                        {
+                          "docId": "1",
+                          "purpose": "form",
+                          "size": 13046,
+                          "mimeType": "application/pdf",
+                          "filename": "test.pdf",
+                          "description": "Das Antragsformular",
+                          "lang": {
+                            "lang": "de",
+                            "region": "DE"
+                          },
+                          "hash": {
+                            "algorithm": "SHA-256",
+                            "digest": "bf37d894fdf9aeade63975ed648d49c3e8a7a773923597d2418915f54cd7c3b9"
+                          }
+                        }
+                      ]
+                    },
+                    "publicServiceType": {
+                      "name": "Gewerbeanmeldung",
+                      "description": "Eine Gewerbeanmeldung ist immer dann notwendig, wenn Sie einen stehenden Gewerbebetrieb beginnen.",
+                      "leikaId": "99050012104000",
+                      "otherIdentifiers": [
+                        {
+                          "id": "8664844",
+                          "schemeId": "service.niedersachsen.de",
+                          "schemeName": "Serviceportal Niedersachsen"
+                        },
+                        {
+                          "id": "354824",
+                          "schemeId": "buerger.thueringen.de",
+                          "schemeName": "Zuständigkeitsfinder Thüringen"
+                        }
+                      ]
+                    }
+                  }
+                }
+              }
+            }
+          },
+          "description": "Metadaten des Antrags"
+        },
+        "description": "Ãœbertragung initiieren",
+        "tags": [
+          "Application Transfer"
+        ],
+        "security": [
+          {
+            "OAuth20": [
+              "destination:send"
+            ]
+          }
+        ]
+      }
+    },
+    "/destinations/{destinationId}/applications/{applicationId}/status": {
+      "parameters": [
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "destinationId",
+          "in": "path",
+          "required": true
+        },
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "applicationId",
+          "in": "path",
+          "required": true
+        }
+      ],
+      "get": {
+        "summary": "Get Status (current)",
+        "tags": [
+          "status"
+        ],
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/status-overview.json"
+                },
+                "examples": {
+                  "example-1": {
+                    "value": {
+                      "code": "queued",
+                      "timestamp": "2020-05-20T08:31:01+02:00",
+                      "number": 2
+                    }
+                  }
+                }
+              }
+            }
+          },
+          "401": {
+            "description": "Unauthorized",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "403": {
+            "description": "Forbidden",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "404": {
+            "description": "Not Found",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          }
+        },
+        "operationId": "get-application-status",
+        "description": "Ruft den aktuellen Status der Ãœbermittlung ab.",
+        "security": [
+          {
+            "OAuth20": [
+              "destination:send"
+            ]
+          }
+        ]
+      },
+      "put": {
+        "summary": "Send Application",
+        "operationId": "commit-application",
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/status-overview.json"
+                },
+                "examples": {
+                  "example-1": {
+                    "value": {
+                      "code": "queued",
+                      "timestamp": "2020-05-20T08:31:01.135842+02:00",
+                      "number": 2
+                    }
+                  }
+                }
+              }
+            }
+          },
+          "400": {
+            "description": "Bad Request",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "401": {
+            "description": "Unauthorized",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "403": {
+            "description": "Forbidden",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "404": {
+            "description": "Not Found",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          }
+        },
+        "description": "Übertragung abschließen, Antrag absenden",
+        "parameters": [],
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "type": "object",
+                "properties": {
+                  "code": {
+                    "type": "string",
+                    "enum": [
+                      "queued"
+                    ]
+                  }
+                },
+                "required": [
+                  "code"
+                ]
+              },
+              "examples": {
+                "example-1": {
+                  "value": {
+                    "code": "queued"
+                  }
+                }
+              }
+            }
+          },
+          "description": ""
+        },
+        "tags": [
+          "Application Transfer"
+        ],
+        "security": [
+          {
+            "OAuth20": [
+              "destination:send"
+            ]
+          }
+        ]
+      }
+    },
+    "/info": {
+      "get": {
+        "summary": "Get Info",
+        "tags": [],
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "object",
+                  "properties": {
+                    "version": {
+                      "type": "object",
+                      "properties": {
+                        "major": {
+                          "type": "integer"
+                        },
+                        "minor": {
+                          "type": "integer"
+                        },
+                        "patch": {
+                          "type": "integer"
+                        }
+                      }
+                    }
+                  }
+                },
+                "examples": {
+                  "example-1": {
+                    "value": {
+                      "version": {
+                        "major": 0,
+                        "minor": 7,
+                        "patch": 0
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        },
+        "operationId": "get-info",
+        "security": [
+          {
+            "OAuth20": [
+              "destination:send"
+            ]
+          }
+        ],
+        "description": "Gibt Informationen über den Server aus. Kann zu Testzwecken aufgerufen werden (Test der Erreichbarkeit und Zugriffaberechtigung)."
+      }
+    }
+  },
+  "tags": [
+    {
+      "name": "Application Transfer"
+    },
+    {
+      "name": "status"
+    },
+    {
+      "name": "Transfer related Information"
+    }
+  ],
+  "components": {
+    "securitySchemes": {
+      "OAuth20": {
+        "type": "oauth2",
+        "flows": {
+          "clientCredentials": {
+            "tokenUrl": "https://sender-test-token.fiep-poc.de/auth/realms/test/protocol/openid-connect/token",
+            "scopes": {
+              "destination:send": "Dieser Zufriffsbereich erlaubt es Anträge (Applications) an alle Zustellpunkte (Destinations) über die Application Sender API zu senden."
+            }
+          }
+        },
+        "description": "Dieses Authentifizierungsmethode wird genutzt, um den Zugriff auf die API zu autorisieren. "
+      }
+    }
+  }
+}
diff --git a/reference/2_subscriber.json b/reference/2_subscriber.json
new file mode 100644
index 0000000000000000000000000000000000000000..f2a387c9efef1fd0d6c17939ac38b874170844bf
--- /dev/null
+++ b/reference/2_subscriber.json
@@ -0,0 +1,1472 @@
+{
+  "openapi": "3.0.0",
+  "info": {
+    "title": "Application Subscriber API",
+    "version": "0.7",
+    "description": "API vom Fachverfahren zum Zustelldienst",
+    "contact": {
+      "name": "FITKO",
+      "url": "https://www.fitko.de/"
+    },
+    "license": {
+      "name": "Creative Commons Attribution Share Alike 4.0 (CC BY-SA 4.0)",
+      "url": "https://creativecommons.org/licenses/by-sa/4.0/"
+    }
+  },
+  "servers": [
+    {
+      "url": "https://subscriber-test.fiep-poc.de/beta7",
+      "description": "Testsystem"
+    }
+  ],
+  "paths": {
+    "/destinations": {
+      "parameters": [],
+      "get": {
+        "summary": "List Destinations",
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "object",
+                  "properties": {
+                    "destinations": {
+                      "type": "array",
+                      "items": {
+                        "$ref": "../models/destination.json"
+                      }
+                    }
+                  }
+                },
+                "examples": {
+                  "example-1": {
+                    "value": {
+                      "destinations": [
+                        {
+                          "publicOrganization": {
+                            "organizationName": "Gewerbeamt Musterstadt",
+                            "address": {
+                              "type": "national",
+                              "street": "Kurzer Weg",
+                              "houseNumber": "7",
+                              "postalCode": "12345",
+                              "city": "Ankh-Morpork"
+                            },
+                            "contact": {
+                              "telephones": [
+                                {
+                                  "number": "+49 89 32168-0",
+                                  "mobile": false,
+                                  "description": "work"
+                                }
+                              ],
+                              "email": "behoerde@example.com"
+                            }
+                          },
+                          "schemas": [
+                            {
+                              "mimeType": "application/json",
+                              "schemaSource": "none",
+                            }
+                          ],
+                          "callback": {
+                            "callbackURI": "http://127.0.0.1:4010/voluptas"
+                          },
+                          "destinationId": "0ddf3ab5-dd89-4e04-9ecd-b2c50b0b4efd"
+                        },
+                        {
+                          "publicOrganization": {
+                            "organizationName": "Gewerbeamt Musterstadt",
+                            "address": {
+                              "type": "national",
+                              "street": "Kurzer Weg",
+                              "houseNumber": "7",
+                              "postalCode": "12345",
+                              "city": "Ankh-Morpork"
+                            }
+                          },
+                          "technicalContact": [
+                            {
+                              "formOfAddress": "Herr",
+                              "doctoralDegrees": "Dr.",
+                              "firstName": "Kunibert",
+                              "lastName": "Vonundzu",
+                              "contact": {
+                                "telephones": [
+                                  {
+                                    "number": "+49 89 32168-42",
+                                    "mobile": false,
+                                    "description": "work"
+                                  },
+                                  {
+                                    "number": "+49 123 456789",
+                                    "mobile": true,
+                                    "description": "work"
+                                  }
+                                ],
+                                "email": "kunibert.vonundzu@example.com"
+                              }
+                            }
+                          ],
+                          "schemas": [
+                            {
+                              "mimeType": "application/json",
+                              "schemaSource": "none",
+                            }
+                          ],
+                          "callback": {
+                            "callbackURI": "http://127.0.0.1:4010/voluptas"
+                          },
+                          "destinationId": "0ddf3ab5-dd89-4e04-9ecd-b2c50b0b4efd"
+                        },
+                        {
+                          "publicOrganization": {
+                            "organizationName": "Gewerbeamt Musterstadt",
+                            "address": {
+                              "type": "national",
+                              "street": "Kurzer Weg",
+                              "houseNumber": "7",
+                              "postalCode": "12345",
+                              "city": "Ankh-Morpork"
+                            },
+                            "contact": {
+                              "telephones": [
+                                {
+                                  "number": "+49 89 32168-0",
+                                  "mobile": false,
+                                  "description": "work"
+                                }
+                              ],
+                              "email": "behoerde@example.com"
+                            }
+                          },
+                          "schemas": [
+                            {
+                              "mimeType": "application/json",
+                              "schemaSource": "none",
+                            }
+                          ],
+                          "callback": {
+                            "callbackURI": "http://127.0.0.1:4010/voluptas"
+                          },
+                          "destinationId": "7881dba9-4055-4854-8b6d-11ea5b7f3047"
+                        }
+                      ]
+                    }
+                  }
+                }
+              }
+            }
+          },
+          "400": {
+            "description": "Bad Request",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "401": {
+            "description": "Unauthorized",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "403": {
+            "description": "Forbidden",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "404": {
+            "description": "Not Found",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          }
+        },
+        "operationId": "list-destinations",
+        "description": "Ruft die Liste aller Destinations dieses Accounts auf.",
+        "tags": [
+          "Destination Management"
+        ],
+        "security": [
+          {
+            "OAuth20": [
+              "destination:manage",
+              "destination:subscribe"
+            ]
+          }
+        ]
+      },
+      "post": {
+        "summary": "Create Destination",
+        "operationId": "create-destination",
+        "responses": {
+          "201": {
+            "description": "Created",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "object",
+                  "additionalProperties": false,
+                  "properties": {
+                    "destinationId": {
+                      "type": "string"
+                    }
+                  },
+                  "required": [
+                    "destinationId"
+                  ]
+                },
+                "examples": {
+                  "example-1": {
+                    "value": {
+                      "destinationId": "7881dba9-4055-4854-8b6d-11ea5b7f3047"
+                    }
+                  }
+                }
+              }
+            }
+          },
+          "400": {
+            "description": "Bad Request",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "401": {
+            "description": "Unauthorized",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "403": {
+            "description": "Forbidden",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          }
+        },
+        "description": "Legt eine neue Destination an.",
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "../models/destination-no-id.json"
+              },
+              "examples": {
+                "example-1": {
+                  "value": {
+                    "publicOrganization": {
+                      "organizationName": "Gewerbeamt Musterstadt",
+                      "address": {
+                        "type": "national",
+                        "street": "Kurzer Weg",
+                        "houseNumber": "7",
+                        "postalCode": "12345",
+                        "city": "Ankh-Morpork"
+                      },
+                      "contact": {
+                        "telephones": [
+                          {
+                            "number": "+49 89 32168-0",
+                            "mobile": false,
+                            "description": "work"
+                          }
+                        ],
+                        "email": "behoerde@example.com"
+                      }
+                    },
+                    "technicalContact": [
+                      {
+                        "formOfAddress": "Herr",
+                        "doctoralDegrees": "Dr.",
+                        "firstName": "Kunibert",
+                        "lastName": "Vonundzu",
+                        "contact": {
+                          "telephones": [
+                            {
+                              "number": "+49 89 32168-42",
+                              "mobile": false,
+                              "description": "work"
+                            },
+                            {
+                              "number": "+49 123 456789",
+                              "mobile": true,
+                              "description": "work"
+                            }
+                          ],
+                          "email": "kunibert.vonundzu@example.com"
+                        }
+                      }
+                    ],
+                    "schemas": [
+                      {
+                        "mimeType": "application/json",
+                        "schemaSource": "none",
+                      }
+                    ],
+                    "callback": {
+                      "callbackURI": "http://127.0.0.1:4010/voluptas"
+                    }
+                  }
+                }
+              }
+            }
+          },
+          "description": "Anzulegende Destination"
+        },
+        "tags": [
+          "Destination Management"
+        ],
+        "security": [
+          {
+            "OAuth20": [
+              "destination:manage"
+            ]
+          }
+        ]
+      }
+    },
+    "/destinations/{destinationId}/applications/{applicationId}/data": {
+      "parameters": [
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "destinationId",
+          "in": "path",
+          "required": true
+        },
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "applicationId",
+          "in": "path",
+          "required": true
+        }
+      ],
+      "get": {
+        "summary": "Get Application Data",
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "object",
+                  "properties": {}
+                },
+                "examples": {
+                  "example-1": {
+                    "value": {
+                      "F99000001": "string",
+                      "G99000001": {
+                        "F99000002": "string",
+                        "F99000003": 42
+                      },
+                      "G99000002": [
+                        {
+                          "F99000004": true,
+                          "G99000001": {
+                            "F99000002": "string",
+                            "F99000003": 17
+                          }
+                        },
+                        {
+                          "F99000004": true,
+                          "G99000001": {
+                            "F99000002": "string",
+                            "F99000003": 24
+                          }
+                        }
+                      ]
+                    }
+                  }
+                }
+              },
+              "application/xml": {
+                "schema": {
+                  "type": "object",
+                  "properties": {}
+                },
+                "examples": {}
+              },
+              "application/jose": {
+                "schema": {
+                  "type": "string",
+                  "pattern": "^[a-zA-Z0-9-_=.]+$",
+                  "description": "JSON Web Encryption Compact Serialization, RFC 7516"
+                },
+                "examples": {
+                  "example-1": {
+                    "value": "eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.nlXGAufYH36IABDy0En0LXEhGfC20IZSSchs27ADalHpRoTZKfXhc7hcMk8Y9V8yTP0jYbmrq6NtEg-QS2O5TQFD9Hluhpb631PBgKjPXHYX1Y6iUcR1sXxSUPjePi8F8PcZUZuUJLnhz6myyc9scdAq9BXG2cDJVgkfLI8eZdrqnrY24Hh32_7d5OKLFSpSDrBlqfyQuY8Wbs2h8Wy4Z4hwT1aWDO7b-SqJA181hUbNcF_rR4Mze3Fdtu-3uOIQYgLBBRmN1ZHDLk0EKNCI4B8MyDKLGPoM0ZomV5lVwVWjAMRI4CgQkIQ9rnm-Adof-GbegQL3yJSoNIWRWgzCnZBYZ638QgPllCMVW3WvEVvsgj0Hj16PbofqXTQ5S73LINfP6FZawfC0yMrYjSV_N2L0Lkp2KI3BkJcy-PcFhBnhwu2IsJGAlyDRCnXdVqig8m5yLHuSMQTpLW69LzPEskfsjhnNDR-CEBZpicjMfc-4CL6U7E7YoGc_99DzE5U5._JfqyKH23GiKsnDW.ZtMMjZ3GgcgHss8qbFRhrjl4L0kAfbco-oXICkk.VBHJ00FyDTYjOA_OYfiz5g"
+                  }
+                }
+              },
+              "text/plain": {
+                "schema": {
+                  "$ref": "../models/common/base64.json"
+                }
+              }
+            }
+          },
+          "400": {
+            "description": "Bad Request",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "401": {
+            "description": "Unauthorized",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "403": {
+            "description": "Forbidden",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "404": {
+            "description": "Not Found",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          }
+        },
+        "operationId": "get-application-data",
+        "description": "Ruft die Fachdaten der Application ab.\n\nBeispiele:\n#### JSON\n```json\n{\n    \"F99000001\": \"Eins\",\n    \"G99000001\": {\n        \"F99000002\": \"Zwei\",\n        \"F99000003\": \"Drei\"\n    }\n}\n```\n\n#### XML\n```xml\n<S99000001>\n  <F99000001>Eins</F99000001>\n  <G99000001>\n    <F99000002>Zwei</F99000002>\n    <F99000003>Drei</F99000003>\n  </G99000001>\n</S99000001>\n```",
+        "tags": [
+          "Application Retrieval"
+        ],
+        "security": [
+          {
+            "OAuth20": [
+              "destination:manage",
+              "destination:subscribe"
+            ]
+          }
+        ]
+      }
+    },
+    "/destinations/{destinationId}/applications/{applicationId}/docs/{docId}": {
+      "parameters": [
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "destinationId",
+          "in": "path",
+          "required": true
+        },
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "applicationId",
+          "in": "path",
+          "required": true
+        },
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "docId",
+          "in": "path",
+          "required": true
+        }
+      ],
+      "get": {
+        "summary": "Get Application Document",
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "*/*": {
+                "schema": {
+                  "type": "string",
+                  "format": "binary"
+                }
+              }
+            }
+          },
+          "400": {
+            "description": "Bad Request",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "401": {
+            "description": "Unauthorized",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "403": {
+            "description": "Forbidden",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "404": {
+            "description": "Not Found",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          }
+        },
+        "operationId": "get-application-document",
+        "description": "Ruf ein Dokument (Formular oder Anlage) der Application ab.",
+        "tags": [
+          "Application Retrieval"
+        ],
+        "security": [
+          {
+            "OAuth20": [
+              "destination:manage",
+              "destination:subscribe"
+            ]
+          }
+        ]
+      }
+    },
+    "/destinations/{destinationId}/applications/{applicationId}": {
+      "parameters": [
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "destinationId",
+          "in": "path",
+          "required": true
+        },
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "applicationId",
+          "in": "path",
+          "required": true
+        }
+      ],
+      "get": {
+        "summary": "Get Application Metadata",
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/application/metadata.json"
+                },
+                "examples": {
+                  "example-1": {
+                    "value": {
+                      "additionalReferenceInfo": {
+                        "subject": "Anmeldung eines Gewerbes in Musterstadt",
+                        "caseId": "DF/8923"
+                      },
+                      "contentStructure": {
+                        "data": {
+                          "schema": {
+                            "mimeType": "application/json",
+                            "schemaSource": "none",
+                          }
+                        },
+                        "docs": [
+                          {
+                            "docId": "1",
+                            "purpose": "form",
+                            "size": 13046,
+                            "mimeType": "application/pdf",
+                            "filename": "test.pdf",
+                            "description": "Das Antragsformular",
+                            "lang": {
+                              "lang": "de",
+                              "region": "DE"
+                            },
+                            "hash": {
+                              "algorithm": "SHA-256",
+                              "digest": "bf37d894fdf9aeade63975ed648d49c3e8a7a773923597d2418915f54cd7c3b9"
+                            }
+                          }
+                        ]
+                      },
+                      "publicServiceType": {
+                        "name": "Gewerbeanmeldung",
+                        "description": "Eine Gewerbeanmeldung ist immer dann notwendig, wenn Sie einen stehenden Gewerbebetrieb beginnen.",
+                        "leikaId": "99050012104000",
+                        "otherIdentifiers": [
+                          {
+                            "id": "8664844",
+                            "schemeId": "service.niedersachsen.de",
+                            "schemeName": "Serviceportal Niedersachsen"
+                          },
+                          {
+                            "id": "354824",
+                            "schemeId": "buerger.thueringen.de",
+                            "schemeName": "Zuständigkeitsfinder Thüringen"
+                          }
+                        ]
+                      },
+                      "applicationId": "0c508e3f-2353-4206-9a1e-34b2e864d5a8"
+                    }
+                  }
+                }
+              }
+            }
+          },
+          "400": {
+            "description": "Bad Request",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "401": {
+            "description": "Unauthorized",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "403": {
+            "description": "Forbidden",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "404": {
+            "description": "Not Found",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          }
+        },
+        "operationId": "get-application",
+        "description": "Ruft eine wartende Application ab.",
+        "tags": [
+          "Application Retrieval"
+        ],
+        "security": [
+          {
+            "OAuth20": [
+              "destination:manage",
+              "destination:subscribe"
+            ]
+          }
+        ]
+      }
+    },
+    "/destinations/{destinationId}/applications": {
+      "parameters": [
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "destinationId",
+          "in": "path",
+          "required": true
+        }
+      ],
+      "get": {
+        "summary": "List Applications",
+        "operationId": "list-applications",
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "object",
+                  "properties": {
+                    "applications": {
+                      "type": "array",
+                      "items": {
+                        "$ref": "../models/application/metadata.json"
+                      }
+                    }
+                  }
+                },
+                "examples": {
+                  "example-1": {
+                    "value": {
+                      "applications": []
+                    }
+                  },
+                  "example-2": {
+                    "value": {
+                      "applications": [
+                        {
+                          "additionalReferenceInfo": {
+                            "subject": "Anmeldung eines Gewerbes in Musterstadt",
+                            "caseId": "DF/8923"
+                          },
+                          "contentStructure": {
+                            "data": {
+                              "schema": {
+                                "mimeType": "application/json",
+                                "schemaSource": "none",
+                              }
+                            },
+                            "docs": [
+                              {
+                                "docId": "1",
+                                "purpose": "form",
+                                "size": 13046,
+                                "mimeType": "application/pdf",
+                                "filename": "test.pdf",
+                                "description": "Das Antragsformular",
+                                "lang": {
+                                  "lang": "de",
+                                  "region": "DE"
+                                },
+                                "hash": {
+                                  "algorithm": "SHA-256",
+                                  "digest": "bf37d894fdf9aeade63975ed648d49c3e8a7a773923597d2418915f54cd7c3b9"
+                                }
+                              }
+                            ]
+                          },
+                          "publicServiceType": {
+                            "name": "Gewerbeanmeldung",
+                            "description": "Eine Gewerbeanmeldung ist immer dann notwendig, wenn Sie einen stehenden Gewerbebetrieb beginnen.",
+                            "leikaId": "99050012104000",
+                            "otherIdentifiers": [
+                              {
+                                "id": "8664844",
+                                "schemeId": "service.niedersachsen.de",
+                                "schemeName": "Serviceportal Niedersachsen"
+                              },
+                              {
+                                "id": "354824",
+                                "schemeId": "buerger.thueringen.de",
+                                "schemeName": "Zuständigkeitsfinder Thüringen"
+                              }
+                            ]
+                          },
+                          "applicationId": "0c508e3f-2353-4206-9a1e-34b2e864d5a8"
+                        }
+                      ]
+                    }
+                  }
+                }
+              }
+            }
+          },
+          "400": {
+            "description": "Bad Request",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "401": {
+            "description": "Unauthorized",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "403": {
+            "description": "Forbidden",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "404": {
+            "description": "Not Found",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          }
+        },
+        "description": "Ruft die Liste der wartenden Applications ab.",
+        "tags": [
+          "Application Retrieval"
+        ],
+        "security": [
+          {
+            "OAuth20": [
+              "destination:manage",
+              "destination:subscribe"
+            ]
+          }
+        ]
+      }
+    },
+    "/destinations/{destinationId}": {
+      "parameters": [
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "destinationId",
+          "in": "path",
+          "required": true
+        }
+      ],
+      "get": {
+        "summary": "Get Destination",
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/destination.json"
+                },
+                "examples": {
+                  "example-1": {
+                    "value": {
+                      "publicOrganization": {
+                        "organizationName": "Gewerbeamt Musterstadt",
+                        "address": {
+                          "type": "national",
+                          "street": "Kurzer Weg",
+                          "houseNumber": "7",
+                          "postalCode": "12345",
+                          "city": "Ankh-Morpork"
+                        },
+                        "contact": {
+                          "telephones": [
+                            {
+                              "number": "+49 89 32168-0",
+                              "mobile": false,
+                              "description": "work"
+                            }
+                          ],
+                          "email": "behoerde@example.com"
+                        }
+                      },
+                      "technicalContact": [
+                        {
+                          "formOfAddress": "Herr",
+                          "doctoralDegrees": "Dr.",
+                          "firstName": "Kunibert",
+                          "lastName": "Vonundzu",
+                          "contact": {
+                            "telephones": [
+                              {
+                                "number": "+49 89 32168-42",
+                                "mobile": false,
+                                "description": "work"
+                              },
+                              {
+                                "number": "+49 123 456789",
+                                "mobile": true,
+                                "description": "work"
+                              }
+                            ],
+                            "email": "kunibert.vonundzu@example.com"
+                          }
+                        }
+                      ],
+                      "schemas": [
+                        {
+                          "mimeType": "application/json",
+                          "schemaSource": "none",
+                        }
+                      ],
+                      "callback": {
+                        "callbackURI": "http://127.0.0.1:4010/voluptas"
+                      },
+                      "destinationId": "7881dba9-4055-4854-8b6d-11ea5b7f3047"
+                    }
+                  }
+                }
+              }
+            }
+          },
+          "400": {
+            "description": "Bad Request",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "401": {
+            "description": "Unauthorized",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "403": {
+            "description": "Forbidden",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "404": {
+            "description": "Not Found",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          }
+        },
+        "operationId": "get-destination",
+        "description": "Ãœbertragungsziel abfragen",
+        "tags": [
+          "Destination Management"
+        ],
+        "security": [
+          {
+            "OAuth20": [
+              "destination:manage",
+              "destination:subscribe"
+            ]
+          }
+        ]
+      },
+      "put": {
+        "summary": "Update Destination",
+        "operationId": "update-destination",
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "object",
+                  "additionalProperties": false,
+                  "properties": {
+                    "result": {
+                      "type": "string",
+                      "enum": [
+                        "success"
+                      ]
+                    }
+                  },
+                  "required": [
+                    "result"
+                  ]
+                }
+              }
+            }
+          },
+          "400": {
+            "description": "Bad Request",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "401": {
+            "description": "Unauthorized",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "403": {
+            "description": "Forbidden",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "404": {
+            "description": "Not Found",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          }
+        },
+        "description": "Ãœbertragungsziel aktualisieren",
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "../models/destination.json"
+              },
+              "examples": {
+                "example-1": {
+                  "value": {
+                    "destinationId": "7881dba9-4055-4854-8b6d-11ea5b7f3047",
+                    "publicOrganization": {
+                      "organizationName": "Gewerbeamt Ankh-Morpork",
+                      "address": {
+                        "type": "national",
+                        "street": "Kurzer Weg",
+                        "houseNumber": "7",
+                        "postalCode": "12345",
+                        "city": "Ankh-Morpork"
+                      },
+                      "contact": {
+                        "telephones": [
+                          {
+                            "number": "+49 89 32168-0",
+                            "mobile": false,
+                            "description": "work"
+                          }
+                        ],
+                        "email": "behoerde@example.com"
+                      }
+                    },
+                    "technicalContact": [
+                      {
+                        "formOfAddress": "Herr",
+                        "doctoralDegrees": "Dr.",
+                        "firstName": "Kunibert",
+                        "lastName": "Vonundzu",
+                        "contact": {
+                          "telephones": [
+                            {
+                              "number": "+49 89 32168-42",
+                              "mobile": false,
+                              "description": "work"
+                            },
+                            {
+                              "number": "+49 123 456789",
+                              "mobile": true,
+                              "description": "work"
+                            }
+                          ],
+                          "email": "kunibert.vonundzu@example.com"
+                        }
+                      }
+                    ],
+                    "schemas": [
+                      {
+                        "mimeType": "application/json",
+                        "schemaSource": "none"
+                      }
+                    ],
+                    "callback": {
+                      "callbackURI": "http://127.0.0.1:4010/voluptas"
+                    }
+                  }
+                }
+              }
+            }
+          }
+        },
+        "tags": [
+          "Destination Management"
+        ],
+        "security": [
+          {
+            "OAuth20": [
+              "destination:manage"
+            ]
+          }
+        ]
+      },
+      "delete": {
+        "summary": "Delete Destination",
+        "operationId": "delete-destination",
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "object",
+                  "additionalProperties": false,
+                  "properties": {
+                    "result": {
+                      "type": "string",
+                      "enum": [
+                        "success"
+                      ]
+                    }
+                  },
+                  "required": [
+                    "result"
+                  ]
+                }
+              }
+            }
+          },
+          "400": {
+            "description": "Bad Request",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "401": {
+            "description": "Unauthorized",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "403": {
+            "description": "Forbidden",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "404": {
+            "description": "Not Found",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          }
+        },
+        "description": "Übertragungsziel löschen",
+        "tags": [
+          "Destination Management"
+        ],
+        "security": [
+          {
+            "OAuth20": [
+              "destination:manage"
+            ]
+          }
+        ]
+      }
+    },
+    "/destinations/{destinationId}/applications/{applicationId}/status": {
+      "parameters": [
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "destinationId",
+          "in": "path",
+          "required": true
+        },
+        {
+          "schema": {
+            "type": "string"
+          },
+          "name": "applicationId",
+          "in": "path",
+          "required": true
+        }
+      ],
+      "put": {
+        "summary": "Acknowledge Application",
+        "operationId": "ack-application",
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "object",
+                  "additionalProperties": false,
+                  "properties": {
+                    "result": {
+                      "type": "string",
+                      "enum": [
+                        "success"
+                      ]
+                    }
+                  },
+                  "required": [
+                    "result"
+                  ]
+                }
+              }
+            }
+          },
+          "400": {
+            "description": "Bad Request",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "401": {
+            "description": "Unauthorized",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "403": {
+            "description": "Forbidden",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          },
+          "404": {
+            "description": "Not Found",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "../models/error-body.json"
+                }
+              }
+            }
+          }
+        },
+        "description": "Bestätigt die Abholung der Application.\n\nDer Parameter `code` zeigt an, ob der Antrag noch weitergesendet wurde (`forwarded`) oder das finale Ziel erreicht hat (`delivered`).\n\nSofern der Wert `forwarded` übergeben wurde, muss zu einem späteren Zeitpunkt, wenn der Antrag final zugestellt wurde, ein weiterer Aufruf mit dem Wert `delivered` erfolgen.",
+        "requestBody": {
+          "content": {
+            "application/json": {
+              "schema": {
+                "type": "object",
+                "additionalProperties": false,
+                "properties": {
+                  "code": {
+                    "type": "string",
+                    "description": "Zeigt an, ob die Zustellung zum nächsten Hop (`forwarded`) oder bis zum Endpunkt (`delivered`) erfolgt ist.",
+                    "enum": [
+                      "forwarded",
+                      "delivered"
+                    ]
+                  }
+                },
+                "required": [
+                  "code"
+                ]
+              },
+              "examples": {
+                "example-1": {
+                  "value": {
+                    "code": "forwarded"
+                  }
+                },
+                "example-2": {
+                  "value": {
+                    "code": "delivered"
+                  }
+                }
+              }
+            }
+          },
+          "description": "Details der Quittung"
+        },
+        "tags": [
+          "Application Retrieval"
+        ],
+        "security": [
+          {
+            "OAuth20": [
+              "destination:manage",
+              "destination:subscribe"
+            ]
+          }
+        ]
+      }
+    },
+    "/info": {
+      "get": {
+        "summary": "Get Info",
+        "tags": [],
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "object",
+                  "properties": {
+                    "version": {
+                      "type": "object",
+                      "properties": {
+                        "major": {
+                          "type": "integer"
+                        },
+                        "minor": {
+                          "type": "integer"
+                        },
+                        "patch": {
+                          "type": "integer"
+                        }
+                      }
+                    }
+                  }
+                },
+                "examples": {
+                  "example-1": {
+                    "value": {
+                      "version": {
+                        "major": 0,
+                        "minor": 7,
+                        "patch": 0
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        },
+        "operationId": "get-info",
+        "security": [
+          {
+            "OAuth20": [
+              "destination:manage",
+              "destination:subscribe"
+            ]
+          }
+        ],
+        "description": "Gibt Informationen über den Server aus. Kann zu Testzwecken aufgerufen werden (Test der Erreichbarkeit und Zugriffaberechtigung)."
+      }
+    }
+  },
+  "tags": [
+    {
+      "name": "Destination Management"
+    },
+    {
+      "name": "Application Retrieval"
+    }
+  ],
+  "components": {
+    "securitySchemes": {
+      "OAuth20": {
+        "type": "oauth2",
+        "flows": {
+          "clientCredentials": {
+            "tokenUrl": "https://subscriber-test-token.fiep-poc.de/auth/realms/test/protocol/openid-connect/token",
+            "scopes": {
+              "destination:manage": "Dieser Zugriffsbereich alle Destination Endpunkte eines Subscriber genutzt werden.",
+              "destination:subscribe": "Dieser Zugriffsbereich erlaubt es, Anträge für allen Destinations abzuholen."
+            }
+          }
+        },
+        "description": "Dieses Authentifizierungsmethode wird genutzt, um den Zugriff auf die API zu autorisieren. "
+      }
+    }
+  }
+}
\ No newline at end of file