diff --git a/include/MantleAPI/Execution/i_environment.h b/include/MantleAPI/Execution/i_environment.h
index 9e9279f0baa89adbb12f2b0cc37fe0f642418421..7618dbd1f007c04c36aa41ee6a456bb7c3e249b1 100644
--- a/include/MantleAPI/Execution/i_environment.h
+++ b/include/MantleAPI/Execution/i_environment.h
@@ -26,6 +26,7 @@
 #include <MantleAPI/Traffic/default_routing_behavior.h>
 #include <MantleAPI/Traffic/i_controller_repository.h>
 #include <MantleAPI/Traffic/i_entity_repository.h>
+#include <MantleAPI/Traffic/i_traffic_swarm_service.h>
 
 #include <optional>
 #include <string>
@@ -119,6 +120,14 @@ public:
   /// @param entity_id         specifies the entity
   /// @param route_definition  specifies how the route shall be constructed
   virtual void AssignRoute(mantle_api::UniqueId entity_id, mantle_api::RouteDefinition route_definition) = 0;
+
+  /// @brief Initializes the traffic swarm service with the scenario parameters
+  ///
+  /// @param parameters The traffic swarm parameters
+  virtual void InitTrafficSwarmService(const TrafficSwarmParameters& parameters) = 0;
+
+  /// @brief Returns the traffic swarm service
+  [[nodiscard]] virtual ITrafficSwarmService& GetTrafficSwarmService() = 0;
 };
 }  // namespace mantle_api
 
diff --git a/include/MantleAPI/Traffic/i_traffic_swarm_service.h b/include/MantleAPI/Traffic/i_traffic_swarm_service.h
new file mode 100644
index 0000000000000000000000000000000000000000..f6089f8ef706fda3635cf0f47ab5767fda70c0e8
--- /dev/null
+++ b/include/MantleAPI/Traffic/i_traffic_swarm_service.h
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2023, Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+
+//-----------------------------------------------------------------------------
+/** @file  i_traffic_swarm_service.h */
+//-----------------------------------------------------------------------------
+
+#ifndef MANTLEAPI_TRAFFIC_I_TRAFFIC_SWARM_CONTROLLER_H
+#define MANTLEAPI_TRAFFIC_I_TRAFFIC_SWARM_CONTROLLER_H
+
+#include <vector>
+#include <MantleAPI/Common/vector.h>
+#include <MantleAPI/Common/pose.h>
+#include <units.h>
+
+namespace mantle_api
+{
+
+struct TrafficSwarmParameters
+{
+    std::string central_entity_name;
+    size_t maximum_number_of_vehicles;
+    units::velocity::meters_per_second_t vehicle_velocity;
+    units::length::meter_t exclusion_radius;
+    units::length::meter_t semi_minor_spawning_radius;
+    units::length::meter_t semi_major_spawning_radius;
+    units::length::meter_t spawning_area_longitudinal_offset;
+};
+
+class ITrafficSwarmService
+{
+public:
+    virtual std::vector<mantle_api::Pose> GetAvailableSpawningPoses() const = 0;
+    virtual mantle_api::VehicleProperties GetVehicleProperties(mantle_api::VehicleClass vehicle_class) const = 0;
+    virtual void UpdateControllerParameters(std::unique_ptr<mantle_api::ExternalControllerConfig>& config) = 0;
+    virtual void SetSwarmEntitiesCount(size_t count) = 0;
+};
+
+}  // namespace mantle_api
+
+#endif  // MANTLEAPI_TRAFFIC_I_TRAFFIC_SWARM_CONTROLLER_H
diff --git a/test/MantleAPI/Test/test_utils.h b/test/MantleAPI/Test/test_utils.h
old mode 100644
new mode 100755
index 309dfacbb955a8d4bad38403c63ec16a0372ea8d..414eef247c40af99c6d3f259cdc432298d1c7668
--- a/test/MantleAPI/Test/test_utils.h
+++ b/test/MantleAPI/Test/test_utils.h
@@ -28,6 +28,7 @@
 #include <MantleAPI/Traffic/i_controller_repository.h>
 #include <MantleAPI/Traffic/i_entity.h>
 #include <MantleAPI/Traffic/i_entity_repository.h>
+#include <MantleAPI/Traffic/i_traffic_swarm_service.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 
@@ -384,7 +385,10 @@ public:
 
   mantle_api::IVehicle& GetHost() override { return test_vehicle_; }
 
-  const std::vector<std::unique_ptr<mantle_api::IEntity>>& GetEntities() const override { return entities_; }
+  MOCK_METHOD(std::vector<std::unique_ptr<mantle_api::IEntity>>&,
+              GetEntities,
+              (),
+              (const, override));
 
   bool Contains(UniqueId id) const override
   {
@@ -474,6 +478,30 @@ public:
               (override));
 };
 
+class MockTrafficSwarmService : public mantle_api::ITrafficSwarmService
+{
+  public:
+    MOCK_METHOD(std::vector<mantle_api::Pose>,
+                GetAvailableSpawningPoses,
+                (),
+                (const, override));
+
+    MOCK_METHOD(mantle_api::VehicleProperties,
+                GetVehicleProperties,
+                (mantle_api::VehicleClass),
+                (const, override));
+
+    MOCK_METHOD(void,
+                UpdateControllerParameters,
+                (std::unique_ptr<mantle_api::ExternalControllerConfig>&),
+                (override));
+
+    MOCK_METHOD(void,
+                SetSwarmEntitiesCount,
+                (size_t),
+                (override));
+};
+
 class MockEnvironment : public mantle_api::IEnvironment
 {
 public:
@@ -561,12 +589,20 @@ public:
               (mantle_api::UniqueId entity_id, mantle_api::RouteDefinition route_definition),
               (override));
 
+  MOCK_METHOD(void,
+              InitTrafficSwarmService,
+              (const mantle_api::TrafficSwarmParameters& parameters),
+              (override));
+
+  MockTrafficSwarmService& GetTrafficSwarmService() override { return traffic_swarm_service_; }
+
 private:
   MockQueryService query_service_{};
   MockEntityRepository entity_repository_{};
   MockControllerRepository controller_repository_{};
   MockConverter converter_{};
   MockGeometryHelper geometry_helper_{};
+  MockTrafficSwarmService traffic_swarm_service_{};
 };
 
 }  // namespace mantle_api