diff --git a/helpers/Dojo/DojoBackendHelper.ts b/helpers/Dojo/DojoBackendHelper.ts
index 7475376fb003f3661e1363f3c437098b04ad6082..025c3876bc73bd9a6887279171a27668963f990f 100644
--- a/helpers/Dojo/DojoBackendHelper.ts
+++ b/helpers/Dojo/DojoBackendHelper.ts
@@ -3,7 +3,7 @@ import ClientsSharedConfig from '../../config/ClientsSharedConfig.js';
 
 
 class DojoBackendHelper {
-    public getApiUrl(route: ApiRoute, options?: Partial<{ assignmentNameOrUrl: string, exerciseIdOrUrl: string, gitlabProjectId: string }>): string {
+    public getApiUrl(route: ApiRoute, options?: Partial<{ assignmentNameOrUrl: string, exerciseIdOrUrl: string, gitlabProjectId: string, tagName: string }>): string {
         let url = `${ ClientsSharedConfig.apiURL }${ route }`;
 
         if ( options ) {
@@ -18,6 +18,10 @@ class DojoBackendHelper {
             if ( options.gitlabProjectId ) {
                 url = url.replace('{{gitlabProjectId}}', encodeURIComponent(options.gitlabProjectId));
             }
+
+            if ( options.tagName ) {
+                url = url.replace('{{tagName}}', encodeURIComponent(options.tagName));
+            }
         }
 
         return url;
diff --git a/models/Result.ts b/models/Result.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bc42a7666639f0de6c4dd51f869cb899daf6299c
--- /dev/null
+++ b/models/Result.ts
@@ -0,0 +1,17 @@
+import { CommitSchema }    from '@gitbeaker/rest';
+import ExerciseResultsFile from '../../shared/types/Dojo/ExerciseResultsFile';
+import { IFileDirStat }    from '../../shared/helpers/recursiveFilesStats/RecursiveFilesStats';
+
+
+export interface Result {
+    exerciseId: string;
+    dateTime: string;
+    commit: CommitSchema;
+    exitCode: number;
+    files: Array<IFileDirStat>;
+    results: ExerciseResultsFile;
+    success: boolean;
+}
+
+
+export default Result;
\ No newline at end of file
diff --git a/models/Tag.ts b/models/Tag.ts
new file mode 100644
index 0000000000000000000000000000000000000000..632f6578b60b6f709e3c3101e235740fe758fda2
--- /dev/null
+++ b/models/Tag.ts
@@ -0,0 +1,17 @@
+import { CommitSchema } from '@gitbeaker/rest';
+import Assignment       from './Assignment';
+import Exercise         from './Exercise';
+
+
+interface Tags {
+    name: string;
+    type: 'Language' | 'Framework' | 'Theme' | 'UserDefined';
+
+    exercise: Exercise | undefined;
+    assignment: Assignment | undefined;
+
+    correctionCommit: CommitSchema | undefined;
+}
+
+export default Tags;
+	
\ No newline at end of file
diff --git a/models/TagProposal.ts b/models/TagProposal.ts
new file mode 100644
index 0000000000000000000000000000000000000000..94c3c8c8ccd9cc8f88f4d04ee1e784a602fb777c
--- /dev/null
+++ b/models/TagProposal.ts
@@ -0,0 +1,9 @@
+interface TagProposal {
+    name: string;
+    type: 'Language' | 'Framework' | 'Theme' | 'UserDefined';
+    state: 'PendingApproval' | 'Declined' | 'Approved';
+    details: string;
+}
+
+
+export default TagProposal;
diff --git a/types/Dojo/ApiRoute.ts b/types/Dojo/ApiRoute.ts
index ef63323d1381f1af9f8acc1f3da044602b195fba..ea8478ac84d305c906499aaafae7e1290e42de32 100644
--- a/types/Dojo/ApiRoute.ts
+++ b/types/Dojo/ApiRoute.ts
@@ -10,8 +10,16 @@ enum ApiRoute {
     ASSIGNMENT_CORRECTION_LINK          = '/assignments/{{assignmentNameOrUrl}}/corrections',
     ASSIGNMENT_CORRECTION_UPDATE_DELETE = '/assignments/{{assignmentNameOrUrl}}/corrections/{{exerciseIdOrUrl}}',
     EXERCISE_CREATE                     = '/assignments/{{assignmentNameOrUrl}}/exercises',
-    EXERCISE_ASSIGNMENT                 = '/exercises/{{exerciseIdOrUrl}}/assignment',
-    EXERCISE_RESULTS                    = '/exercises/{{exerciseIdOrUrl}}/results'
+    EXERCISE_RESULTS                    = '/exercises/{{exerciseIdOrUrl}}/results',
+    EXERCISE_LIST                       = '/exercises',
+    EXERCISE_GET_DELETE                 = '/exercises/{{exerciseIdOrUrl}}',
+    EXERCISE_DETAILS_GET                = '/exercises/{{exerciseIdOrUrl}}/details',
+    EXERCISE_MEMBERS_GET                = '/exercises/{{exerciseIdOrUrl}}/members',
+    USER_LIST                           = '/users',
+    TAG_CREATE                          = '/tags',
+    TAG_DELETE                          = '/tags/{{tagName}}',
+    TAG_PROPOSAL_GET_CREATE             = '/tags/proposals',
+    TAG_PROPOSAL_UPDATE                 = '/tags/proposals/{{tagName}}',
 }