{"info":{"_postman_id":"de24655e-0a5b-497b-8d43-8fddd83f81ef","name":"RentNest Backend API","description":"<html><head></head><body><p>Complete API collection for RentNest - Rental Property Marketplace Backend.</p>\n<h2 id=\"setup-instructions\">Setup Instructions</h2>\n<ol>\n<li><p>Import this collection into Postman</p>\n</li>\n<li><p>Set environment variables:</p>\n<ul>\n<li><p><code>baseUrl</code>: <a href=\"http://localhost:5000/api\">http://localhost:5000/api</a></p>\n</li>\n<li><p><code>adminToken</code>: (auto-set after admin login)</p>\n</li>\n<li><p><code>landlordToken</code>: (auto-set after landlord login)</p>\n</li>\n<li><p><code>tenantToken</code>: (auto-set after tenant login)</p>\n</li>\n</ul>\n</li>\n<li><p>Run 'Admin Login' first to get admin token</p>\n</li>\n<li><p>Use 'Register' endpoints to create test users</p>\n</li>\n</ol>\n<h2 id=\"admin-credentials\">Admin Credentials</h2>\n<ul>\n<li><p>Email: <a href=\"https://mailto:admin@example.com\">admin@example.com</a></p>\n</li>\n<li><p>Password: Admin@12345</p>\n</li>\n</ul>\n<h2 id=\"tech-stack\">Tech Stack</h2>\n<ul>\n<li><p>Node.js + Express + TypeScript</p>\n</li>\n<li><p>PostgreSQL + Prisma ORM</p>\n</li>\n<li><p>JWT Authentication</p>\n</li>\n<li><p>Stripe Payment Integration</p>\n</li>\n</ul>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"55143757","collectionId":"de24655e-0a5b-497b-8d43-8fddd83f81ef","publishedId":"2sBY4LQM5J","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-07-09T11:08:22.000Z"},"item":[{"name":"Health Check","item":[{"name":"Server Health Check","id":"f79cb975-d53b-40b0-a057-988ad6a5ffc2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:5000/health","description":"<p>Check if the server is running and healthy. Returns uptime and timestamp.</p>\n","urlObject":{"protocol":"http","port":"5000","path":["health"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"c92f170e-2611-45a4-a3a1-3fc5af89cd9c","name":"200 - Server Healthy","originalRequest":{"method":"GET","header":[],"url":"http://localhost:5000/health","description":"Check if the server is running and healthy. Returns uptime and timestamp."},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n  \"success\": true,\n  \"message\": \"Server is healthy\",\n  \"timestamp\": \"2026-01-15T10:30:00.000Z\",\n  \"uptime\": 3600.5\n}"}],"_postman_id":"f79cb975-d53b-40b0-a057-988ad6a5ffc2"},{"name":"Home","id":"5a05a735-7d14-4686-bab8-b0ff0d1ff9bd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:5000","urlObject":{"protocol":"http","port":"5000","host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"4a86b0e2-1be2-4976-a70b-70b2ea06c971","name":"Home","originalRequest":{"method":"GET","header":[],"url":"http://localhost:5000"},"_postman_previewlanguage":"","header":[],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\r\n  \"status\": \"success\",\r\n  \"message\": \"RentNest is a backend API for a rental marketplace.\",\r\n  \"api_documentation\": \"https://documenter.getpostman.com/view/55143757/2sBY4LQM5J\",\r\n  \"database\": \"PostgreSQL\",\r\n  \"framework\": \"Express.js\",\r\n  \"language\": \"TypeScript\",\r\n  \"hosting\": \"Vercel\",\r\n  \"timestamp\": \"2026-07-11T12:49:13.932Z\",\r\n  \"browser\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36\",\r\n  \"developer\": \"Rayhan\",\r\n  \"developer_portfolio\": \"https://rayhaanrakib.vercel.app\"\r\n}"}],"_postman_id":"5a05a735-7d14-4686-bab8-b0ff0d1ff9bd"}],"id":"0695c7ff-aced-4ea2-9bb5-709a5e7c9dc1","_postman_id":"0695c7ff-aced-4ea2-9bb5-709a5e7c9dc1","description":""},{"name":"Authentication","item":[{"name":"Manage Profile","item":[{"name":"Get My Profile","id":"9219a68c-f7b2-43d1-9014-319d1a282f60","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer "}],"url":"http://localhost:5000/api/user/me","description":"<p>Get the currently authenticated user's profile.</p>\n<p><strong>Required:</strong> Any valid JWT token in Authorization header.</p>\n<p>Returns user details including activity counts (properties, rentals, reviews).</p>\n","urlObject":{"path":["user","me"],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"408fa325-6b26-4263-8d04-a6d8a2e17e00","name":"200 - Profile Retrieved","originalRequest":{"header":[]},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 200,\n    \"message\": \"Profile retrieved successfully\",\n    \"data\": {\n        \"id\": \"464bd1c8-3233-46a2-a1ed-65bc5fe95c80\",\n        \"name\": \"Jane Tenant\",\n        \"email\": \"tenant@rentnest.com\",\n        \"phone\": \"+8801711111111\",\n        \"avatar\": \"example.com/tenant\",\n        \"role\": \"TENANT\",\n        \"status\": \"ACTIVE\",\n        \"createdAt\": \"2026-07-10T12:28:31.647Z\",\n        \"updatedAt\": \"2026-07-10T12:28:31.647Z\",\n        \"_count\": {\n            \"properties\": 0,\n            \"rentals\": 0,\n            \"reviews\": 0\n        }\n    }\n}"}],"_postman_id":"9219a68c-f7b2-43d1-9014-319d1a282f60"},{"name":"Refresh","id":"1833cbe3-f8cb-42ee-982f-7afeab036304","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"email\": \"tenant@rentnest.com\",\n  \"password\": \"Password@123\"\n}"},"url":"http://localhost:5000/api/auth/refresh","urlObject":{"path":["auth","refresh"],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[],"_postman_id":"1833cbe3-f8cb-42ee-982f-7afeab036304"}],"id":"1242f99a-99f9-4e52-9a0a-ae47dfa6685e","_postman_id":"1242f99a-99f9-4e52-9a0a-ae47dfa6685e","description":""},{"name":"Register - Tenant","event":[{"listen":"test","script":{"id":"867f6041-79a6-41d4-8b58-91d8a70a2f8d","exec":["if (pm.response.code === 201) {","  const response = pm.response.json();","  if (response.data && response.data.token) {","    pm.collectionVariables.set('tenantToken', response.data.token);","    console.log('Tenant token saved automatically');","  }","}"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"d0bfb792-7cf9-41ff-ab44-e32e0d395d5b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"Jane Tenant\",\n  \"email\": \"jane.tenant@example.com\",\n  \"password\": \"Password@123\",\n  \"role\": \"TENANT\",\n  \"phone\": \"+8801711111111\",\n  \"avatar\": \"example.com/image\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/auth/register","description":"<p>Register a new TENANT account.</p>\n<p><strong>Validation Rules:</strong></p>\n<ul>\n<li>name: 2-100 characters</li>\n<li>email: valid email format (must be unique)</li>\n<li>password: min 8 chars, must contain uppercase, lowercase, and number</li>\n<li>role: must be 'TENANT' or 'LANDLORD' (Admin cannot self-register)</li>\n<li>phone: optional, valid international format</li>\n</ul>\n<p><strong>Auto-saves tenantToken</strong> to collection variables on success.</p>\n","urlObject":{"path":["auth","register"],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"c75ddd53-b450-4ab6-b805-7d8ac52a026c","name":"201 - Registration Success","originalRequest":{"header":[]},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 201,\n    \"message\": \"Account created successfully\",\n    \"data\": {\n        \"user\": {\n            \"id\": \"7b2cd4fd-f6a8-43d9-9b4e-9fd51e203c7e\",\n            \"name\": \"Jane Tenant\",\n            \"email\": \"jane.tenant@example.com\",\n            \"phone\": \"+8801711111111\",\n            \"avatar\": null,\n            \"role\": \"TENANT\",\n            \"status\": \"ACTIVE\",\n            \"createdAt\": \"2026-07-10T11:39:08.830Z\",\n            \"updatedAt\": \"2026-07-10T11:39:08.830Z\"\n        }\n    }\n}"},{"id":"2d9ba1ba-2487-4dc2-9e0d-ea0869e4ead6","name":"400 - Validation Error","originalRequest":{"header":[]},"status":"Bad Request","code":400,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 400,\n    \"message\": \"Validation failed\",\n    \"errorDetails\": \"Password must be at least 6 characters\"\n}"},{"id":"7b9912b9-ee22-48c9-a500-0ce4eeae3dce","name":"409 - Email Already Exists","originalRequest":{"header":[]},"status":"Conflict","code":409,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 409,\n    \"message\": \"Conflict\",\n    \"errorDetails\": \"An account with this email already exists\"\n}"}],"_postman_id":"d0bfb792-7cf9-41ff-ab44-e32e0d395d5b"},{"name":"Register - Landlord","event":[{"listen":"test","script":{"id":"a34d0eea-2a21-4bef-8077-564f5e4a0c81","exec":["if (pm.response.code === 201) {","  const response = pm.response.json();","  if (response.data && response.data.token) {","    pm.collectionVariables.set('landlordToken', response.data.token);","    console.log('Landlord token saved automatically');","  }","}"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"9edb845e-6157-4c65-ad20-2f965874269c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"Mike Landlord\",\n  \"email\": \"mike.landlord@example.com\",\n  \"password\": \"Password@123\",\n  \"role\": \"LANDLORD\",\n  \"phone\": \"+8801722222222\",\n  \"avatar\": \"example.com/image\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/auth/register","description":"<p>Register a new LANDLORD account.</p>\n<p><strong>Auto-saves landlordToken</strong> to collection variables on success.</p>\n","urlObject":{"path":["auth","register"],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"6351ed97-4c9e-44cc-9194-c248f9200d16","name":"201 - Registration Success","originalRequest":{"method":"GET","header":[]},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 201,\n    \"message\": \"Account created successfully\",\n    \"data\": {\n        \"user\": {\n            \"id\": \"ee147fef-9d9f-4be3-b1a2-54337322b8c6\",\n            \"name\": \"Mike Landlord\",\n            \"email\": \"mike.landlord@example.com\",\n            \"phone\": \"+8801722222222\",\n            \"avatar\": \"example.com/image\",\n            \"role\": \"LANDLORD\",\n            \"status\": \"ACTIVE\",\n            \"createdAt\": \"2026-07-15T16:08:26.870Z\",\n            \"updatedAt\": \"2026-07-15T16:08:26.870Z\"\n        }\n    }\n}"}],"_postman_id":"9edb845e-6157-4c65-ad20-2f965874269c"},{"name":"Login - Admin","event":[{"listen":"test","script":{"id":"f843be53-2b87-4e63-b4f2-2f77765fea32","exec":["if (pm.response.code === 200) {","  const response = pm.response.json();","  if (response.data && response.data.token) {","    pm.collectionVariables.set('adminToken', response.data.token);","    console.log('Admin token saved automatically');","  }","}"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"38ff5312-cafb-4f43-a33b-521c097e1b33","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"email\": \"admin@example.com\",\n  \"password\": \"Admin@12345\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/auth/login","description":"<p>Login with admin credentials.</p>\n<p><strong>Admin Credentials (from seed):</strong></p>\n<ul>\n<li>Email: <a href=\"mailto:admin@rentnest.com\">admin@rentnest.com</a></li>\n<li>Password: Admin@123456</li>\n</ul>\n<p><strong>Auto-saves adminToken</strong> to collection variables on success.</p>\n","urlObject":{"path":["auth","login"],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"f799fd65-ccae-4c03-ad6f-8f8825ec86ac","name":"200 - Login Success","originalRequest":{"header":[]},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 200,\n    \"message\": \"Login successful\",\n    \"data\": {\n        \"user\": {\n            \"id\": \"0b5d6c28-d033-4c17-82e3-e7546813f2b4\",\n            \"name\": \"RentNest Admin\",\n            \"email\": \"admin@example.com\",\n            \"role\": \"ADMIN\"\n        },\n        \"accessToken\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjBiNWQ2YzI4LWQwMzMtNGMxNy04MmUzLWU3NTQ2ODEzZjJiNCIsIm5hbWUiOiJSZW50TmVzdCBBZG1pbiIsImVtYWlsIjoiYWRtaW5AZXhhbXBsZS5jb20iLCJyb2xlIjoiQURNSU4iLCJpYXQiOjE3ODQxMzEzMTcsImV4cCI6MTc4NDIxNzcxN30.3YbPdvPWrBylSZH5rzEqO_GR9z_QCJ4uvibWE0fU2Xs\"\n    }\n}"},{"id":"1c696021-ea28-4cab-beac-2060a635a883","name":"401 - Invalid Credentials","originalRequest":{"header":[]},"status":"Unauthorized","code":401,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 401,\n    \"message\": \"Unauthorized\",\n    \"errorDetails\": \"Password is incorrect, Please try again\"\n}"}],"_postman_id":"38ff5312-cafb-4f43-a33b-521c097e1b33"},{"name":"Login - Landlord","event":[{"listen":"test","script":{"exec":["if (pm.response.code === 200) {","  const response = pm.response.json();","  if (response.data && response.data.token) {","    pm.collectionVariables.set('landlordToken', response.data.token);","    console.log('Landlord token saved automatically');","  }","}"],"type":"text/javascript","id":"12cd1e6a-11f2-4abb-91b8-d7ffae9edabf"}}],"id":"53107ed1-7fbd-4734-a6f3-a29b52c374e9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"email\": \"landlord@rentnest.com\",\n  \"password\": \"Password@123\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/auth/login","description":"<p>Login with seeded landlord credentials.</p>\n<p><strong>Auto-saves landlordToken</strong> to collection variables on success.</p>\n","urlObject":{"path":["auth","login"],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"9c72ca22-ed92-4b78-ba50-2b98ed6b10d4","name":"200 - Login Success","originalRequest":{"header":[]},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 200,\n    \"message\": \"Login successful\",\n    \"data\": {\n        \"user\": {\n            \"id\": \"427f4183-3708-4ee1-b6f4-9f6697981c63\",\n            \"name\": \"Mike Landlord\",\n            \"email\": \"landlord@rentnest.com\",\n            \"role\": \"LANDLORD\"\n        },\n        \"accessToken\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQyN2Y0MTgzLTM3MDgtNGVlMS1iNmY0LTlmNjY5Nzk4MWM2MyIsIm5hbWUiOiJNaWtlIExhbmRsb3JkIiwiZW1haWwiOiJsYW5kbG9yZEByZW50bmVzdC5jb20iLCJyb2xlIjoiTEFORExPUkQiLCJpYXQiOjE3ODQxMzMyOTgsImV4cCI6MTc4NDIxOTY5OH0.x0nP6vVOv2tPkUcgfAwdQfmZ6ux7yPzQ0yzfuJ0iyZc\"\n    }\n}"}],"_postman_id":"53107ed1-7fbd-4734-a6f3-a29b52c374e9"},{"name":"Login - Tenant","event":[{"listen":"test","script":{"id":"bb538d1f-b645-400f-b377-cb986b11efd5","exec":["if (pm.response.code === 200) {","  const response = pm.response.json();","  if (response.data && response.data.token) {","    pm.collectionVariables.set('tenantToken', response.data.token);","    console.log('Tenant token saved automatically');","  }","}"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"eafa326f-7215-4380-bc27-6dddfd13ae1a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"email\": \"tenant@rentnest.com\",\n  \"password\": \"Password@123\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/auth/login","description":"<p>Login with seeded tenant credentials.</p>\n<p><strong>Auto-saves tenantToken</strong> to collection variables on success.</p>\n","urlObject":{"path":["auth","login"],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"f5233294-157c-423b-937c-c61968f8f299","name":"200 - Login Success","originalRequest":{"header":[]},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 200,\n    \"message\": \"Login successful\",\n    \"data\": {\n        \"user\": {\n            \"id\": \"464bd1c8-3233-46a2-a1ed-65bc5fe95c80\",\n            \"name\": \"Jane Tenant\",\n            \"email\": \"tenant@rentnest.com\",\n            \"role\": \"TENANT\"\n        },\n        \"accessToken\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ2NGJkMWM4LTMyMzMtNDZhMi1hMWVkLTY1YmM1ZmU5NWM4MCIsIm5hbWUiOiJKYW5lIFRlbmFudCIsImVtYWlsIjoidGVuYW50QHJlbnRuZXN0LmNvbSIsInJvbGUiOiJURU5BTlQiLCJpYXQiOjE3ODQxMzMzMjcsImV4cCI6MTc4NDIxOTcyN30.fmknDxmsSqxXrU9otIFr4BS0vapiYJoAuUHGxrrhRjs\"\n    }\n}"}],"_postman_id":"eafa326f-7215-4380-bc27-6dddfd13ae1a"}],"id":"cdabb987-2865-41ca-bd68-e0580e1c35d0","_postman_id":"cdabb987-2865-41ca-bd68-e0580e1c35d0","description":""},{"name":"Categories","item":[{"name":"Get All Categories","id":"99c81878-ea61-49e3-94e3-8da56448335f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:5000/api/categories","description":"<p>Get all property categories. Public endpoint - no authentication required.</p>\n<p>Returns each category with property count.</p>\n","urlObject":{"path":["categories"],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"fe18114d-dbf8-49c7-b171-54c911639509","name":"200 - Categories List","originalRequest":{"method":"GET","header":[],"url":"http://localhost:5000/api/categories","description":"Get all property categories. Public endpoint - no authentication required.\n\nReturns each category with property count."},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n  \"success\": true,\n  \"message\": \"Categories retrieved successfully\",\n  \"data\": [\n    {\n      \"id\": \"uuid-here\",\n      \"name\": \"Apartment\",\n      \"description\": \"Multi-unit residential buildings\",\n      \"createdAt\": \"2026-01-15T10:30:00.000Z\",\n      \"_count\": {\n        \"properties\": 15\n      }\n    },\n    {\n      \"id\": \"uuid-here-2\",\n      \"name\": \"House\",\n      \"description\": \"Standalone residential houses\",\n      \"createdAt\": \"2026-01-15T10:30:00.000Z\",\n      \"_count\": {\n        \"properties\": 8\n      }\n    }\n  ]\n}"}],"_postman_id":"99c81878-ea61-49e3-94e3-8da56448335f"},{"name":"Create Category (Admin Only)","event":[{"listen":"test","script":{"exec":["if (pm.response.code === 201) {","  const response = pm.response.json();","  if (response.data && response.data.id) {","    pm.collectionVariables.set('categoryId', response.data.id);","    console.log('Category ID saved: ' + response.data.id);","  }","}"],"type":"text/javascript","id":"a5dce63d-aa3f-4304-830a-d70d6b41e4f0"}}],"id":"ac2c47aa-0394-465f-8520-f37e66b64d39","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Bearer "}],"body":{"mode":"raw","raw":"{\n  \"name\": \"Penthouse\",\n  \"description\": \"Luxury top-floor apartments with premium amenities\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/categories","description":"<p>Create a new property category.</p>\n<p><strong>Required Role:</strong> ADMIN</p>\n<p><strong>Auto-saves categoryId</strong> to collection variables on success.</p>\n","urlObject":{"path":["categories"],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"f5ab6d3b-7698-419b-806c-a26598be2a85","name":"201 - Category Created","originalRequest":{"header":[]},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 201,\n    \"message\": \"Category created successfully\",\n    \"data\": {\n        \"id\": \"74266c8f-2c90-41ea-a610-effbbf05ec9c\",\n        \"name\": \"Penthouse\",\n        \"description\": \"Luxury top-floor apartments with premium amenities\",\n        \"createdAt\": \"2026-07-10T17:19:15.297Z\",\n        \"updatedAt\": \"2026-07-10T17:19:15.297Z\"\n    }\n}"},{"id":"7c352f6f-480e-4764-bb12-e35e15b35f54","name":"403 - Forbidden (Not Admin)","originalRequest":{"header":[]},"status":"Forbidden","code":403,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 403,\n    \"message\": \"Forbidden\",\n    \"errorDetails\": \"Access denied. Required role: ADMIN. Your role: LANDLORD\"\n}"},{"id":"5342c109-090d-4859-b133-086316932abd","name":"409 - Category Already Exists","originalRequest":{"header":[]},"status":"Conflict","code":409,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 409,\n    \"message\": \"Conflict\",\n    \"errorDetails\": \"Category name already exists\"\n}"}],"_postman_id":"ac2c47aa-0394-465f-8520-f37e66b64d39"},{"name":"Delete Category (Admin Only)","id":"c71ca780-99ad-4557-8b33-9e090c66631b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"Authorization","value":"Bearer "}],"url":"http://localhost:5000/api/categories/","description":"<p>Delete a category by ID.</p>\n<p><strong>Required Role:</strong> ADMIN</p>\n<p><strong>Business Rule:</strong> Cannot delete if properties exist under this category.</p>\n","urlObject":{"path":["categories",""],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"f04da40b-655d-4a87-b2d4-30f48ea80efa","name":"200 - Category Deleted","originalRequest":{"header":[]},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 200,\n    \"message\": \"Category deleted successfully\",\n    \"data\": null\n}"},{"id":"3b3e8072-0ccb-4572-98e9-64613eec0bb3","name":"400 - Cannot Delete (Has Properties)","originalRequest":{"header":[]},"status":"Bad Request","code":400,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 400,\n    \"message\": \"BadRequest\",\n    \"errorDetails\": \"Category has properties, cannot be deleted. Reassign properties first.\"\n}"},{"id":"37dc69dd-f756-4962-98f8-44e8edc37dd2","name":"404 - Category Not Found","originalRequest":{"header":[]},"status":"Not Found","code":404,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 404,\n    \"message\": \"NotFound\",\n    \"errorDetails\": \"Category not found\"\n}"}],"_postman_id":"c71ca780-99ad-4557-8b33-9e090c66631b"},{"name":"Get Properties From Specific Category","id":"acfe8f33-e5af-4c50-8d37-14508c12abcd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:5000/api/categories/","urlObject":{"path":["categories",""],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[],"_postman_id":"acfe8f33-e5af-4c50-8d37-14508c12abcd"}],"id":"e6f7a34c-8ff4-4555-8cc7-fb3dd366dbd1","_postman_id":"e6f7a34c-8ff4-4555-8cc7-fb3dd366dbd1","description":""},{"name":"Properties (Public)","item":[{"name":"Get All Properties","id":"7ef35eb8-8fc0-4294-9f2c-a3e606be331f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:5000/api/properties","description":"<p>Browse all available properties with optional filters and pagination.</p>\n<p><strong>Public endpoint - no authentication required.</strong></p>\n<p><strong>Available Filters:</strong></p>\n<ul>\n<li>city: Filter by city (case insensitive)</li>\n<li>minPrice / maxPrice: Filter by rent range</li>\n<li>categoryId: Filter by category</li>\n<li>bedrooms: Filter by bedroom count</li>\n<li>search: Full text search in title, description, city</li>\n<li>page / limit: Pagination</li>\n</ul>\n<p>Default status filter is AVAILABLE.</p>\n","urlObject":{"path":["properties"],"host":["http://localhost:5000/api"],"query":[{"disabled":true,"description":{"content":"<p>Filter by city name (case insensitive)</p>\n","type":"text/plain"},"key":"city","value":""},{"disabled":true,"description":{"content":"<p>Minimum rent amount</p>\n","type":"text/plain"},"key":"minPrice","value":""},{"disabled":true,"description":{"content":"<p>Maximum rent amount</p>\n","type":"text/plain"},"key":"maxPrice","value":""},{"disabled":true,"description":{"content":"<p>Filter by category UUID</p>\n","type":"text/plain"},"key":"categoryId","value":""},{"disabled":true,"description":{"content":"<p>Filter by number of bedrooms</p>\n","type":"text/plain"},"key":"bedrooms","value":""},{"disabled":true,"description":{"content":"<p>Search in title, description, city</p>\n","type":"text/plain"},"key":"search","value":""}],"variable":[]}},"response":[{"id":"11655675-ef50-4734-bf20-032d2e47ecb8","name":"200 - Properties List","originalRequest":{"method":"GET","header":[]},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 200,\n    \"message\": \"Properties retrieved successfully\",\n    \"data\": {\n        \"meta\": {\n            \"page\": 1,\n            \"limit\": 10,\n            \"total\": 19,\n            \"totalPage\": 2\n        },\n        \"properties\": [\n            {\n                \"id\": \"ac69387c-8fbd-41d0-ad19-78c9595518d0\",\n                \"title\": \"Luxury Penthouse Gulshan\",\n                \"address\": \"House 33, Road 4\",\n                \"city\": \"Dhaka\",\n                \"state\": \"Dhaka Division\",\n                \"rentAmount\": 178000,\n                \"bedrooms\": 5,\n                \"bathrooms\": 2,\n                \"area\": 2200,\n                \"status\": \"AVAILABLE\",\n                \"landlord\": {\n                    \"id\": \"427f4183-3708-4ee1-b6f4-9f6697981c63\",\n                    \"name\": \"Mike Landlord\"\n                },\n                \"category\": {\n                    \"id\": \"7cdfe2f8-bb58-47bb-9916-e65243b6d974\",\n                    \"name\": \"Penthouse\"\n                }\n            },\n            {\n                \"id\": \"88c6f0ac-44c8-4f55-9f89-92c5b1a58178\",\n                \"title\": \"Industrial Warehouse Narayanganj\",\n                \"address\": \"House 32, Road 3\",\n                \"city\": \"Dhaka\",\n                \"state\": \"Dhaka Division\",\n                \"rentAmount\": 155000,\n                \"bedrooms\": 0,\n                \"bathrooms\": 0,\n                \"area\": 6000,\n                \"status\": \"AVAILABLE\",\n                \"landlord\": {\n                    \"id\": \"427f4183-3708-4ee1-b6f4-9f6697981c63\",\n                    \"name\": \"Mike Landlord\"\n                },\n                \"category\": {\n                    \"id\": \"b446cd4d-fe85-4a4d-a368-1753249661cb\",\n                    \"name\": \"Warehouse\"\n                }\n            },\n            {\n                \"id\": \"c6e04b24-7d89-4953-9c58-63ea3a47072d\",\n                \"title\": \"Warehouse Tongi\",\n                \"address\": \"House 30, Road 1\",\n                \"city\": \"Dhaka\",\n                \"state\": \"Dhaka Division\",\n                \"rentAmount\": 157000,\n                \"bedrooms\": 0,\n                \"bathrooms\": 0,\n                \"area\": 6000,\n                \"status\": \"AVAILABLE\",\n                \"landlord\": {\n                    \"id\": \"427f4183-3708-4ee1-b6f4-9f6697981c63\",\n                    \"name\": \"Mike Landlord\"\n                },\n                \"category\": {\n                    \"id\": \"b446cd4d-fe85-4a4d-a368-1753249661cb\",\n                    \"name\": \"Warehouse\"\n                }\n            },\n            {\n                \"id\": \"867d79c4-9ba3-440f-9b35-a477706bfc76\",\n                \"title\": \"Showroom Bashundhara\",\n                \"address\": \"House 28, Road 9\",\n                \"city\": \"Dhaka\",\n                \"state\": \"Dhaka Division\",\n                \"rentAmount\": 121000,\n                \"bedrooms\": 0,\n                \"bathrooms\": 2,\n                \"area\": 2500,\n                \"status\": \"AVAILABLE\",\n                \"landlord\": {\n                    \"id\": \"427f4183-3708-4ee1-b6f4-9f6697981c63\",\n                    \"name\": \"Mike Landlord\"\n                },\n                \"category\": {\n                    \"id\": \"acc2a4d1-d79e-477e-9531-477caaf9324b\",\n                    \"name\": \"Commercial Space\"\n                }\n            },\n            {\n                \"id\": \"2f4a659a-1b7c-480a-82af-518584ca10ef\",\n                \"title\": \"Retail Shop New Market\",\n                \"address\": \"House 27, Road 8\",\n                \"city\": \"Dhaka\",\n                \"state\": \"Dhaka Division\",\n                \"rentAmount\": 126000,\n                \"bedrooms\": 0,\n                \"bathrooms\": 2,\n                \"area\": 2500,\n                \"status\": \"AVAILABLE\",\n                \"landlord\": {\n                    \"id\": \"427f4183-3708-4ee1-b6f4-9f6697981c63\",\n                    \"name\": \"Mike Landlord\"\n                },\n                \"category\": {\n                    \"id\": \"acc2a4d1-d79e-477e-9531-477caaf9324b\",\n                    \"name\": \"Commercial Space\"\n                }\n            },\n            {\n                \"id\": \"6e7e6bb4-14cd-40c5-ab85-0fc8fc97f66e\",\n                \"title\": \"Corporate Office Gulshan\",\n                \"address\": \"House 26, Road 7\",\n                \"city\": \"Dhaka\",\n                \"state\": \"Dhaka Division\",\n                \"rentAmount\": 80000,\n                \"bedrooms\": 0,\n                \"bathrooms\": 2,\n                \"area\": 3000,\n                \"status\": \"AVAILABLE\",\n                \"landlord\": {\n                    \"id\": \"427f4183-3708-4ee1-b6f4-9f6697981c63\",\n                    \"name\": \"Mike Landlord\"\n                },\n                \"category\": {\n                    \"id\": \"3e8f0a6e-6a2b-46e6-9e13-c9d23156f832\",\n                    \"name\": \"Office Space\"\n                }\n            },\n            {\n                \"id\": \"0ccaa91f-4da6-4419-bb74-e69f536248df\",\n                \"title\": \"Startup Office Banani\",\n                \"address\": \"House 25, Road 6\",\n                \"city\": \"Dhaka\",\n                \"state\": \"Dhaka Division\",\n                \"rentAmount\": 78000,\n                \"bedrooms\": 0,\n                \"bathrooms\": 2,\n                \"area\": 3000,\n                \"status\": \"AVAILABLE\",\n                \"landlord\": {\n                    \"id\": \"427f4183-3708-4ee1-b6f4-9f6697981c63\",\n                    \"name\": \"Mike Landlord\"\n                },\n                \"category\": {\n                    \"id\": \"3e8f0a6e-6a2b-46e6-9e13-c9d23156f832\",\n                    \"name\": \"Office Space\"\n                }\n            },\n            {\n                \"id\": \"7820ad47-18b1-4cc9-83a2-7d1a729a189a\",\n                \"title\": \"Office Motijheel\",\n                \"address\": \"House 24, Road 5\",\n                \"city\": \"Dhaka\",\n                \"state\": \"Dhaka Division\",\n                \"rentAmount\": 85000,\n                \"bedrooms\": 0,\n                \"bathrooms\": 2,\n                \"area\": 3000,\n                \"status\": \"AVAILABLE\",\n                \"landlord\": {\n                    \"id\": \"427f4183-3708-4ee1-b6f4-9f6697981c63\",\n                    \"name\": \"Mike Landlord\"\n                },\n                \"category\": {\n                    \"id\": \"3e8f0a6e-6a2b-46e6-9e13-c9d23156f832\",\n                    \"name\": \"Office Space\"\n                }\n            },\n            {\n                \"id\": \"ec0bbb03-ae7c-4d7c-8359-f1ef8c0759b2\",\n                \"title\": \"Boys Hostel Farmgate\",\n                \"address\": \"House 21, Road 2\",\n                \"city\": \"Dhaka\",\n                \"state\": \"Dhaka Division\",\n                \"rentAmount\": 10000,\n                \"bedrooms\": 1,\n                \"bathrooms\": 1,\n                \"area\": 250,\n                \"status\": \"AVAILABLE\",\n                \"landlord\": {\n                    \"id\": \"427f4183-3708-4ee1-b6f4-9f6697981c63\",\n                    \"name\": \"Mike Landlord\"\n                },\n                \"category\": {\n                    \"id\": \"d19603a4-59d9-426d-a3b0-6eadde9eedfc\",\n                    \"name\": \"Hostel\"\n                }\n            },\n            {\n                \"id\": \"0e62b916-a90a-402a-bf3b-5e9cb3efd304\",\n                \"title\": \"Duplex House Gulshan\",\n                \"address\": \"House 20, Road 1\",\n                \"city\": \"Dhaka\",\n                \"state\": \"Dhaka Division\",\n                \"rentAmount\": 71000,\n                \"bedrooms\": 4,\n                \"bathrooms\": 2,\n                \"area\": 1800,\n                \"status\": \"AVAILABLE\",\n                \"landlord\": {\n                    \"id\": \"427f4183-3708-4ee1-b6f4-9f6697981c63\",\n                    \"name\": \"Mike Landlord\"\n                },\n                \"category\": {\n                    \"id\": \"189fce13-51aa-49f3-8bc2-98d35ede1442\",\n                    \"name\": \"House\"\n                }\n            }\n        ]\n    }\n}"}],"_postman_id":"7ef35eb8-8fc0-4294-9f2c-a3e606be331f"},{"name":"Get All Properties - With Filters","id":"78d91785-ec7e-4ef7-9060-c032079ffa45","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:5000/api/properties?city=Dhaka&minPrice=10000&maxPrice=50000","description":"<p>Demonstrates filtering properties by city, price range, and bedrooms.</p>\n","urlObject":{"path":["properties"],"host":["http://localhost:5000/api"],"query":[{"key":"city","value":"Dhaka"},{"key":"minPrice","value":"10000"},{"key":"maxPrice","value":"50000"}],"variable":[]}},"response":[],"_postman_id":"78d91785-ec7e-4ef7-9060-c032079ffa45"},{"name":"Get All Properties - Search","id":"03652b24-9308-47e7-9631-38b6fc879516","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:5000/api/properties?search=pe&page=1","description":"<p>Search properties by keyword in title, description, or city.</p>\n","urlObject":{"path":["properties"],"host":["http://localhost:5000/api"],"query":[{"key":"search","value":"pe"},{"key":"page","value":"1"}],"variable":[]}},"response":[],"_postman_id":"03652b24-9308-47e7-9631-38b6fc879516"},{"name":"Get Property By ID","event":[{"listen":"test","script":{"exec":["if (pm.response.code === 200) {","  const response = pm.response.json();","  if (response.data && response.data.id) {","    pm.collectionVariables.set('propertyId', response.data.id);","  }","}"],"type":"text/javascript","id":"3ae8d32b-d9b1-49f1-8e2a-97b1fac34578"}}],"id":"69ff5d73-afd9-46ae-b368-d401e3d11bc8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:5000/api/properties/","description":"<p>Get full details of a specific property including landlord info, category, and latest 10 reviews.</p>\n<p><strong>Public endpoint - no authentication required.</strong></p>\n<p>Replace  with an actual property UUID.</p>\n","urlObject":{"path":["properties",""],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"c5d92d68-561c-43f6-bd0a-9fdb17d2af9c","name":"200 - Property Details","originalRequest":{"header":[]},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 200,\n    \"message\": \"Property detail retrieved successfully\",\n    \"data\": {\n        \"id\": \"01c42802-007c-4f71-962a-939755678948\",\n        \"title\": \"Luxury Apartment Bashundhara\",\n        \"description\": \"Well-maintained apartment available for rent with modern facilities and excellent location.\",\n        \"address\": \"House 14, Road 5\",\n        \"city\": \"Dhaka\",\n        \"state\": \"Dhaka Division\",\n        \"zipCode\": \"1207\",\n        \"country\": \"Bangladesh\",\n        \"rentAmount\": 48000,\n        \"bedrooms\": 3,\n        \"bathrooms\": 2,\n        \"area\": 1400,\n        \"amenities\": [\n            \"WiFi\",\n            \"Security\",\n            \"Parking\",\n            \"Generator\"\n        ],\n        \"images\": [\n            \"https://picsum.photos/seed/property4a/1200/800\",\n            \"https://picsum.photos/seed/property4b/1200/800\"\n        ],\n        \"status\": \"AVAILABLE\",\n        \"createdAt\": \"2026-07-10T19:50:50.574Z\",\n        \"updatedAt\": \"2026-07-10T19:50:50.574Z\",\n        \"landlord\": {\n            \"id\": \"427f4183-3708-4ee1-b6f4-9f6697981c63\",\n            \"name\": \"Mike Landlord\",\n            \"email\": \"landlord@rentnest.com\",\n            \"phone\": \"+8801722222222\"\n        },\n        \"category\": {\n            \"id\": \"a532bd19-1383-442c-a34f-dd6f6e0ee885\",\n            \"name\": \"Apartment\"\n        },\n        \"_count\": {\n            \"reviews\": 0,\n            \"rentals\": 0\n        }\n    }\n}"},{"id":"188f7080-208c-4c1e-84ca-d9ec4ac53f7c","name":"404 - Property Not Found","originalRequest":{"header":[]},"status":"Not Found","code":404,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 404,\n    \"message\": \"Not Found\",\n    \"errorDetails\": \"Property with ID 01c42802-007cd-4f71-962a-939755678948 not found.\"\n}"}],"_postman_id":"69ff5d73-afd9-46ae-b368-d401e3d11bc8"}],"id":"34b8d0d8-1a64-4760-a0dd-72ccd9246306","_postman_id":"34b8d0d8-1a64-4760-a0dd-72ccd9246306","description":""},{"name":"Landlord - Property Management","item":[{"name":"Get All Owned Properties","id":"d1a7639c-6bfc-49b4-81b2-771091e975d4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:5000/api/properties/my-property","urlObject":{"path":["properties","my-property"],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[],"_postman_id":"d1a7639c-6bfc-49b4-81b2-771091e975d4"},{"name":"Update Property Status","id":"5cc68023-1509-4b1d-8f15-2961c07da9c3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"status\": \"UNAVAILABLE\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/properties//status","urlObject":{"path":["properties","","status"],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[],"_postman_id":"5cc68023-1509-4b1d-8f15-2961c07da9c3"},{"name":"Create Property","event":[{"listen":"test","script":{"exec":["if (pm.response.code === 201) {","  const response = pm.response.json();","  if (response.data && response.data.id) {","    pm.collectionVariables.set('propertyId', response.data.id);","    console.log('Property ID saved: ' + response.data.id);","  }","}"],"type":"text/javascript","id":"405e0678-e31f-4ed5-8249-f8f26122db3f"}}],"id":"d1be720e-91a0-4293-984f-333370d13614","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Bearer "}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Stunning 3BHK Apartment in Dhanmondi\",\n  \"description\": \"A beautifully designed apartment located in the heart of Dhanmondi. Features modern interior design, high ceilings, and spectacular city views. Perfect for families or young professionals.\",\n  \"address\": \"House 32, Road 5, Dhanmondi\",\n  \"city\": \"Dhaka\",\n  \"state\": \"Dhaka Division\",\n  \"zipCode\": \"1209\",\n  \"country\": \"Bangladesh\",\n  \"rentAmount\": 45000,\n  \"bedrooms\": 3,\n  \"bathrooms\": 2,\n  \"area\": 1800,\n  \"categoryId\": \"\",\n  \"amenities\": [\"WiFi\", \"AC\", \"Parking\", \"Generator\", \"Security\", \"Lift\", \"Gym\"],\n  \"images\": [\n    \"https://example.com/apartment1.jpg\",\n    \"https://example.com/apartment2.jpg\"\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/properties/landlord/create","description":"<p>Create a new property listing.</p>\n<p><strong>Required Role:</strong> LANDLORD</p>\n<p><strong>Validation Rules:</strong></p>\n<ul>\n<li>title: 10-200 characters</li>\n<li>description: minimum 50 characters</li>\n<li>rentAmount: must be positive</li>\n<li>bedrooms/bathrooms: integer 1-20</li>\n<li>area: must be positive</li>\n<li>categoryId: must be a valid UUID of an existing category</li>\n<li>images: array of valid URLs</li>\n</ul>\n<p><strong>Note:</strong> Replace  with actual category UUID from 'Get All Categories' endpoint.</p>\n<p><strong>Auto-saves propertyId</strong> to collection variables.</p>\n","urlObject":{"path":["properties","landlord","create"],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"7e56b80f-7d03-4158-8796-075f5a3efdd2","name":"201 - Property Created","originalRequest":{"header":[]},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 201,\n    \"message\": \"Property created successfully\",\n    \"data\": {\n        \"id\": \"d1ae55e1-5b6f-4369-a8d2-aee7a104c06b\",\n        \"title\": \"Stunning 3BHK Apartment in Dhanmondi\",\n        \"city\": \"Dhaka\",\n        \"rentAmount\": 45000,\n        \"bedrooms\": 3,\n        \"bathrooms\": 2,\n        \"area\": 1800,\n        \"status\": \"AVAILABLE\",\n        \"landlord\": {\n            \"id\": \"427f4183-3708-4ee1-b6f4-9f6697981c63\",\n            \"name\": \"Mike Landlord\"\n        },\n        \"category\": {\n            \"id\": \"a532bd19-1383-442c-a34f-dd6f6e0ee885\",\n            \"name\": \"Apartment\"\n        }\n    }\n}"},{"id":"8e9fb37a-b6dd-43d5-b282-65c47af1a8f2","name":"400 - Validation Failed","originalRequest":{"header":[]},"status":"Bad Request","code":400,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 400,\n    \"message\": \"Validation failed\",\n    \"errorDetails\": \"Area must be greater than 0\"\n}"},{"id":"cc53d545-f394-45b4-8e08-841c1c1cd8c8","name":"403 - Not a Landlord","originalRequest":{"header":[]},"status":"Forbidden","code":403,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 403,\n    \"message\": \"Forbidden\",\n    \"errorDetails\": \"Access denied. Required role: LANDLORD. Your role: TENANT\"\n}"}],"_postman_id":"d1be720e-91a0-4293-984f-333370d13614"},{"name":"Update Property","id":"5595faa0-d77e-4ca8-8cac-eb4efeb17287","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Bearer "}],"body":{"mode":"raw","raw":"{\n  \"rentAmount\": 40000,\n  \"status\": \"AVAILABLE\",\n  \"amenities\": [\"WiFi\", \"AC\", \"Parking\", \"Generator\", \"Security\", \"Lift\", \"Gym\", \"Pool\"]\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/properties/landlord/","description":"<p>Update an existing property listing.</p>\n<p><strong>Required Role:</strong> LANDLORD</p>\n<p><strong>Business Rule:</strong> Landlord can only update their OWN properties.</p>\n<p>All fields are optional (partial update supported).\nCan also update status to AVAILABLE, RENTED, or UNAVAILABLE.</p>\n","urlObject":{"path":["properties","landlord",""],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"b7c827c3-392b-4b28-85b3-07616630c2e0","name":"200 - Property Updated","originalRequest":{"header":[]},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 202,\n    \"message\": \"Property updated successfully\",\n    \"data\": {\n        \"id\": \"b17611a6-35b2-4af3-8f8e-51f005c6b702\",\n        \"title\": \"Stunning 3BHK Penthouse in Dhanmondi\",\n        \"description\": \"A beautifully designed apartment located in the heart of Dhanmondi. Features modern interior design, high ceilings, and spectacular city views. Perfect for families or young professionals.\",\n        \"address\": \"House 32, Road 5, Dhanmondi\",\n        \"city\": \"Dhaka\",\n        \"state\": \"Dhaka Division\",\n        \"zipCode\": \"1209\",\n        \"country\": \"Bangladesh\",\n        \"rentAmount\": 40000,\n        \"bedrooms\": 3,\n        \"bathrooms\": 2,\n        \"area\": 1800,\n        \"amenities\": [\n            \"WiFi\",\n            \"AC\",\n            \"Parking\",\n            \"Generator\",\n            \"Security\",\n            \"Lift\",\n            \"Gym\",\n            \"Pool\"\n        ],\n        \"images\": [\n            \"https://example.com/apartment1.jpg\",\n            \"https://example.com/apartment2.jpg\"\n        ],\n        \"status\": \"AVAILABLE\",\n        \"createdAt\": \"2026-07-10T19:04:20.373Z\",\n        \"updatedAt\": \"2026-07-10T20:10:14.269Z\"\n    }\n}"},{"id":"9aa83929-e605-4c93-b290-e458308a5264","name":"403 - Not Property Owner","originalRequest":{"header":[]},"status":"Forbidden","code":403,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 403,\n    \"message\": \"Forbidden\",\n    \"errorDetails\": \"You can only update your own properties\"\n}"}],"_postman_id":"5595faa0-d77e-4ca8-8cac-eb4efeb17287"},{"name":"Delete Property","id":"779790e3-91a1-400a-8f14-6de4e22012be","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"Authorization","value":"Bearer "}],"url":"http://localhost:5000/api/properties/landlord/","description":"<p>Delete a property listing.</p>\n<p><strong>Required Role:</strong> LANDLORD</p>\n<p><strong>Business Rule:</strong> Landlord can only delete their OWN properties.</p>\n<p>⚠️ This will also cascade delete all related rental requests, payments, and reviews.</p>\n","urlObject":{"path":["properties","landlord",""],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"bbadafb1-bfaa-465c-9422-facf60bde4a2","name":"200 - Property Deleted","originalRequest":{"header":[]},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 200,\n    \"message\": \"Property deleted successfully\",\n    \"data\": null\n}"}],"_postman_id":"779790e3-91a1-400a-8f14-6de4e22012be"},{"name":"Get All Rental Requests (Landlord)","id":"7fc775f1-eaf3-4d9e-94d3-50059c848f99","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer "}],"url":"http://localhost:5000/api/rentals/landlord/requests/all","description":"<p>Get all rental requests for all of this landlord's properties.</p>\n<p><strong>Required Role:</strong> LANDLORD</p>\n<p>Returns requests with tenant info and payment status.</p>\n","urlObject":{"path":["rentals","landlord","requests","all"],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"3fa88e17-93ab-4a3d-af1e-6e4dd9f30913","name":"200 - Rental Requests","originalRequest":{"header":[]},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 200,\n    \"message\": \"All Requests retrieved successfully\",\n    \"data\": {\n        \"total_requests\": 1,\n        \"total_pending_requests\": 1,\n        \"total_approved_requests\": 0,\n        \"total_rejected_requests\": 0,\n        \"requests\": [\n            {\n                \"status\": \"PENDING\",\n                \"id\": \"9f148bd3-69fe-4759-9822-560ee246aab6\",\n                \"property\": {\n                    \"id\": \"0ccaa91f-4da6-4419-bb74-e69f536248df\",\n                    \"title\": \"Startup Office Banani\",\n                    \"rentAmount\": 78000,\n                    \"address\": \"House 25, Road 6\"\n                },\n                \"tenant\": {\n                    \"id\": \"464bd1c8-3233-46a2-a1ed-65bc5fe95c80\",\n                    \"name\": \"Jane Tenant\",\n                    \"email\": \"tenant@rentnest.com\",\n                    \"phone\": \"+8801711111111\"\n                },\n                \"payment\": null\n            }\n        ]\n    }\n}"}],"_postman_id":"7fc775f1-eaf3-4d9e-94d3-50059c848f99"},{"name":"Approve Rental Request","id":"37022c67-a043-4829-9865-3675bf923741","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Bearer "}],"body":{"mode":"raw","raw":"{\n  \"status\": \"APPROVED\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/rentals/landlord/requests/","description":"<p>Approve a rental request.</p>\n<p><strong>Required Role:</strong> LANDLORD</p>\n<p><strong>Business Rules:</strong></p>\n<ul>\n<li>Can only approve/reject PENDING requests</li>\n<li>Can only act on requests for OWN properties</li>\n<li>status must be 'APPROVED' or 'REJECTED'</li>\n</ul>\n<p>After approval, tenant can proceed to make payment.</p>\n","urlObject":{"path":["rentals","landlord","requests",""],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"cad40010-39f8-4be9-b692-b0a6f154e92d","name":"200 - Request Approved","originalRequest":{"header":[]},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 200,\n    \"message\": \"Rental request status updated successfully\",\n    \"data\": {\n        \"id\": \"9f148bd3-69fe-4759-9822-560ee246aab6\",\n        \"status\": \"APPROVED\",\n        \"propertyId\": \"0ccaa91f-4da6-4419-bb74-e69f536248df\",\n        \"tenantId\": \"464bd1c8-3233-46a2-a1ed-65bc5fe95c80\"\n    }\n}"},{"id":"1c8fb34d-ac13-40fd-9655-2528b78d0415","name":"400 - Already Processed","originalRequest":{"header":[]},"status":"Bad Request","code":400,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 400,\n    \"message\": \"Bad Request\",\n    \"errorDetails\": \"Rental status is already updated\"\n}"}],"_postman_id":"37022c67-a043-4829-9865-3675bf923741"},{"name":"Reject Rental Request","id":"3e426aa2-c198-497a-b8db-3729bff3d15b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Bearer "}],"body":{"mode":"raw","raw":"{\n  \"status\": \"REJECTED\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/rentals/landlord/requests/","description":"<p>Reject a rental request.</p>\n<p><strong>Required Role:</strong> LANDLORD</p>\n<p>Only PENDING requests can be rejected.</p>\n","urlObject":{"path":["rentals","landlord","requests",""],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"8ba19568-6df3-44ac-b11e-c2f828278cc1","name":"200 - Request Rejected","originalRequest":{"header":[]},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 200,\n    \"message\": \"Rental request status updated successfully\",\n    \"data\": {\n        \"id\": \"9f148bd3-69fe-4759-9822-560ee246aab6\",\n        \"status\": \"REJECTED\",\n        \"propertyId\": \"0ccaa91f-4da6-4419-bb74-e69f536248df\",\n        \"tenantId\": \"464bd1c8-3233-46a2-a1ed-65bc5fe95c80\"\n    }\n}"}],"_postman_id":"3e426aa2-c198-497a-b8db-3729bff3d15b"},{"name":"Get Specific Rental Details","id":"88d542e1-6eb8-4fe3-86b7-9a72f2b89b01","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer "}],"url":"http://localhost:5000/api/rentals/landlord/requests/","urlObject":{"path":["rentals","landlord","requests",""],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[],"_postman_id":"88d542e1-6eb8-4fe3-86b7-9a72f2b89b01"}],"id":"f356f966-860e-4424-b5b7-b19f59510f3b","_postman_id":"f356f966-860e-4424-b5b7-b19f59510f3b","description":""},{"name":"Rental Requests (Tenant)","item":[{"name":"Submit Rental Request","event":[{"listen":"test","script":{"id":"89f23443-4384-481a-b058-2ae3d05d0894","exec":["if (pm.response.code === 201) {","  const response = pm.response.json();","  if (response.data && response.data.id) {","    pm.collectionVariables.set('rentalRequestId', response.data.id);","    console.log('Rental Request ID saved: ' + response.data.id);","  }","}"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"a9f0c4de-c926-406c-80a0-3ef3571f3250","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Bearer "}],"body":{"mode":"raw","raw":"{\n  \"propertyId\": \"\",\n  \"moveInDate\": \"2026-09-01\",\n  \"duration\": 6,\n  \"message\": \"Hello, I am a working professional looking for a clean and quiet apartment. I can provide references and pay on time.\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/rentals","description":"<p>Submit a rental request for a property.</p>\n<p><strong>Required Role:</strong> TENANT</p>\n<p><strong>Validation Rules:</strong></p>\n<ul>\n<li>propertyId: must be valid UUID of existing AVAILABLE property</li>\n<li>moveInDate: must be today or in the future (YYYY-MM-DD format)</li>\n<li>duration: integer, 1-36 months</li>\n<li>message: optional, max 500 characters</li>\n</ul>\n<p><strong>Business Rules:</strong></p>\n<ul>\n<li>Cannot submit duplicate PENDING request for same property</li>\n<li>Property must be AVAILABLE status</li>\n<li>Cannot rent your own property</li>\n</ul>\n<p><strong>Auto-saves rentalRequestId</strong> to collection variables.</p>\n","urlObject":{"path":["rentals"],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"e073c93c-f07d-4d86-b990-5830527c272e","name":"201 - Request Submitted","originalRequest":{"header":[]},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 201,\n    \"message\": \"Rental request created successfully\",\n    \"data\": {\n        \"id\": \"9f148bd3-69fe-4759-9822-560ee246aab6\",\n        \"moveInDate\": \"2026-09-01T00:00:00.000Z\",\n        \"duration\": 6,\n        \"message\": \"Hello, I am a working professional looking for a clean and quiet apartment. I can provide references and pay on time.\",\n        \"status\": \"PENDING\",\n        \"createdAt\": \"2026-07-11T06:59:19.507Z\",\n        \"updatedAt\": \"2026-07-11T06:59:19.507Z\",\n        \"tenant\": {\n            \"id\": \"464bd1c8-3233-46a2-a1ed-65bc5fe95c80\",\n            \"name\": \"Jane Tenant\",\n            \"email\": \"tenant@rentnest.com\"\n        },\n        \"property\": {\n            \"id\": \"0ccaa91f-4da6-4419-bb74-e69f536248df\",\n            \"title\": \"Startup Office Banani\",\n            \"rentAmount\": 78000,\n            \"address\": \"House 25, Road 6\"\n        }\n    }\n}"},{"id":"47213468-390a-4a6d-80de-2adc9a0327b6","name":"400 - Property Not Available","originalRequest":{"header":[]},"status":"Bad Request","code":400,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 400,\n    \"message\": \"Bad Request\",\n    \"errorDetails\": \"This property is not available for rent\"\n}"},{"id":"6dbd66a9-af49-45cf-962b-8f169306977f","name":"409 - Duplicate Request","originalRequest":{"header":[]},"status":"Conflict","code":409,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 409,\n    \"message\": \"Conflict\",\n    \"errorDetails\": \"You already have a pending rental request for this property\"\n}"},{"id":"7c70d5f5-95db-4427-aeb5-467a9e9ee5d0","name":"400 - Past Move-in Date","originalRequest":{"header":[]},"status":"Bad Request","code":400,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 400,\n    \"message\": \"Validation failed\",\n    \"errorDetails\": \"Move-in date must be today or in the future\"\n}"}],"_postman_id":"a9f0c4de-c926-406c-80a0-3ef3571f3250"},{"name":"Get My Rental Requests","id":"2ff9b23f-5de2-4479-be3d-e587e914db3c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer "}],"url":"http://localhost:5000/api/rentals","description":"<p>Get all rental requests made by the current tenant.</p>\n<p><strong>Required:</strong> Any valid JWT token.</p>\n<p>Returns requests with property details, landlord contact info, and payment status.</p>\n","urlObject":{"path":["rentals"],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"618e8631-c320-4566-a2b8-fd1d82c95a2e","name":"200 - Tenant Rentals","originalRequest":{"method":"GET","header":[]},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 200,\n    \"message\": \"Rental requests retrieved successfully\",\n    \"data\": {\n        \"total_requests\": 1,\n        \"total_pending_requests\": 1,\n        \"total_approved_requests\": 0,\n        \"total_rejected_requests\": 0,\n        \"requests\": [\n            {\n                \"status\": \"PENDING\",\n                \"property\": {\n                    \"id\": \"0ccaa91f-4da6-4419-bb74-e69f536248df\",\n                    \"title\": \"Startup Office Banani\",\n                    \"rentAmount\": 78000,\n                    \"address\": \"House 25, Road 6\",\n                    \"city\": \"Dhaka\",\n                    \"images\": [\n                        \"https://picsum.photos/seed/property15a/1200/800\",\n                        \"https://picsum.photos/seed/property15b/1200/800\"\n                    ],\n                    \"landlord\": {\n                        \"id\": \"427f4183-3708-4ee1-b6f4-9f6697981c63\",\n                        \"name\": \"Mike Landlord\",\n                        \"email\": \"landlord@rentnest.com\",\n                        \"phone\": \"+8801722222222\"\n                    }\n                },\n                \"payment\": null\n            }\n        ]\n    }\n}"}],"_postman_id":"2ff9b23f-5de2-4479-be3d-e587e914db3c"},{"name":"Get Rental Request By ID","id":"b7706a60-f4b1-4e22-918f-4aa8f8824743","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer "}],"url":"http://localhost:5000/api/rentals/","description":"<p>Get details of a specific rental request.</p>\n<p><strong>Access Control:</strong></p>\n<ul>\n<li>Tenant: can view their own requests</li>\n<li>Landlord: can view requests on their properties</li>\n<li>Admin: can view all requests</li>\n</ul>\n<p>Others receive 403 Forbidden.</p>\n","urlObject":{"path":["rentals",""],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"c135a966-6c1e-45ef-b387-40d1430789a7","name":"200 - Rental Request Detail","originalRequest":{"header":[]},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 200,\n    \"message\": \"Rental request retrieved successfully\",\n    \"data\": {\n        \"id\": \"9f148bd3-69fe-4759-9822-560ee246aab6\",\n        \"moveInDate\": \"2026-09-01T00:00:00.000Z\",\n        \"duration\": 6,\n        \"message\": \"Hello, I am a working professional looking for a clean and quiet apartment. I can provide references and pay on time.\",\n        \"status\": \"PENDING\",\n        \"createdAt\": \"2026-07-11T06:59:19.507Z\",\n        \"updatedAt\": \"2026-07-11T06:59:19.507Z\",\n        \"property\": {\n            \"id\": \"0ccaa91f-4da6-4419-bb74-e69f536248df\",\n            \"title\": \"Startup Office Banani\",\n            \"description\": \"Well-maintained office space available for rent with modern facilities and excellent location.\",\n            \"address\": \"House 25, Road 6\",\n            \"city\": \"Dhaka\",\n            \"state\": \"Dhaka Division\",\n            \"zipCode\": \"1207\",\n            \"country\": \"Bangladesh\",\n            \"rentAmount\": 78000,\n            \"bedrooms\": 0,\n            \"bathrooms\": 2,\n            \"area\": 3000,\n            \"amenities\": [\n                \"WiFi\",\n                \"Security\",\n                \"Parking\",\n                \"Generator\"\n            ],\n            \"images\": [\n                \"https://picsum.photos/seed/property15a/1200/800\",\n                \"https://picsum.photos/seed/property15b/1200/800\"\n            ],\n            \"status\": \"AVAILABLE\",\n            \"createdAt\": \"2026-07-10T19:57:11.379Z\",\n            \"updatedAt\": \"2026-07-10T19:57:11.379Z\",\n            \"landlord\": {\n                \"id\": \"427f4183-3708-4ee1-b6f4-9f6697981c63\",\n                \"name\": \"Mike Landlord\",\n                \"email\": \"landlord@rentnest.com\",\n                \"phone\": \"+8801722222222\"\n            },\n            \"category\": {\n                \"id\": \"3e8f0a6e-6a2b-46e6-9e13-c9d23156f832\",\n                \"name\": \"Office Space\"\n            },\n            \"_count\": {\n                \"reviews\": 0,\n                \"rentals\": 1\n            }\n        },\n        \"payment\": null\n    }\n}"},{"id":"e9be0e93-7bde-4de4-bf60-8f37edeaec09","name":"403 - Access Denied","originalRequest":{"header":[]},"status":"Forbidden","code":403,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 400,\n    \"message\": \"Bad Request\",\n    \"errorDetails\": \"You do not have permission to access this request\"\n}"}],"_postman_id":"b7706a60-f4b1-4e22-918f-4aa8f8824743"}],"id":"7f449cf2-cb75-44bd-b174-542dfe2fa387","_postman_id":"7f449cf2-cb75-44bd-b174-542dfe2fa387","description":""},{"name":"Payments (Stripe)","item":[{"name":"Create Payment Session","event":[{"listen":"test","script":{"id":"314f925d-0c49-4bc5-b725-7cd2143c4862","exec":["if (pm.response.code === 201) {","  const response = pm.response.json();","  if (response.data && response.data.payment) {","    pm.collectionVariables.set('paymentId', response.data.payment.id);","    console.log('Payment ID saved: ' + response.data.payment.id);","    console.log('Checkout URL: ' + response.data.checkoutUrl);","  }","}"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"ab6438ef-1c73-44e1-8a54-f45ec0c4ca39","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Bearer "}],"body":{"mode":"raw","raw":"{\n  \"rentalRequestId\": \"\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/payments/checkout","description":"<p>Create a Stripe Checkout Session for an approved rental request.</p>\n<p><strong>Required Role:</strong> TENANT</p>\n<p><strong>Business Rules:</strong></p>\n<ul>\n<li>Rental request must be in APPROVED status</li>\n<li>Only the tenant who made the request can pay</li>\n<li>Cannot create duplicate payment if already COMPLETED</li>\n</ul>\n<p><strong>Total Amount Calculation:</strong> rentAmount × duration (months)</p>\n<p><strong>Response includes:</strong></p>\n<ul>\n<li>payment: Payment record with PENDING status</li>\n<li>checkoutUrl: Stripe-hosted payment page URL</li>\n<li>sessionId: Stripe session ID</li>\n</ul>\n<p><strong>After creating session:</strong> Open the checkoutUrl in browser to complete payment.</p>\n<p><strong>Test Card (Stripe):</strong> 4242 4242 4242 4242, any future date, any CVC</p>\n<p><strong>Auto-saves paymentId</strong> to collection variables.</p>\n","urlObject":{"path":["payments","checkout"],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"8c9094b2-a064-4b46-a711-345b1a741d8e","name":"201 - Payment Session Created","originalRequest":{"header":[]},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 200,\n    \"message\": \"Payment session created. Redirect to checkoutUrl to complete payment.\",\n    \"data\": {\n        \"payment\": {\n            \"id\": \"2e217fc5-1586-49ff-b9e3-39828aeb079b\",\n            \"amount\": 4680,\n            \"currency\": \"usd\",\n            \"status\": \"PENDING\",\n            \"provider\": \"STRIPE\",\n            \"stripeSessionId\": \"cs_test_a16IzOvIbJvckgbraEH190j4In1gGRaFaHfwpdrK7t1MtSl9COn9cW3z7y\",\n            \"createdAt\": \"2026-07-15T11:55:25.934Z\"\n        },\n        \"checkoutUrl\": \"https://checkout.stripe.com/c/pay/cs_test_a16IzOvIbJvckgbraEH190j4In1gGRaFaHfwpdrK7t1MtSl9COn9cW3z7y#fidnandhYHdWcXxpYCc%2FJ2FgY2RwaXEnKSdicGRmZGhqaWBTZHdsZGtxJz8nZmprcXdqaScpJ2R1bE5gfCc%2FJ3VuWnFgdnFaMDRRdHNgMz0zbDw9Y2RJfFZOZjFpbDJOSDZUcl1yfGd3TUdtQVdIb1BWTVxLNHB%2FdkBDNEdWY0JUZHZxc0lUVz1fN1M9ZHdTRGJkUjcwbFY3SDdRfXJpdVI1NWhMT0JcRHxGJyknY3dqaFZgd3Ngdyc%2FcXdwYCknZ2RmbmJ3anBrYUZqaWp3Jz8nJmNjY2NjYycpJ2lkfGpwcVF8dWAnPyd2bGtiaWBabHFgaCcpJ2BrZGdpYFVpZGZgbWppYWB3dic%2FcXdwYHgl\"\n    }\n}"},{"id":"2db56cd0-0b58-427e-8d72-611aaee65d0b","name":"400 - Not Approved Yet","originalRequest":{"header":[]},"status":"Bad Request","code":400,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 400,\n    \"message\": \"Bad Request\",\n    \"errorDetails\": \"Payment is only available for approved requests. Current status: PENDING\"\n}"},{"id":"da1176a5-aacf-486d-93ad-1fc429e445ea","name":"409 - Already Paid","originalRequest":{"header":[]},"status":"Conflict","code":409,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 409,\n    \"message\": \"Conflict\",\n    \"errorDetails\": \"Payment has already been completed for this rental\"\n}"},{"id":"19440896-17f5-4c57-9087-8cf08109a413","name":"403 - Not Your Request","originalRequest":{"header":[]},"status":"Forbidden","code":403,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 403,\n    \"message\": \"Forbidden\",\n    \"errorDetails\": \"You can only pay for your own rental requests\"\n}"}],"_postman_id":"ab6438ef-1c73-44e1-8a54-f45ec0c4ca39"},{"name":"Get My Payment History","id":"98fb004b-b300-4a16-8420-31eb9d15b4d3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer "}],"url":"http://localhost:5000/api/payments","description":"<p>Get all payments made by the current tenant.</p>\n<p><strong>Required:</strong> Any valid JWT token.</p>\n<p>Returns payment history with rental and property details.</p>\n","urlObject":{"path":["payments"],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"cb7ee66b-b0fc-490a-9cf9-9ff8ca2b89b0","name":"200 - Payment History","originalRequest":{"header":[]},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 200,\n    \"message\": \"Payment history retrieved successfully\",\n    \"data\": [\n        {\n            \"id\": \"bc526b9d-d9e8-4f4a-8a28-ac7e8748beb4\",\n            \"amount\": 4680,\n            \"currency\": \"usd\",\n            \"status\": \"COMPLETED\",\n            \"provider\": \"STRIPE\",\n            \"stripePaymentIntentId\": \"pi_3TtUff86i98faLyS1E5cGnqE\",\n            \"stripeSessionId\": \"cs_test_a1HusH9I28iyWfRcb5E2XB7ruiXLWjRgf43KfBAkwulKJvq3VGgZn43NET\",\n            \"transactionId\": \"cs_test_a1HusH9I28iyWfRcb5E2XB7ruiXLWjRgf43KfBAkwulKJvq3VGgZn43NET\",\n            \"paidAt\": \"2026-07-15T15:25:28.464Z\",\n            \"createdAt\": \"2026-07-15T15:12:52.169Z\",\n            \"updatedAt\": \"2026-07-15T15:25:28.491Z\",\n            \"rentalRequestId\": \"9f148bd3-69fe-4759-9822-560ee246aab6\",\n            \"tenantId\": \"464bd1c8-3233-46a2-a1ed-65bc5fe95c80\",\n            \"rentalRequest\": {\n                \"id\": \"9f148bd3-69fe-4759-9822-560ee246aab6\",\n                \"moveInDate\": \"2026-09-01T00:00:00.000Z\",\n                \"duration\": 6,\n                \"message\": \"Hello, I am a working professional looking for a clean and quiet apartment. I can provide references and pay on time.\",\n                \"status\": \"ACTIVE\",\n                \"createdAt\": \"2026-07-11T06:59:19.507Z\",\n                \"updatedAt\": \"2026-07-15T15:25:28.549Z\",\n                \"tenantId\": \"464bd1c8-3233-46a2-a1ed-65bc5fe95c80\",\n                \"propertyId\": \"0ccaa91f-4da6-4419-bb74-e69f536248df\",\n                \"property\": {\n                    \"id\": \"0ccaa91f-4da6-4419-bb74-e69f536248df\",\n                    \"title\": \"Startup Office Banani\",\n                    \"address\": \"House 25, Road 6\",\n                    \"rentAmount\": 780\n                }\n            }\n        }\n    ]\n}"}],"_postman_id":"98fb004b-b300-4a16-8420-31eb9d15b4d3"},{"name":"Get Payment By ID","id":"ee8dabc1-08bf-42c6-abeb-5125d660a4e1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer "}],"url":"http://localhost:5000/api/payments/","description":"<p>Get details of a specific payment.</p>\n<p><strong>Access Control:</strong></p>\n<ul>\n<li>Tenant who made the payment</li>\n<li>Admin</li>\n</ul>\n<p><strong>Status Values:</strong> PENDING | COMPLETED | FAILED | REFUNDED</p>\n","urlObject":{"path":["payments",""],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"cb34c648-25b6-4119-a279-faf0d911f680","name":"200 - Payment Detail","originalRequest":{"header":[]},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 200,\n    \"message\": \"Payment retrieved successfully\",\n    \"data\": {\n        \"id\": \"bc526b9d-d9e8-4f4a-8a28-ac7e8748beb4\",\n        \"amount\": 4680,\n        \"currency\": \"usd\",\n        \"status\": \"COMPLETED\",\n        \"provider\": \"STRIPE\",\n        \"stripePaymentIntentId\": \"pi_3TtUff86i98faLyS1E5cGnqE\",\n        \"stripeSessionId\": \"cs_test_a1HusH9I28iyWfRcb5E2XB7ruiXLWjRgf43KfBAkwulKJvq3VGgZn43NET\",\n        \"transactionId\": \"cs_test_a1HusH9I28iyWfRcb5E2XB7ruiXLWjRgf43KfBAkwulKJvq3VGgZn43NET\",\n        \"paidAt\": \"2026-07-15T15:25:28.464Z\",\n        \"createdAt\": \"2026-07-15T15:12:52.169Z\",\n        \"updatedAt\": \"2026-07-15T15:25:28.491Z\",\n        \"rentalRequestId\": \"9f148bd3-69fe-4759-9822-560ee246aab6\",\n        \"tenantId\": \"464bd1c8-3233-46a2-a1ed-65bc5fe95c80\",\n        \"rentalRequest\": {\n            \"id\": \"9f148bd3-69fe-4759-9822-560ee246aab6\",\n            \"moveInDate\": \"2026-09-01T00:00:00.000Z\",\n            \"duration\": 6,\n            \"message\": \"Hello, I am a working professional looking for a clean and quiet apartment. I can provide references and pay on time.\",\n            \"status\": \"ACTIVE\",\n            \"createdAt\": \"2026-07-11T06:59:19.507Z\",\n            \"updatedAt\": \"2026-07-15T15:25:28.549Z\",\n            \"tenantId\": \"464bd1c8-3233-46a2-a1ed-65bc5fe95c80\",\n            \"propertyId\": \"0ccaa91f-4da6-4419-bb74-e69f536248df\",\n            \"property\": {\n                \"id\": \"0ccaa91f-4da6-4419-bb74-e69f536248df\",\n                \"title\": \"Startup Office Banani\",\n                \"address\": \"House 25, Road 6\",\n                \"landlordId\": \"427f4183-3708-4ee1-b6f4-9f6697981c63\"\n            }\n        }\n    }\n}"}],"_postman_id":"ee8dabc1-08bf-42c6-abeb-5125d660a4e1"}],"id":"036e5ea6-da68-47dd-a54e-3a44c2b0bcc5","_postman_id":"036e5ea6-da68-47dd-a54e-3a44c2b0bcc5","description":""},{"name":"Reviews","item":[{"name":"Create Review","id":"5f836892-65ae-4835-ae04-0ff2c0e82c19","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Bearer "}],"body":{"mode":"raw","raw":"{\n  \"propertyId\": \"\",\n  \"rating\": 5,\n  \"comment\": \"Absolutely wonderful apartment! The landlord was very responsive and the property was exactly as described. Great location, clean, and modern. Highly recommend to anyone looking for a quality rental in Dhaka.\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/reviews","description":"<p>Leave a review for a property after a completed rental.</p>\n<p><strong>Required Role:</strong> TENANT</p>\n<p><strong>Validation Rules:</strong></p>\n<ul>\n<li>propertyId: must be valid UUID of existing property</li>\n<li>rating: integer between 1 and 5</li>\n<li>comment: 10-1000 characters</li>\n</ul>\n<p><strong>Business Rules:</strong></p>\n<ul>\n<li>Tenant must have an ACTIVE or COMPLETED rental for this property</li>\n<li>One tenant can only submit ONE review per property</li>\n</ul>\n","urlObject":{"path":["reviews"],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"b574b0f9-3a96-4abc-90da-fc7253b42cc0","name":"201 - Review Created","originalRequest":{"header":[]},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 201,\n    \"message\": \"Review submitted successfully\",\n    \"data\": {\n        \"id\": \"1e27fb8f-22c1-437c-b2ba-34125b8d4e58\",\n        \"rating\": 5,\n        \"comment\": \"Absolutely wonderful apartment! The landlord was very responsive and the property was exactly as described. Great location, clean, and modern. Highly recommend to anyone looking for a quality rental in Dhaka.\",\n        \"createdAt\": \"2026-07-15T17:45:20.755Z\",\n        \"updatedAt\": \"2026-07-15T17:45:20.755Z\",\n        \"tenantId\": \"464bd1c8-3233-46a2-a1ed-65bc5fe95c80\",\n        \"propertyId\": \"0ccaa91f-4da6-4419-bb74-e69f536248df\",\n        \"tenant\": {\n            \"id\": \"464bd1c8-3233-46a2-a1ed-65bc5fe95c80\",\n            \"name\": \"Jane Tenant\",\n            \"avatar\": \"example.com/tenant\"\n        },\n        \"property\": {\n            \"id\": \"0ccaa91f-4da6-4419-bb74-e69f536248df\",\n            \"title\": \"Startup Office Banani\"\n        }\n    }\n}"},{"id":"29d8d5e5-8d40-4529-bb0c-df5ac181b135","name":"403 - No Completed Rental","originalRequest":{"header":[]},"status":"Forbidden","code":403,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 403,\n    \"message\": \"Forbidden\",\n    \"errorDetails\": \"You can only review properties you have rented. Complete your rental first.\"\n}"},{"id":"b82f871a-9081-439f-bb12-150b8b91cc93","name":"409 - Already Reviewed","originalRequest":{"header":[]},"status":"Conflict","code":409,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 409,\n    \"message\": \"Conflict\",\n    \"errorDetails\": \"You have already reviewed this property\"\n}"},{"id":"d8db1d7a-7bc7-41e6-89d7-f6552b2f285f","name":"400 - Rating Out of Range","originalRequest":{"header":[]},"status":"Bad Request","code":400,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 400,\n    \"message\": \"Bad Request\",\n    \"errorDetails\": \"Rating must be between 1 and 5\"\n}"}],"_postman_id":"5f836892-65ae-4835-ae04-0ff2c0e82c19"}],"id":"4129a436-1bcc-4438-90a5-9e5de1906c75","_postman_id":"4129a436-1bcc-4438-90a5-9e5de1906c75","description":""},{"name":"Admin","item":[{"name":"Get Dashboard Stats","id":"eca24433-8265-4b6f-b02e-b7e03c374b7e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer "}],"url":"http://localhost:5000/api/admin/stats","description":"<p>Get platform overview statistics.</p>\n<p><strong>Required Role:</strong> ADMIN</p>\n<p>Returns totals for users, properties, rentals, and revenue.</p>\n","urlObject":{"path":["admin","stats"],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"bc76f969-067e-46f4-8905-57b8a501ed48","name":"200 - Dashboard Stats","originalRequest":{"header":[]},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 200,\n    \"message\": \"Stats retrieved successfully\",\n    \"data\": {\n        \"totalUsers\": 5,\n        \"totalTenants\": 2,\n        \"totalLandlords\": 3,\n        \"totalProperties\": 20,\n        \"totalRentals\": 2,\n        \"totalRevenue\": 4680,\n        \"pendingRequests\": 1\n    }\n}"}],"_postman_id":"eca24433-8265-4b6f-b02e-b7e03c374b7e"},{"name":"Get All Users","id":"4b80fdcf-40d1-4720-bf7b-6926eefe7d9b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer "}],"url":"http://localhost:5000/api/admin/users/all","description":"<p>Get all platform users with pagination and filters.</p>\n<p><strong>Required Role:</strong> ADMIN</p>\n<p><strong>Available Filters:</strong></p>\n<ul>\n<li>role: TENANT | LANDLORD | ADMIN</li>\n<li>status: ACTIVE | BANNED</li>\n<li>search: Search in name and email</li>\n<li>page / limit: Pagination</li>\n</ul>\n","urlObject":{"path":["admin","users","all"],"host":["http://localhost:5000/api"],"query":[{"disabled":true,"description":{"content":"<p>Filter by role: TENANT, LANDLORD, ADMIN</p>\n","type":"text/plain"},"key":"role","value":"TENANT"},{"disabled":true,"description":{"content":"<p>Filter by status: ACTIVE, BANNED</p>\n","type":"text/plain"},"key":"status","value":"ACTIVE"},{"disabled":true,"description":{"content":"<p>Search by name or email</p>\n","type":"text/plain"},"key":"search","value":""}],"variable":[]}},"response":[{"id":"24b62643-2b7f-43a2-9d87-08a9a06c8241","name":"200 - Users List","originalRequest":{"method":"GET","header":[]},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 200,\n    \"message\": \"Users retrieved successfully\",\n    \"data\": {\n        \"meta\": {\n            \"total_users\": 6,\n            \"total_landlords\": 3,\n            \"total_tenants\": 3,\n            \"active_users\": 6,\n            \"inactive_users\": 0\n        },\n        \"users\": [\n            {\n                \"id\": \"4d9131ff-14b2-4c7f-9b2d-dcba3b3b2ea8\",\n                \"name\": \"Jane 2\",\n                \"email\": \"tenant2@rentnest.com\",\n                \"phone\": \"23231\",\n                \"avatar\": \"https://images.unsplash.com/photo-1651917188921-f013522bfea3\",\n                \"role\": \"TENANT\",\n                \"status\": \"ACTIVE\",\n                \"createdAt\": \"2026-08-01T05:15:13.456Z\",\n                \"updatedAt\": \"2026-08-01T05:15:13.456Z\",\n                \"_count\": {\n                    \"properties\": 0,\n                    \"rentals\": 0,\n                    \"reviews\": 0\n                }\n            },\n            {\n                \"id\": \"ee147fef-9d9f-4be3-b1a2-54337322b8c6\",\n                \"name\": \"Mike Landlord\",\n                \"email\": \"mike.landlord@example.com\",\n                \"phone\": \"+8801722222222\",\n                \"avatar\": \"example.com/image\",\n                \"role\": \"LANDLORD\",\n                \"status\": \"ACTIVE\",\n                \"createdAt\": \"2026-07-15T16:08:26.870Z\",\n                \"updatedAt\": \"2026-07-15T16:08:26.870Z\",\n                \"_count\": {\n                    \"properties\": 0,\n                    \"rentals\": 0,\n                    \"reviews\": 0\n                }\n            },\n            {\n                \"id\": \"32994cbf-8ed1-4975-999b-73bbe2da05f2\",\n                \"name\": \"check Tenant\",\n                \"email\": \"check.tenant@example.com\",\n                \"phone\": \"+8801711111111\",\n                \"avatar\": \"example.com/image\",\n                \"role\": \"TENANT\",\n                \"status\": \"ACTIVE\",\n                \"createdAt\": \"2026-07-11T08:12:22.109Z\",\n                \"updatedAt\": \"2026-07-11T08:12:22.109Z\",\n                \"_count\": {\n                    \"properties\": 0,\n                    \"rentals\": 0,\n                    \"reviews\": 0\n                }\n            },\n            {\n                \"id\": \"81a689b7-43eb-4261-9085-e01add4e3c0c\",\n                \"name\": \"Sian Landlord\",\n                \"email\": \"sian.landlord@example.com\",\n                \"phone\": \"+8801722222222\",\n                \"avatar\": \"example.com/image\",\n                \"role\": \"LANDLORD\",\n                \"status\": \"ACTIVE\",\n                \"createdAt\": \"2026-07-10T20:22:27.952Z\",\n                \"updatedAt\": \"2026-07-15T16:59:07.334Z\",\n                \"_count\": {\n                    \"properties\": 0,\n                    \"rentals\": 0,\n                    \"reviews\": 0\n                }\n            },\n            {\n                \"id\": \"427f4183-3708-4ee1-b6f4-9f6697981c63\",\n                \"name\": \"Mike Landlord\",\n                \"email\": \"landlord@rentnest.com\",\n                \"phone\": \"+8801722222222\",\n                \"avatar\": \"https://images.unsplash.com/photo-1640951613773-54706e06851d\",\n                \"role\": \"LANDLORD\",\n                \"status\": \"ACTIVE\",\n                \"createdAt\": \"2026-07-10T12:30:09.030Z\",\n                \"updatedAt\": \"2026-07-10T12:30:09.030Z\",\n                \"_count\": {\n                    \"properties\": 20,\n                    \"rentals\": 0,\n                    \"reviews\": 0\n                }\n            },\n            {\n                \"id\": \"464bd1c8-3233-46a2-a1ed-65bc5fe95c80\",\n                \"name\": \"Jane Tenant\",\n                \"email\": \"tenant@rentnest.com\",\n                \"phone\": \"+8801711111111\",\n                \"avatar\": \"https://images.unsplash.com/photo-1534528741775-53994a69daeb\",\n                \"role\": \"TENANT\",\n                \"status\": \"ACTIVE\",\n                \"createdAt\": \"2026-07-10T12:28:31.647Z\",\n                \"updatedAt\": \"2026-07-10T12:28:31.647Z\",\n                \"_count\": {\n                    \"properties\": 0,\n                    \"rentals\": 4,\n                    \"reviews\": 1\n                }\n            }\n        ]\n    }\n}"}],"_postman_id":"4b80fdcf-40d1-4720-bf7b-6926eefe7d9b"},{"name":"Get All Users - Filter by Role","id":"5b2bb599-1146-4ed5-9f94-4f117bcb7036","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer "}],"url":"http://localhost:5000/api/admin/users?role=LANDLORD","description":"<p>Filter users by LANDLORD role.</p>\n","urlObject":{"path":["admin","users"],"host":["http://localhost:5000/api"],"query":[{"key":"role","value":"LANDLORD"}],"variable":[]}},"response":[],"_postman_id":"5b2bb599-1146-4ed5-9f94-4f117bcb7036"},{"name":"User Status Deactivate","event":[{"listen":"prerequest","script":{"id":"ad2606d3-1f40-4627-8738-6d543373ab81","exec":["// Make sure to set userId variable before running this","// Get user IDs from 'Get All Users' endpoint"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"bf3b9f70-9996-47b4-910f-b02b98160cdb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Bearer "}],"body":{"mode":"raw","raw":"{\n  \"status\": \"INACTIVE\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/admin/users/","description":"<p>Ban a user from the platform.</p>\n<p><strong>Required Role:</strong> ADMIN</p>\n<p><strong>Business Rules:</strong></p>\n<ul>\n<li><p>Cannot ban another ADMIN</p>\n</li>\n<li><p>Cannot ban yourself</p>\n</li>\n<li><p>status must be 'ACTIVE' or 'INACTIVE'</p>\n</li>\n</ul>\n<p><strong>Note:</strong> Replace  with actual user UUID from 'Get All Users'.</p>\n","urlObject":{"path":["admin","users",""],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"196b1fe5-3ffb-4d00-91c9-384c36d0211a","name":"200 - User Deactivated","originalRequest":{"header":[]},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 200,\n    \"message\": \"User status updated successfully\",\n    \"data\": {\n        \"name\": \"Sian Landlord\",\n        \"email\": \"sian.landlord@example.com\",\n        \"status\": \"INACTIVE\",\n        \"updatedAt\": \"2026-07-11T05:13:21.220Z\"\n    }\n}"},{"id":"3d45ced9-c9ac-4b28-af67-340015064712","name":"403 - Cannot Deactivate Admin","originalRequest":{"header":[]},"status":"Forbidden","code":403,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 403,\n    \"message\": \"Forbidden\",\n    \"errorDetails\": \"Cannot modify admin account status\"\n}"}],"_postman_id":"bf3b9f70-9996-47b4-910f-b02b98160cdb"},{"name":"User Status Active","id":"ea9a1958-817a-43bc-bf20-207c69e4c7fd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Bearer "}],"body":{"mode":"raw","raw":"{\n  \"status\": \"ACTIVE\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/admin/users/","description":"<p>Unban a previously banned user.</p>\n<p><strong>Required Role:</strong> ADMIN</p>\n","urlObject":{"path":["admin","users",""],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"26253170-2e5d-4083-8eb0-ce7eeaaabcf5","name":"200 - User Activated","originalRequest":{"header":[]},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"statusCode\": 200,\n    \"message\": \"User status updated successfully\",\n    \"data\": {\n        \"name\": \"Sian Landlord\",\n        \"email\": \"sian.landlord@example.com\",\n        \"status\": \"ACTIVE\",\n        \"updatedAt\": \"2026-07-11T05:15:42.261Z\"\n    }\n}"}],"_postman_id":"ea9a1958-817a-43bc-bf20-207c69e4c7fd"},{"name":"Access Admin Route with Tenant Token (Error Demo)","id":"2c1aa7ed-d127-4c52-8ecb-9dc25a9d123d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer "}],"url":"http://localhost:5000/api/admin/users","description":"<p>Demonstrates 403 Forbidden when a non-admin tries to access admin routes.</p>\n","urlObject":{"path":["admin","users"],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"f75f643f-3cf5-45f7-8a0b-3be09546a50d","name":"403 - Forbidden","originalRequest":{"header":[]},"status":"Forbidden","code":403,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 403,\n    \"message\": \"Forbidden\",\n    \"errorDetails\": \"Access denied. Required role: ADMIN. Your role: TENANT\"\n}"}],"_postman_id":"2c1aa7ed-d127-4c52-8ecb-9dc25a9d123d"},{"name":"Get Specific User Detail","id":"f3bcfad6-de71-4612-a8fd-dc87f11f1bb0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:5000/api/admin/users/","urlObject":{"path":["admin","users",""],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[],"_postman_id":"f3bcfad6-de71-4612-a8fd-dc87f11f1bb0"}],"id":"64595966-c1c2-45e3-9f47-1a2dd11f8e53","_postman_id":"64595966-c1c2-45e3-9f47-1a2dd11f8e53","description":""},{"name":"Error Handling Demos","item":[{"name":"404 - Route Not Found","id":"c77cda30-f689-486c-be1c-04d828e5f3d6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:5000/api/this-route-does-not-exist","description":"<p>Demonstrates 404 Not Found for unknown routes.</p>\n","urlObject":{"path":["this-route-does-not-exist"],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"7acd3bc5-326a-4b73-8d72-e8d6b21ea712","name":"404 - Route Not Found","originalRequest":{"header":[]},"status":"Not Found","code":404,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 404,\n    \"message\": \"Route not found\",\n    \"errorDetails\": \"There is no route with this path /api/this-route-does-not-exist\"\n}"}],"_postman_id":"c77cda30-f689-486c-be1c-04d828e5f3d6"},{"name":"400 - Register Validation Errors Demo","id":"00830477-20c1-4307-8a78-4500730ecf6b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"A\",\n  \"email\": \"not-a-valid-email\",\n  \"password\": \"weak\",\n  \"role\": \"SUPERUSER\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/auth/register","description":"<p>Demonstrates multiple validation errors in a single response.</p>\n","urlObject":{"path":["auth","register"],"host":["http://localhost:5000/api"],"query":[],"variable":[]}},"response":[{"id":"2e4fbd24-2d76-4a53-9128-a573c5dbc4a2","name":"400 - Validation Errors","originalRequest":{"header":[]},"status":"Bad Request","code":400,"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"statusCode\": 400,\n    \"message\": \"Validation failed\",\n    \"errorDetails\": \"Invalid email format\"\n}"}],"_postman_id":"00830477-20c1-4307-8a78-4500730ecf6b"}],"id":"897db05f-8312-4e54-8ca7-8469907ae407","_postman_id":"897db05f-8312-4e54-8ca7-8469907ae407","description":""}],"variable":[{"key":"baseUrl","value":"http://localhost:5000/api"},{"key":"adminToken","value":""},{"key":"landlordToken","value":""},{"key":"tenantToken","value":""},{"key":"propertyId","value":""},{"key":"categoryId","value":""},{"key":"rentalRequestId","value":""},{"key":"paymentId","value":""},{"key":"userId","value":""}]}