diff --git a/Tsi1.Api/Tsi1.Api/Controllers/MessageController.cs b/Tsi1.Api/Tsi1.Api/Controllers/MessageController.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b6b03bff80a30dcc58a3874575190b331a4233df
--- /dev/null
+++ b/Tsi1.Api/Tsi1.Api/Controllers/MessageController.cs
@@ -0,0 +1,61 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Tsi1.BusinessLayer.Dtos;
+using Tsi1.BusinessLayer.Helpers;
+using Tsi1.BusinessLayer.Interfaces;
+
+namespace Tsi1.Api.Controllers
+{
+    [Route("api/[controller]")]
+    [ApiController]
+    public class MessageController : ControllerBase
+    {
+        private readonly IMessageService _messageService;
+
+        public MessageController(IMessageService messageService)
+        {
+            _messageService = messageService;
+        }
+
+
+        [Authorize(Roles = UserTypes.Student + ", " + UserTypes.Professor)]
+        [HttpGet("GetMessages/{receiverId}")]
+        public async Task<ActionResult> GetMessages(int receiverId)
+        {
+            var userId = int.Parse(HttpContext.User.Claims.FirstOrDefault(x => x.Type == "Id").Value);
+
+            var result = await _messageService.GetMessages(userId, receiverId);
+            
+            if (result.HasError)
+            {
+                return BadRequest(result.Message);
+            }
+
+            return Ok(result.Data);
+        }
+
+        [Authorize(Roles = UserTypes.Student + ", " + UserTypes.Professor)]
+        [HttpPost("Send")]
+        public async Task<ActionResult> Send(MessageCreateDto newMessage)
+        {
+            var userId = int.Parse(HttpContext.User.Claims.FirstOrDefault(x => x.Type == "Id").Value);
+
+            newMessage.SenderId = userId;
+
+            var result = await _messageService.Send(newMessage);
+
+            if (result.HasError)
+            {
+                return BadRequest(result.Message);
+            }
+
+            return Ok(result.Data);
+        }
+
+    }
+}
diff --git a/Tsi1.Api/Tsi1.Api/Startup.cs b/Tsi1.Api/Tsi1.Api/Startup.cs
index b6a5bffb90f09f6dcd33f75a44df4e413fad6540..c6a4f5f77e219c2b0ef5d769949efae4528551d4 100644
--- a/Tsi1.Api/Tsi1.Api/Startup.cs
+++ b/Tsi1.Api/Tsi1.Api/Startup.cs
@@ -42,12 +42,14 @@ namespace Tsi1.Api
 
             services.AddDbContext<Tsi1Context>(x => x.UseNpgsql(Configuration.GetConnectionString("PostgreSql")));
 
-            services.Configure<ITsi1DatabaseSettings>(
+            services.Configure<Tsi1DatabaseSettings>(
                 Configuration.GetSection(nameof(Tsi1DatabaseSettings)));
 
-            services.AddSingleton<Tsi1DatabaseSettings>(sp =>
+            services.AddSingleton<ITsi1DatabaseSettings>(sp =>
                 sp.GetRequiredService<IOptions<Tsi1DatabaseSettings>>().Value);
 
+            services.AddSingleton<IMessageService, MessageService>();
+
             services.AddScoped<IUserService, UserService>();
             services.AddScoped<IUserTypeService, UserTypeService>();
             services.AddScoped<ICourseService, CourseService>();
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs b/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs
index 95ed2d6e8f2f1d2e382d4b27728a71c05f72d58a..4563e7b0d11066b335c2adbb35f37de4732d47e8 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs
@@ -18,6 +18,8 @@ namespace Tsi1.BusinessLayer.Helpers
             CreateMap<Post, PostPreviewDto>();
             CreateMap<PostMessage, PostMessageCreateDto>();
             CreateMap<PostMessage, PostMessagePreviewDto>();
+            CreateMap<Message, MessagePreviewDto>();
+            CreateMap<Message, MessageCreateDto>();
 
             CreateMap<ForumCreateDto, Forum>();
             CreateMap<ForumPreviewDto, Forum>();
@@ -25,6 +27,8 @@ namespace Tsi1.BusinessLayer.Helpers
             CreateMap<PostPreviewDto, Post>();
             CreateMap<PostMessageCreateDto, PostMessage>();
             CreateMap<PostMessagePreviewDto, PostMessage>();
+            CreateMap<MessagePreviewDto, Message>();
+            CreateMap<MessageCreateDto, Message>();
         }
     }
 }
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/IMessageService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/IMessageService.cs
index 58134b93c60ba3762b801f11ba2ffb1590c89e3c..785b46134f790b90ade833746481cb16b914c3f5 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/IMessageService.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/IMessageService.cs
@@ -2,25 +2,16 @@
 using System.Collections.Generic;
 using System.Text;
 using System.Threading.Tasks;
