{"info":{"_postman_id":"c675da43-8b8a-4f26-bd85-6018e0505679","name":"Finance Dashboard System","description":"<html><head></head><body><h2 id=\"finance-dashboard-system\">Finance Dashboard System</h2>\n<p>The <strong>Finance Dashboard System</strong> is a secure RESTful API built with <strong>Node.js, Express, and MongoDB</strong> for managing organizational financial records. It supports full CRUD operations, smart filtering, and a financial summary dashboard — all protected behind a multi-step JWT authentication system.</p>\n<h3 id=\"base-url\">Base URL</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>https://finance-dashboard-service.onrender.com/\n\n</code></pre><h3 id=\"authentication-flow\">Authentication Flow</h3>\n<p>This API uses a <strong>3-step login system</strong> to ensure only authorized company employees can access finance data.</p>\n<p><strong>New User (First Time Login)</strong></p>\n<ol>\n<li><p><code>POST /user/login</code> — Submit company email → OTP is sent</p>\n</li>\n<li><p><code>POST /user/login/otp</code> — Verify OTP received on email</p>\n</li>\n<li><p><code>POST /user/login/password</code> — Create password → Receive JWT Token</p>\n</li>\n</ol>\n<p><strong>Returning User</strong></p>\n<ol>\n<li><p><code>POST /user/login</code> — Submit company email</p>\n</li>\n<li><p><code>POST /user/login/password</code> — Enter existing password → Receive JWT Token</p>\n</li>\n</ol>\n<blockquote>\n<p>All Finance endpoints require the JWT token in the Authorization header:<br><code>Authorization: Bearer</code> </p>\n</blockquote>\n<hr>\n<h3 id=\"folder-structure\">Folder Structure</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Folder</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>User Authentication</strong></td>\n<td>3-step login — email verification, OTP validation, and password authentication</td>\n</tr>\n<tr>\n<td><strong>Finance</strong></td>\n<td>Full CRUD on finance records, search/filter by type and category, and dashboard summary</td>\n</tr>\n</tbody>\n</table>\n</div><hr>\n<h3 id=\"common-response-codes\">Common Response Codes</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Code</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>200 OK</code></td>\n<td>Request succeeded</td>\n</tr>\n<tr>\n<td><code>201 Created</code></td>\n<td>Resource successfully created</td>\n</tr>\n<tr>\n<td><code>400 Bad Request</code></td>\n<td>Invalid or missing fields</td>\n</tr>\n<tr>\n<td><code>401 Unauthorized</code></td>\n<td>Missing or invalid JWT token</td>\n</tr>\n<tr>\n<td><code>404 Not Found</code></td>\n<td>Resource does not exist</td>\n</tr>\n<tr>\n<td><code>500 Internal Server Error</code></td>\n<td>Unexpected server error</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"role-based-access-control\">Role-Based Access Control</h3>\n<p>This API implements role-based access control (RBAC) derived automatically from the user's email address. The role is extracted from the email format:</p>\n<p><a href=\"https://mailto:name_role@companydomain.com\">name_role@companydomain.com</a></p>\n<p>Email Format</p>\n<p>RoleAccess Level</p>\n<p><code>john_finance@company.com</code></p>\n<p><strong>Analyst</strong></p>\n<p>Can view the finance records</p>\n<p><code>john_admin@company.com</code></p>\n<p><strong>Admin</strong></p>\n<p>Full system access</p>\n<p><code>john_hr@company.com</code></p>\n<p><strong>Viewer</strong></p>\n<p>View-only access to dashboard</p>\n<blockquote>\n<p><strong>Note:</strong> Any role other than <code>finance</code> or <code>admin</code> is treated as a <strong>Viewer</strong> with restricted access. </p>\n</blockquote>\n<p><strong>Examples</strong></p>\n<ul>\n<li><p><code>sarah_finance@sharklasers.com</code> → Role: <strong>Analyst</strong></p>\n</li>\n<li><p><code>admin_admin@sharklasers.com</code> → Role: <strong>Admin</strong></p>\n</li>\n<li><p><code>mark_hr@sharklasers.com</code> → Role: <strong>Viewer</strong></p>\n</li>\n</ul>\n<p>The role is automatically assigned at account creation and embedded in the JWT token — no manual role assignment is required.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"38959583","collectionId":"c675da43-8b8a-4f26-bd85-6018e0505679","publishedId":"2sBXiqEp7N","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-04-06T08:12:41.000Z"},"item":[{"name":"User Authentication","item":[{"name":"Email Validation","id":"0ba84b20-9cb6-45da-bd00-922796d45b44","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"email\":\"testuser3_finance@sharklasers.com\"\n}","options":{"raw":{"language":"json"}}},"url":"https://finance-dashboard-service.onrender.com/user/login","description":"<h3 id=\"step-1-of-3--email-verification\">Step 1 of 3 — Email Verification</h3>\n<p>Initiates the login process by validating the submitted email against the company domain.</p>\n<p><strong>New User:</strong> If the email is not registered, an OTP is sent to the email address. Proceed to the OTP Validation endpoint.</p>\n<p><strong>Returning User:</strong> If the email is already registered, proceed directly to Password Authentication — no OTP required.</p>\n<blockquote>\n<p>Only company-authorized email domains are accepted. Invalid domains will be rejected. </p>\n</blockquote>\n<p><strong>Request Body</strong></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>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>email</code></td>\n<td>string</td>\n<td>✅</td>\n<td>Must be a valid company domain email (e.g. <code>name_role@company.com</code>)</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Success Response — New User</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"OTP sent successfully to mail testuser_finance@company.com\",\n  \"isuser\": false\n}\n\n</code></pre>\n<p><strong>Success Response — Returning User</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"Please Login\",\n  \"isuser\": true\n}\n\n</code></pre>\n<p><strong>Error Response</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"Invalid Email\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["user","login"],"host":["finance-dashboard-service","onrender","com"],"query":[],"variable":[]}},"response":[{"id":"16680512-0417-4bb9-b65e-52e510a0b845","name":"Email Validation","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"email\":\"testuser4_finance@sharklasers.com\"\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:3000/user/login"},"_postman_previewlanguage":"","header":[],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":""}],"_postman_id":"0ba84b20-9cb6-45da-bd00-922796d45b44"},{"name":"OTP Validation","id":"51fc7b8a-f041-4df7-9aca-f35b48351e10","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"email\":\"testuser3_finance@sharklasers.com\",\n    \"userOtp\":\"400543\"\n}","options":{"raw":{"language":"json"}}},"url":"https://finance-dashboard-service.onrender.com/user/login/otp","description":"<h3 id=\"step-2-of-3--otp-verification-new-users-only\">Step 2 of 3 — OTP Verification (New Users Only)</h3>\n<p>Verifies the One-Time Password (OTP) sent to the user's email in Step 1.</p>\n<blockquote>\n<p>This step is only required for <strong>first-time users</strong>. Returning users skip directly to Password Authentication. </p>\n</blockquote>\n<p><strong>Request Body</strong></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>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>email</code></td>\n<td>string</td>\n<td>✅</td>\n<td>Same email used in Step 1</td>\n</tr>\n<tr>\n<td><code>userOtp</code></td>\n<td>string</td>\n<td>✅</td>\n<td>6-digit OTP received on email</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Success Response</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"Email ID authenticated successfully\"\n}\n\n</code></pre>\n<p><strong>Error Response</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"OTP not valid\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["user","login","otp"],"host":["finance-dashboard-service","onrender","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"51fc7b8a-f041-4df7-9aca-f35b48351e10"},{"name":"Password Authentication","id":"1fb99e28-b580-481d-9765-bebdb3893ef3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"email\":\"testuser3_finance@sharklasers.com\",\n    \"password\":\"test\"\n}","options":{"raw":{"language":"json"}}},"url":"https://finance-dashboard-service.onrender.com/user/login/password","description":"<h3 id=\"step-3-of-3--password-authentication\">Step 3 of 3 — Password Authentication</h3>\n<p><strong>New User:</strong> Creates a password and registers the account. Returns a JWT token.</p>\n<p><strong>Returning User:</strong> Validates the existing password. Returns a JWT token on success.</p>\n<blockquote>\n<p>The JWT token returned here must be passed as <code>Authorization: Bearer</code> in all Finance API requests. </p>\n</blockquote>\n<p><strong>Request Body</strong></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>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>email</code></td>\n<td>string</td>\n<td>✅</td>\n<td>Company email address</td>\n</tr>\n<tr>\n<td><code>password</code></td>\n<td>string</td>\n<td>✅</td>\n<td>New password (first time) or existing password (returning user)</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Success Response</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"User authenticated successfully\",\n  \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"\n}\n\n</code></pre>\n<p><strong>Error Response</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"Invalid credentials\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["user","login","password"],"host":["finance-dashboard-service","onrender","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"1fb99e28-b580-481d-9765-bebdb3893ef3"}],"id":"af06cae5-32ac-4978-bfdd-db4aea978d02","description":"<p>Handles the complete multi-step login flow for company employees.</p>\n<ul>\n<li><p><strong>New users</strong> go through email verification → OTP validation → password creation</p>\n</li>\n<li><p><strong>Returning users</strong> go through email verification → password login</p>\n</li>\n</ul>\n<p>A <strong>JWT Bearer Token</strong> is returned upon successful authentication and must be used in all Finance API requests.</p>\n","_postman_id":"af06cae5-32ac-4978-bfdd-db4aea978d02"},{"name":"Finance Operations","item":[{"name":"Get all financial records","id":"a4130a39-1af8-4c57-90b7-4ce8a537e0d2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"GET","header":[],"body":{"mode":"formdata","formdata":[{"key":"page","value":"","type":"text","uuid":"de802cbb-23ee-4314-bb4c-79f518ffd0af"}]},"url":"https://finance-dashboard-service.onrender.com/finance?page=1&limit=3","description":"<p>Returns a paginated list of all financial records for the authenticated user.</p>\n<p>Supports pagination via query parameters to efficiently handle large datasets.</p>\n<p><strong>Query Parameters</strong></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>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>page</code></td>\n<td>number</td>\n<td>✅</td>\n<td>Page number to retrieve (starts at 1)</td>\n</tr>\n<tr>\n<td><code>limit</code></td>\n<td>number</td>\n<td>✅</td>\n<td>Number of records per page</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Success Response</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">[\n    {\n        \"_id\": \"69d28c9533f3177eb67ea72a\",\n        \"amount\": 5000,\n        \"financeType\": \"Income\",\n        \"category\": \"Salary\",\n        \"date\": \"2026-04-05T16:23:47.439Z\",\n        \"notes\": \"Monthly salary credited\",\n        \"createdAt\": \"2026-04-05T16:23:49.423Z\",\n        \"updatedAt\": \"2026-04-05T16:23:49.423Z\",\n        \"__v\": 0\n    },\n    {\n        \"_id\": \"69d28cb933f3177eb67ea72c\",\n        \"amount\": 300,\n        \"financeType\": \"Expense\",\n        \"category\": \"Travel\",\n        \"date\": \"2026-04-05T16:23:47.439Z\",\n        \"notes\": \"Client site visit travel\",\n        \"createdAt\": \"2026-04-05T16:24:25.899Z\",\n        \"updatedAt\": \"2026-04-05T16:24:25.899Z\",\n        \"__v\": 0\n    },\n    {\n        \"_id\": \"69d28cc133f3177eb67ea72d\",\n        \"amount\": 8000,\n        \"financeType\": \"Income\",\n        \"category\": \"Project\",\n        \"date\": \"2026-04-05T16:23:47.439Z\",\n        \"notes\": \"Project milestone payment received\",\n        \"createdAt\": \"2026-04-05T16:24:33.129Z\",\n        \"updatedAt\": \"2026-04-05T16:24:33.129Z\",\n        \"__v\": 0\n    }\n]\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["finance"],"host":["finance-dashboard-service","onrender","com"],"query":[{"key":"page","value":"1"},{"key":"limit","value":"3"}],"variable":[]}},"response":[],"_postman_id":"a4130a39-1af8-4c57-90b7-4ce8a537e0d2"},{"name":"Get financial records by Id","id":"183e25b5-1da0-4f13-8868-3b164b5b1da1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"GET","header":[],"body":{"mode":"formdata","formdata":[{"key":"page","value":"","type":"text","uuid":"de802cbb-23ee-4314-bb4c-79f518ffd0af"}]},"url":"https://finance-dashboard-service.onrender.com/finance/69d28cb933f3177eb67ea72c","description":"<p>Retrieves a single financial record by its unique MongoDB ID.</p>\n<p><strong>Path Parameter</strong></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>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>string</td>\n<td>✅</td>\n<td>MongoDB ObjectId of the finance record</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Success Response</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"_id\": \"69d28cb133f3177eb67ea72b\",\n  \"amount\": 900,\n  \"financeType\": \"Expense\",\n  \"category\": \"Equipment\",\n  \"date\": \"2024-03-15\",\n  \"notes\": \"Purchased keyboard and mouse\"\n}\n\n</code></pre>\n<p><strong>Error Response</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"Record not found\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["finance","69d28cb933f3177eb67ea72c"],"host":["finance-dashboard-service","onrender","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"183e25b5-1da0-4f13-8868-3b164b5b1da1"},{"name":"Add financial records","id":"23299a6c-b765-471c-b1cd-d11a9963ba82","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"amount\": 900,\n    \"financeType\": \"Expense\",\n    \"category\": \"Equipment\",\n    \"date\": \"2024-03-15\",\n    \"notes\": \"Purchased keyboard and mouse\"\n  }","options":{"raw":{"language":"json"}}},"url":"https://finance-dashboard-service.onrender.com/finance/","description":"<p>Creates a new financial record (income or expense) for the organization.</p>\n<p><strong>Request Body</strong></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>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>amount</code></td>\n<td>number</td>\n<td>✅</td>\n<td>Transaction amount</td>\n</tr>\n<tr>\n<td><code>financeType</code></td>\n<td>string</td>\n<td>✅</td>\n<td><code>\"Income\"</code> or <code>\"Expense\"</code></td>\n</tr>\n<tr>\n<td><code>category</code></td>\n<td>string</td>\n<td>✅</td>\n<td>Category e.g. <code>\"Equipment\"</code>, <code>\"Bonus\"</code>, <code>\"Salary\"</code></td>\n</tr>\n<tr>\n<td><code>date</code></td>\n<td>string</td>\n<td>✅</td>\n<td>Date in <code>YYYY-MM-DD</code> format</td>\n</tr>\n<tr>\n<td><code>notes</code></td>\n<td>string</td>\n<td>❌</td>\n<td>Optional notes or description</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Success Response</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"message\": \"Financial record added successfully\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["finance",""],"host":["finance-dashboard-service","onrender","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"23299a6c-b765-471c-b1cd-d11a9963ba82"},{"name":"Update financial record by Id","id":"624fe102-8daa-47f4-a80c-69cb46dcf364","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n    \"amount\":\"14000\",\n    \"financeType\":\"Income\"\n}","options":{"raw":{"language":"json"}}},"url":"https://finance-dashboard-service.onrender.com/finance/69d28cb133f3177eb67ea72b","description":"<p>Updates one or more fields of an existing financial record by ID. Only the fields provided in the request body will be updated.</p>\n<p><strong>Path Parameter</strong></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>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>string</td>\n<td>✅</td>\n<td>MongoDB ObjectId of the record to update</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Request Body</strong> <em>(all fields optional — send only what needs updating)</em></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><code>amount</code></td>\n<td>number</td>\n<td>Updated transaction amount</td>\n</tr>\n<tr>\n<td><code>financeType</code></td>\n<td>string</td>\n<td><code>\"Income\"</code> or <code>\"Expense\"</code></td>\n</tr>\n<tr>\n<td><code>category</code></td>\n<td>string</td>\n<td>Updated category</td>\n</tr>\n<tr>\n<td><code>date</code></td>\n<td>string</td>\n<td>Updated date in <code>YYYY-MM-DD</code> format</td>\n</tr>\n<tr>\n<td><code>notes</code></td>\n<td>string</td>\n<td>Updated notes</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Success Response</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"message\": \"Financial record updated successfully\"\n}\n\n</code></pre>\n<p><strong>Error Response</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"message\": \"Financial Record not found\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["finance","69d28cb133f3177eb67ea72b"],"host":["finance-dashboard-service","onrender","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"624fe102-8daa-47f4-a80c-69cb46dcf364"},{"name":"Delete financial record by Id","id":"838a275c-a115-46d0-b2b6-b0334015d294","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"DELETE","header":[],"url":"https://finance-dashboard-service.onrender.com/finance/69d28cb133f3177eb67ea72b","description":"<p>Permanently deletes a financial record by its ID.</p>\n<blockquote>\n<p>⚠️ This action is irreversible. </p>\n</blockquote>\n<p><strong>Path Parameter</strong></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>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>string</td>\n<td>✅</td>\n<td>MongoDB ObjectId of the record to delete</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Success Response</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"message\": \"Financial record deleted successfully\"\n}\n\n</code></pre>\n<p><strong>Error Response</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"message\": \"Financial Record not found\"\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["finance","69d28cb133f3177eb67ea72b"],"host":["finance-dashboard-service","onrender","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"838a275c-a115-46d0-b2b6-b0334015d294"},{"name":"Search financial record by type and category","id":"d7d8215c-f7de-480e-bf12-721594c42a93","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"GET","header":[],"url":"https://finance-dashboard-service.onrender.com/finance/search?financeType=Income&category=Bonus","description":"<p>Filters financial records by finance type and/or category. Useful for generating targeted reports.</p>\n<p><strong>Query Parameters</strong></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>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>financeType</code></td>\n<td>string</td>\n<td>❌</td>\n<td><code>\"Income\"</code> or <code>\"Expense\"</code></td>\n</tr>\n<tr>\n<td><code>category</code></td>\n<td>string</td>\n<td>❌</td>\n<td>e.g. <code>\"Bonus\"</code>, <code>\"Equipment\"</code>, <code>\"Salary\"</code></td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p>At least one query parameter should be provided. </p>\n</blockquote>\n<p><strong>Success Response</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">[\n    {\n        \"_id\": \"69d28cd733f3177eb67ea730\",\n        \"amount\": 3500,\n        \"financeType\": \"Income\",\n        \"category\": \"Bonus\",\n        \"date\": \"2026-04-05T16:23:47.439Z\",\n        \"notes\": \"Quarterly performance bonus\",\n        \"createdAt\": \"2026-04-05T16:24:55.440Z\",\n        \"updatedAt\": \"2026-04-05T16:24:55.440Z\",\n        \"__v\": 0\n    }\n]\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["finance","search"],"host":["finance-dashboard-service","onrender","com"],"query":[{"key":"financeType","value":"Income"},{"key":"category","value":"Bonus"}],"variable":[]}},"response":[],"_postman_id":"d7d8215c-f7de-480e-bf12-721594c42a93"},{"name":"Dashboard - Overall Summary","id":"ca69a689-91be-4869-9272-5bd892433bdb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"GET","header":[],"url":"https://finance-dashboard-service.onrender.com/finance/dashboard","description":"<p>Returns an overall financial summary including total income, total expenses, and net balance. Useful for high-level reporting and decision making.</p>\n<p><strong>Success Response</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"totalIncome\": 18500,\n    \"totalExpense\": 3050,\n    \"netBalance\": 15450,\n    \"categoryWiseTotal\": [\n        {\n            \"category\": \"Project\",\n            \"totalIncome\": 8000,\n            \"totalExpense\": 0\n        },\n        {\n            \"category\": \"Equipment\",\n            \"totalIncome\": 0,\n            \"totalExpense\": 2300\n        },\n        {\n            \"category\": \"Salary\",\n            \"totalIncome\": 5000,\n            \"totalExpense\": 0\n        },\n        {\n            \"category\": \"Travel\",\n            \"totalIncome\": 0,\n            \"totalExpense\": 300\n        },\n        {\n            \"category\": \"Bonus\",\n            \"totalIncome\": 3500,\n            \"totalExpense\": 0\n        },\n        {\n            \"category\": \"Freelance\",\n            \"totalIncome\": 2000,\n            \"totalExpense\": 0\n        },\n        {\n            \"category\": \"Utilities\",\n            \"totalIncome\": 0,\n            \"totalExpense\": 450\n        }\n    ],\n    \"MonthlyTrends\": [\n        {\n            \"Apr-2026\": {\n                \"income\": 18500,\n                \"expense\": 3050\n            }\n        }\n    ]\n}\n\n</code></pre>\n","urlObject":{"protocol":"https","path":["finance","dashboard"],"host":["finance-dashboard-service","onrender","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"ca69a689-91be-4869-9272-5bd892433bdb"}],"id":"8bcb5cbf-5f63-4663-b2c4-fff7e30977d5","description":"<p>Contains full CRUD operations for finance records, including listing, retrieving by ID, creating, updating, deleting, filtering/searching, and a dashboard summary endpoint.</p>\n","_postman_id":"8bcb5cbf-5f63-4663-b2c4-fff7e30977d5"}]}