diff --git a/deadlock-plugins/deadlock-extension/src/core/api.service.ts b/deadlock-plugins/deadlock-extension/src/core/api.service.ts
index a1cf95f26fcd4fceca6266b1bc1f47e17d81e33e..d4e5330788ef9949fa85b535c4c2828df8933a15 100644
--- a/deadlock-plugins/deadlock-extension/src/core/api.service.ts
+++ b/deadlock-plugins/deadlock-extension/src/core/api.service.ts
@@ -6,6 +6,7 @@ import { extensionError as error } from '../recorder/utils/log';
 import Controller from './controller';
 import ExtensionStore from './extensionStore';
 import KeycloakOAuth2DeviceFlowConnection from './keycloakOAuth2DeviceFlowConnection';
+import { MissionUser } from './mission/models/missionUser';
 import { User } from './mission/models/userChallenge';
 
 export default class ApiService {
@@ -129,9 +130,25 @@ export default class ApiService {
     return this.axiosInstance.get<User>(`users/${userId}`).then((res) => res.data);
   }
 
-  async grantAccessToRepository(userId: string, missionId: string): Promise<any> {
+  async grantAccessToRepository(userId: string, missionId: string): Promise<number> {
     return this.axiosInstance
-      .get<any>(`users/${userId}/missions/${missionId}/repositoryAccess`)
+      .post<MissionUser>(`users/${userId}/missions/${missionId}/repository/collaborator`)
+      .then((res) => res.status);
+  }
+
+  async pingUpdateWorkTime(userId: string, missionId: string): Promise<MissionUser> {
+    return this.axiosInstance
+      .post<MissionUser>(`users/${userId}/missions/${missionId}/worktime`, {
+        action: 'PING',
+      })
+      .then((res) => res.data);
+  }
+
+  async startUpdateWorkTime(userId: string, missionId: string): Promise<MissionUser> {
+    return this.axiosInstance
+      .post<MissionUser>(`users/${userId}/missions/${missionId}/worktime`, {
+        action: 'START',
+      })
       .then((res) => res.data);
   }
 }
diff --git a/deadlock-plugins/deadlock-extension/src/core/controller.ts b/deadlock-plugins/deadlock-extension/src/core/controller.ts
index 90076ccab8763d8d1136e6a3c6f42d7e57ecb653..0b638a78ba511b1233a66baf4cde5b415d714633 100644
--- a/deadlock-plugins/deadlock-extension/src/core/controller.ts
+++ b/deadlock-plugins/deadlock-extension/src/core/controller.ts
@@ -23,7 +23,7 @@ export default class Controller {
   private briefingView: BriefingView;
   private quickSetupView: QuickSetupView;
   private extensionStore: ExtensionStore;
-  private apiService: ApiService;
+  private _apiService: ApiService;
 
   private constructor(context: ExtensionContext) {
     this.extensionStore = ExtensionStore.getInstance(context);
@@ -36,7 +36,7 @@ export default class Controller {
       KEYCLOAK_USER_INFO_URL,
     );
 
-    this.apiService = new ApiService(this.connection, this.extensionStore, this);
+    this._apiService = new ApiService(this.connection, this.extensionStore, this);
 
     this.init();
   }
@@ -48,6 +48,10 @@ export default class Controller {
     return Controller.instance;
   }
 
+  public get apiService(): ApiService {
+    return this._apiService;
+  }
+
   private async init() {
     const that = this;
     window.registerUriHandler({
diff --git a/deadlock-plugins/deadlock-extension/src/core/mission/missionDevContainer.ts b/deadlock-plugins/deadlock-extension/src/core/mission/missionDevContainer.ts
index fae56b7dcb5f84e5001a5bef1fce2b0e1164306d..f595c87d27d68cbf10c2639f1958b6a6c0b245c7 100644
--- a/deadlock-plugins/deadlock-extension/src/core/mission/missionDevContainer.ts
+++ b/deadlock-plugins/deadlock-extension/src/core/mission/missionDevContainer.ts
@@ -88,6 +88,7 @@ export class MissionDevContainer {
           missionVersion: this.mission.version,
           remoteGitUsername: this.user.id.split('-').join(''),
           currentUserDetails: this.currentUser.details,
+          currentUserId: this.currentUser.id,
           remoteUserDetails: this.user.details,
         };
         return JSON.stringify(userChallengeJson, null, 2);
diff --git a/deadlock-plugins/deadlock-extension/src/core/mission/models/missionUser.ts b/deadlock-plugins/deadlock-extension/src/core/mission/models/missionUser.ts
new file mode 100644
index 0000000000000000000000000000000000000000..90b1481e0d0a847d78d27f4c77481a357e043031
--- /dev/null
+++ b/deadlock-plugins/deadlock-extension/src/core/mission/models/missionUser.ts
@@ -0,0 +1,12 @@
+export interface MissionUser {
+  startDate: number;
+  lastWorkTimeUpdate: number;
+  workTime: number;
+  bestScore: number;
+  started: boolean;
+  solved: boolean;
+  idle: boolean;
+  mission: string;
+  user: string;
+  status: string;
+}
diff --git a/deadlock-plugins/deadlock-extension/src/core/mission/models/userChallenge.ts b/deadlock-plugins/deadlock-extension/src/core/mission/models/userChallenge.ts
index 46f75dd7403b2e67556fd5458ab656ab5b0069bf..9abad84f5038f6b7922d8b0bf3acacf36d4a1a86 100644
--- a/deadlock-plugins/deadlock-extension/src/core/mission/models/userChallenge.ts
+++ b/deadlock-plugins/deadlock-extension/src/core/mission/models/userChallenge.ts
@@ -2,6 +2,7 @@ interface UserChallenge {
   giteaHost: string;
   giteaSshPort: number;
   username: string;
+  currentUserId: string;
   email: string;
   missionId: string;
   missionVersion: string;
diff --git a/deadlock-plugins/deadlock-extension/src/core/userConfig.ts b/deadlock-plugins/deadlock-extension/src/core/userConfig.ts
index 2d6928893d12283da2731d41db7a7a20d1a919aa..cc6a654a827011a533ba80ff99d130e4a9360a1c 100644
--- a/deadlock-plugins/deadlock-extension/src/core/userConfig.ts
+++ b/deadlock-plugins/deadlock-extension/src/core/userConfig.ts
@@ -27,11 +27,6 @@ export default abstract class UserConfig {
   getHost(): string {
     return this.userConfigJson?.host;
   }
-
-  getToken(): string {
-    return this.userConfigJson?.token;
-  }
-
   getGiteaHost(): string {
     return this.userConfigJson?.giteaHost;
   }
@@ -68,6 +63,10 @@ export default abstract class UserConfig {
     return this.userConfigJson?.remoteUserDetails;
   }
 
+  getCurrentUserId(): string {
+    return this.userConfigJson?.currentUserId;
+  }
+
   abstract loadText(): Promise<string>;
 
   public async init() {
diff --git a/deadlock-plugins/deadlock-extension/src/extension.ts b/deadlock-plugins/deadlock-extension/src/extension.ts
index ef68935d76c628a47ace6b4891187050e8f2e32c..4d55ec933fc3048993ad10189adcbb03c80ed847 100644
--- a/deadlock-plugins/deadlock-extension/src/extension.ts
+++ b/deadlock-plugins/deadlock-extension/src/extension.ts
@@ -11,6 +11,19 @@ import StartedMissionsView from './view/startedMissionsView';
 // TODO: refactor remove this
 export const userConfig = new UserConfigTheia();
 
+export async function runTimer(userId: string, missionId: string, context: ExtensionContext) {
+  const apiService = Controller.getInstance(context).apiService;
+  try {
+    await apiService.startUpdateWorkTime(userId, missionId);
+    setInterval(async () => {
+      await apiService.pingUpdateWorkTime(userId, missionId);
+    }, 60000); // 1 minute
+  } catch (e) {
+    window.showErrorMessage(`Erreur lors de l'enregistrement du temps de travail`);
+    error(JSON.stringify(e));
+  }
+}
+
 export async function activate(context: ExtensionContext) {
   window.showInformationMessage('Bienvenue sur Deadlock!');
   Controller.getInstance(context);
@@ -35,5 +48,6 @@ export async function activate(context: ExtensionContext) {
   }
   if (isDocker()) {
     Recorder.instance.run();
+    runTimer(userConfig.getCurrentUserId(), userConfig.getMissionId(), context);
   }
 }