diff --git a/common/build.gradle b/common/build.gradle
index c38438d..578064a 100644
--- a/common/build.gradle
+++ b/common/build.gradle
@@ -3,4 +3,5 @@ dependencies {
 
     compileOnly 'io.papermc.paper:paper-api:1.21.1-R0.1-SNAPSHOT'
     compileOnly 'org.geysermc.floodgate:api:2.2.2-SNAPSHOT'
+    implementation 'org.apache.httpcomponents:httpclient:4.5.14'
 }
diff --git a/core/src/main/java/eu/mhsl/craftattack/spawn/core/util/api/WebsiteApiUtil.java b/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/CraftAttackApi.java
similarity index 91%
rename from core/src/main/java/eu/mhsl/craftattack/spawn/core/util/api/WebsiteApiUtil.java
rename to common/src/main/java/eu/mhsl/craftattack/spawn/common/api/CraftAttackApi.java
index a242549..ce54750 100644
--- a/core/src/main/java/eu/mhsl/craftattack/spawn/core/util/api/WebsiteApiUtil.java
+++ b/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/CraftAttackApi.java
@@ -1,4 +1,4 @@
-package eu.mhsl.craftattack.spawn.core.util.api;
+package eu.mhsl.craftattack.spawn.common.api;
 
 import eu.mhsl.craftattack.spawn.core.config.Configuration;
 import org.apache.http.client.utils.URIBuilder;
@@ -8,7 +8,7 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.Objects;
 
