diff --git a/api/apiBaseRouter.js b/api/apiBaseRouter.js
index ebf3692bfd9c1afd30137ed0ea24b123ded6d3cc..113178f5e277258fabceb34b49def1416c55bd36 100644
--- a/api/apiBaseRouter.js
+++ b/api/apiBaseRouter.js
@@ -1,5 +1,6 @@
 const healthCheckRouter = require('./health-check/routes');
 const layoutRouter = require('./layout/routes');
+const templateRouter = require('./template/routes')
 const apiBaseRouter = require('express').Router();
 
 // Exposed endpoints
@@ -11,4 +12,6 @@ apiBaseRouter.use('/health-check', healthCheckRouter);
 
 apiBaseRouter.use('/widget', layoutRouter);
 
+apiBaseRouter.use('/template', templateRouter);
+
 module.exports = apiBaseRouter;
diff --git a/api/layout/business.js b/api/layout/business.js
index ece8010705cbba631da3ffeaf8968b24477936ca..9dc4c6cfc1e6b48288b7df6f5a127d63d060f38b 100644
--- a/api/layout/business.js
+++ b/api/layout/business.js
@@ -1,13 +1,13 @@
 /* eslint-disable prefer-promise-reject-errors */
 /* eslint-disable no-throw-literal */
 // const logger = require('utils/logger');
