diff --git a/Tsi1.Api/Tsi1.Api/Controllers/SurveyController.cs b/Tsi1.Api/Tsi1.Api/Controllers/SurveyController.cs
index c05513baa8b3a89a686e1959d220d37defa0377f..c2bd326eb7bfb3134eb98f29aed587b72828b945 100644
--- a/Tsi1.Api/Tsi1.Api/Controllers/SurveyController.cs
+++ b/Tsi1.Api/Tsi1.Api/Controllers/SurveyController.cs
@@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Mvc;
 using Tsi1.BusinessLayer.Dtos;
 using Tsi1.BusinessLayer.Helpers;
 using Tsi1.BusinessLayer.Interfaces;
+using Tsi1.DataLayer.Entities;
 
 namespace Tsi1.Api.Controllers
 {
@@ -83,11 +84,13 @@ namespace Tsi1.Api.Controllers
             return Ok(result.Data);
         }
 
-        [Authorize(Roles = UserTypes.FacultyAdmin + ", " + UserTypes.UdelarAdmin)]
+        [Authorize(Roles = UserTypes.FacultyAdmin + ", " + UserTypes.UdelarAdmin + ", " + UserTypes.Student)]
         [HttpGet("Get/{surveyId}")]
         public async Task<IActionResult> Get(int surveyId)
         {
-            var result = await _surveyService.GetGlobalSurvey(surveyId);
+            var userId = int.Parse(HttpContext.User.Claims.FirstOrDefault(x => x.Type == "Id").Value);
+
+            var result = await _surveyService.Get(surveyId, userId);
 
             if (result.HasError)
             {
@@ -97,5 +100,24 @@ namespace Tsi1.Api.Controllers
             return Ok(result.Data);
         }
 
+        [Authorize(Roles = UserTypes.Student)]
+        [HttpPost("Complete")]
+        public async Task<IActionResult> Complete(SurveyResponseCreateDto surveyResponse)
+        {
+            var userId = int.Parse(HttpContext.User.Claims.FirstOrDefault(x => x.Type == "Id").Value);
+            surveyResponse.UserId = userId;
+
+            var result = await _surveyService.Complete(surveyResponse);
+
+            if (result.HasError)
+            {
+                return NotFound(result.Message);
+            }
+
+            return Ok(result.Data);
+        }
+
+
+
     }
 }
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SectionItemDetailDto.cs b/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SectionItemDetailDto.cs
index 9b6929057d90d5d05100f272a1818a7f01772e54..242f74d5178763ad580e4cd006ad5f71a698d645 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SectionItemDetailDto.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SectionItemDetailDto.cs
@@ -11,5 +11,6 @@ namespace Tsi1.BusinessLayer.Dtos
         public int SectionItemTypeId { get; set; }
         public ForumPreviewDto Forum { get; set; }
         public FileDetailDto File { get; set; }
+        public SurveyDetailDto Survey { get; set; }
     }
 }
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SurveyAnswerCreateDto.cs b/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SurveyAnswerCreateDto.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2b261bbc014c40692bb438284506f3055d07cd66
--- /dev/null
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SurveyAnswerCreateDto.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Text.Json.Serialization;
+
+namespace Tsi1.BusinessLayer.Dtos
+{
+    public class SurveyAnswerCreateDto
+    {
+        public int AnswerOptionId { get; set; }
+        public int SurveyQuestionId { get; set; }
+    }
+}
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SurveyAnswerDetailDto.cs b/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SurveyAnswerDetailDto.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d51d83f915a2dc32286c2568e84987fcb880a64c
--- /dev/null
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SurveyAnswerDetailDto.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Tsi1.BusinessLayer.Dtos
+{
+    public class SurveyAnswerDetailDto
+    {
+        public int Id { get; set; }
+        public int AnswerOptionId { get; set; }
+        public int SurveyResponseId { get; set; }
+        public int SurveyQuestionId { get; set; }
+    }
+}
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SurveyDetailDto.cs b/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SurveyDetailDto.cs
index 8d265956a3ff56d3e342d832bc83f161608f1b40..7420c7c1e258d100eab7daed7e418a7833c49e36 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SurveyDetailDto.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SurveyDetailDto.cs
@@ -11,6 +11,9 @@ namespace Tsi1.BusinessLayer.Dtos
         public bool IsGlobal { get; set; }
         public int TenantId { get; set; }
 
-        public ICollection<SurveyQuestionPreviewDto> SurveyQuestions { get; set; }
+        public List<SurveyQuestionPreviewDto> SurveyQuestions { get; set; }
+
+        public SurveyResponseDetailDto SurveyResponse { get; set; }
+
     }
 }
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SurveyResponseCreateDto.cs b/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SurveyResponseCreateDto.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2d8a31cf2b60df97ef20893561b9bf23f1edd8b1
--- /dev/null
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SurveyResponseCreateDto.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Text.Json.Serialization;
+
+namespace Tsi1.BusinessLayer.Dtos
+{
+    public class SurveyResponseCreateDto
+    {
+        [JsonIgnore]
+        public int UserId { get; set; }
+        public int SurveyId { get; set; }
+        public List<SurveyAnswerCreateDto> SurveyAnswers { get; set; }
+    }
+}
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SurveyResponseDetailDto.cs b/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SurveyResponseDetailDto.cs
new file mode 100644
index 0000000000000000000000000000000000000000..70f064b0c2014ba58ec0b17032c1b3e39a0cdc41
--- /dev/null
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SurveyResponseDetailDto.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Tsi1.BusinessLayer.Dtos
+{
+    public class SurveyResponseDetailDto
+    {
+        public int Id { get; set; }
+        public int UserId { get; set; }
+        public int SurveyId { get; set; }
+        public List<SurveyAnswerDetailDto> SurveyAnswers { get; set; }
+    }
+}
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs b/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs
index b6da4ce693a5224e87f7a5cb192e09723a3c58b7..1f30ef1cfdbb29e897c72ddc82dc175e8542b9b4 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs
@@ -45,6 +45,10 @@ namespace Tsi1.BusinessLayer.Helpers
             CreateMap<Survey, SurveyDetailDto>();
             CreateMap<SurveyQuestion, SurveyQuestionCreateDto>();
             CreateMap<SurveyQuestion, SurveyQuestionPreviewDto>();