+using Tsi1.BusinessLayer.Dtos;
 using Tsi1.BusinessLayer.Helpers;
 
 namespace Tsi1.BusinessLayer.Interfaces
 {
     public interface IMessageService
     {
-        Task<ServiceResult<List<ForumPreviewDto>>> GetForums(int courseId);
+        Task<ServiceResult<List<MessagePreviewDto>>> GetMessages(int userId, int otherUserId);
 
-        Task<ServiceResult<Forum>> Create(ForumCreateDto newForum);
+        Task<ServiceResult<MessagePreviewDto>> Send(MessageCreateDto newMessage);
 
-        Task<ServiceResult<Forum>> Delete(int forumId);
-
-        Task<ServiceResult<>>
-
-        List<Message> Get();
-        Message Get(string id);
-        Message Create(Message message);
-        void Update(string id, Message messageIn);
-        void Remove(Message messageIn);
-        void Remove(string id);
     }
 }
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Services/MessageService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Services/MessageService.cs
new file mode 100644
index 0000000000000000000000000000000000000000..eab3cb3f4a2440d25007d09237e542219de54096
--- /dev/null
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Services/MessageService.cs
@@ -0,0 +1,66 @@
+using AutoMapper;
+using MongoDB.Bson;
+using MongoDB.Driver;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+using Tsi1.BusinessLayer.Dtos;
+using Tsi1.BusinessLayer.Helpers;
+using Tsi1.BusinessLayer.Interfaces;
+using Tsi1.DataLayer.Entities;
+using Tsi1.DataLayer.MongoDbConfiguration;
+
+namespace Tsi1.BusinessLayer.Services
+{
+    public class MessageService : IMessageService
+    {
+        private readonly IMapper _mapper;
+
+        private readonly IMongoCollection<Message> _messages;
+
+        public MessageService(ITsi1DatabaseSettings settings, IMapper mapper)
+        {
+            var client = new MongoClient(settings.ConnectionString);
+            var database = client.GetDatabase(settings.DatabaseName);
+
+            _messages = database.GetCollection<Message>(settings.Tsi1CollectionName);
+            _mapper = mapper;
+        }
+
+        public async Task<ServiceResult<List<MessagePreviewDto>>> GetMessages(int userId, int otherUserId)
+        {
+            var result = new ServiceResult<List<MessagePreviewDto>>();
+
+            var sort = Builders<Message>.Sort.Ascending("Date");
+
+            var messages = await _messages.Find(m => (m.SenderId == userId && m.ReceiverId == otherUserId)
+                                        || (m.SenderId == otherUserId && m.ReceiverId == userId))
+                                        .Sort(sort)
+                                        .ToListAsync();
+
+            var messagesDto = _mapper.Map<List<MessagePreviewDto>>(messages);
+
+            result.Data = messagesDto;
+
+            return result;
+        }
+
+        public async Task<ServiceResult<MessagePreviewDto>> Send(MessageCreateDto newMessage)
+        {
+            var result = new ServiceResult<MessagePreviewDto>();
+
+            var message = _mapper.Map<Message>(newMessage);
+            message.Date = DateTime.Now;
+
+            
+            await _messages.InsertOneAsync(message);
+
+            var messageDto = _mapper.Map<MessagePreviewDto>(message);
+
+            result.Data = messageDto;
+
+            return result;
+        }
+    }
+}
diff --git a/Tsi1.Api/Tsi1.DataLayer/Entities/Message.cs b/Tsi1.Api/Tsi1.DataLayer/Entities/Message.cs
index cd2efac098dd805a5ee099b58d806b38d6ff3826..4925699629ad1863a4860433900dd189ea8d5fc7 100644
--- a/Tsi1.Api/Tsi1.DataLayer/Entities/Message.cs
+++ b/Tsi1.Api/Tsi1.DataLayer/Entities/Message.cs
@@ -18,7 +18,7 @@ namespace Tsi1.DataLayer.Entities
 
         public string Content { get; set; }
 
-        public string Date { get; set; }
+        public DateTime Date { get; set; } 
 
     }
 }
diff --git a/Tsi1.Api/Tsi1.DataLayer/Tsi1.DataLayer.csproj b/Tsi1.Api/Tsi1.DataLayer/Tsi1.DataLayer.csproj
index c339529345145ef37fcd12c8db20f2b5385c6bfd..247b1c4e8ed3fe19cdd2ba7c310525d252ceab3c 100644
--- a/Tsi1.Api/Tsi1.DataLayer/Tsi1.DataLayer.csproj
+++ b/Tsi1.Api/Tsi1.DataLayer/Tsi1.DataLayer.csproj
@@ -22,6 +22,7 @@
     </PackageReference>
     <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.9" />
     <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.9" />
+    <PackageReference Include="MongoDB.Driver" Version="2.11.3" />
     <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="3.1.4" />
   </ItemGroup>