diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/AccountIdTypeAdapter.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/AccountIdTypeAdapter.java
new file mode 100644
index 0000000..156bc93
--- /dev/null
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/AccountIdTypeAdapter.java
@@ -0,0 +1,41 @@
+// Copyright (C) 2026 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.ericsson.gerrit.plugins.highavailability.forwarder.commands;
+
+import com.google.gerrit.entities.Account;
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonParseException;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+import java.lang.reflect.Type;
+
+public class AccountIdTypeAdapter
+    implements JsonDeserializer<Account.Id>, JsonSerializer<Account.Id> {
+  @Override
+  public Account.Id deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
+      throws JsonParseException {
+    if (json == null || !json.isJsonPrimitive() || !json.getAsJsonPrimitive().isNumber()) {
+      throw new JsonParseException("Invalid account ID value: " + json);
+    }
+    return Account.id(json.getAsInt());
+  }
+
+  @Override
+  public JsonElement serialize(Account.Id src, Type typeOfSrc, JsonSerializationContext context) {
+    return context.serialize(src.id(), Integer.class);
+  }
+}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/ForwarderCommandsModule.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/ForwarderCommandsModule.java
index 7a1b039..07699fb 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/ForwarderCommandsModule.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/ForwarderCommandsModule.java
@@ -16,6 +16,7 @@
 
 import com.ericsson.gerrit.plugins.highavailability.forwarder.InstantTypeAdapter;
 import com.google.common.annotations.VisibleForTesting;
+import com.google.gerrit.entities.Account;
 import com.google.gerrit.server.events.EventGson;
 import com.google.gson.Gson;
 import com.google.inject.AbstractModule;
@@ -33,6 +34,7 @@
         .newBuilder()
         .registerTypeAdapter(Command.class, new CommandDeserializer())
         .registerTypeAdapter(Instant.class, new InstantTypeAdapter())
+        .registerTypeAdapter(Account.Id.class, new AccountIdTypeAdapter())
         .create();
   }
 }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/CommandDeserializerTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/CommandDeserializerTest.java
index 8818905..192de7c 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/CommandDeserializerTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/CommandDeserializerTest.java
@@ -19,6 +19,7 @@
 import com.ericsson.gerrit.plugins.highavailability.cache.Constants;
 import com.ericsson.gerrit.plugins.highavailability.forwarder.EventType;
 import com.ericsson.gerrit.plugins.highavailability.forwarder.rest.CacheKeyJsonParser;
+import com.google.gerrit.entities.Account;
 import com.google.gerrit.entities.Project;
 import com.google.gerrit.extensions.registration.DynamicMap;
 import com.google.gerrit.server.events.Event;
@@ -152,6 +153,26 @@
   }
 
   @Test
+  public void evictCacheAuthTokenAccountId() {
+    Account.Id accountId = Account.id(1001);
+    String keyJson = gson.toJson(accountId);
+    assertThat(keyJson).isEqualTo("1001");
+
+    Command cmd =
+        gson.fromJson(
+            String.format(
+                "{type: '%s', cacheName: '%s', keyJson: '%s'}",
+                EventType.CACHE_EVICTION, Constants.TOKENS, keyJson),
+            Command.class);
+    assertThat(cmd).isInstanceOf(EvictCache.class);
+    EvictCache evict = (EvictCache) cmd;
+    assertThat(evict.getCacheName()).isEqualTo(Constants.TOKENS);
+
+    Account.Id deserializedId = gson.fromJson(evict.getKeyJson(), Account.Id.class);
+    assertThat(deserializedId).isEqualTo(accountId);
+  }
+
+  @Test
   public void addToProjectList() {
     Command cmd =
         gson.fromJson(
