{"info":{"_postman_id":"8d319857-52f3-4afb-86f6-94b07735b2d5","name":"My Collection","description":"<html><head></head><body><h3 id=\"welcome-to-postman-this-is-your-first-collection\">Welcome to Postman! This is your first collection.</h3>\n<p>Collections are your starting point for building and testing APIs. You can use this one to:</p>\n<p>• Group related requests<br>• Test your API in real-world scenarios<br>• Document and share your requests</p>\n<p>Update the name and overview whenever you’re ready to make it yours.</p>\n<p><a href=\"https://learning.postman.com/docs/collections/collections-overview/\">Learn more about Postman Collections.</a></p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"53758015","collectionId":"8d319857-52f3-4afb-86f6-94b07735b2d5","publishedId":"2sBXiqEU2C","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-04-05T16:23:22.000Z"},"item":[{"name":"Sanity Check","id":"4f77ef95-9094-4e6f-b931-fae1bc16e12d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:4000/api/health","description":"<h2 id=\"health-check-api\">Health Check API</h2>\n<p>This endpoint is used to perform a health check on the API server to ensure it is running and accessible.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p><strong>Method</strong>: <code>GET</code></p>\n</li>\n<li><p><strong>Endpoint</strong>: <code>http://localhost:4000/api/health</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li><p><strong>Status Code</strong>: <code>200 OK</code></p>\n</li>\n<li><p><strong>Content-Type</strong>: <code>application/json</code></p>\n</li>\n<li><p><strong>Response Body</strong>:</p>\n<ul>\n<li><code>ok</code> (boolean): Indicates the health status of the server. A value of <code>true</code> signifies that the server is operational.</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"example-response\">Example Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"ok\": true\n}\n\n</code></pre>\n<p>This endpoint does not require any parameters and returns a simple JSON object indicating the server's health status.</p>\n","urlObject":{"protocol":"http","port":"4000","path":["api","health"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"e838546e-4cfd-4c27-a722-b7a07f47e768","name":"New Request","originalRequest":{"method":"GET","header":[],"url":"http://localhost:4000/api/health"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Request-Id","value":"fb51b2e4-852e-44f8-a487-faf00118aab8"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Referrer-Policy","value":"no-referrer"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"X-XSS-Protection","value":"0"},{"key":"Vary","value":"Origin, Accept-Encoding"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"11"},{"key":"ETag","value":"W/\"b-Ai2R8hgEarLmHKwesT1qcY913ys\""},{"key":"Date","value":"Sun, 05 Apr 2026 15:32:05 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"ok\": true\n}"}],"_postman_id":"4f77ef95-9094-4e6f-b931-fae1bc16e12d"},{"name":"register","id":"2e19fdd7-9941-45b1-a9c3-dc539ca53734","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"email\": \"user@gmail.com\",\r\n  \"password\": \"user@1234\",\r\n  \"name\": \"user\",\r\n  \"role\" : \"Admin\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:4000/api/auth/register","description":"<h2 id=\"register-user-endpoint\">Register User Endpoint</h2>\n<p>This endpoint is used to register a new user in the system. It allows clients to create an account by providing necessary user details.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p><strong>Method</strong>: POST</p>\n</li>\n<li><p><strong>URL</strong>: <code>http://localhost:4000/api/auth/register</code></p>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>The request body must be in JSON format and should include the following parameters:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>email</td>\n<td>string</td>\n<td>The email address of the user.</td>\n</tr>\n<tr>\n<td>password</td>\n<td>string</td>\n<td>The password for the user account. Must meet security requirements.</td>\n</tr>\n<tr>\n<td>name</td>\n<td>string</td>\n<td>The full name of the user.</td>\n</tr>\n<tr>\n<td>role</td>\n<td>string</td>\n<td>The role assigned to the user (e.g., Admin, User).</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Example Request Body</strong>:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"email\": \"user@example.com\",\n  \"password\": \"SecurePassword123\",\n  \"name\": \"John Doe\",\n  \"role\": \"User\"\n}\n\n</code></pre>\n<h3 id=\"response\">Response</h3>\n<p>Upon successful registration, the server will respond with a JSON object containing the following structure:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Key</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>success</td>\n<td>boolean</td>\n<td>Indicates if the registration was successful.</td>\n</tr>\n<tr>\n<td>message</td>\n<td>string</td>\n<td>A message providing additional information about the registration status.</td>\n</tr>\n<tr>\n<td>user</td>\n<td>object</td>\n<td>An object containing the details of the registered user, such as <code>email</code>, <code>name</code>, and <code>role</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Example Response</strong>:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"success\": true,\n  \"message\": \"User registered successfully.\",\n  \"user\": {\n    \"email\": \"user@example.com\",\n    \"name\": \"John Doe\",\n    \"role\": \"User\"\n  }\n}\n\n</code></pre>\n<h3 id=\"notes\">Notes</h3>\n<ul>\n<li><p>Ensure that the email provided is unique and not already registered in the system.</p>\n</li>\n<li><p>The password must comply with the system's security policies.</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"4000","path":["api","auth","register"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"9f11a4dc-7c4f-48c0-a11f-f05049815fe2","name":"register","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"email\": \"user@gmail.com\",\r\n  \"password\": \"user@1234\",\r\n  \"name\": \"user\",\r\n  \"role\" : \"Admin\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:4000/api/auth/register"},"status":"Created","code":201,"_postman_previewlanguage":null,"header":[{"key":"X-Request-Id","value":"1d205ded-1d3d-4309-8626-7bcf2e3e383b"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Referrer-Policy","value":"no-referrer"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"X-XSS-Protection","value":"0"},{"key":"Vary","value":"Origin, Accept-Encoding"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"RateLimit-Policy","value":"60;w=900"},{"key":"RateLimit-Limit","value":"60"},{"key":"RateLimit-Remaining","value":"59"},{"key":"RateLimit-Reset","value":"900"},{"key":"Set-Cookie","value":"token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI2OWQyOGFjYjc3ZTM0ZTQ2MzAwYWY3ZWIiLCJpYXQiOjE3NzU0MDU3NzEsImV4cCI6MTc3NjAxMDU3MX0.m04vg7cdkOnLs67CRw2OgivLCbfgp2JoglniUnwoO3g; Max-Age=604800; Path=/; Expires=Sun, 12 Apr 2026 16:16:11 GMT; HttpOnly; SameSite=Lax"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"371"},{"key":"ETag","value":"W/\"173-TLR/cpBeEg53nAc9PvprWBPlLFs\""},{"key":"Date","value":"Sun, 05 Apr 2026 16:16:11 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"user\": {\n        \"id\": \"69d28acb77e34e46300af7eb\",\n        \"email\": \"user@gmail.com\",\n        \"name\": \"user\",\n        \"role\": \"viewer\",\n        \"status\": \"active\",\n        \"createdAt\": \"2026-04-05T16:16:11.073Z\",\n        \"updatedAt\": \"2026-04-05T16:16:11.073Z\"\n    },\n    \"notice\": \"role is ignored on /auth/register (first user becomes admin; everyone else is viewer). To create an admin or analyst, use POST /api/users while logged in as an admin.\"\n}"}],"_postman_id":"2e19fdd7-9941-45b1-a9c3-dc539ca53734"},{"name":"login","id":"2d1ab861-d5eb-4810-a3a5-b711660a46e6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"email\": \"harsh.ramchandani122003@gmail.com\",\r\n    \"password\": \"Harsh@1234\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:4000/api/auth/login","description":"<h2 id=\"login-api\">Login API</h2>\n<p>This endpoint allows users to authenticate themselves by logging in with their email and password. Upon successful authentication, the server responds with user details.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p><strong>Method:</strong> POST</p>\n</li>\n<li><p><strong>URL:</strong> <code>http://localhost:4000/api/auth/login</code></p>\n</li>\n<li><p><strong>Content-Type:</strong> application/json</p>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>The request body must be in JSON format and include the following parameters:</p>\n<ul>\n<li><p><strong>email</strong> (string): The email address of the user attempting to log in.</p>\n</li>\n<li><p><strong>password</strong> (string): The password associated with the user's account.</p>\n</li>\n</ul>\n<p><strong>Example Request Body:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"email\": \"user@example.com\",\n  \"password\": \"your_password\"\n}\n\n</code></pre>\n<h3 id=\"response\">Response</h3>\n<p>On a successful login, the API will respond with a status code of <code>200</code> and a JSON object containing user details.</p>\n<h4 id=\"response-format\">Response Format</h4>\n<ul>\n<li><p><strong>Content-Type:</strong> application/json</p>\n</li>\n<li><p>{\"user\": { \"id\": \"\", \"email\": \"\", \"name\": \"\", \"role\": \"\", \"status\": \"\", \"createdAt\": \"\", \"updatedAt\": \"\"}}</p>\n</li>\n</ul>\n<p>The response includes the following fields:</p>\n<ul>\n<li><p><strong>user</strong>: An object containing user information.</p>\n<ul>\n<li><p><strong>id</strong>: The unique identifier for the user.</p>\n</li>\n<li><p><strong>email</strong>: The email address of the user.</p>\n</li>\n<li><p><strong>name</strong>: The name of the user.</p>\n</li>\n<li><p><strong>role</strong>: The role assigned to the user (e.g., admin, user).</p>\n</li>\n<li><p><strong>status</strong>: The current status of the user account (e.g., active, inactive).</p>\n</li>\n<li><p><strong>createdAt</strong>: Timestamp of when the user account was created.</p>\n</li>\n<li><p><strong>updatedAt</strong>: Timestamp of the last update to the user account.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"notes\">Notes</h3>\n<p>Ensure that the email and password provided in the request body are correct to receive a successful response.</p>\n","urlObject":{"protocol":"http","port":"4000","path":["api","auth","login"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"b7bbcff3-30f9-4db3-b8ab-a55e0d77e74f","name":"login","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"email\": \"harsh.ramchandani122003@gmail.com\",\r\n    \"password\": \"Harsh@1234\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:4000/api/auth/login"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Request-Id","value":"cf1ad779-27ca-4c38-9687-d16dcdf7729d"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Referrer-Policy","value":"no-referrer"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"X-XSS-Protection","value":"0"},{"key":"Vary","value":"Origin, Accept-Encoding"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"RateLimit-Policy","value":"60;w=900"},{"key":"RateLimit-Limit","value":"60"},{"key":"RateLimit-Remaining","value":"58"},{"key":"RateLimit-Reset","value":"757"},{"key":"Set-Cookie","value":"token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI2OWQxNzkyNTgwYjgxNjY3ODE2ZWQ2NWEiLCJpYXQiOjE3NzU0MDU5MTQsImV4cCI6MTc3NjAxMDcxNH0.vrhvQyUhamqBHdFrzTrIzyJ2n0LbtBwJYP9qId9YBSQ; Max-Age=604800; Path=/; Expires=Sun, 12 Apr 2026 16:18:34 GMT; HttpOnly; SameSite=Lax"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"212"},{"key":"ETag","value":"W/\"d4-EcX3v+XEZ9BeKq9h5LT0xwkKnF4\""},{"key":"Date","value":"Sun, 05 Apr 2026 16:18:34 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"user\": {\n        \"id\": \"69d1792580b81667816ed65a\",\n        \"email\": \"harsh.ramchandani122003@gmail.com\",\n        \"name\": \"Harsh\",\n        \"role\": \"admin\",\n        \"status\": \"active\",\n        \"createdAt\": \"2026-04-04T20:48:37.144Z\",\n        \"updatedAt\": \"2026-04-04T20:48:37.144Z\"\n    }\n}"}],"_postman_id":"2d1ab861-d5eb-4810-a3a5-b711660a46e6"},{"name":"Using auth on other requests","id":"1d05ba18-fb35-441b-bb3b-a1d3ed4ef51a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"GET","header":[],"url":"http://localhost:4000/api/auth/me","description":"<p>StartFragment</p>\n<p>Request</p>\n<ul>\n<li><p>Method: <code>GET</code></p>\n</li>\n<li><p>URL: <code>http://localhost:4000/api/auth/me</code></p>\n</li>\n<li><p>Body: None.</p>\n</li>\n</ul>\n<p>Description<br />Returns the logged-in user as JSON. Identity comes from the JWT: either the <code>token</code> httpOnly cookie (if the client sends cookies) or <code>Authorization: Bearer &lt;jwt&gt;</code>. No query or body parameters.</p>\n<p>Expected response (200)<br />JSON shape:</p>\n<p>{ \"user\": { \"id\": \"\", \"email\": \"\", \"name\": \"\", \"role\": \"viewer\" | \"analyst\" | \"admin\", \"status\": \"active\" | \"inactive\", \"createdAt\": \"\", \"updatedAt\": \"\" }}</p>\n<p>Passwords and internal fields are never returned.</p>\n<p>Error responses</p>\n<ul>\n<li><p>401 — Missing/invalid/expired token, or user id in token not found.</p>\n</li>\n<li><p>403 — Account inactive (<code>status</code> not active).</p>\n</li>\n<li><p>500 — Server misconfiguration (e.g. <code>JWT_SECRET</code> missing).</p>\n</li>\n</ul>\n<p>Notes</p>\n<ul>\n<li><p>In Postman: use Bearer Token on this tab or enable the cookie jar after login/register on the same host (<code>localhost:4000</code>).</p>\n</li>\n<li><p>Do not send a body for this request.</p>\n</li>\n</ul>\n<hr />\n<p>You can paste the Description / Expected Response / Notes sections into Postman’s documentation panel as separate blocks or one combined description.</p>\n<p>EndFragment</p>\n","urlObject":{"protocol":"http","port":"4000","path":["api","auth","me"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"b9c30320-4a90-40b9-9051-7e763a3ac655","name":"Using auth on other requests","originalRequest":{"method":"GET","header":[],"url":"http://localhost:4000/api/auth/me"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Request-Id","value":"50eeb44c-cbd3-4083-8c9d-e21ac327eafb"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Referrer-Policy","value":"no-referrer"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"X-XSS-Protection","value":"0"},{"key":"Vary","value":"Origin, Accept-Encoding"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"RateLimit-Policy","value":"60;w=900"},{"key":"RateLimit-Limit","value":"60"},{"key":"RateLimit-Remaining","value":"57"},{"key":"RateLimit-Reset","value":"745"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"212"},{"key":"ETag","value":"W/\"d4-EcX3v+XEZ9BeKq9h5LT0xwkKnF4\""},{"key":"Date","value":"Sun, 05 Apr 2026 16:18:46 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"user\": {\n        \"id\": \"69d1792580b81667816ed65a\",\n        \"email\": \"harsh.ramchandani122003@gmail.com\",\n        \"name\": \"Harsh\",\n        \"role\": \"admin\",\n        \"status\": \"active\",\n        \"createdAt\": \"2026-04-04T20:48:37.144Z\",\n        \"updatedAt\": \"2026-04-04T20:48:37.144Z\"\n    }\n}"}],"_postman_id":"1d05ba18-fb35-441b-bb3b-a1d3ed4ef51a"},{"name":"dashboard summary","id":"4fa49acb-7738-494b-b986-b65129b7d1e9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:4000/api/dashboard/summary","description":"<h3 id=\"api-endpoint-get-dashboard-summary\">API Endpoint: Get Dashboard Summary</h3>\n<p>This endpoint retrieves a summary of the user's financial dashboard, providing insights into total income, expenses, net balance, recent activities, and trends over specified periods.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Method</strong>: GET</p>\n</li>\n<li><p><strong>URL</strong>: <code>http://localhost:4000/api/dashboard/summary</code></p>\n</li>\n<li><p><strong>Headers</strong>:</p>\n<ul>\n<li><p><code>Content-Type</code>: <code>application/json</code></p>\n</li>\n<li><p>(Include any authentication headers if required)</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>The response will return a JSON object containing the following structure:</p>\n<ul>\n<li><p><strong>summary</strong>: An object summarizing the financial data.</p>\n<ul>\n<li><p><code>totalIncome</code>: Total income amount (number).</p>\n</li>\n<li><p><code>totalExpense</code>: Total expense amount (number).</p>\n</li>\n<li><p><code>netBalance</code>: Net balance amount (number).</p>\n</li>\n</ul>\n</li>\n<li><p><strong>categoryTotals</strong>: An array of objects representing totals for each category.</p>\n<ul>\n<li><p>Each object includes:</p>\n<ul>\n<li><p><code>category</code>: Name of the category (string).</p>\n</li>\n<li><p><code>income</code>: Total income for the category (number).</p>\n</li>\n<li><p><code>expense</code>: Total expense for the category (number).</p>\n</li>\n<li><p><code>net</code>: Net amount for the category (number).</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><strong>recentActivity</strong>: An array of recent financial activities.</p>\n<ul>\n<li><p>Each object includes:</p>\n<ul>\n<li><p><code>id</code>: Unique identifier for the activity (string).</p>\n</li>\n<li><p><code>amount</code>: Amount of the activity (number).</p>\n</li>\n<li><p><code>type</code>: Type of the activity (string).</p>\n</li>\n<li><p><code>category</code>: Category associated with the activity (string).</p>\n</li>\n<li><p><code>date</code>: Date of the activity (string).</p>\n</li>\n<li><p><code>notes</code>: Any notes related to the activity (string).</p>\n</li>\n<li><p><code>createdAt</code>: Timestamp of when the activity was created (string).</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><strong>trends</strong>: An object containing trend analysis data.</p>\n<ul>\n<li><p><code>granularity</code>: The granularity of the trend data (string).</p>\n</li>\n<li><p><code>buckets</code>: An array of objects representing trend data for different periods.</p>\n<ul>\n<li><p>Each object includes:</p>\n<ul>\n<li><p><code>period</code>: The period of the trend (string).</p>\n</li>\n<li><p><code>year</code>: Year of the trend (number).</p>\n</li>\n<li><p><code>month</code>: Month of the trend (number).</p>\n</li>\n<li><p><code>label</code>: Label for the trend (string).</p>\n</li>\n<li><p><code>income</code>: Income for the period (number).</p>\n</li>\n<li><p><code>expense</code>: Expense for the period (number).</p>\n</li>\n<li><p><code>net</code>: Net amount for the period (number).</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><strong>filters</strong>: An object containing filter criteria.</p>\n<ul>\n<li><p><code>dateFrom</code>: Start date for filtering activities (nullable).</p>\n</li>\n<li><p><code>dateTo</code>: End date for filtering activities (nullable).</p>\n</li>\n</ul>\n</li>\n</ul>\n<p>This endpoint does not require a request body, as it is a GET request. The response will provide a comprehensive overview of the user's financial summary, enabling effective tracking and analysis of their financial activities.</p>\n","urlObject":{"protocol":"http","port":"4000","path":["api","dashboard","summary"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"d7abd1f1-30a0-433c-a9b8-2111618e9c36","name":"dashboard summary","originalRequest":{"method":"GET","header":[],"url":"http://localhost:4000/api/dashboard/summary"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Request-Id","value":"10fa58eb-4049-4f40-ad89-a9b7044acc07"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Referrer-Policy","value":"no-referrer"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"X-XSS-Protection","value":"0"},{"key":"Vary","value":"Origin, Accept-Encoding"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"RateLimit-Policy","value":"300;w=900"},{"key":"RateLimit-Limit","value":"300"},{"key":"RateLimit-Remaining","value":"299"},{"key":"RateLimit-Reset","value":"900"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"687"},{"key":"ETag","value":"W/\"2af-FSUQv6Ctv9KMoTkw+LWaLukwoyk\""},{"key":"Date","value":"Sun, 05 Apr 2026 16:18:53 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"summary\": {\n        \"totalIncome\": 241,\n        \"totalExpense\": 0,\n        \"netBalance\": 241\n    },\n    \"categoryTotals\": [\n        {\n            \"category\": \"salary\",\n            \"income\": 241,\n            \"expense\": 0,\n            \"net\": 241\n        }\n    ],\n    \"recentActivity\": [\n        {\n            \"id\": \"69d17ff85990cbc8fb05746c\",\n            \"amount\": 120.5,\n            \"type\": \"income\",\n            \"category\": \"salary\",\n            \"date\": \"2026-04-01T00:00:00.000Z\",\n            \"notes\": \"Test\",\n            \"createdAt\": \"2026-04-04T21:17:44.200Z\"\n        },\n        {\n            \"id\": \"69d281c277e34e46300af7e3\",\n            \"amount\": 120.5,\n            \"type\": \"income\",\n            \"category\": \"salary\",\n            \"date\": \"2026-04-01T00:00:00.000Z\",\n            \"notes\": \"Test\",\n            \"createdAt\": \"2026-04-05T15:37:38.563Z\"\n        }\n    ],\n    \"trends\": {\n        \"granularity\": \"month\",\n        \"buckets\": [\n            {\n                \"period\": \"month\",\n                \"year\": 2026,\n                \"month\": 4,\n                \"label\": \"2026-04\",\n                \"income\": 241,\n                \"expense\": 0,\n                \"net\": 241\n            }\n        ]\n    },\n    \"filters\": {\n        \"dateFrom\": null,\n        \"dateTo\": null\n    }\n}"}],"_postman_id":"4fa49acb-7738-494b-b986-b65129b7d1e9"},{"name":"Create a finance record (admin)","id":"66b35485-0b2a-48e6-b9a5-da53dbb8281c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"amount\": 120.5,\r\n  \"type\": \"income\",\r\n  \"category\": \"salary\",\r\n  \"date\": \"2026-04-01\",\r\n  \"notes\": \"Test\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:4000/api/finance/records","description":"<h2 id=\"add-finance-record\">Add Finance Record</h2>\n<p>This endpoint allows users to create a new finance record by submitting details about the transaction. The record can represent either an income or an expense, categorized accordingly.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p><strong>Method</strong>: POST</p>\n</li>\n<li><p><strong>URL</strong>: <code>http://localhost:4000/api/finance/records</code></p>\n</li>\n<li><p><strong>Headers</strong>:</p>\n<ul>\n<li><p><code>Content-Type: application/json</code></p>\n</li>\n<li><p><strong>Authentication</strong>: Ensure that the request includes a valid authentication token in the headers if required by your application.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"request-body\">Request Body</h3>\n<p>The request body must be a JSON object containing the following parameters:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>amount</td>\n<td>number</td>\n<td>The monetary value of the record.</td>\n</tr>\n<tr>\n<td>type</td>\n<td>string</td>\n<td>The type of transaction, either \"income\" or \"expense\".</td>\n</tr>\n<tr>\n<td>category</td>\n<td>string</td>\n<td>The category of the transaction (e.g., \"salary\", \"groceries\").</td>\n</tr>\n<tr>\n<td>date</td>\n<td>string</td>\n<td>The date of the transaction in <code>YYYY-MM-DD</code> format.</td>\n</tr>\n<tr>\n<td>notes</td>\n<td>string</td>\n<td>Additional notes related to the transaction.</td>\n</tr>\n</tbody>\n</table>\n</div><h4 id=\"example-request-body\">Example Request Body</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"amount\": 120.5,\n  \"type\": \"income\",\n  \"category\": \"salary\",\n  \"date\": \"2026-04-01\",\n  \"notes\": \"Test\"\n}\n\n</code></pre>\n<h3 id=\"response\">Response</h3>\n<p>Upon successful creation of the finance record, the server will respond with a status code of <code>201 Created</code> and a JSON object containing the details of the created record.</p>\n<h4 id=\"response-structure\">Response Structure</h4>\n<p>The response will include the following fields:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>record</td>\n<td>object</td>\n<td>An object containing the details of the created record.</td>\n</tr>\n<tr>\n<td>id</td>\n<td>string</td>\n<td>The unique identifier for the record.</td>\n</tr>\n<tr>\n<td>amount</td>\n<td>number</td>\n<td>The monetary value of the record.</td>\n</tr>\n<tr>\n<td>type</td>\n<td>string</td>\n<td>The type of transaction.</td>\n</tr>\n<tr>\n<td>category</td>\n<td>string</td>\n<td>The category of the transaction.</td>\n</tr>\n<tr>\n<td>date</td>\n<td>string</td>\n<td>The date of the transaction.</td>\n</tr>\n<tr>\n<td>notes</td>\n<td>string</td>\n<td>Additional notes related to the transaction.</td>\n</tr>\n<tr>\n<td>createdBy</td>\n<td>string</td>\n<td>Identifier of the user who created the record.</td>\n</tr>\n<tr>\n<td>createdAt</td>\n<td>string</td>\n<td>Timestamp of when the record was created.</td>\n</tr>\n<tr>\n<td>updatedAt</td>\n<td>string</td>\n<td>Timestamp of the last update to the record.</td>\n</tr>\n</tbody>\n</table>\n</div><h4 id=\"example-response\">Example Response</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"record\": {\n    \"id\": \"unique_record_id\",\n    \"amount\": 120.5,\n    \"type\": \"income\",\n    \"category\": \"salary\",\n    \"date\": \"2026-04-01\",\n    \"notes\": \"Test\",\n    \"createdBy\": \"user_id\",\n    \"createdAt\": \"2026-04-01T00:00:00Z\",\n    \"updatedAt\": \"2026-04-01T00:00:00Z\"\n  }\n}\n\n</code></pre>\n<h3 id=\"notes\">Notes</h3>\n<ul>\n<li><p>Ensure that all required fields are included in the request body.</p>\n</li>\n<li><p>Validate the input data to conform to expected formats to avoid errors.</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"4000","path":["api","finance","records"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"91849f5b-a10f-42e9-9934-3145f8d26d7d","name":"Create a finance record (admin)","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"amount\": 120.5,\r\n  \"type\": \"income\",\r\n  \"category\": \"salary\",\r\n  \"date\": \"2026-04-01\",\r\n  \"notes\": \"Test\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:4000/api/finance/records"},"status":"Created","code":201,"_postman_previewlanguage":null,"header":[{"key":"X-Request-Id","value":"2811dfb7-e87e-4496-b166-55b7a31e4b69"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Referrer-Policy","value":"no-referrer"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"X-XSS-Protection","value":"0"},{"key":"Vary","value":"Origin, Accept-Encoding"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"RateLimit-Policy","value":"300;w=900"},{"key":"RateLimit-Limit","value":"300"},{"key":"RateLimit-Remaining","value":"298"},{"key":"RateLimit-Reset","value":"893"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"261"},{"key":"ETag","value":"W/\"105-CbYaj5GfAURTWsRfcvGNzj+Nydw\""},{"key":"Date","value":"Sun, 05 Apr 2026 16:19:01 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"record\": {\n        \"id\": \"69d28b7577e34e46300af7f2\",\n        \"amount\": 120.5,\n        \"type\": \"income\",\n        \"category\": \"salary\",\n        \"date\": \"2026-04-01T00:00:00.000Z\",\n        \"notes\": \"Test\",\n        \"createdBy\": \"69d1792580b81667816ed65a\",\n        \"createdAt\": \"2026-04-05T16:19:01.110Z\",\n        \"updatedAt\": \"2026-04-05T16:19:01.110Z\"\n    }\n}"}],"_postman_id":"66b35485-0b2a-48e6-b9a5-da53dbb8281c"},{"name":"Get one record (GET) — analyst or admin","id":"085dbe30-2122-4741-bd5e-cac42d409d94","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:4000/api/finance/records/69d0f45aeb88ff548e3e66a6","description":"<h3 id=\"api-endpoint-retrieve-finance-record\">API Endpoint: Retrieve Finance Record</h3>\n<p>This endpoint allows users to retrieve a specific finance record by its unique identifier. It is useful for fetching detailed information about a particular financial transaction stored in the system.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Method</strong>: GET</p>\n</li>\n<li><p><strong>URL</strong>: <code>http://localhost:4000/api/finance/records/{id}</code></p>\n</li>\n<li><p><strong>Path Parameter</strong>:</p>\n<ul>\n<li><code>id</code> (string): The unique identifier of the finance record you wish to retrieve. In this example, the id is <code>69d0f45aeb88ff548e3e66a6</code>.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p><strong>Status Code</strong>: 200 OK</p>\n</li>\n<li><p><strong>Content-Type</strong>: application/json</p>\n</li>\n<li><p>{\"record\": { \"id\": \"\", // Unique identifier of the record \"amount\": 0, // Amount of the transaction \"type\": \"\", // Type of the transaction (e.g., income, expense) \"category\": \"\", // Category of the transaction (e.g., food, travel) \"date\": \"\", // Date of the transaction \"notes\": \"\", // Additional notes related to the transaction \"createdBy\": \"\", // Identifier of the user who created the record \"createdAt\": \"\", // Timestamp when the record was created \"updatedAt\": \"\" // Timestamp when the record was last updated}}</p>\n</li>\n</ul>\n<h4 id=\"usage\">Usage</h4>\n<p>To use this endpoint effectively, ensure that you replace <code>{id}</code> in the URL with the actual identifier of the finance record you wish to access. The response will provide you with a JSON object containing all relevant details of the specified finance record, allowing you to understand its characteristics and history.</p>\n","urlObject":{"protocol":"http","port":"4000","path":["api","finance","records","69d0f45aeb88ff548e3e66a6"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"21ff91bb-cd50-47cf-ba2c-a707e4537e6d","name":"Get one record (GET) — analyst or admin","originalRequest":{"method":"GET","header":[],"url":"http://localhost:4000/api/finance/records/69d28b7577e34e46300af7f2"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Request-Id","value":"f299658a-d21e-4ed6-957d-ed530d56208f"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Referrer-Policy","value":"no-referrer"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"X-XSS-Protection","value":"0"},{"key":"Vary","value":"Origin, Accept-Encoding"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"RateLimit-Policy","value":"300;w=900"},{"key":"RateLimit-Limit","value":"300"},{"key":"RateLimit-Remaining","value":"296"},{"key":"RateLimit-Reset","value":"863"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"261"},{"key":"ETag","value":"W/\"105-CbYaj5GfAURTWsRfcvGNzj+Nydw\""},{"key":"Date","value":"Sun, 05 Apr 2026 16:19:31 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"record\": {\n        \"id\": \"69d28b7577e34e46300af7f2\",\n        \"amount\": 120.5,\n        \"type\": \"income\",\n        \"category\": \"salary\",\n        \"date\": \"2026-04-01T00:00:00.000Z\",\n        \"notes\": \"Test\",\n        \"createdBy\": \"69d1792580b81667816ed65a\",\n        \"createdAt\": \"2026-04-05T16:19:01.110Z\",\n        \"updatedAt\": \"2026-04-05T16:19:01.110Z\"\n    }\n}"}],"_postman_id":"085dbe30-2122-4741-bd5e-cac42d409d94"},{"name":"List records (GET) — analyst or admin","id":"39d4caa4-53dd-4d81-b5e2-df96da222048","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:4000/api/finance/records","description":"<h2 id=\"get-finance-records\">Get Finance Records</h2>\n<p>This endpoint retrieves a list of finance records from the server. It allows users to access existing financial data, which can include various attributes related to each record.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p><strong>Method</strong>: GET</p>\n</li>\n<li><p><strong>URL</strong>: <code>http://localhost:4000/api/finance/records</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>Upon a successful request, the server responds with a JSON object containing the following structure:</p>\n<ul>\n<li><p><strong>data</strong>: An array of finance records, each record includes:</p>\n<ul>\n<li><p><strong>id</strong>: A unique identifier for the finance record.</p>\n</li>\n<li><p><strong>amount</strong>: The monetary value associated with the record.</p>\n</li>\n<li><p><strong>type</strong>: The type of financial transaction (e.g., income, expense).</p>\n</li>\n<li><p><strong>category</strong>: The category under which the transaction falls (e.g., groceries, utilities).</p>\n</li>\n<li><p><strong>date</strong>: The date when the transaction occurred.</p>\n</li>\n<li><p><strong>notes</strong>: Any additional notes related to the transaction.</p>\n</li>\n<li><p><strong>createdBy</strong>: The identifier of the user who created the record.</p>\n</li>\n<li><p><strong>createdAt</strong>: The timestamp when the record was created.</p>\n</li>\n<li><p><strong>updatedAt</strong>: The timestamp when the record was last updated.</p>\n</li>\n</ul>\n</li>\n<li><p><strong>page</strong>: The current page number of the returned records.</p>\n</li>\n<li><p><strong>limit</strong>: The maximum number of records returned per page.</p>\n</li>\n<li><p><strong>total</strong>: The total number of records available.</p>\n</li>\n</ul>\n<h3 id=\"example-response\">Example Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"data\": [\n    {\n      \"id\": \"\",\n      \"amount\": 0,\n      \"type\": \"\",\n      \"category\": \"\",\n      \"date\": \"\",\n      \"notes\": \"\",\n      \"createdBy\": \"\",\n      \"createdAt\": \"\",\n      \"updatedAt\": \"\"\n    }\n  ],\n  \"page\": 0,\n  \"limit\": 0,\n  \"total\": 0\n}\n\n</code></pre>\n<p>This endpoint is useful for users who need to review their financial records and gain insights into their financial activities.</p>\n","urlObject":{"protocol":"http","port":"4000","path":["api","finance","records"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"4d63f357-51ce-44eb-9f36-cf7bf1f9a551","name":"List records (GET) — analyst or admin","originalRequest":{"method":"GET","header":[],"url":"http://localhost:4000/api/finance/records"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Request-Id","value":"800ea8e6-a083-4575-a5ec-bccfe37c095d"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Referrer-Policy","value":"no-referrer"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"X-XSS-Protection","value":"0"},{"key":"Vary","value":"Origin, Accept-Encoding"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"RateLimit-Policy","value":"300;w=900"},{"key":"RateLimit-Limit","value":"300"},{"key":"RateLimit-Remaining","value":"295"},{"key":"RateLimit-Reset","value":"854"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"793"},{"key":"ETag","value":"W/\"319-DnWtX4RZIDRRj+9igtqxAHoy6XQ\""},{"key":"Date","value":"Sun, 05 Apr 2026 16:19:40 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"data\": [\n        {\n            \"id\": \"69d17ff85990cbc8fb05746c\",\n            \"amount\": 120.5,\n            \"type\": \"income\",\n            \"category\": \"salary\",\n            \"date\": \"2026-04-01T00:00:00.000Z\",\n            \"notes\": \"Test\",\n            \"createdBy\": \"69d1792580b81667816ed65a\",\n            \"createdAt\": \"2026-04-04T21:17:44.200Z\",\n            \"updatedAt\": \"2026-04-04T21:17:44.200Z\"\n        },\n        {\n            \"id\": \"69d281c277e34e46300af7e3\",\n            \"amount\": 120.5,\n            \"type\": \"income\",\n            \"category\": \"salary\",\n            \"date\": \"2026-04-01T00:00:00.000Z\",\n            \"notes\": \"Test\",\n            \"createdBy\": \"69d1792580b81667816ed65a\",\n            \"createdAt\": \"2026-04-05T15:37:38.563Z\",\n            \"updatedAt\": \"2026-04-05T15:37:38.563Z\"\n        },\n        {\n            \"id\": \"69d28b7577e34e46300af7f2\",\n            \"amount\": 120.5,\n            \"type\": \"income\",\n            \"category\": \"salary\",\n            \"date\": \"2026-04-01T00:00:00.000Z\",\n            \"notes\": \"Test\",\n            \"createdBy\": \"69d1792580b81667816ed65a\",\n            \"createdAt\": \"2026-04-05T16:19:01.110Z\",\n            \"updatedAt\": \"2026-04-05T16:19:01.110Z\"\n        }\n    ],\n    \"page\": 1,\n    \"limit\": 20,\n    \"total\": 3\n}"}],"_postman_id":"39d4caa4-53dd-4d81-b5e2-df96da222048"},{"name":"Update record (PATCH) — admin only","id":"502ee7c8-b651-4e3d-a506-0bd4e5af1b08","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n  \"amount\": 200,\r\n  \"notes\": \"Updated via Postman\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:4000/api/finance/records/69d0f45aeb88ff548e3e66a6","description":"<h2 id=\"update-finance-record\">Update Finance Record</h2>\n<p>This endpoint allows you to update an existing finance record identified by its unique ID.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p><strong>Method</strong>: PATCH</p>\n</li>\n<li><p><strong>Endpoint</strong>: <code>http://localhost:4000/api/finance/records/{id}</code></p>\n</li>\n<li><p><strong>Path Parameter</strong>:</p>\n<ul>\n<li><code>id</code> (string): The unique identifier of the finance record to be updated.</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"request-body\">Request Body</h3>\n<p>The request body must be in JSON format and can include the following parameters:</p>\n<ul>\n<li><p><code>amount</code> (number): The updated amount for the finance record.</p>\n</li>\n<li><p><code>notes</code> (string): Additional notes related to the finance record.</p>\n</li>\n</ul>\n<p><strong>Example Request Body</strong>:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"amount\": 200,\n  \"notes\": \"Updated via Postman\"\n}\n\n</code></pre>\n<h3 id=\"response\">Response</h3>\n<p>Upon a successful update, the response will return a status code of <code>200</code> and the updated finance record in JSON format.</p>\n<p><strong>Response Format</strong>:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"record\": {\n    \"id\": \"\",\n    \"amount\": 0,\n    \"type\": \"\",\n    \"category\": \"\",\n    \"date\": \"\",\n    \"notes\": \"\",\n    \"createdBy\": \"\",\n    \"createdAt\": \"\",\n    \"updatedAt\": \"\"\n  }\n}\n\n</code></pre>\n<p>The response includes the updated fields of the finance record, confirming the changes made.</p>\n","urlObject":{"protocol":"http","port":"4000","path":["api","finance","records","69d0f45aeb88ff548e3e66a6"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"1c1e6d87-262a-4e5e-9d2d-dd33cf474c78","name":"Update record (PATCH) — admin only","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n  \"amount\": 200,\r\n  \"notes\": \"Updated via Postman\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:4000/api/finance/records/69d0f45aeb88ff548e3e66a6"},"status":"Not Found","code":404,"_postman_previewlanguage":null,"header":[{"key":"X-Request-Id","value":"3162025f-75d7-4939-b013-ff2519890a0b"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Referrer-Policy","value":"no-referrer"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"X-XSS-Protection","value":"0"},{"key":"Vary","value":"Origin, Accept-Encoding"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"RateLimit-Policy","value":"300;w=900"},{"key":"RateLimit-Limit","value":"300"},{"key":"RateLimit-Remaining","value":"294"},{"key":"RateLimit-Reset","value":"844"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"30"},{"key":"ETag","value":"W/\"1e-AEuiJmu5BwTG8l6l2ONcbwZ5ITA\""},{"key":"Date","value":"Sun, 05 Apr 2026 16:19:50 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"Record not found\"\n}"}],"_postman_id":"502ee7c8-b651-4e3d-a506-0bd4e5af1b08"},{"name":"delete record","id":"83d73758-8286-4641-9bad-87e2ee7545d2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://localhost:4000/api/finance/records/69d2091c43f94b5ef16260fd","description":"<h1 id=\"delete-finance-record\">Delete Finance Record</h1>\n<p>This endpoint is used to delete a specific finance record identified by its unique ID. By sending a DELETE request to this endpoint, the client can remove the record from the database.</p>\n<h2 id=\"request\">Request</h2>\n<ul>\n<li><p><strong>Method</strong>: DELETE</p>\n</li>\n<li><p><strong>URL</strong>: <code>http://localhost:4000/api/finance/records/{id}</code></p>\n</li>\n<li><p><strong>Path Parameter</strong>:</p>\n<ul>\n<li><code>id</code> (string): The unique identifier of the finance record to be deleted. In this example, the ID is <code>69d2091c43f94b5ef16260fd</code>.</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"request-body\">Request Body</h3>\n<p>No request body is required for this operation.</p>\n<h2 id=\"response\">Response</h2>\n<p>Upon successful deletion of the record, the server responds with:</p>\n<ul>\n<li><p><strong>Status Code</strong>: 200 OK</p>\n</li>\n<li><p><strong>Content-Type</strong>: application/json</p>\n</li>\n<li><p><strong>Response Body</strong>:</p>\n<ul>\n<li><code>message</code> (string): A confirmation message indicating the successful deletion of the record. In this case, the message is an empty string.</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"example-response\">Example Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"\"\n}\n\n</code></pre>\n<p>This response indicates that the deletion was successful, and no additional information is provided.</p>\n","urlObject":{"protocol":"http","port":"4000","path":["api","finance","records","69d2091c43f94b5ef16260fd"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"88d9d75a-6e11-4964-879c-3c2fd6cec309","name":"delete record","originalRequest":{"method":"DELETE","header":[],"url":"http://localhost:4000/api/finance/records/69d28b7577e34e46300af7f2"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Request-Id","value":"d7c4119d-fe5e-4ef0-8f5c-77e04e6baaf1"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Referrer-Policy","value":"no-referrer"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"X-XSS-Protection","value":"0"},{"key":"Vary","value":"Origin, Accept-Encoding"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"RateLimit-Policy","value":"300;w=900"},{"key":"RateLimit-Limit","value":"300"},{"key":"RateLimit-Remaining","value":"292"},{"key":"RateLimit-Reset","value":"822"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"39"},{"key":"ETag","value":"W/\"27-tdA2Exx0sT0vDUAN05U2G8fxNi4\""},{"key":"Date","value":"Sun, 05 Apr 2026 16:20:11 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"Deleted data successfully\"\n}"}],"_postman_id":"83d73758-8286-4641-9bad-87e2ee7545d2"},{"name":"pagination","id":"2376dd19-fa14-4b67-a0ea-123554b3b0d7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:4000/api/users?page=1&limit=5","description":"<h2 id=\"api-endpoint-retrieve-users\">API Endpoint: Retrieve Users</h2>\n<p>This endpoint allows you to retrieve a list of users from the system. You can paginate the results by specifying the <code>page</code> and <code>limit</code> parameters.</p>\n<h3 id=\"request-parameters\">Request Parameters</h3>\n<ul>\n<li><strong>page</strong> (integer, required): Specifies the page number of the results to retrieve. For example, <code>page=1</code> retrieves the first page of results.</li>\n<li><strong>limit</strong> (integer, required): Specifies the maximum number of user records to return per page. For example, <code>limit=5</code> returns up to 5 user records.</li>\n</ul>\n<h3 id=\"example-request\">Example Request</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>GET http://localhost:4000/api/users?page=1&amp;limit=5\n</code></pre><h3 id=\"expected-response\">Expected Response</h3>\n<p>On a successful request, the server responds with a status code of <code>200</code> and a JSON object containing the following fields:</p>\n<ul>\n<li><p><strong>data</strong> (array): An array of user objects, each containing:</p>\n<ul>\n<li><strong>id</strong> (string): The unique identifier for the user.</li>\n<li><strong>email</strong> (string): The email address of the user.</li>\n<li><strong>name</strong> (string): The name of the user.</li>\n<li><strong>role</strong> (string): The role assigned to the user.</li>\n<li><strong>status</strong> (string): The current status of the user account.</li>\n<li><strong>createdAt</strong> (string): The timestamp when the user was created.</li>\n<li><strong>updatedAt</strong> (string): The timestamp when the user was last updated.</li>\n</ul>\n</li>\n<li><p><strong>page</strong> (integer): The current page number of the results.</p>\n</li>\n<li><p><strong>limit</strong> (integer): The number of records returned per page.</p>\n</li>\n<li><p><strong>total</strong> (integer): The total number of user records available.</p>\n</li>\n</ul>\n<h3 id=\"notes\">Notes</h3>\n<ul>\n<li>Ensure that the <code>page</code> and <code>limit</code> parameters are provided to avoid errors.</li>\n<li>The response will include an empty array if there are no users available for the specified page.</li>\n</ul>\n","urlObject":{"protocol":"http","port":"4000","path":["api","users"],"host":["localhost"],"query":[{"key":"page","value":"1"},{"key":"limit","value":"5"}],"variable":[]}},"response":[{"id":"75c03996-aae9-40c4-ada0-5d4e2beede32","name":"pagination","originalRequest":{"method":"GET","header":[],"url":{"raw":"http://localhost:4000/api/users?page=1&limit=5","protocol":"http","host":["localhost"],"port":"4000","path":["api","users"],"query":[{"key":"page","value":"1"},{"key":"limit","value":"5"}]}},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Request-Id","value":"981aa3d6-2ff0-43e5-9cc7-4b33d531123d"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Referrer-Policy","value":"no-referrer"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"X-XSS-Protection","value":"0"},{"key":"Vary","value":"Origin, Accept-Encoding"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"RateLimit-Policy","value":"300;w=900"},{"key":"RateLimit-Limit","value":"300"},{"key":"RateLimit-Remaining","value":"291"},{"key":"RateLimit-Reset","value":"815"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"801"},{"key":"ETag","value":"W/\"321-FvtaaPNa2v0MotpGtEiZ9YNpG0o\""},{"key":"Date","value":"Sun, 05 Apr 2026 16:20:18 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"data\": [\n        {\n            \"id\": \"69d28acb77e34e46300af7eb\",\n            \"email\": \"user@gmail.com\",\n            \"name\": \"user\",\n            \"role\": \"viewer\",\n            \"status\": \"active\",\n            \"createdAt\": \"2026-04-05T16:16:11.073Z\",\n            \"updatedAt\": \"2026-04-05T16:16:11.073Z\"\n        },\n        {\n            \"id\": \"69d281a477e34e46300af7de\",\n            \"email\": \"rohit@gmail.com\",\n            \"name\": \"rohit\",\n            \"role\": \"viewer\",\n            \"status\": \"active\",\n            \"createdAt\": \"2026-04-05T15:37:08.674Z\",\n            \"updatedAt\": \"2026-04-05T15:37:08.674Z\"\n        },\n        {\n            \"id\": \"69d17b5a5990cbc8fb057455\",\n            \"email\": \"sumit@gmail.com\",\n            \"name\": \"Sumit\",\n            \"role\": \"admin\",\n            \"status\": \"active\",\n            \"createdAt\": \"2026-04-04T20:58:02.745Z\",\n            \"updatedAt\": \"2026-04-04T21:11:53.529Z\"\n        },\n        {\n            \"id\": \"69d1792580b81667816ed65a\",\n            \"email\": \"harsh.ramchandani122003@gmail.com\",\n            \"name\": \"Harsh\",\n            \"role\": \"admin\",\n            \"status\": \"active\",\n            \"createdAt\": \"2026-04-04T20:48:37.144Z\",\n            \"updatedAt\": \"2026-04-04T20:48:37.144Z\"\n        }\n    ],\n    \"page\": 1,\n    \"limit\": 5,\n    \"total\": 4\n}"}],"_postman_id":"2376dd19-fa14-4b67-a0ea-123554b3b0d7"},{"name":"Filtering","id":"65fbe8c7-0874-4706-900d-147cb02be22d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:4000/api/finance/records?dateFrom=2026-01-01&dateTo=2026-12-31","description":"<h2 id=\"get-finance-records\">Get Finance Records</h2>\n<p>This endpoint retrieves financial records within a specified date range. It allows users to query for records that fall between two dates, enabling effective financial data management and reporting.</p>\n<h3 id=\"request-parameters\">Request Parameters</h3>\n<ul>\n<li><p><strong>dateFrom</strong> (required): The start date for the records to be retrieved, formatted as <code>YYYY-MM-DD</code>.</p>\n</li>\n<li><p><strong>dateTo</strong> (required): The end date for the records to be retrieved, formatted as <code>YYYY-MM-DD</code>.</p>\n</li>\n</ul>\n<h3 id=\"example-request\">Example Request</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>GET http://localhost:4000/api/finance/records?dateFrom=2026-01-01&amp;dateTo=2026-12-31\n\n</code></pre><h3 id=\"response-structure\">Response Structure</h3>\n<p>On a successful request, the API will return a JSON object with the following structure:</p>\n<ul>\n<li><p><strong>data</strong>: An array of financial record objects, each containing:</p>\n<ul>\n<li><p><strong>id</strong>: A unique identifier for the record.</p>\n</li>\n<li><p><strong>amount</strong>: The monetary value associated with the record.</p>\n</li>\n<li><p><strong>type</strong>: The type of financial transaction (e.g., income, expense).</p>\n</li>\n<li><p><strong>category</strong>: The category under which the transaction falls.</p>\n</li>\n<li><p><strong>date</strong>: The date of the transaction.</p>\n</li>\n<li><p><strong>notes</strong>: Any additional notes related to the transaction.</p>\n</li>\n<li><p><strong>createdBy</strong>: The user who created the record.</p>\n</li>\n<li><p><strong>createdAt</strong>: Timestamp of when the record was created.</p>\n</li>\n<li><p><strong>updatedAt</strong>: Timestamp of when the record was last updated.</p>\n</li>\n</ul>\n</li>\n<li><p><strong>page</strong>: The current page number of the results.</p>\n</li>\n<li><p><strong>limit</strong>: The maximum number of records returned per page.</p>\n</li>\n<li><p><strong>total</strong>: The total number of records available that match the query.</p>\n</li>\n</ul>\n<h3 id=\"example-response\">Example Response</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"data\": [\n    {\n      \"id\": \"\",\n      \"amount\": 0,\n      \"type\": \"\",\n      \"category\": \"\",\n      \"date\": \"\",\n      \"notes\": \"\",\n      \"createdBy\": \"\",\n      \"createdAt\": \"\",\n      \"updatedAt\": \"\"\n    }\n  ],\n  \"page\": 0,\n  \"limit\": 0,\n  \"total\": 0\n}\n\n</code></pre>\n<h3 id=\"notes\">Notes</h3>\n<ul>\n<li><p>Ensure that the <code>dateFrom</code> is earlier than <code>dateTo</code> to retrieve valid records.</p>\n</li>\n<li><p>If no records are found within the specified date range, the <code>data</code> array will be empty, while <code>total</code> will indicate the count of records found.</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"4000","path":["api","finance","records"],"host":["localhost"],"query":[{"key":"dateFrom","value":"2026-01-01"},{"key":"dateTo","value":"2026-12-31"}],"variable":[]}},"response":[{"id":"9a03d2ee-2248-418e-986f-84f9820b6e8a","name":"Filtering","originalRequest":{"method":"GET","header":[],"url":{"raw":"http://localhost:4000/api/finance/records?dateFrom=2026-01-01&dateTo=2026-12-31","protocol":"http","host":["localhost"],"port":"4000","path":["api","finance","records"],"query":[{"key":"dateFrom","value":"2026-01-01"},{"key":"dateTo","value":"2026-12-31"}]}},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Request-Id","value":"51a2d90a-283a-4a00-830e-77ab2807c52f"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Referrer-Policy","value":"no-referrer"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"X-XSS-Protection","value":"0"},{"key":"Vary","value":"Origin, Accept-Encoding"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"RateLimit-Policy","value":"300;w=900"},{"key":"RateLimit-Limit","value":"300"},{"key":"RateLimit-Remaining","value":"290"},{"key":"RateLimit-Reset","value":"808"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"542"},{"key":"ETag","value":"W/\"21e-phkxCuQHXMvg+sIJHYBIsJbQScE\""},{"key":"Date","value":"Sun, 05 Apr 2026 16:20:25 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"data\": [\n        {\n            \"id\": \"69d17ff85990cbc8fb05746c\",\n            \"amount\": 120.5,\n            \"type\": \"income\",\n            \"category\": \"salary\",\n            \"date\": \"2026-04-01T00:00:00.000Z\",\n            \"notes\": \"Test\",\n            \"createdBy\": \"69d1792580b81667816ed65a\",\n            \"createdAt\": \"2026-04-04T21:17:44.200Z\",\n            \"updatedAt\": \"2026-04-04T21:17:44.200Z\"\n        },\n        {\n            \"id\": \"69d281c277e34e46300af7e3\",\n            \"amount\": 120.5,\n            \"type\": \"income\",\n            \"category\": \"salary\",\n            \"date\": \"2026-04-01T00:00:00.000Z\",\n            \"notes\": \"Test\",\n            \"createdBy\": \"69d1792580b81667816ed65a\",\n            \"createdAt\": \"2026-04-05T15:37:38.563Z\",\n            \"updatedAt\": \"2026-04-05T15:37:38.563Z\"\n        }\n    ],\n    \"page\": 1,\n    \"limit\": 20,\n    \"total\": 2\n}"}],"_postman_id":"65fbe8c7-0874-4706-900d-147cb02be22d"},{"name":"Rate limiting","id":"654d3c78-1674-475d-a62a-ce37f1d31bf3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"email\": \"harsh.ramchandani122003@gmail.com\",\r\n    \"password\": \"Harsh@1234\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:4000/api/auth/login","description":"<h2 id=\"login-endpoint\">Login Endpoint</h2>\n<p>This endpoint is used to authenticate a user by logging them into the system.</p>\n<h3 id=\"http-method\">HTTP Method</h3>\n<p><code>POST</code></p>\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><code>http://localhost:4000/api/auth/login</code></p>\n<h3 id=\"request-parameters\">Request Parameters</h3>\n<p>The request body must be sent in JSON format and should include the following parameters:</p>\n<ul>\n<li><p><strong>email</strong> (string): The email address of the user attempting to log in.</p>\n</li>\n<li><p><strong>password</strong> (string): The password associated with the user's account.</p>\n</li>\n</ul>\n<h3 id=\"expected-response\">Expected Response</h3>\n<p>Upon a successful login, the server will respond with a status code indicating the result of the authentication attempt.</p>\n<ul>\n<li><p><strong>Status Code</strong>: <code>429</code> indicates that the user has made too many requests in a given amount of time.</p>\n</li>\n<li><p><strong>Content-Type</strong>: <code>application/json</code></p>\n</li>\n<li><p><strong>Response Body</strong>: The response will contain a JSON object with a message key, which may provide additional context regarding the status of the request.</p>\n</li>\n</ul>\n<h3 id=\"notes\">Notes</h3>\n<p>Ensure that the email and password provided are correct to avoid receiving error responses. If you encounter a <code>429</code> status, consider reducing the frequency of login attempts.</p>\n","urlObject":{"protocol":"http","port":"4000","path":["api","auth","login"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"33e7738f-8c30-4cc5-afaa-15ad38387e30","name":"Rate limiting","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"email\": \"harsh.ramchandani122003@gmail.com\",\r\n    \"password\": \"Harsh@1234\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:4000/api/auth/login"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Request-Id","value":"c9074b24-0972-402b-8365-43a9446ffd42"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Referrer-Policy","value":"no-referrer"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"X-XSS-Protection","value":"0"},{"key":"Vary","value":"Origin, Accept-Encoding"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"RateLimit-Policy","value":"60;w=900"},{"key":"RateLimit-Limit","value":"60"},{"key":"RateLimit-Remaining","value":"56"},{"key":"RateLimit-Reset","value":"637"},{"key":"Set-Cookie","value":"token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI2OWQxNzkyNTgwYjgxNjY3ODE2ZWQ2NWEiLCJpYXQiOjE3NzU0MDYwMzQsImV4cCI6MTc3NjAxMDgzNH0.VFvRVzJ5xHrwx_p2k6ZIxWvp8aGS5x-x6v5dypXFugU; Max-Age=604800; Path=/; Expires=Sun, 12 Apr 2026 16:20:34 GMT; HttpOnly; SameSite=Lax"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"212"},{"key":"ETag","value":"W/\"d4-EcX3v+XEZ9BeKq9h5LT0xwkKnF4\""},{"key":"Date","value":"Sun, 05 Apr 2026 16:20:34 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"user\": {\n        \"id\": \"69d1792580b81667816ed65a\",\n        \"email\": \"harsh.ramchandani122003@gmail.com\",\n        \"name\": \"Harsh\",\n        \"role\": \"admin\",\n        \"status\": \"active\",\n        \"createdAt\": \"2026-04-04T20:48:37.144Z\",\n        \"updatedAt\": \"2026-04-04T20:48:37.144Z\"\n    }\n}"}],"_postman_id":"654d3c78-1674-475d-a62a-ce37f1d31bf3"},{"name":"logout","id":"54196500-1440-4e98-a67e-6aa3841df1b4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[],"url":"http://localhost:4000/api/auth/logout","description":"<h2 id=\"logout-api-endpoint\">Logout API Endpoint</h2>\n<p>This endpoint is used to log out a user from the application. When a user sends a POST request to this endpoint, it will terminate the user's session and invalidate any associated authentication tokens.</p>\n<h3 id=\"request-format\">Request Format</h3>\n<ul>\n<li><p><strong>Method</strong>: POST</p>\n</li>\n<li><p><strong>URL</strong>: <code>http://localhost:4000/api/auth/logout</code></p>\n</li>\n<li><p><strong>Request Body</strong>: The request body is expected to be empty for this endpoint. No additional parameters are required.</p>\n</li>\n</ul>\n<h3 id=\"response-structure\">Response Structure</h3>\n<p>Upon a successful logout, the server will respond with:</p>\n<ul>\n<li><p><strong>Status Code</strong>: 200 OK</p>\n</li>\n<li><p><strong>Content-Type</strong>: application/json</p>\n</li>\n<li><p>{\"message\": \"\"}<br />  The response will contain a message field, which may be used to convey additional information regarding the logout operation, although it may be empty.</p>\n</li>\n</ul>\n<h3 id=\"summary\">Summary</h3>\n<p>This endpoint effectively handles user logout operations, ensuring that the user is properly logged out and that their session is terminated without requiring any specific request body parameters.</p>\n","urlObject":{"protocol":"http","port":"4000","path":["api","auth","logout"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"87857a4a-be6c-47c6-be8b-8d50d1d3f5c0","name":"logout","originalRequest":{"method":"POST","header":[],"url":"http://localhost:4000/api/auth/logout"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Request-Id","value":"8c8dc58e-8f24-44c5-a815-2603d7271f88"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Referrer-Policy","value":"no-referrer"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"X-XSS-Protection","value":"0"},{"key":"Vary","value":"Origin, Accept-Encoding"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"RateLimit-Policy","value":"60;w=900"},{"key":"RateLimit-Limit","value":"60"},{"key":"RateLimit-Remaining","value":"55"},{"key":"RateLimit-Reset","value":"628"},{"key":"Set-Cookie","value":"token=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT; HttpOnly; SameSite=Lax"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"37"},{"key":"ETag","value":"W/\"25-71uUsMgZY3FdZp9j1h5YMrBIOgg\""},{"key":"Date","value":"Sun, 05 Apr 2026 16:20:42 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"Logged out successfully\"\n}"}],"_postman_id":"54196500-1440-4e98-a67e-6aa3841df1b4"}]}