-public class WebsiteApiUtil {
+public class CraftAttackApi {
     private final static ConfigurationSection apiConfig = Objects.requireNonNull(Configuration.cfg.getConfigurationSection("api"));
     public final static String basePath = apiConfig.getString("baseurl");
     public final static String apiSecret = apiConfig.getString("secret");
diff --git a/core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/repositories/ReportRepository.java b/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/repositories/ReportRepository.java
similarity index 85%
rename from core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/repositories/ReportRepository.java
rename to common/src/main/java/eu/mhsl/craftattack/spawn/common/api/repositories/ReportRepository.java
index ee24487..f885df0 100644
--- a/core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/repositories/ReportRepository.java
+++ b/common/src/main/java/eu/mhsl/craftattack/spawn/common/api/repositories/ReportRepository.java
@@ -1,8 +1,8 @@
-package eu.mhsl.craftattack.spawn.core.api.client.repositories;
+package eu.mhsl.craftattack.spawn.common.api.repositories;
 
 import eu.mhsl.craftattack.spawn.core.api.client.HttpRepository;
 import eu.mhsl.craftattack.spawn.core.api.client.ReqResp;
-import eu.mhsl.craftattack.spawn.core.util.api.WebsiteApiUtil;
+import eu.mhsl.craftattack.spawn.common.api.CraftAttackApi;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
@@ -11,7 +11,7 @@ import java.util.UUID;
 
 public class ReportRepository extends HttpRepository {
     public ReportRepository() {
-        super(WebsiteApiUtil.getBaseUri(), WebsiteApiUtil::withAuthorizationSecret);
+        super(CraftAttackApi.getBaseUri(), new RequestModifier(CraftAttackApi::withAuthorizationSecret, null));
     }
 
     public record ReportCreationInfo(@NotNull UUID reporter, @Nullable UUID reported, String reason) {
diff --git a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/Report.java b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/Report.java
index bf67c41..3329d70 100644
--- a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/Report.java
+++ b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/metaGameplay/report/Report.java
@@ -2,7 +2,7 @@ package eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.report;
 
 import eu.mhsl.craftattack.spawn.core.Main;
 import eu.mhsl.craftattack.spawn.core.api.client.ReqResp;
-import eu.mhsl.craftattack.spawn.core.api.client.repositories.ReportRepository;
+import eu.mhsl.craftattack.spawn.common.api.repositories.ReportRepository;
 import eu.mhsl.craftattack.spawn.core.appliance.Appliance;
 import eu.mhsl.craftattack.spawn.core.appliance.ApplianceCommand;
 import net.kyori.adventure.text.Component;
diff --git a/core/src/main/java/eu/mhsl/craftattack/spawn/core/util/api/HttpStatus.java b/core/src/main/java/eu/mhsl/craftattack/spawn/core/api/HttpStatus.java
similarity index 90%
rename from core/src/main/java/eu/mhsl/craftattack/spawn/core/util/api/HttpStatus.java
rename to core/src/main/java/eu/mhsl/craftattack/spawn/core/api/HttpStatus.java
index 7c0ae69..861b267 100644
--- a/core/src/main/java/eu/mhsl/craftattack/spawn/core/util/api/HttpStatus.java
+++ b/core/src/main/java/eu/mhsl/craftattack/spawn/core/api/HttpStatus.java
@@ -1,4 +1,4 @@
-package eu.mhsl.craftattack.spawn.core.util.api;
+package eu.mhsl.craftattack.spawn.core.api;
 
 public class HttpStatus {
     public static final int OK = 200;
diff --git a/core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/HttpRepository.java b/core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/HttpRepository.java
index 8d8b7dd..9d3e1d1 100644
--- a/core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/HttpRepository.java
+++ b/core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/HttpRepository.java
@@ -10,23 +10,29 @@ import java.net.URISyntaxException;
 import java.net.http.HttpClient;
 import java.net.http.HttpRequest;
 import java.net.http.HttpResponse;
+import java.util.List;
+import java.util.Objects;
 import java.util.function.Consumer;
 
 @RepositoryLoader.Abstraction
 public abstract class HttpRepository extends Repository {
-    private final Consumer<URIBuilder> baseUriBuilder;
+    public record RequestModifier(
+        @Nullable Consumer<URIBuilder> uri,
+        @Nullable Consumer<HttpRequest.Builder> header
+    ) {}
+
+    private final List<RequestModifier> baseRequestModifier;
 
     public HttpRepository(URI basePath) {
-        this(basePath, null);
+        this(basePath, new RequestModifier(null, null));
     }
 
-    public HttpRepository(URI basePath, @Nullable Consumer<URIBuilder> baseUriBuilder) {
+    public HttpRepository(URI basePath, RequestModifier... baseRequestModifier) {
         super(basePath);
 
-        this.baseUriBuilder = baseUriBuilder == null
-            ? uriBuilder -> {
-        }
-            : baseUriBuilder;
+        this.baseRequestModifier = baseRequestModifier == null
+            ? List.of()
+            : List.of(baseRequestModifier);
     }
 
     protected <TInput, TOutput> ReqResp<TOutput> post(String command, TInput data, Class<TOutput> outputType) {
@@ -58,7 +64,11 @@ public abstract class HttpRepository extends Repository {
     private URI getUri(String command, Consumer<URIBuilder> parameters) {
         try {
             URIBuilder builder = new URIBuilder(this.basePath + "/" + command);
-            this.baseUriBuilder.accept(builder);
+            this.baseRequestModifier.stream()
+                .map(requestModifier -> requestModifier.uri)
+                .filter(Objects::nonNull)
+                .forEach(modifier -> modifier.accept(builder));
+
             parameters.accept(builder);
             return builder.build();
         } catch(URISyntaxException e) {
@@ -67,14 +77,22 @@ public abstract class HttpRepository extends Repository {
     }
 
     private HttpRequest.Builder getRequestBuilder(URI endpoint) {
-        return HttpRequest.newBuilder()
+        HttpRequest.Builder builder = HttpRequest.newBuilder()
             .uri(endpoint)
             .header("User-Agent", Main.instance().getServer().getBukkitVersion())
             .header("Content-Type", "application/json");
+
+        this.baseRequestModifier.stream()
+            .map(requestModifier -> requestModifier.header)
+            .filter(Objects::nonNull)
+            .forEach(modifier -> modifier.accept(builder));
+
+        return builder;
     }
 
     private <TResponse> ReqResp<TResponse> execute(HttpRequest request, Class<TResponse> clazz) {
         ReqResp<String> rawResponse = this.sendHttp(request);
+        Main.logger().info(String.format("HTTP-Repository fired %s, response: %s", request, rawResponse));
         return new ReqResp<>(rawResponse.status(), this.gson.fromJson(rawResponse.data(), clazz));
     }
 
diff --git a/core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/ReqResp.java b/core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/ReqResp.java
index 71aa0b3..d8f91cb 100644
--- a/core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/ReqResp.java
+++ b/core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/ReqResp.java
@@ -1,4 +1,16 @@
 package eu.mhsl.craftattack.spawn.core.api.client;
 
+import com.google.gson.Gson;
+import java.lang.reflect.Type;
+
 public record ReqResp<TData>(int status, TData data) {
+    public ReqResp<?> convertToTypeToken(Type type) {
+        var gson = new Gson();
+        return new ReqResp<>(this.status, gson.fromJson(gson.toJson(this.data), type));
+    }
+
+    @SuppressWarnings("unchecked")
+    public <T> T cast() {
+        return (T) this;
+    }
 }
\ No newline at end of file
diff --git a/core/src/main/resources/config.yml b/core/src/main/resources/config.yml
index ad100ed..9253978 100644
--- a/core/src/main/resources/config.yml
+++ b/core/src/main/resources/config.yml
@@ -77,3 +77,7 @@ shrinkingBorder:
   minimumSize: 10
   shrinkPerDay: 10
   shrinkTime: 03:00
+
+varoApi:
+  endpoint: "https://mhsl.eu/varo/api"
+  auth: "Basic xxx"
\ No newline at end of file
diff --git a/core/src/main/java/eu/mhsl/craftattack/spawn/core/util/api/EventApiUtil.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/api/EventServerApi.java
similarity index 88%
rename from core/src/main/java/eu/mhsl/craftattack/spawn/core/util/api/EventApiUtil.java
rename to craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/api/EventServerApi.java
index ffd8932..2be4c9b 100644
--- a/core/src/main/java/eu/mhsl/craftattack/spawn/core/util/api/EventApiUtil.java
+++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/api/EventServerApi.java
@@ -1,4 +1,4 @@
-package eu.mhsl.craftattack.spawn.core.util.api;
+package eu.mhsl.craftattack.spawn.craftattack.api;
 
 import eu.mhsl.craftattack.spawn.core.config.Configuration;
 import org.bukkit.configuration.ConfigurationSection;
@@ -7,7 +7,7 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.Objects;
 
-public class EventApiUtil {
+public class EventServerApi {
     private final static ConfigurationSection apiConfig = Objects.requireNonNull(Configuration.cfg.getConfigurationSection("event"));
     public final static String basePath = apiConfig.getString("api");
 
diff --git a/core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/repositories/EventRepository.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/api/repositories/EventRepository.java
similarity index 79%
rename from core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/repositories/EventRepository.java
rename to craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/api/repositories/EventRepository.java
index 2c586f2..9ddba9f 100644
--- a/core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/repositories/EventRepository.java
+++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/api/repositories/EventRepository.java
@@ -1,14 +1,14 @@
-package eu.mhsl.craftattack.spawn.core.api.client.repositories;
+package eu.mhsl.craftattack.spawn.craftattack.api.repositories;
 
 import eu.mhsl.craftattack.spawn.core.api.client.HttpRepository;
 import eu.mhsl.craftattack.spawn.core.api.client.ReqResp;
-import eu.mhsl.craftattack.spawn.core.util.api.EventApiUtil;
+import eu.mhsl.craftattack.spawn.craftattack.api.EventServerApi;
 
 import java.util.UUID;
 
 public class EventRepository extends HttpRepository {
     public EventRepository() {
-        super(EventApiUtil.getBaseUri());
+        super(EventServerApi.getBaseUri());
     }
 
     public record CreatedRoom(UUID uuid) {
diff --git a/core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/repositories/FeedbackRepository.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/api/repositories/FeedbackRepository.java
similarity index 73%
rename from core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/repositories/FeedbackRepository.java
rename to craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/api/repositories/FeedbackRepository.java
index fc9b05c..c1c4da5 100644
--- a/core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/repositories/FeedbackRepository.java
+++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/api/repositories/FeedbackRepository.java
@@ -1,9 +1,9 @@
-package eu.mhsl.craftattack.spawn.core.api.client.repositories;
+package eu.mhsl.craftattack.spawn.craftattack.api.repositories;
 
 import com.google.common.reflect.TypeToken;
 import eu.mhsl.craftattack.spawn.core.api.client.HttpRepository;
 import eu.mhsl.craftattack.spawn.core.api.client.ReqResp;
-import eu.mhsl.craftattack.spawn.core.util.api.WebsiteApiUtil;
+import eu.mhsl.craftattack.spawn.common.api.CraftAttackApi;
 
 import java.lang.reflect.Type;
 import java.util.List;
@@ -12,7 +12,7 @@ import java.util.UUID;
 
 public class FeedbackRepository extends HttpRepository {
     public FeedbackRepository() {
-        super(WebsiteApiUtil.getBaseUri(), WebsiteApiUtil::withAuthorizationSecret);
+        super(CraftAttackApi.getBaseUri(), new RequestModifier(CraftAttackApi::withAuthorizationSecret, null));
     }
 
     public record Request(String event, List<UUID> users) {
@@ -22,6 +22,7 @@ public class FeedbackRepository extends HttpRepository {
         final Type responseType = new TypeToken<Map<UUID, String>>() {
         }.getType();
         ReqResp<Object> rawData = this.post("feedback", data, Object.class);
+        // TODO: use convertToTypeToken from ReqResp
         return new ReqResp<>(rawData.status(), this.gson.fromJson(this.gson.toJson(rawData.data()), responseType));
     }
 }
diff --git a/core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/repositories/WhitelistRepository.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/api/repositories/WhitelistRepository.java
similarity index 73%
rename from core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/repositories/WhitelistRepository.java
rename to craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/api/repositories/WhitelistRepository.java
index bc3e207..1dd100e 100644
--- a/core/src/main/java/eu/mhsl/craftattack/spawn/core/api/client/repositories/WhitelistRepository.java
+++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/api/repositories/WhitelistRepository.java
@@ -1,14 +1,14 @@
-package eu.mhsl.craftattack.spawn.core.api.client.repositories;
+package eu.mhsl.craftattack.spawn.craftattack.api.repositories;
 
 import eu.mhsl.craftattack.spawn.core.api.client.HttpRepository;
 import eu.mhsl.craftattack.spawn.core.api.client.ReqResp;
-import eu.mhsl.craftattack.spawn.core.util.api.WebsiteApiUtil;
+import eu.mhsl.craftattack.spawn.common.api.CraftAttackApi;
 
 import java.util.UUID;
 
 public class WhitelistRepository extends HttpRepository {
     public WhitelistRepository() {
-        super(WebsiteApiUtil.getBaseUri(), WebsiteApiUtil::withAuthorizationSecret);
+        super(CraftAttackApi.getBaseUri(), new RequestModifier(CraftAttackApi::withAuthorizationSecret, null));
     }
 
     public record UserData(
diff --git a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/metaGameplay/event/Event.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/metaGameplay/event/Event.java
index 1837895..4c37244 100644
--- a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/metaGameplay/event/Event.java
+++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/metaGameplay/event/Event.java
@@ -2,14 +2,14 @@ package eu.mhsl.craftattack.spawn.craftattack.appliances.metaGameplay.event;
 
 import eu.mhsl.craftattack.spawn.core.Main;
 import eu.mhsl.craftattack.spawn.core.api.client.ReqResp;
-import eu.mhsl.craftattack.spawn.core.api.client.repositories.EventRepository;
+import eu.mhsl.craftattack.spawn.craftattack.api.repositories.EventRepository;
 import eu.mhsl.craftattack.spawn.core.api.server.HttpServer;
 import eu.mhsl.craftattack.spawn.core.appliance.Appliance;
 import eu.mhsl.craftattack.spawn.core.appliance.ApplianceCommand;
 import eu.mhsl.craftattack.spawn.craftattack.appliances.gameplay.customAdvancements.Advancements;
 import eu.mhsl.craftattack.spawn.craftattack.appliances.gameplay.customAdvancements.CustomAdvancements;
 import eu.mhsl.craftattack.spawn.core.util.IteratorUtil;
-import eu.mhsl.craftattack.spawn.core.util.api.HttpStatus;
+import eu.mhsl.craftattack.spawn.core.api.HttpStatus;
 import eu.mhsl.craftattack.spawn.core.util.entity.DisplayVillager;
 import eu.mhsl.craftattack.spawn.core.util.listener.DismissInventoryOpenFromHolder;
 import eu.mhsl.craftattack.spawn.core.util.listener.PlayerInteractAtEntityEventListener;
diff --git a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/metaGameplay/feedback/Feedback.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/metaGameplay/feedback/Feedback.java
index dd52b62..b588c96 100644
--- a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/metaGameplay/feedback/Feedback.java
+++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/metaGameplay/feedback/Feedback.java
@@ -2,10 +2,10 @@ package eu.mhsl.craftattack.spawn.craftattack.appliances.metaGameplay.feedback;
 
 import eu.mhsl.craftattack.spawn.core.Main;
 import eu.mhsl.craftattack.spawn.core.api.client.ReqResp;
-import eu.mhsl.craftattack.spawn.core.api.client.repositories.FeedbackRepository;
+import eu.mhsl.craftattack.spawn.craftattack.api.repositories.FeedbackRepository;
 import eu.mhsl.craftattack.spawn.core.appliance.Appliance;
 import eu.mhsl.craftattack.spawn.core.appliance.ApplianceCommand;
-import eu.mhsl.craftattack.spawn.core.util.api.HttpStatus;
+import eu.mhsl.craftattack.spawn.core.api.HttpStatus;
 import net.kyori.adventure.text.Component;
 import net.kyori.adventure.text.ComponentBuilder;
 import net.kyori.adventure.text.TextComponent;
diff --git a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tooling/whitelist/Whitelist.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tooling/whitelist/Whitelist.java
index 56092b5..ee82c86 100644
--- a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tooling/whitelist/Whitelist.java
+++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/tooling/whitelist/Whitelist.java
@@ -2,10 +2,10 @@ package eu.mhsl.craftattack.spawn.craftattack.appliances.tooling.whitelist;
 
 import eu.mhsl.craftattack.spawn.core.Main;
 import eu.mhsl.craftattack.spawn.core.api.client.ReqResp;
-import eu.mhsl.craftattack.spawn.core.api.client.repositories.WhitelistRepository;
+import eu.mhsl.craftattack.spawn.craftattack.api.repositories.WhitelistRepository;
 import eu.mhsl.craftattack.spawn.core.api.server.HttpServer;
 import eu.mhsl.craftattack.spawn.core.appliance.Appliance;
-import eu.mhsl.craftattack.spawn.core.util.api.HttpStatus;
+import eu.mhsl.craftattack.spawn.core.api.HttpStatus;
 import eu.mhsl.craftattack.spawn.core.util.server.Floodgate;
 import eu.mhsl.craftattack.spawn.core.util.text.DisconnectInfo;
 import eu.mhsl.craftattack.spawn.craftattack.appliances.gameplay.outlawed.Outlawed;
diff --git a/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/api/VaroApi.java b/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/api/VaroApi.java
new file mode 100644
index 0000000..7a445db
--- /dev/null
+++ b/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/api/VaroApi.java
@@ -0,0 +1,28 @@
+package eu.mhsl.craftattack.spawn.varo.api;
+
+import eu.mhsl.craftattack.spawn.core.config.Configuration;
+import org.bukkit.configuration.ConfigurationSection;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.http.HttpRequest;
+import java.util.Objects;
+
+public class VaroApi {
+    private final static ConfigurationSection apiConfig = Objects.requireNonNull(Configuration.cfg.getConfigurationSection("varoApi"));
+    public final static String basePath = apiConfig.getString("endpoint");
+    public final static String apiSecret = apiConfig.getString("auth");
+
+    public static URI getBaseUri() {
+        Objects.requireNonNull(basePath);
+        try {
+            return new URI(basePath);
+        } catch(URISyntaxException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public static void authorizationHeader(HttpRequest.Builder builder) {
+        builder.header("Authorization", apiSecret);
+    }
+}
\ No newline at end of file
diff --git a/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/api/repositories/TeamRepository.java b/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/api/repositories/TeamRepository.java
new file mode 100644
index 0000000..b98d8a7
--- /dev/null
+++ b/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/api/repositories/TeamRepository.java
@@ -0,0 +1,36 @@
+package eu.mhsl.craftattack.spawn.varo.api.repositories;
+
+import com.google.common.reflect.TypeToken;
+import eu.mhsl.craftattack.spawn.core.api.client.HttpRepository;
+import eu.mhsl.craftattack.spawn.core.api.client.ReqResp;
+import eu.mhsl.craftattack.spawn.varo.api.VaroApi;
+
+import java.util.List;
+import java.util.UUID;
+
+public class TeamRepository extends HttpRepository {
+    public TeamRepository() {
+        super(VaroApi.getBaseUri(), new RequestModifier(null, VaroApi::authorizationHeader));
+    }
+
+    public record Team(
+        String name,
+        String color,
+        Object lastJoined,
+        Object strikeWeight,
+        List<User> users
+    ) {
+        public record User(
+            UUID uuid,
+            boolean dead
+        ) {}
+    }
+
+    public ReqResp<List<Team>> getTeams() {
+        var resp = this.get("team", Object.class);
+        System.out.println(resp.toString());
+        return resp
+            .convertToTypeToken(new TypeToken<List<Team>>() {}.getType())
+            .cast();
+    }
+}
diff --git a/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/appliances/metaGameplay/teams/Teams.java b/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/appliances/metaGameplay/teams/Teams.java
index 88c5d6e..7602278 100644
--- a/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/appliances/metaGameplay/teams/Teams.java
+++ b/varo/src/main/java/eu/mhsl/craftattack/spawn/varo/appliances/metaGameplay/teams/Teams.java
@@ -4,6 +4,7 @@ import eu.mhsl.craftattack.spawn.core.Main;
 import eu.mhsl.craftattack.spawn.core.appliance.Appliance;
 import eu.mhsl.craftattack.spawn.core.util.text.DisconnectInfo;
 import eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.displayName.DisplayName;
+import eu.mhsl.craftattack.spawn.varo.api.repositories.TeamRepository;
 import eu.mhsl.craftattack.spawn.varo.appliances.metaGameplay.joinProtection.JoinProtection;
 import net.kyori.adventure.text.Component;
 import net.kyori.adventure.text.format.NamedTextColor;
@@ -18,19 +19,19 @@ import org.jetbrains.annotations.Nullable;
 import java.util.*;
 
 public class Teams extends Appliance implements DisplayName.Prefixed, DisplayName.Colored {
-    private Set<VaroTeam> teams = new HashSet<>() {{
-        this.add(new VaroTeam(
-            new HashSet<>() {{
-               this.add(new VaroTeam.Member(UUID.fromString("3a0a699c-7f0c-319b-839c-ccc8cac8ae63"), false));
-               this.add(new VaroTeam.Member(UUID.fromString("959ed433-14ea-38fe-918b-75b7d09466af"), true));
-            }},
-            "Die Admins",
-            "#0E0E0E"
-        ));
-    }};
+    private List<VaroTeam> teams = List.of();
+
+    public Teams() {
+        this.refreshTeamList();
+    }
 
     public void refreshTeamList() {
-
+        this.teams = this.queryRepository(TeamRepository.class).getTeams().data().stream()
+            .map(team -> new VaroTeam(
+                team.users().stream().map(user -> new VaroTeam.Member(user.uuid(), user.dead())).toList(),
+                team.name(),
+                team.color()
+            )).toList();
     }
 
     public boolean canLogin(UUID playerId) {
@@ -58,16 +59,14 @@ public class Teams extends Appliance implements DisplayName.Prefixed, DisplayNam
         VaroTeam team = this.getTeamFromPlayer(joinedPlayer.getUniqueId());
         Bukkit.getScheduler().scheduleSyncDelayedTask(
             Main.instance(),
-            () -> {
-                team.members.stream()
-                    .filter(member -> !member.isDead)
-                    .filter(member -> {
-                        Player p = Bukkit.getPlayer(member.player.getUniqueId());
-                        return p == null || !p.isOnline();
-                    })
-                    .findAny()
-                    .ifPresent(member -> team.kickTeam(disconnectInfo));
-            },
+            () ->  team.members.stream()
+                .filter(member -> !member.isDead)
+                .filter(member -> {
+                    Player p = Bukkit.getPlayer(member.player.getUniqueId());
+                    return p == null || !p.isOnline();
+                })
+                .findAny()
+                .ifPresent(member -> team.kickTeam(disconnectInfo)),
             Ticks.TICKS_PER_SECOND * (JoinProtection.resistanceDuration / 2)
         );
     }