diff --git a/pom.xml b/pom.xml
index 28be7a0624485bb04fb375e1cfb6c02e54778a04..a0bba2bc2a386e6f6e0bce093c70f4af4880c2d2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,6 +20,7 @@
 		<api-lib.version>0.13.0</api-lib.version>
 		<nachrichten-manager.version>2.14.0</nachrichten-manager.version>
 		<testcontainers-keycloak.version>3.2.0</testcontainers-keycloak.version>
+		<mockserver-client.version>5.15.0</mockserver-client.version>
 	</properties>
 	<dependencies>
 		<!-- OZG-Cloud -->
@@ -36,15 +37,15 @@
 
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-web</artifactId>
+			<artifactId>spring-boot-starter-validation</artifactId>
 		</dependency>
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-validation</artifactId>
+			<artifactId>spring-boot-starter-oauth2-client</artifactId>
 		</dependency>
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-oauth2-client</artifactId>
+			<artifactId>spring-boot-starter-webflux</artifactId>
 		</dependency>
 
 		<dependency>
@@ -76,6 +77,16 @@
 			<artifactId>junit-jupiter-engine</artifactId>
 			<scope>test</scope>
 		</dependency>
+		<dependency>
+			<groupId>org.mock-server</groupId>
+			<artifactId>mockserver-client-java</artifactId>
+			<version>${mockserver-client.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.mock-server</groupId>
+			<artifactId>mockserver-netty</artifactId>
+			<version>${mockserver-client.version}</version>
+		</dependency>
 
 		<dependency>
 			<groupId>org.springframework.cloud</groupId>
diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteService.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteService.java
index f3c31950924184016b8193ebb8a7a1b6f25044db..3e7704cbece229f55cc21654f4f5eba368d8ac1c 100644
--- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteService.java
+++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteService.java
@@ -2,17 +2,26 @@ package de.ozgcloud.nachrichten.postfach.osiv2;
 
 import java.util.stream.Stream;
 
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
+import org.springframework.web.reactive.function.client.WebClient;
 
 import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
 import de.ozgcloud.nachrichten.postfach.PostfachRemoteService;
 
 @Service
-public class OsiPostfachRemoteService implements PostfachRemoteService {
+public record OsiPostfachRemoteService(
+		@Qualifier("osi2PostfachWebClient") WebClient webClient
+) implements PostfachRemoteService {
 	public static final String POSTFACH_TYPE_OSIV2 = "OSIV2";
 
 	@Override
 	public void sendMessage(PostfachNachricht nachricht) {
+		webClient.get()
+				.uri("/dummy")
+				.retrieve()
+				.bodyToMono(String.class)
+				.block();
 		// TODO
 	}
 
diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/config/WebClientConfiguration.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/config/WebClientConfiguration.java
new file mode 100644
index 0000000000000000000000000000000000000000..df081b1e89413553485b5538130eb39d1f820890
--- /dev/null
+++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/config/WebClientConfiguration.java
@@ -0,0 +1,44 @@
+package de.ozgcloud.nachrichten.postfach.osiv2.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.security.oauth2.client.AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager;
+import org.springframework.security.oauth2.client.InMemoryReactiveOAuth2AuthorizedClientService;
+import org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizedClientProviderBuilder;
+import org.springframework.security.oauth2.client.registration.ReactiveClientRegistrationRepository;
+import org.springframework.security.oauth2.client.web.reactive.function.client.ServerOAuth2AuthorizedClientExchangeFilterFunction;
+import org.springframework.web.reactive.function.client.WebClient;
+
+@Configuration
+public class WebClientConfiguration {
+
+	@Bean("osi2PostfachWebClient")
+	public WebClient osi2PostfachWebClient(
+			ServerOAuth2AuthorizedClientExchangeFilterFunction serverOAuth2AuthorizedClientExchangeFilterFunction) {
+		return WebClient.builder()
+				.filter(serverOAuth2AuthorizedClientExchangeFilterFunction)
+				.build();
+	}
+
+	@Bean
+	@Primary
+	ServerOAuth2AuthorizedClientExchangeFilterFunction serverOAuth2AuthorizedClientExchangeFilterFunction(
+			ReactiveClientRegistrationRepository clientRegistrations) {
+		var clientService = new InMemoryReactiveOAuth2AuthorizedClientService(
+				clientRegistrations);
+		var authorizedClientManager = new AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager(
+				clientRegistrations, clientService);
+
+		authorizedClientManager.setAuthorizedClientProvider(
+				ReactiveOAuth2AuthorizedClientProviderBuilder.builder()
+						.clientCredentials()
+						.build());
+
+		var oauth = new ServerOAuth2AuthorizedClientExchangeFilterFunction(
+				authorizedClientManager);
+		oauth.setDefaultClientRegistrationId("osi2");
+		return oauth;
+	}
+
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 065fffe83bf04cd7a435ee3d7a96b347b2f9379e..d4cb32c0faf29fd7af331ba279f559d616a6ee47 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,3 +1,17 @@
 spring:
+  main:
+    web-application-type: reactive
   jackson:
-    default-property-inclusion: NON_NULL
\ No newline at end of file
+    default-property-inclusion: NON_NULL
+  security:
+    oauth2:
+      client:
+        registration:
+          osi2:
+            client-id: 'OZG-Kopfstelle'
+            client-secret: 'changeme'
+            scope: default, access_urn:some:scope:for:ozgkopfstelle
+            authorization-grant-type: 'client_credentials'
+        provider:
+          osi2:
+            token-uri: 'replaceme'
\ No newline at end of file
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java
index a9892fd3d7847e4ba2a366859f191a893efa4535..ea1467648a13826a1a5feda2ace4d3872c8f08c7 100644
--- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java
@@ -1,15 +1,27 @@
 package de.ozgcloud.nachrichten.postfach.osiv2;
 
+import static org.assertj.core.api.Assertions.*;
+import static org.mockserver.model.HttpRequest.*;
+import static org.mockserver.model.HttpResponse.*;
+
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
+import org.mockserver.client.MockServerClient;
+import org.mockserver.matchers.Times;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.DynamicPropertyRegistry;
+import org.springframework.test.context.DynamicPropertySource;
 
 import dasniko.testcontainers.keycloak.KeycloakContainer;
 import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
 
-@SpringBootTest(classes = OsiPostfachRemoteService.class)
+@SpringBootTest(classes = TestApplication.class, webEnvironment = SpringBootTest.WebEnvironment.NONE)
 public class OsiPostfachRemoteServiceITCase {
 	private static final String MESSAGE_ID = "message-id";
 
@@ -20,17 +32,63 @@ public class OsiPostfachRemoteServiceITCase {
 	@Autowired
 	private OsiPostfachRemoteService osiPostfachRemoteService;
 
+	private static MockServerClient mockServerClient;
+	private static KeycloakContainer keycloakContainer;
+
+	@BeforeAll
+	public static void setupAll() {
+		mockServerClient = new MockServerClient("127.0.0.1", 1080);
+		keycloakContainer = new KeycloakContainer("quay.io/keycloak/keycloak:24.0.5")
+				.withRealmImportFile("keycloak-realm.json");
+		keycloakContainer.start();
+	}
+
+	@DynamicPropertySource
+	static void dynamicProperties(DynamicPropertyRegistry registry) {
+		registry.add("spring.security.oauth2.client.provider.osi2.token-uri", () ->
+				keycloakContainer.getAuthServerUrl() + "/webidp2/connect/token");
+	}
+
+	@AfterAll
+	public static void tearDownAll() {
+		mockServerClient.stop();
+		keycloakContainer.stop();
+	}
+
+	@BeforeEach
+	public void setup() {
+		mockServerClient
+				.when(
+						request()
+								.withMethod("GET")
+								.withPath("/dummy"),
+						Times.exactly(1)
+				)
+				.respond(
+						response()
+								.withStatusCode(200)
+				);
+	}
+
+	@AfterEach
+	public void tearDown() {
+		mockServerClient.reset();
+	}
+
 	@DisplayName("send message")
 	@Nested
 	class TestSendMessage {
-		@DisplayName("should not fail")
+		@DisplayName("should send dummy request")
 		@Test
-		void shouldNotFail() {
-			try (var keycloakContainer = new KeycloakContainer("quay.io/keycloak/keycloak:24.0.5")
-					.withRealmImportFile("keycloak-realm.json")) {
-				keycloakContainer.start();
-				osiPostfachRemoteService.sendMessage(postfachNachricht);
-			}
+		void shouldSendDummyRequest() {
+			osiPostfachRemoteService.sendMessage(postfachNachricht);
+
+			var requests = mockServerClient.retrieveRecordedRequests(
+					request()
+							.withMethod("GET")
+							.withPath("/dummy")
+			);
+			assertThat(requests).hasSize(1);
 		}
 	}
 }
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/TestApplication.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/TestApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..afa904e215a5a977eaffd542aadc82e26db44004
--- /dev/null
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/TestApplication.java
@@ -0,0 +1,9 @@
+package de.ozgcloud.nachrichten.postfach.osiv2;
+
+import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+@AutoConfiguration
+public class TestApplication {
+}