+            CreateMap<SurveyResponse, SurveyResponseCreateDto>();
+            CreateMap<SurveyResponse, SurveyResponseDetailDto>();
+            CreateMap<SurveyAnswer, SurveyAnswerDetailDto>();
+            CreateMap<SurveyAnswer, SurveyAnswerCreateDto>();
 
             CreateMap<ForumCreateDto, Forum>();
             CreateMap<ForumPreviewDto, Forum>();
@@ -79,6 +83,10 @@ namespace Tsi1.BusinessLayer.Helpers
             CreateMap<SurveyPreviewDto, Survey>();
             CreateMap<SurveyQuestionCreateDto, SurveyQuestion>();
             CreateMap<SurveyQuestionPreviewDto, SurveyQuestion>();
+            CreateMap<SurveyResponseCreateDto, SurveyResponse>();
+            CreateMap<SurveyResponseDetailDto, SurveyResponse>();
+            CreateMap<SurveyAnswerDetailDto, SurveyAnswer>();
+            CreateMap<SurveyAnswerCreateDto, SurveyAnswer>();
 
         }
     }
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ISurveyService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ISurveyService.cs
index d77f1be63ab064dab9326b30cfc69134ae67d175..8ee85109c1928fae3f1eb262d664b5c6d97b780c 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ISurveyService.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ISurveyService.cs
@@ -12,6 +12,7 @@ namespace Tsi1.BusinessLayer.Interfaces
         Task<ServiceResult<bool>> CreateGlobalSurvey(SurveyCreateDto newSurvey);
         Task<ServiceResult<bool>> DeleteGlobalSurvey(int surveyId, string userType, int tenantId);
         Task<ServiceResult<List<SurveyPreviewDto>>> GetAllGlobalSurvey(int tenantId, string userType);
-        Task<ServiceResult<SurveyDetailDto>> GetGlobalSurvey(int surveyId);
+        Task<ServiceResult<SurveyDetailDto>> Get(int surveyId, int userId);
+        Task<ServiceResult<bool>> Complete(SurveyResponseCreateDto surveyResponse);
     }
 }
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Services/SurveyService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Services/SurveyService.cs
index e8933693d701449b6961f9209ef5d94352117a2d..fe63136b4413efe7eea9c4df774dda73980184b8 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Services/SurveyService.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Services/SurveyService.cs
@@ -103,14 +103,14 @@ namespace Tsi1.BusinessLayer.Services
             return result;
         }
 
-        public async Task<ServiceResult<SurveyDetailDto>> GetGlobalSurvey(int surveyId)
+        public async Task<ServiceResult<SurveyDetailDto>> Get(int surveyId, int userId)
         {
             var result = new ServiceResult<SurveyDetailDto>();
 
             var survey = await _context.Surveys
                 .Include(x => x.SurveyQuestions)
                 .FirstOrDefaultAsync(x => x.Id == surveyId);
-
+        
             if (survey == null)
             {
                 result.HasError = true;
@@ -118,7 +118,48 @@ namespace Tsi1.BusinessLayer.Services
                 return result;
             }
 
-            result.Data = _mapper.Map<SurveyDetailDto>(survey);
+            var surveyResponse = await _context.SurveyResponses
+                .Include(x => x.SurveyAnswers)
+                .FirstOrDefaultAsync(x => x.SurveyId == surveyId && x.UserId == userId);
+
+            var surveyResponseDto = _mapper.Map<SurveyResponseDetailDto>(surveyResponse);
+            var surveyDto = _mapper.Map<SurveyDetailDto>(survey);
+            surveyDto.SurveyResponse = surveyResponseDto;
+
+            result.Data = surveyDto;
+            return result;
+        }
+
+        public async Task<ServiceResult<bool>> Complete(SurveyResponseCreateDto surveyResponse)
+        {
+            var result = new ServiceResult<bool>();
+
+            var survey = await _context.Surveys
+                .FirstOrDefaultAsync(x => x.Id == surveyResponse.SurveyId);
+
+            if (survey == null)
+            {
+                result.HasError = true;
+                result.AddMessage(string.Format(ErrorMessages.SurveyDoesNotExist, surveyResponse.SurveyId));
+                return result;
+            }
+
+            var existingSurveyResponse = await _context.SurveyResponses
+                .Include(x => x.SurveyAnswers)
+                .FirstOrDefaultAsync(x => x.SurveyId == surveyResponse.SurveyId && x.UserId == surveyResponse.UserId);
+
+            if (existingSurveyResponse != null)
+            {
+                _mapper.Map(surveyResponse, existingSurveyResponse);
+            }
+            else
+            {
+                var newSurveyResponse = _mapper.Map<SurveyResponse>(surveyResponse);
+                _context.Add(newSurveyResponse);
+            }
+
+            await _context.SaveChangesAsync();
+
             return result;
         }
     }