diff --git a/src/admin/admin.controller.ts b/src/admin/admin.controller.ts
index 6f7b0874895e7fc2be070a8b6e68c8e7b7ff341e..de7d201a3eed05d3d3d8af8c6efc3128c2ab6c4f 100644
--- a/src/admin/admin.controller.ts
+++ b/src/admin/admin.controller.ts
@@ -16,7 +16,7 @@ import { validate } from 'class-validator';
 import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
 import { NewsletterSubscription } from '../newsletter/newsletter-subscription.schema';
 import { NewsletterService } from '../newsletter/newsletter.service';
-import { Structure } from '../structures/schemas/structure.schema';
+import { Structure, StructureDocument } from '../structures/schemas/structure.schema';
 import { StructuresService } from '../structures/services/structures.service';
 import { Roles } from '../users/decorators/roles.decorator';
 import { RolesGuard } from '../users/guards/roles.guard';
@@ -315,10 +315,21 @@ export class AdminController {
   @ApiBearerAuth('JWT')
   @ApiOperation({ description: 'Get deleted structures' })
   @Get('getDeletedStructures')
-  public async getDeletedStructures() {
+  public async getDeletedStructures(): Promise<StructureDocument[]> {
     this.logger.debug('getDeletedStructures');
     const deletedStructures = await this.structuresService.findAll(true);
     this.logger.debug(`Found ${deletedStructures.length} deleted structures`);
     return deletedStructures;
   }
+
+  @UseGuards(JwtAuthGuard, RolesGuard)
+  @Roles('admin')
+  @ApiBearerAuth('JWT')
+  @ApiOperation({ description: 'Get deleted structures' })
+  @Post('restoreDeletedStructure/:structureId')
+  public async restoreDeletedStructures(@Param('structureId') structureId: string): Promise<void> {
+    this.logger.debug(`restoreDeletedStructures: ${structureId}`);
+    await this.structuresService.restoreStructure(structureId);
+    await this.structuresService.initiateStructureIndex();
+  }
 }
diff --git a/src/structures/services/structures.service.spec.ts b/src/structures/services/structures.service.spec.ts
index 26674c4adb78bd498c8b5b4c9a31c5ed16b4c140..3d38b1b29d18c2e8031544c3b873f08a91607062 100644
--- a/src/structures/services/structures.service.spec.ts
+++ b/src/structures/services/structures.service.spec.ts
@@ -619,4 +619,13 @@ describe('StructuresService', () => {
       expect(mockSetCNFSid).toHaveBeenCalledTimes(2);
     });
   });
+
+  describe('restoreStructure', () => {
+    it('should restore a structure', async () => {
+      mockStructureModel.findByIdAndUpdate.mockReturnThis();
+      mockStructureModel.exec.mockImplementation(() => null);
+      await service.restoreStructure('someId');
+      expect(mockStructureModel.findByIdAndUpdate).toBeCalled();
+    });
+  });
 });
diff --git a/src/structures/services/structures.service.ts b/src/structures/services/structures.service.ts
index 5018ad442d9aca900825fdfe73a1e2c252d123be..85191dd965273a3ff773d6d1d6bcb308bea2691c 100644
--- a/src/structures/services/structures.service.ts
+++ b/src/structures/services/structures.service.ts
@@ -1158,4 +1158,9 @@ export class StructuresService {
     }
     return null;
   }
+
+  public async restoreStructure(structureId: string) {
+    this.logger.debug(`restoreDeletedStructures: ${structureId}`);
+    this.structureModel.findByIdAndUpdate(structureId, { $unset: { deletedAt: 1 } }).exec();
+  }
 }