-const getAllWidgetService = require('../layout/service');
+const widgetService = require('../layout/service');
 
 
 
 const getAllWidget = async (page) => {
   try {
-    const response = await getAllWidgetService.getAllWidget(page);
+    const response = await widgetService.getAllWidget(page);
     return { status: '200', response }
   } catch (error) {
     throw error
@@ -17,7 +17,7 @@ const getAllWidget = async (page) => {
 
 const createWidget = async (data) => {
   try {
-    const response = await getAllWidgetService.createWidget(data);
+    const response = await widgetService.createWidget(data);
     return { status: '200', response }
   } catch (error) {
     throw error
@@ -26,8 +26,7 @@ const createWidget = async (data) => {
 };
 
 
-
 module.exports = {
   getAllWidget,
-  createWidget
+  createWidget,
 };
diff --git a/api/layout/controller.js b/api/layout/controller.js
index b543c6954facf1618bfa48b12095248242c05156..b53a331ea2b038ba5bf9055b1940263556be8d60 100644
--- a/api/layout/controller.js
+++ b/api/layout/controller.js
@@ -24,7 +24,8 @@ const createWidget = async (req, res, next) => {
 };
 
 
+
 module.exports = {
   getAllWidget,
-  createWidget
+  createWidget,
 };
\ No newline at end of file
diff --git a/api/layout/routes.js b/api/layout/routes.js
index 157994b1cf9b9d77f0eb638151748814afed2555..6d1628ab390857c22db888452f77e86dc87dec47 100644
--- a/api/layout/routes.js
+++ b/api/layout/routes.js
@@ -1,8 +1,9 @@
 const layoutRouter = require('express').Router();
-const { getAllWidget,createWidget} = require('./controller');
+const { getAllWidget, createWidget } = require('./controller');
 
 layoutRouter.get('/allLayout/:page', getAllWidget);
-  
+
 layoutRouter.post('/createWidget', createWidget);
 
+
 module.exports = layoutRouter;
\ No newline at end of file
diff --git a/api/layout/service.js b/api/layout/service.js
index 6a3529f444c40b8d0d5806ad7371372fa66e202c..705512b899812413ba854892fa4f60fe91ac8f50 100644
--- a/api/layout/service.js
+++ b/api/layout/service.js
@@ -28,7 +28,8 @@ const createWidget = async (data) => {
 
 };
 
+
 module.exports = {
   getAllWidget,
-  createWidget
+  createWidget,
 };
\ No newline at end of file
diff --git a/api/template/business.js b/api/template/business.js
new file mode 100644
index 0000000000000000000000000000000000000000..b72e0ae51dbd514eea38ad2efd5952bf0204e132
--- /dev/null
+++ b/api/template/business.js
@@ -0,0 +1,30 @@
+/* eslint-disable prefer-promise-reject-errors */
+/* eslint-disable no-throw-literal */
+// const logger = require('utils/logger');
+const templateService = require('../template/service');
+
+
+const updateAndMapWidget = async (page,widgetId,position, startTime, endTime) => {
+  try {
+    const response = await templateService.updateAndMapWidget(page,widgetId,position, startTime, endTime);
+    return { status: '200', response }
+  } catch (error) {
+    throw error
+  }
+
+};
+
+const createTemplate = async (name, desc, widgets, hashId) => {
+  try {
+    const response = await templateService.createTemplate(name, desc, widgets, hashId);
+    return { status: '200', response }
+  } catch (error) {
+    throw error
+  }
+
+};
+
+module.exports = {
+  updateAndMapWidget,
+  createTemplate
+};
diff --git a/api/template/controller.js b/api/template/controller.js
new file mode 100644
index 0000000000000000000000000000000000000000..ffb6154e096952e4951ce6893a6ad8d74f492a4c
--- /dev/null
+++ b/api/template/controller.js
@@ -0,0 +1,32 @@
+// const logger = require('utils/logger');
+const templateBusiness = require('./business');
+// const Joi = require('joi');
+
+
+
+const updateAndMapWidget = async (req, res, next) => {
+  try {
+    console.log("comign here")
+    const { page, widgetId } = req.params;
+    const { position, startTime, endTime } = req.body;
+    const response = await templateBusiness.updateAndMapWidget(page, widgetId, position, startTime, endTime);
+    return res.status(response.status).json({ data: response });
+  } catch (error) {
+    throw error
+  }
+};
+
+const createTemplate = async (req, res, next) => {
+  try {
+    const { name, desc, widgets, hashId } = req.body;
+    const response = await templateBusiness.createTemplate(name, desc, widgets, hashId);
+    return res.status(response.status).json({ data: response });
+  } catch (error) {
+    throw error
+  }
+};
+
+module.exports = {
+  updateAndMapWidget,
+  createTemplate
+}
\ No newline at end of file
diff --git a/api/template/routes.js b/api/template/routes.js
new file mode 100644
index 0000000000000000000000000000000000000000..63d69c3e6e30928410736dcef2bcf4908397ee9c
--- /dev/null
+++ b/api/template/routes.js
@@ -0,0 +1,10 @@
+const templateRouter = require('express').Router();
+
+const {  updateAndMapWidget,createTemplate } = require('./controller');
+
+
+templateRouter.put('/:page/widgets/:widgetId', updateAndMapWidget);
+
+templateRouter.post('/createTemplate', createTemplate);
+
+module.exports = templateRouter;
\ No newline at end of file
diff --git a/api/template/service.js b/api/template/service.js
new file mode 100644
index 0000000000000000000000000000000000000000..1e1554b7631ef2c7fd260796c42937737cf1acf3
--- /dev/null
+++ b/api/template/service.js
@@ -0,0 +1,63 @@
+// const logger = require('utils/logger');
+
+const Widget = require("../models/widget");
+const Template = require("../models/template")
+
+
+const updateAndMapWidget = async (page,widgetId,position, startTime, endTime) => {
+  try {
+    const template = await Template.findOne({ name: page });
+    if (!template) {
+      return { status: 404,  error: 'template not found' };
+    }
+    console.log(page,widgetId,position, startTime, endTime)
+    const widgetIndex = template.widgets.findIndex(w => w.widgetId.toString() === widgetId);
+    
+    if (widgetIndex !== -1) {
+      template.widgets[widgetIndex] = {
+        ...template.widgets[widgetIndex], 
+        position,                         
+        startTime,                       
+        endTime                          
+      };
+    } else {
+      template.widgets.push({
+        widgetId: widgetId,  
+        position,            
+        startTime,           
+        endTime              
+      });
+    }
+
+    await template.save();
+    return { status: 200, widgetId: widgetId, page: page };
+  } catch (error) {
+    throw error
+  }
+
+};
+
+const createTemplate = async (name, desc, widgets, hashId) => {
+  try {
+    console.log("in service")
+    const newTemplate = new Template({
+      name,
+      desc,
+      widgets,
+      hashId
+    });
+
+    // Save the template to the database
+    await newTemplate.save();
+    return { status: 201,  message: 'Template created successfully', id: newTemplate._id };
+  } catch (error) {
+    throw error
+  }
+
+};
+
+
+module.exports = {
+  updateAndMapWidget,
+  createTemplate
+};
\ No newline at end of file
diff --git a/swagger.yaml b/swagger.yaml
index 0f8c0f66d228e61047c45141317ca474bf65a459..b170eb5bc2afe077fc5dc30432445a85b084d78d 100644
--- a/swagger.yaml
+++ b/swagger.yaml
@@ -9,8 +9,10 @@ info:
 #     description: Local server
 
 paths:
-  /templates/{page}:
+  /template/{page}:
     get:
+      tags:
+        - "Template"
       summary: Get template details of a particular page
       parameters:
         - in: path
@@ -62,6 +64,8 @@ paths:
 
   /widget/allLayout/{page}:
     get:
+      tags:
+        - "Widget"
       summary: Get widget details for a page
       parameters:
         - in: path
@@ -144,6 +148,8 @@ paths:
 
   /widget/createWidget:
     post:
+      tags:
+        - "Widget"
       summary: Create a new widget
       requestBody:
         required: true
@@ -226,8 +232,10 @@ paths:
                   error:
                     type: string
 
-  /api/templates/{page}/widgets/{widgetId}:
+  /template/{page}/widgets/{widgetId}:
     put:
+      tags:
+        - "Template"
       summary: Update and map a widget to a particular page
       parameters:
         - in: path
@@ -282,3 +290,79 @@ paths:
                 properties:
                   error:
                     type: string
+
+  /template/createTemplate:
+    post:
+      tags:
+        - "Template"
+      summary: Create a new template
+      description: Create a new template for a specific page, including widget mapping and scheduling.
+      requestBody:
+        description: The template to create
+        required: true
+        content:
+          application/json:
+            schema:
+              type: object
+              properties:
+                name:
+                  type: string
+                  description: The name of the template
+                  example: "Homepage Template"
+                desc:
+                  type: string
+                  description: A description of the template
+                  example: "Template for the homepage layout"
+                widgets:
+                  type: array
+                  description: A list of widgets mapped to the template
+                  items:
+                    type: object
+                    properties:
+                      widgetId:
+                        type: string
+                        description: The ID of the widget
+                        example: "64e9b0d4f3a1a85e5e4e9f76"
+                      position:
+                        type: integer
+                        description: The position of the widget in the template
+                        example: 0
+                      startTime:
+                        type: string
+                        format: date-time
+                        description: The start time for the widget to be active
+                        example: "2024-01-01T00:00:00Z"
+                      endTime:
+                        type: string
+                        format: date-time
+                        description: The end time for the widget to be active
+                        example: "2024-12-31T23:59:59Z"
+                hashId:
+                  type: string
+                  description: A unique identifier for the template
+                  example: "homepage-template-001"
+      responses:
+        '201':
+          description: Template created successfully
+          content:
+            application/json:
+              schema:
+                type: object
+                properties:
+                  message:
+                    type: string
+                    example: "Template created successfully"
+                  id:
+                    type: string
+                    description: The ID of the created template
+                    example: "64e9b0d4f3a1a85e5e4e9f78"
+        '400':
+          description: Bad request
+          content:
+            application/json:
+              schema:
+                type: object
+                properties:
+                  error:
+                    type: string
+                    example: "Validation error: 'name' is required."