{"info":{"_postman_id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","name":"Finance Dashboard API","description":"<html><head></head><body><p>This collection covers the backend API endpoints for a Finance Dashboard application. It is organized into four functional modules:</p>\n<ul>\n<li><p>Auth — Handles user registration for three role types: Admin, Analyst, and Viewer. All requests target POST /api/auth/register.</p>\n</li>\n<li><p>Transactions — Manages financial records. Supports creating records as an Admin, retrieving all records as an Analyst, filtering records by type (e.g., expense), and accessing a dashboard summary. Also includes an access control test to verify role-based restrictions.</p>\n</li>\n<li><p>Dashboard — Contains summary endpoints for the finance dashboard, with role-specific requests for Analysts and Viewers to validate access control behavior.</p>\n</li>\n<li><p>Users — Provides endpoints to retrieve user data. Includes fetching all users (accessible by Admins), retrieving a specific user by ID, and a role-based access check for Analysts.</p>\n</li>\n</ul>\n<p>All requests run against a local development server at <a href=\"http://localhost:3000/api\">http://localhost:3000/api</a> and are designed to test both core functionality and role-based access control (RBAC) across Admin, Analyst, and Viewer roles.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"40958488","collectionId":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","publishedId":"2sBXiqFpB1","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-04-06T16:58:25.000Z"},"item":[{"name":"Auth","item":[{"name":"Register User","id":"a868a91e-2568-474d-b7e7-8fb763dcb06b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"email\": \"admin@finance.com\",\r\n  \"password\": \"Password123!\",\r\n  \"name\": \"Admin User\",\r\n  \"role\": \"ADMIN\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/auth/register","description":"<p>Registers a new user with the ADMIN role. Sends a POST request to the auth registration endpoint with the user's name, email, and role. Use this to set up an admin account that has full access to the Finance Dashboard system.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","name":"Finance Dashboard API","type":"collection"}},"urlObject":{"path":["auth","register"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"d37ceb39-68a1-4380-a41d-e608f3eafaef","name":"Register User","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"email\": \"admin@finance.com\",\r\n  \"password\": \"Password123!\",\r\n  \"name\": \"Admin User\",\r\n  \"role\": \"ADMIN\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/auth/register"},"status":"Conflict","code":409,"_postman_previewlanguage":null,"header":[{"key":"Content-Security-Policy","value":"default-src 'self';base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';img-src 'self' data:;object-src 'none';script-src 'self';script-src-attr 'none';style-src 'self' https: 'unsafe-inline';upgrade-insecure-requests"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Cross-Origin-Resource-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":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"52"},{"key":"ETag","value":"W/\"34-0TWfJTfDPCpuJoYot9Wk3JbQcLM\""},{"key":"Date","value":"Mon, 06 Apr 2026 16:16:20 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"error\": \"Email already registered\"\n}"}],"_postman_id":"a868a91e-2568-474d-b7e7-8fb763dcb06b"},{"name":"Login User","id":"17383ab2-7132-4e9d-90b0-d5a6656b75fd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"email\": \"admin@finance.com\",\r\n  \"password\": \"Password123!\"\r\n}\r\n","options":{"raw":{"language":"json"}}},"url":"/auth/login","description":"<p>Authenticates a user and returns a JWT token.<br />Copy the token from data.token in the response.<br />Paste it into the collection variable 'token' to authorize all other requests.</p>\n<p>Test accounts (after running node prisma/seed.js):<br /><a href=\"https://mailto:admin@finance.com\">admin@finance.com</a> / Password123! (ADMIN)<br /><a href=\"https://mailto:analyst@finance.com\">analyst@finance.com</a> / Password123! (ANALYST)<br /><a href=\"https://mailto:viewer@finance.com\">viewer@finance.com</a> / Password123! (VIEWER)</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","name":"Finance Dashboard API","type":"collection"}},"urlObject":{"path":["auth","login"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"9c077eb6-69e5-474d-87ba-c8bdc44dc3b2","name":"Login User","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"email\": \"admin@finance.com\",\r\n  \"password\": \"Password123!\"\r\n}\r\n","options":{"raw":{"language":"json"}}},"url":"/auth/login"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Content-Security-Policy","value":"default-src 'self';base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';img-src 'self' data:;object-src 'none';script-src 'self';script-src-attr 'none';style-src 'self' https: 'unsafe-inline';upgrade-insecure-requests"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Cross-Origin-Resource-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":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"529"},{"key":"ETag","value":"W/\"211-GZkHD6e+Le4eSNCorJPCoxUHBVw\""},{"key":"Date","value":"Mon, 06 Apr 2026 16:26:15 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"message\": \"Logged in\",\n    \"data\": {\n        \"user\": {\n            \"id\": \"e699c176-9065-4cb3-b396-b514b04e6e90\",\n            \"email\": \"admin@finance.com\",\n            \"name\": \"Admin User\",\n            \"role\": \"ADMIN\",\n            \"isActive\": true,\n            \"createdAt\": \"2026-04-04T12:48:06.282Z\",\n            \"updatedAt\": \"2026-04-04T12:48:06.282Z\",\n            \"deletedAt\": null\n        },\n        \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImU2OTljMTc2LTkwNjUtNGNiMy1iMzk2LWI1MTRiMDRlNmU5MCIsImVtYWlsIjoiYWRtaW5AZmluYW5jZS5jb20iLCJyb2xlIjoiQURNSU4iLCJpYXQiOjE3NzU0OTI3NzUsImV4cCI6MTc3NjA5NzU3NX0.nZ3aZ1Dy83B-EWKlLs41ko2tkzvVG8N6yiY98DLG9q4\"\n    }\n}"}],"_postman_id":"17383ab2-7132-4e9d-90b0-d5a6656b75fd"},{"name":"Get Current User","id":"7fff4e4b-4a2f-497b-a7af-5f68722117ba","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/auth/me","description":"<p>Returns the currently authenticated user's profile.\nRequires: Bearer token in Authorization header.\nUseful to verify your token is working correctly.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","name":"Finance Dashboard API","type":"collection"}},"urlObject":{"path":["auth","me"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"003f8da5-fa12-4a5b-be3b-0ef12e7e47bd","name":"Get Current User","originalRequest":{"method":"GET","header":[],"url":"/auth/me"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Content-Security-Policy","value":"default-src 'self';base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';img-src 'self' data:;object-src 'none';script-src 'self';script-src-attr 'none';style-src 'self' https: 'unsafe-inline';upgrade-insecure-requests"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Cross-Origin-Resource-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":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"137"},{"key":"ETag","value":"W/\"89-uKHmFHucR8uABEG2epT3zHM/OTc\""},{"key":"Date","value":"Mon, 06 Apr 2026 16:27:04 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"message\": \"Current user\",\n    \"data\": {\n        \"id\": \"e699c176-9065-4cb3-b396-b514b04e6e90\",\n        \"email\": \"admin@finance.com\",\n        \"role\": \"ADMIN\"\n    }\n}"}],"_postman_id":"7fff4e4b-4a2f-497b-a7af-5f68722117ba"}],"id":"87d56c90-f8c8-48cc-b909-4fd0e4dd3147","_postman_id":"87d56c90-f8c8-48cc-b909-4fd0e4dd3147","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","name":"Finance Dashboard API","type":"collection"}}},{"name":"Transactions","item":[{"name":"List Transactions","id":"aa36a32a-02d9-4eff-871c-c121e6555f42","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/transactions?page=1&limit=10&type=INCOME&category=Salary&startDate=2024-01-01T00:00:00Z&endDate=2024-12-31T00:00:00Z","description":"<p>Returns a paginated list of transactions.\nRole required: ANALYST or ADMIN.</p>\n<p>Optional query filters:\n  ?type=INCOME|EXPENSE\n  ?category=Salary\n  ?startDate=2024-01-01T00:00:00Z\n  ?endDate=2024-12-31T00:00:00Z\n  ?page=1&amp;limit=10</p>\n<p>Response includes records array + pagination object.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","name":"Finance Dashboard API","type":"collection"}},"urlObject":{"path":["transactions"],"host":[""],"query":[{"key":"page","value":"1"},{"key":"limit","value":"10"},{"key":"type","value":"INCOME"},{"key":"category","value":"Salary"},{"key":"startDate","value":"2024-01-01T00:00:00Z"},{"key":"endDate","value":"2024-12-31T00:00:00Z"}],"variable":[]}},"response":[{"id":"f16d85b0-221f-44d9-9953-9e09d8b5ce23","name":"List Transactions","originalRequest":{"method":"GET","header":[],"url":{"raw":"/transactions?page=1&limit=10&type=INCOME&category=Salary&startDate=2024-01-01T00:00:00Z&endDate=2024-12-31T00:00:00Z","host":[""],"path":["transactions"],"query":[{"key":"page","value":"1"},{"key":"limit","value":"10"},{"key":"type","value":"INCOME"},{"key":"category","value":"Salary"},{"key":"startDate","value":"2024-01-01T00:00:00Z"},{"key":"endDate","value":"2024-12-31T00:00:00Z"}]}},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Content-Security-Policy","value":"default-src 'self';base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';img-src 'self' data:;object-src 'none';script-src 'self';script-src-attr 'none';style-src 'self' https: 'unsafe-inline';upgrade-insecure-requests"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Cross-Origin-Resource-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":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1174"},{"key":"ETag","value":"W/\"496-5272enyCvpEmKmXZgXY8FnQmcTs\""},{"key":"Date","value":"Mon, 06 Apr 2026 16:28:53 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"message\": \"OK\",\n    \"data\": {\n        \"records\": [\n            {\n                \"id\": \"df03daee-3168-4e33-a071-1ba4a8eb1d58\",\n                \"amount\": \"5000\",\n                \"type\": \"INCOME\",\n                \"category\": \"Salary\",\n                \"date\": \"2024-06-01T00:00:00.000Z\",\n                \"notes\": \"June salary\",\n                \"userId\": \"e699c176-9065-4cb3-b396-b514b04e6e90\",\n                \"createdAt\": \"2026-04-04T13:28:28.539Z\",\n                \"updatedAt\": \"2026-04-04T13:28:28.539Z\",\n                \"deletedAt\": null,\n                \"user\": {\n                    \"name\": \"Admin User\",\n                    \"email\": \"admin@finance.com\"\n                }\n            },\n            {\n                \"id\": \"24542e18-bcb9-4ff3-9e5e-18404831b87d\",\n                \"amount\": \"5000\",\n                \"type\": \"INCOME\",\n                \"category\": \"Salary\",\n                \"date\": \"2024-06-01T00:00:00.000Z\",\n                \"notes\": \"June salary\",\n                \"userId\": \"e699c176-9065-4cb3-b396-b514b04e6e90\",\n                \"createdAt\": \"2026-04-04T13:32:27.964Z\",\n                \"updatedAt\": \"2026-04-04T13:32:27.964Z\",\n                \"deletedAt\": null,\n                \"user\": {\n                    \"name\": \"Admin User\",\n                    \"email\": \"admin@finance.com\"\n                }\n            },\n            {\n                \"id\": \"0454f54f-5ee0-4866-8e3d-9ba3c1a841cc\",\n                \"amount\": \"5000\",\n                \"type\": \"INCOME\",\n                \"category\": \"Salary\",\n                \"date\": \"2024-06-01T00:00:00.000Z\",\n                \"notes\": \"June salary\",\n                \"userId\": \"e699c176-9065-4cb3-b396-b514b04e6e90\",\n                \"createdAt\": \"2026-04-06T15:31:31.310Z\",\n                \"updatedAt\": \"2026-04-06T15:31:31.310Z\",\n                \"deletedAt\": null,\n                \"user\": {\n                    \"name\": \"Admin User\",\n                    \"email\": \"admin@finance.com\"\n                }\n            }\n        ],\n        \"pagination\": {\n            \"total\": 3,\n            \"page\": 1,\n            \"limit\": 10,\n            \"totalPages\": 1\n        }\n    }\n}"}],"_postman_id":"aa36a32a-02d9-4eff-871c-c121e6555f42"},{"name":"Get Transaction by ID","id":"395fb047-3360-4d2b-8f12-14ee7f8bc96c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/transactions/1","description":"<p>Returns a single transaction by its UUID.\nReplace :id with a real transaction UUID from the list endpoint.\nRole required: ANALYST or ADMIN.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","name":"Finance Dashboard API","type":"collection"}},"urlObject":{"path":["transactions","1"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"1a11eb0c-0754-40cd-9b41-d512bbeeee05","name":"Get Transaction by ID","originalRequest":{"method":"GET","header":[],"url":{"raw":"/transactions/:2","host":[""],"path":["transactions",":2"],"variable":[{"key":"2","value":""}]}},"status":"Not Found","code":404,"_postman_previewlanguage":null,"header":[{"key":"Content-Security-Policy","value":"default-src 'self';base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';img-src 'self' data:;object-src 'none';script-src 'self';script-src-attr 'none';style-src 'self' https: 'unsafe-inline';upgrade-insecure-requests"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Cross-Origin-Resource-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":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"49"},{"key":"ETag","value":"W/\"31-kLkByQunOd7y3m004pWjEkHWOLg\""},{"key":"Date","value":"Mon, 06 Apr 2026 16:29:17 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"error\": \"Transaction not found\"\n}"}],"_postman_id":"395fb047-3360-4d2b-8f12-14ee7f8bc96c"},{"name":"Create Transaction","id":"bfdfd6e1-e9cd-4fd9-839e-a3fc9446b86e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"amount\": 5000,\r\n  \"type\": \"INCOME\",\r\n  \"category\": \"Salary\",\r\n  \"date\": \"2024-06-01T00:00:00Z\",\r\n  \"notes\": \"June salary\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/transactions","description":"<p>Creates a new financial transaction.\nRole required: ADMIN only. Returns 403 for ANALYST and VIEWER.</p>\n<p>Validation rules:\n  amount   - positive number, required\n  type     - must be INCOME or EXPENSE\n  category - string, max 50 chars, required\n  date     - ISO 8601 datetime string, required\n  notes    - string, max 500 chars, optional</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","name":"Finance Dashboard API","type":"collection"}},"urlObject":{"path":["transactions"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"74664da7-a8a8-4e96-bbff-18cad7a2f7b0","name":"Create Transaction","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"amount\": 5000,\r\n  \"type\": \"INCOME\",\r\n  \"category\": \"Salary\",\r\n  \"date\": \"2024-06-01T00:00:00Z\",\r\n  \"notes\": \"June salary\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/transactions"},"status":"Created","code":201,"_postman_previewlanguage":null,"header":[{"key":"Content-Security-Policy","value":"default-src 'self';base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';img-src 'self' data:;object-src 'none';script-src 'self';script-src-attr 'none';style-src 'self' https: 'unsafe-inline';upgrade-insecure-requests"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Cross-Origin-Resource-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":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"340"},{"key":"ETag","value":"W/\"154-i+RkKb5x4NhSpOvo9BWyACA4XOM\""},{"key":"Date","value":"Mon, 06 Apr 2026 16:29:30 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"message\": \"Created\",\n    \"data\": {\n        \"id\": \"b730f52d-6fd9-4a2c-82c9-8d30661a4cc6\",\n        \"amount\": \"5000\",\n        \"type\": \"INCOME\",\n        \"category\": \"Salary\",\n        \"date\": \"2024-06-01T00:00:00.000Z\",\n        \"notes\": \"June salary\",\n        \"userId\": \"e699c176-9065-4cb3-b396-b514b04e6e90\",\n        \"createdAt\": \"2026-04-06T16:29:30.386Z\",\n        \"updatedAt\": \"2026-04-06T16:29:30.386Z\",\n        \"deletedAt\": null\n    }\n}"}],"_postman_id":"bfdfd6e1-e9cd-4fd9-839e-a3fc9446b86e"},{"name":"Update Transaction","id":"6d41a24b-7603-47fd-b5a4-f9ecb55aece1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n  \"amount\": 5500,\r\n  \"notes\": \"Updated — includes bonus\"\r\n}\r\n","options":{"raw":{"language":"json"}}},"url":"/transactions/2","description":"<p>Partially updates a transaction. Only send the fields you want to change.\nRole required: ADMIN only.\nReplace :id with a real transaction UUID.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","name":"Finance Dashboard API","type":"collection"}},"urlObject":{"path":["transactions","2"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"35422422-f196-41c9-bdaa-eb761c69fd8a","name":"Update Transaction","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n  \"amount\": 5500,\r\n  \"notes\": \"Updated — includes bonus\"\r\n}\r\n","options":{"raw":{"language":"json"}}},"url":"/transactions/2"},"status":"Not Found","code":404,"_postman_previewlanguage":null,"header":[{"key":"Content-Security-Policy","value":"default-src 'self';base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';img-src 'self' data:;object-src 'none';script-src 'self';script-src-attr 'none';style-src 'self' https: 'unsafe-inline';upgrade-insecure-requests"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Cross-Origin-Resource-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":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"49"},{"key":"ETag","value":"W/\"31-kLkByQunOd7y3m004pWjEkHWOLg\""},{"key":"Date","value":"Mon, 06 Apr 2026 16:30:04 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"error\": \"Transaction not found\"\n}"}],"_postman_id":"6d41a24b-7603-47fd-b5a4-f9ecb55aece1"},{"name":"Delete Transaction","id":"4bf48d8c-84f5-4e22-92b0-8a72c2aa5e3f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"/transactions/1","description":"<p>Soft deletes a transaction (sets deletedAt timestamp — not permanently removed).\nRole required: ADMIN only.\nReplace :id with a real transaction UUID.\nThe record will no longer appear in list queries.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","name":"Finance Dashboard API","type":"collection"}},"urlObject":{"path":["transactions","1"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"552431c2-0ca8-4e22-98e1-c1e7d3808076","name":"Delete Transaction","originalRequest":{"method":"DELETE","header":[],"url":"/transactions/1"},"status":"Not Found","code":404,"_postman_previewlanguage":null,"header":[{"key":"Content-Security-Policy","value":"default-src 'self';base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';img-src 'self' data:;object-src 'none';script-src 'self';script-src-attr 'none';style-src 'self' https: 'unsafe-inline';upgrade-insecure-requests"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Cross-Origin-Resource-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":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"49"},{"key":"ETag","value":"W/\"31-kLkByQunOd7y3m004pWjEkHWOLg\""},{"key":"Date","value":"Mon, 06 Apr 2026 16:30:17 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"error\": \"Transaction not found\"\n}"}],"_postman_id":"4bf48d8c-84f5-4e22-92b0-8a72c2aa5e3f"}],"id":"cb5188dd-e5d2-4a64-947b-0d72b0ab7fc8","_postman_id":"cb5188dd-e5d2-4a64-947b-0d72b0ab7fc8","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","name":"Finance Dashboard API","type":"collection"}}},{"name":"Dashboard","item":[{"name":"Get Dashboard Summary","id":"d86ff961-a080-408c-ba7f-185ac652731b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/dashboard/summary","description":"<p>Returns aggregated financial analytics for the dashboard.\nRole required: any authenticated user (ADMIN, ANALYST, VIEWER).</p>\n<p>Response includes:\n  summary          - totalIncome, totalExpenses, netBalance, transactionCount\n  categoryBreakdown - total per category per type\n  recentActivity   - last 10 transactions\n  monthlyTrends    - income + expense totals grouped by month</p>\n<p>All 5 queries run in parallel (Promise.all) for performance.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","name":"Finance Dashboard API","type":"collection"}},"urlObject":{"path":["dashboard","summary"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"a6ecad3c-fcd8-4466-891b-c04fed81659f","name":"Get Dashboard Summary","originalRequest":{"method":"GET","header":[],"url":"/dashboard/summary"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Content-Security-Policy","value":"default-src 'self';base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';img-src 'self' data:;object-src 'none';script-src 'self';script-src-attr 'none';style-src 'self' https: 'unsafe-inline';upgrade-insecure-requests"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Cross-Origin-Resource-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":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"3191"},{"key":"ETag","value":"W/\"c77-IHXu7Kr99iZgGSFv+G2W+o6QsP0\""},{"key":"Date","value":"Mon, 06 Apr 2026 16:30:24 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"message\": \"Dashboard summary\",\n    \"data\": {\n        \"summary\": {\n            \"totalIncome\": 43720.02,\n            \"totalExpenses\": 29995.95,\n            \"netBalance\": 13724.069999999996\n        },\n        \"categoryBreakdown\": [\n            {\n                \"category\": \"Salary\",\n                \"type\": \"INCOME\",\n                \"total\": 24642.22,\n                \"count\": 5\n            },\n            {\n                \"category\": \"Utilities\",\n                \"type\": \"EXPENSE\",\n                \"total\": 12439.42,\n                \"count\": 4\n            },\n            {\n                \"category\": \"Salary\",\n                \"type\": \"EXPENSE\",\n                \"total\": 6636.81,\n                \"count\": 2\n            },\n            {\n                \"category\": \"Healthcare\",\n                \"type\": \"INCOME\",\n                \"total\": 6215.24,\n                \"count\": 2\n            },\n            {\n                \"category\": \"Rent\",\n                \"type\": \"INCOME\",\n                \"total\": 5551.88,\n                \"count\": 2\n            },\n            {\n                \"category\": \"Food\",\n                \"type\": \"EXPENSE\",\n                \"total\": 5522.62,\n                \"count\": 3\n            },\n            {\n                \"category\": \"Investment\",\n                \"type\": \"INCOME\",\n                \"total\": 5478.82,\n                \"count\": 2\n            },\n            {\n                \"category\": \"Healthcare\",\n                \"type\": \"EXPENSE\",\n                \"total\": 4253.1,\n                \"count\": 1\n            },\n            {\n                \"category\": \"Utilities\",\n                \"type\": \"INCOME\",\n                \"total\": 1831.86,\n                \"count\": 1\n            },\n            {\n                \"category\": \"Investment\",\n                \"type\": \"EXPENSE\",\n                \"total\": 726.92,\n                \"count\": 1\n            },\n            {\n                \"category\": \"Entertainment\",\n                \"type\": \"EXPENSE\",\n                \"total\": 417.08,\n                \"count\": 1\n            }\n        ],\n        \"recentActivity\": [\n            {\n                \"id\": \"d0b1e1b9-2b05-4676-96ac-db2e5bd24943\",\n                \"amount\": 3616.28,\n                \"type\": \"EXPENSE\",\n                \"category\": \"Utilities\",\n                \"date\": \"2026-04-03T19:24:13.083Z\",\n                \"notes\": \"Auto-generated transaction 8\"\n            },\n            {\n                \"id\": \"754a6780-392b-4145-bddb-cded24b6b542\",\n                \"amount\": 3979.74,\n                \"type\": \"INCOME\",\n                \"category\": \"Healthcare\",\n                \"date\": \"2026-03-26T14:23:26.156Z\",\n                \"notes\": \"Auto-generated transaction 4\"\n            },\n            {\n                \"id\": \"4c600c8c-40a9-401e-9d51-07f8c50b1c06\",\n                \"amount\": 4036.82,\n                \"type\": \"EXPENSE\",\n                \"category\": \"Utilities\",\n                \"date\": \"2026-03-19T00:34:46.309Z\",\n                \"notes\": \"Auto-generated transaction 2\"\n            },\n            {\n                \"id\": \"ba2ce326-be62-4f15-ba9d-9f3c6d927587\",\n                \"amount\": 1680.31,\n                \"type\": \"EXPENSE\",\n                \"category\": \"Food\",\n                \"date\": \"2026-03-11T20:36:00.575Z\",\n                \"notes\": \"Auto-generated transaction 12\"\n            },\n            {\n                \"id\": \"d91d5a2f-9008-4e3c-962d-298456d614a1\",\n                \"amount\": 417.08,\n                \"type\": \"EXPENSE\",\n                \"category\": \"Entertainment\",\n                \"date\": \"2026-03-11T06:36:50.674Z\",\n                \"notes\": \"Auto-generated transaction 17\"\n            },\n            {\n                \"id\": \"186e54a0-e082-4a73-8d25-673e638790ac\",\n                \"amount\": 1745.48,\n                \"type\": \"EXPENSE\",\n                \"category\": \"Food\",\n                \"date\": \"2026-03-11T05:10:26.540Z\",\n                \"notes\": \"Auto-generated transaction 10\"\n            },\n            {\n                \"id\": \"618b1d1b-771a-441e-ad23-9a6c5aea145e\",\n                \"amount\": 2364.62,\n                \"type\": \"EXPENSE\",\n                \"category\": \"Utilities\",\n                \"date\": \"2026-02-21T06:22:04.546Z\",\n                \"notes\": \"Auto-generated transaction 14\"\n            },\n            {\n                \"id\": \"53e616ea-325e-4be8-a546-5ce0735e3609\",\n                \"amount\": 4599.49,\n                \"type\": \"INCOME\",\n                \"category\": \"Rent\",\n                \"date\": \"2026-02-21T02:27:50.679Z\",\n                \"notes\": \"Auto-generated transaction 5\"\n            },\n            {\n                \"id\": \"1c1cf17d-e7b9-40d6-8e28-4fa9e1f73b1f\",\n                \"amount\": 4253.1,\n                \"type\": \"EXPENSE\",\n                \"category\": \"Healthcare\",\n                \"date\": \"2026-02-19T23:37:56.289Z\",\n                \"notes\": \"Auto-generated transaction 20\"\n            },\n            {\n                \"id\": \"6a2924b8-b156-4ea6-aeb1-5d4c11be06d6\",\n                \"amount\": 994.89,\n                \"type\": \"INCOME\",\n                \"category\": \"Investment\",\n                \"date\": \"2026-02-15T21:03:01.628Z\",\n                \"notes\": \"Auto-generated transaction 13\"\n            }\n        ],\n        \"monthlyTrends\": [\n            {\n                \"month\": \"2026-04\",\n                \"type\": \"EXPENSE\",\n                \"total\": 3616.28,\n                \"count\": 1\n            },\n            {\n                \"month\": \"2026-03\",\n                \"type\": \"INCOME\",\n                \"total\": 3979.74,\n                \"count\": 1\n            },\n            {\n                \"month\": \"2026-03\",\n                \"type\": \"EXPENSE\",\n                \"total\": 7879.69,\n                \"count\": 4\n            },\n            {\n                \"month\": \"2026-02\",\n                \"type\": \"INCOME\",\n                \"total\": 11030.7,\n                \"count\": 4\n            },\n            {\n                \"month\": \"2026-02\",\n                \"type\": \"EXPENSE\",\n                \"total\": 11136.25,\n                \"count\": 4\n            },\n            {\n                \"month\": \"2026-01\",\n                \"type\": \"INCOME\",\n                \"total\": 8709.58,\n                \"count\": 3\n            },\n            {\n                \"month\": \"2026-01\",\n                \"type\": \"EXPENSE\",\n                \"total\": 7363.73,\n                \"count\": 3\n            },\n            {\n                \"month\": \"2024-06\",\n                \"type\": \"INCOME\",\n                \"total\": 20000,\n                \"count\": 4\n            }\n        ]\n    }\n}"}],"_postman_id":"d86ff961-a080-408c-ba7f-185ac652731b"}],"id":"e7097c28-0de8-4c50-8a1e-f762d8081abc","_postman_id":"e7097c28-0de8-4c50-8a1e-f762d8081abc","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","name":"Finance Dashboard API","type":"collection"}}},{"name":"Users","item":[{"name":"List Users","id":"b447e44b-6199-4889-ad79-067eb004709d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/users","description":"<p>Returns all non-deleted users.\nRole required: ADMIN only. Returns 403 for all other roles.\nPasswords are never included in the response.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","name":"Finance Dashboard API","type":"collection"}},"urlObject":{"path":["users"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"4ec4d15e-151b-4fac-ba48-1f772aa597b0","name":"List Users","originalRequest":{"method":"GET","header":[],"url":"/users"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Content-Security-Policy","value":"default-src 'self';base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';img-src 'self' data:;object-src 'none';script-src 'self';script-src-attr 'none';style-src 'self' https: 'unsafe-inline';upgrade-insecure-requests"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Cross-Origin-Resource-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":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"867"},{"key":"ETag","value":"W/\"363-3bymyqmB0iDF0bLczwSJMZg3clU\""},{"key":"Date","value":"Mon, 06 Apr 2026 16:30:38 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"message\": \"Users fetched\",\n    \"data\": [\n        {\n            \"id\": \"e699c176-9065-4cb3-b396-b514b04e6e90\",\n            \"email\": \"admin@finance.com\",\n            \"name\": \"Admin User\",\n            \"role\": \"ADMIN\",\n            \"isActive\": true,\n            \"createdAt\": \"2026-04-04T12:48:06.282Z\"\n        },\n        {\n            \"id\": \"9b78bf93-e5d0-4241-919b-0ab79a6bb632\",\n            \"email\": \"analyst@finance.com\",\n            \"name\": \"Analyst User\",\n            \"role\": \"ANALYST\",\n            \"isActive\": true,\n            \"createdAt\": \"2026-04-04T12:48:06.283Z\"\n        },\n        {\n            \"id\": \"2839af64-4be2-4ca8-87ea-31dac130c8c2\",\n            \"email\": \"ptimepass69@gmail.com\",\n            \"name\": \"Max\",\n            \"role\": \"VIEWER\",\n            \"isActive\": true,\n            \"createdAt\": \"2026-04-05T11:20:09.810Z\"\n        },\n        {\n            \"id\": \"c785c9d0-4085-4a2f-a3a4-73f834c8bb5e\",\n            \"email\": \"test123@gmail.com\",\n            \"name\": \"User1\",\n            \"role\": \"ADMIN\",\n            \"isActive\": true,\n            \"createdAt\": \"2026-04-05T11:32:51.996Z\"\n        },\n        {\n            \"id\": \"b8600d55-eeb3-4392-bc4d-be90440ef442\",\n            \"email\": \"test852@gmail.com\",\n            \"name\": \"Maxxxx\",\n            \"role\": \"VIEWER\",\n            \"isActive\": true,\n            \"createdAt\": \"2026-04-06T15:05:45.723Z\"\n        }\n    ]\n}"}],"_postman_id":"b447e44b-6199-4889-ad79-067eb004709d"},{"name":"Update User","id":"1cd52f7c-5c64-452f-928b-807f43564703","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n  \"role\": \"ANALYST\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/users/3","description":"<p>Updates a user's role or active status.\nRole required: ADMIN only.</p>\n<p>Allowed fields:\n  role     - ADMIN | ANALYST | VIEWER\n  isActive - true | false\n  name     - string</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","name":"Finance Dashboard API","type":"collection"}},"urlObject":{"path":["users","3"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"7094f991-e385-4785-9e9f-0948c7974c40","name":"Update User","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n  \"role\": \"ANALYST\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/users/3"},"status":"Not Found","code":404,"_postman_previewlanguage":null,"header":[{"key":"Content-Security-Policy","value":"default-src 'self';base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';img-src 'self' data:;object-src 'none';script-src 'self';script-src-attr 'none';style-src 'self' https: 'unsafe-inline';upgrade-insecure-requests"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Cross-Origin-Resource-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":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"42"},{"key":"ETag","value":"W/\"2a-FQG5794dbhTyRwgytQ7rokul7mM\""},{"key":"Date","value":"Mon, 06 Apr 2026 16:30:47 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"error\": \"User not found\"\n}"}],"_postman_id":"1cd52f7c-5c64-452f-928b-807f43564703"},{"name":"Delete (Deactivate) User","id":"d28ec95a-2710-48bd-a593-aadf3ab38079","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"/users/3","description":"<p>Soft deactivates a user (sets deletedAt and isActive=false).\nThe user can no longer log in but their data is preserved.\nRole required: ADMIN only.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","name":"Finance Dashboard API","type":"collection"}},"urlObject":{"path":["users","3"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"2535c919-1649-43df-b4a5-0dc3eadcb1a6","name":"Delete (Deactivate) User","originalRequest":{"method":"DELETE","header":[],"url":"/users/3"},"status":"Not Found","code":404,"_postman_previewlanguage":null,"header":[{"key":"Content-Security-Policy","value":"default-src 'self';base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';img-src 'self' data:;object-src 'none';script-src 'self';script-src-attr 'none';style-src 'self' https: 'unsafe-inline';upgrade-insecure-requests"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"},{"key":"Cross-Origin-Resource-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":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"42"},{"key":"ETag","value":"W/\"2a-FQG5794dbhTyRwgytQ7rokul7mM\""},{"key":"Date","value":"Mon, 06 Apr 2026 16:30:56 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"error\": \"User not found\"\n}"}],"_postman_id":"d28ec95a-2710-48bd-a593-aadf3ab38079"}],"id":"365accfb-d62d-46e1-91ff-6c6d15bf815c","_postman_id":"365accfb-d62d-46e1-91ff-6c6d15bf815c","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":true,"source":{"_postman_id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","id":"c7cf7abb-5587-423f-bf43-7928ee4f90c2","name":"Finance Dashboard API","type":"collection"}}}],"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]}},"event":[{"listen":"prerequest","script":{"id":"55e3243f-ee71-4ddd-afe9-6da6716d4f37","type":"text/javascript","packages":{},"requests":{},"exec":[""]}},{"listen":"test","script":{"id":"30d2f271-d7a2-41b4-b2e7-59d2febe9662","type":"text/javascript","packages":{},"requests":{},"exec":[""]}}],"variable":[{"key":"base_url","value":""},{"key":"token","value":""}]}