diff --git a/ExpressAPI/src/managers/GitlabManager.ts b/ExpressAPI/src/managers/GitlabManager.ts
index bd2746ab4323f39d16b3ab7cee410c463b42ddfe..56e81f79d705a44dbac9fe77c73e5bb33a70b990 100644
--- a/ExpressAPI/src/managers/GitlabManager.ts
+++ b/ExpressAPI/src/managers/GitlabManager.ts
@@ -3,7 +3,7 @@ import { StatusCodes }
 import GitlabVisibility                                                                                                                                                                       from '../shared/types/Gitlab/GitlabVisibility.js';
 import express                                                                                                                                                                                from 'express';
 import SharedConfig                                                                                                                                                                           from '../shared/config/SharedConfig.js';
-import { CommitSchema, ExpandedUserSchema, Gitlab, MemberSchema, ProjectBadgeSchema, ProjectSchema, ReleaseSchema, RepositoryFileExpandedSchema, RepositoryFileSchema, RepositoryTreeSchema } from '@gitbeaker/rest';
+import { ArchiveType, CommitSchema, ExpandedUserSchema, Gitlab, MemberSchema, ProjectBadgeSchema, ProjectSchema, ReleaseSchema, RepositoryFileExpandedSchema, RepositoryFileSchema, RepositoryTreeSchema } from '@gitbeaker/rest';
 import logger                                                                                                                                                                                 from '../shared/logging/WinstonLogger.js';
 import { AccessLevel, EditProjectOptions, ProjectVariableSchema, ProtectedBranchAccessLevel, ProtectedBranchSchema }                                                                          from '@gitbeaker/core';
 import DojoStatusCode                                                                                                                                                                         from '../shared/types/Dojo/DojoStatusCode.js';
@@ -267,6 +267,17 @@ class GitlabManager extends SharedGitlabManager {
             return Promise.reject(e);
         }
     }
+
+    async exportRepository(repoId: number, extension: ArchiveType): Promise<Blob> {
+        try {
+            return await this.api.Repositories.showArchive(repoId, {
+                fileType: extension
+            });
+        } catch ( e ) {
+            logger.error(JSON.stringify(e));
+            return Promise.reject(e);
+        }
+    }
 }
 
 
diff --git a/ExpressAPI/src/routes/AssignmentRoutes.ts b/ExpressAPI/src/routes/AssignmentRoutes.ts
index 5f46129df7cf916d4b7a94f17bb108f32289ee4c..acac72d10747afad42f00b81099bf2651728e80a 100644
--- a/ExpressAPI/src/routes/AssignmentRoutes.ts
+++ b/ExpressAPI/src/routes/AssignmentRoutes.ts
@@ -80,6 +80,7 @@ class AssignmentRoutes implements RoutesManager {
         backend.post('/assignments/:assignmentNameOrUrl/corrections', SecurityMiddleware.check(true, SecurityCheckType.ASSIGNMENT_STAFF), ParamsValidatorMiddleware.validate(this.assignmentAddCorrigeValidator), this.linkUpdateAssignmentCorrection(false).bind(this) as RequestHandler);
         backend.patch('/assignments/:assignmentNameOrUrl/corrections/:exerciseIdOrUrl', SecurityMiddleware.check(true, SecurityCheckType.ASSIGNMENT_STAFF), ParamsValidatorMiddleware.validate(this.assignmentUpdateCorrigeValidator), this.linkUpdateAssignmentCorrection(true).bind(this) as RequestHandler);
         backend.delete('/assignments/:assignmentNameOrUrl/corrections/:exerciseIdOrUrl', SecurityMiddleware.check(true, SecurityCheckType.ASSIGNMENT_STAFF), this.unlinkAssignmentCorrection.bind(this) as RequestHandler);
+        backend.get('/assignments/:assignmentNameOrUrl/export', SecurityMiddleware.check(true, SecurityCheckType.ASSIGNMENT_STAFF), this.exportAssignment.bind(this) as RequestHandler);
     }
 
     // Get an assignment by its name or gitlab url
@@ -299,6 +300,12 @@ class AssignmentRoutes implements RoutesManager {
 
         return req.session.sendResponse(res, StatusCodes.OK);
     }
+
+    private async exportAssignment(req: express.Request, res: express.Response) {
+        let ext : Gitlab.ArchiveType = 'zip';
+        await GitlabManager.exportRepository(req.boundParams.assignment!.gitlabId, ext);
+        return req.session.sendResponse(res, StatusCodes.OK);
+    }
 }