{"info":{"_postman_id":"d0743020-4775-4c2d-b900-b9d0af8e2903","name":"ShopGenie API","description":"<html><head></head><body><p>Complete API documentation for ShopGenie - No-Code Website Builder for Local Shops</p>\n<p><strong>Base URL:</strong> <code>http://localhost:5000/api</code></p>\n<p><strong>Authentication:</strong> JWT Bearer Token (auto-saved on login)</p>\n<p><strong>Features:</strong></p>\n<ul>\n<li>User Authentication (Register, Login, Email Verification, Password Reset)</li>\n<li>Store Management (Create, Update, Publish/Unpublish)</li>\n<li>Product Management (CRUD, Bulk Updates, Featured Toggle)</li>\n<li>Order Management (Create, Status Updates, Statistics)</li>\n</ul>\n<p><strong>Author:</strong> Jonty Patel\n<strong>GitHub:</strong> <a href=\"https://github.com/jontypatel1107/shop_genie\">https://github.com/jontypatel1107/shop_genie</a></p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"50840769","collectionId":"d0743020-4775-4c2d-b900-b9d0af8e2903","publishedId":"2sBXqKoLD2","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-05-02T12:43:27.000Z"},"item":[{"name":"Auth","item":[{"name":"Register","id":"acab3c41-6cd1-4a15-a76a-7bc323156cf9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"John Doe\",\n  \"email\": \"john@example.com\",\n  \"password\": \"SecurePass123!\",\n  \"phone\": \"+919876543210\",\n  \"businessName\": \"John's Grocery Store\"\n}"},"url":"http://localhost:5000/api/auth/register","description":"<p>Register a new user account. An email verification code will be sent to the provided email address.</p>\n<p><strong>Rate Limit:</strong> Applied</p>\n","urlObject":{"path":["api","auth","register"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[{"id":"4d3ab7e8-7fed-44e0-94f1-7968d323ad7d","name":"Success - Registration","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"John Doe\",\n  \"email\": \"john@example.com\",\n  \"password\": \"SecurePass123!\",\n  \"phone\": \"+919876543210\",\n  \"businessName\": \"John's Grocery Store\"\n}"},"url":"http://localhost:5000/api/auth/register"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n  \"success\": true,\n  \"message\": \"Registration successful. Please verify your email to activate your account.\",\n  \"data\": {\n    \"requiresVerification\": true,\n    \"userId\": \"67890abcdef1234567890abc\"\n  }\n}"},{"id":"3f7efdcb-deee-45fe-9ced-2a581efb9901","name":"Error - Email Already Registered","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"John Doe\",\n  \"email\": \"john@example.com\",\n  \"password\": \"SecurePass123!\"\n}"},"url":"http://localhost:5000/api/auth/register"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n  \"success\": false,\n  \"message\": \"Email already registered\"\n}"},{"id":"1f707c3e-d723-4ca6-b14e-bf49f5f09de3","name":"Register","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"John Doe\",\n  \"email\": \"john@example.com\",\n  \"password\": \"SecurePass123!\",\n  \"phone\": \"+919876543210\",\n  \"businessName\": \"John's Grocery Store\"\n}"},"url":"http://localhost:5000/api/auth/register"},"status":"Created","code":201,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Access-Control-Allow-Origin","value":"http://localhost:5173"},{"key":"Vary","value":"Origin"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"RateLimit-Policy","value":"10;w=900"},{"key":"RateLimit-Limit","value":"10"},{"key":"RateLimit-Remaining","value":"9"},{"key":"RateLimit-Reset","value":"900"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"177"},{"key":"ETag","value":"W/\"b1-sAmADjqMIKagVKDcCntIpStreK4\""},{"key":"Date","value":"Sat, 02 May 2026 12:37:49 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"message\": \"Registration successful. Please verify your email to activate your account.\",\n    \"data\": {\n        \"requiresVerification\": true,\n        \"userId\": \"69f5f016efa5c5bd44132b4d\"\n    }\n}"}],"_postman_id":"acab3c41-6cd1-4a15-a76a-7bc323156cf9"},{"name":"Login","event":[{"listen":"test","script":{"exec":["if (pm.response.code === 200) {","    const response = pm.response.json();","    if (response.data && response.data.token) {","        pm.environment.set('token', response.data.token);","        console.log('Token saved to environment');","    }","}"],"type":"text/javascript","id":"58ac5849-19e7-4ade-bfda-1cbf5eb8d229"}}],"id":"12c7a401-07c5-47ad-9bdb-2734a9d7239f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"identifier\": \"john@example.com\",\n  \"password\": \"SecurePass123!\"\n}"},"url":"http://localhost:5000/api/auth/login","description":"<p>Login with email/phone and password. Token is automatically saved to environment variable on success.</p>\n<p><strong>Rate Limit:</strong> Applied</p>\n","urlObject":{"path":["api","auth","login"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[{"id":"f247feb8-0ebe-413c-bf14-5f830a95e880","name":"Success - Login","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"identifier\": \"john@example.com\",\n  \"password\": \"SecurePass123!\"\n}"},"url":"http://localhost:5000/api/auth/login"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n  \"success\": true,\n  \"message\": \"Login successful\",\n  \"data\": {\n    \"user\": {\n      \"_id\": \"67890abcdef1234567890abc\",\n      \"name\": \"John Doe\",\n      \"email\": \"john@example.com\",\n      \"isVerified\": true\n    },\n    \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n    \"refreshToken\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"\n  }\n}"},{"id":"b9b8374c-d3e5-4004-9a62-7daa70cfd11a","name":"Error - Invalid Credentials","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"identifier\": \"john@example.com\",\n  \"password\": \"wrongpassword\"\n}"},"url":"http://localhost:5000/api/auth/login"},"status":"Unauthorized","code":401,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n  \"success\": false,\n  \"message\": \"Invalid credentials\"\n}"}],"_postman_id":"12c7a401-07c5-47ad-9bdb-2734a9d7239f"},{"name":"Verify Email","id":"c5bef808-863f-48af-bda9-fcc73505e8b5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"code\": \"123456\"\n}"},"url":"http://localhost:5000/api/auth/verify-email","description":"<p>Verify email using the 6-digit code sent during registration.</p>\n<p><strong>Rate Limit:</strong> Applied (OTP Limiter)</p>\n","urlObject":{"path":["api","auth","verify-email"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[{"id":"8a8e4bc8-7d8b-409d-b036-7182e6f29512","name":"Success - Email Verified","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"code\": \"123456\"\n}"},"url":"http://localhost:5000/api/auth/verify-email"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n  \"success\": true,\n  \"message\": \"Email verified successfully. Your account is now active.\",\n  \"data\": {\n    \"user\": {\n      \"_id\": \"67890abcdef1234567890abc\",\n      \"name\": \"John Doe\",\n      \"email\": \"john@example.com\",\n      \"isVerified\": true\n    },\n    \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n    \"refreshToken\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"\n  }\n}"}],"_postman_id":"c5bef808-863f-48af-bda9-fcc73505e8b5"},{"name":"Resend Verification","id":"12a45bcc-3220-46e1-adfc-a1adda4b01bf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"email\": \"john@example.com\"\n}"},"url":"http://localhost:5000/api/auth/resend-verification","description":"<p>Request a new verification code if the previous one expired.</p>\n<p><strong>Rate Limit:</strong> Applied (OTP Limiter)</p>\n","urlObject":{"path":["api","auth","resend-verification"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[{"id":"f37d2bab-c9ab-4128-88cb-b687d7730fad","name":"Resend Verification","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"email\": \"john@example.com\"\n}"},"url":"http://localhost:5000/api/auth/resend-verification"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Access-Control-Allow-Origin","value":"http://localhost:5173"},{"key":"Vary","value":"Origin"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"RateLimit-Policy","value":"3;w=300"},{"key":"RateLimit-Limit","value":"3"},{"key":"RateLimit-Remaining","value":"2"},{"key":"RateLimit-Reset","value":"300"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"51"},{"key":"ETag","value":"W/\"33-zBMiRdqpzwGFsThOyL+cpboP3ik\""},{"key":"Date","value":"Sat, 02 May 2026 12:38:49 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"message\": \"Verification code sent\"\n}"}],"_postman_id":"12a45bcc-3220-46e1-adfc-a1adda4b01bf"},{"name":"Forgot Password","id":"797232e7-002d-4c71-9e88-7ab024e90453","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"email\": \"john@example.com\"\n}"},"url":"http://localhost:5000/api/auth/forgot-password","description":"<p>Send password reset email with a reset link. The link expires in 1 hour.</p>\n<p><strong>Rate Limit:</strong> Applied (OTP Limiter)</p>\n","urlObject":{"path":["api","auth","forgot-password"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[{"id":"50a44c21-2e45-466d-b53c-6c59a007c898","name":"Forgot Password","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"email\": \"john@example.com\"\n}"},"url":"http://localhost:5000/api/auth/forgot-password"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Access-Control-Allow-Origin","value":"http://localhost:5173"},{"key":"Vary","value":"Origin"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"RateLimit-Policy","value":"3;w=300"},{"key":"RateLimit-Limit","value":"3"},{"key":"RateLimit-Remaining","value":"1"},{"key":"RateLimit-Reset","value":"287"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"77"},{"key":"ETag","value":"W/\"4d-EH/FrlGOX695LmppFmzlSsUsv00\""},{"key":"Date","value":"Sat, 02 May 2026 12:39:03 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"message\": \"If an account exists, a reset link has been sent\"\n}"}],"_postman_id":"797232e7-002d-4c71-9e88-7ab024e90453"},{"name":"Reset Password","id":"7358ab65-70c8-4c32-ae38-63b335e4d867","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"password\": \"NewSecurePass456!\"\n}"},"url":"http://localhost:5000/api/auth/reset-password/:token","description":"<p>Reset password using the token received in the reset email.</p>\n","urlObject":{"path":["api","auth","reset-password",":token"],"host":["http://localhost:5000"],"query":[],"variable":[{"id":"fce7f267-81c2-4a55-89b0-ef3a3bd4e321","type":"any","value":"reset-token-from-email","key":"token"}]}},"response":[],"_postman_id":"7358ab65-70c8-4c32-ae38-63b335e4d867"},{"name":"Google Auth","id":"d3a870fd-70e3-4df6-a216-00edb981ffd1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"token\": \"google-id-token-here\",\n  \"isAccessToken\": false\n}"},"url":"http://localhost:5000/api/auth/google","description":"<p>Authenticate using Google OAuth. Provide either ID token or access token.</p>\n<p><strong>Rate Limit:</strong> Applied</p>\n","urlObject":{"path":["api","auth","google"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[],"_postman_id":"d3a870fd-70e3-4df6-a216-00edb981ffd1"},{"name":"Apple Auth","id":"a7e9d420-49d0-4ff3-9929-a6e0e03f8b87","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"appleUserId\": \"apple-user-id-here\",\n  \"email\": \"john@example.com\",\n  \"name\": \"John Doe\"\n}"},"url":"http://localhost:5000/api/auth/apple","description":"<p>Authenticate using Apple Sign-In.</p>\n<p><strong>Rate Limit:</strong> Applied</p>\n","urlObject":{"path":["api","auth","apple"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[],"_postman_id":"a7e9d420-49d0-4ff3-9929-a6e0e03f8b87"},{"name":"Logout","id":"84c224d4-d96a-4b68-a1f6-1a31cb172d4b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"POST","header":[],"url":"http://localhost:5000/api/auth/logout","description":"<p>Logout the current user and clear the session cookie.</p>\n","urlObject":{"path":["api","auth","logout"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[{"id":"60f8e94c-20b8-422a-9c18-7fa45d803bce","name":"Logout","originalRequest":{"method":"POST","header":[],"url":"http://localhost:5000/api/auth/logout"},"status":"Unauthorized","code":401,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Access-Control-Allow-Origin","value":"http://localhost:5173"},{"key":"Vary","value":"Origin"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"RateLimit-Policy","value":"100;w=60"},{"key":"RateLimit-Limit","value":"100"},{"key":"RateLimit-Remaining","value":"98"},{"key":"RateLimit-Reset","value":"49"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"63"},{"key":"ETag","value":"W/\"3f-TeIfaERlGGGdR7v0qsUeYoXNDrQ\""},{"key":"Date","value":"Sat, 02 May 2026 12:40:25 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"message\": \"Not authorized, no token provided\"\n}"}],"_postman_id":"84c224d4-d96a-4b68-a1f6-1a31cb172d4b"},{"name":"Refresh Token","id":"4b7d2e9a-1426-4c2d-8cf8-a2543a9e1411","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"refreshToken\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"\n}"},"url":"http://localhost:5000/api/auth/refresh-token","description":"<p>Refresh an expired access token using a valid refresh token.</p>\n","urlObject":{"path":["api","auth","refresh-token"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[],"_postman_id":"4b7d2e9a-1426-4c2d-8cf8-a2543a9e1411"}],"id":"8f91c92e-595b-43bf-8800-ed9cabfd61c3","description":"<p>Authentication endpoints for user registration, login, email verification, and password management.</p>\n","_postman_id":"8f91c92e-595b-43bf-8800-ed9cabfd61c3"},{"name":"User","item":[{"name":"Get Profile","id":"d40d7976-9511-4332-9aec-ec31532944ed","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"GET","header":[],"url":"http://localhost:5000/api/user/me","description":"<p>Get the authenticated user's profile information.</p>\n","urlObject":{"path":["api","user","me"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[{"id":"c643409d-a984-44b2-9972-da9c77fb030d","name":"Get Profile","originalRequest":{"method":"GET","header":[],"url":"http://localhost:5000/api/user/me"},"status":"Unauthorized","code":401,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Access-Control-Allow-Origin","value":"http://localhost:5173"},{"key":"Vary","value":"Origin"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"63"},{"key":"ETag","value":"W/\"3f-TeIfaERlGGGdR7v0qsUeYoXNDrQ\""},{"key":"Date","value":"Sat, 02 May 2026 12:40:53 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"message\": \"Not authorized, no token provided\"\n}"},{"id":"aa912c57-1a3f-40d0-afbc-ece663591d44","name":"Get Profile","originalRequest":{"method":"GET","header":[],"url":"http://localhost:5000/api/user/me"},"status":"Unauthorized","code":401,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Access-Control-Allow-Origin","value":"http://localhost:5173"},{"key":"Vary","value":"Origin"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"63"},{"key":"ETag","value":"W/\"3f-TeIfaERlGGGdR7v0qsUeYoXNDrQ\""},{"key":"Date","value":"Sat, 02 May 2026 12:40:53 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"message\": \"Not authorized, no token provided\"\n}"}],"_postman_id":"d40d7976-9511-4332-9aec-ec31532944ed"},{"name":"Update Profile","id":"b997e76d-f9ed-4c2e-bab0-94428c0d77a5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"PUT","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"John Updated\",\n  \"phone\": \"+919876543211\",\n  \"businessName\": \"John's Mega Store\",\n  \"avatar\": \"https://example.com/avatar.jpg\"\n}"},"url":"http://localhost:5000/api/user/profile","description":"<p>Update user profile information. Only provided fields will be updated.</p>\n","urlObject":{"path":["api","user","profile"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[],"_postman_id":"b997e76d-f9ed-4c2e-bab0-94428c0d77a5"},{"name":"Update Password","id":"36936934-72b5-4055-b286-48889a5fb247","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"PUT","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"currentPassword\": \"SecurePass123!\",\n  \"newPassword\": \"NewSecurePass789!\"\n}"},"url":"http://localhost:5000/api/user/password","description":"<p>Change the user's password. Requires the current password for verification.</p>\n","urlObject":{"path":["api","user","password"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[{"id":"33cd806c-8099-4d15-8a8d-928beb8a315d","name":"Update Password","originalRequest":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"currentPassword\": \"SecurePass123!\",\n  \"newPassword\": \"NewSecurePass789!\"\n}"},"url":"http://localhost:5000/api/user/password"},"status":"Unauthorized","code":401,"_postman_previewlanguage":null,"header":[{"key":"X-Powered-By","value":"Express"},{"key":"Access-Control-Allow-Origin","value":"http://localhost:5173"},{"key":"Vary","value":"Origin"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"63"},{"key":"ETag","value":"W/\"3f-TeIfaERlGGGdR7v0qsUeYoXNDrQ\""},{"key":"Date","value":"Sat, 02 May 2026 12:41:27 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"message\": \"Not authorized, no token provided\"\n}"}],"_postman_id":"36936934-72b5-4055-b286-48889a5fb247"},{"name":"Delete Account","id":"3c92f216-7760-41d6-bf80-bb36008cf752","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"DELETE","header":[],"url":"http://localhost:5000/api/user/account","description":"<p>Deactivate the user account. This action clears the session cookie.</p>\n","urlObject":{"path":["api","user","account"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[],"_postman_id":"3c92f216-7760-41d6-bf80-bb36008cf752"}],"id":"ad5a8615-557b-4c3f-a587-cc30e028c9e6","description":"<p>User profile management endpoints. All routes require authentication.</p>\n","_postman_id":"ad5a8615-557b-4c3f-a587-cc30e028c9e6"},{"name":"Store","item":[{"name":"Create Store","id":"86f75e9b-595c-49d6-bf58-7b4432b9a9a9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"John's Grocery Store\",\n  \"category\": \"grocery\",\n  \"description\": \"Fresh groceries delivered to your doorstep\",\n  \"phone\": \"+919876543210\",\n  \"email\": \"contact@johnsgrocery.com\",\n  \"address\": \"123 Main Street, Mumbai\",\n  \"theme\": \"modern\"\n}"},"url":"http://localhost:5000/api/stores","description":"<p>Create a new store. A user can only have one store. Use update endpoint for modifications.</p>\n","urlObject":{"path":["api","stores"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[],"_postman_id":"86f75e9b-595c-49d6-bf58-7b4432b9a9a9"},{"name":"Get My Store","id":"3f4c3c05-dc39-4f87-b44d-9d6a92542baa","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"GET","header":[],"url":"http://localhost:5000/api/stores/my","description":"<p>Get the authenticated user's store details.</p>\n","urlObject":{"path":["api","stores","my"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[],"_postman_id":"3f4c3c05-dc39-4f87-b44d-9d6a92542baa"},{"name":"Update Store","id":"2c0ed979-a55c-47e0-bddf-8aad7759a4db","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"PUT","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"John's Mega Grocery\",\n  \"description\": \"Your one-stop shop for fresh groceries\",\n  \"phone\": \"+919876543211\",\n  \"theme\": \"classic\"\n}"},"url":"http://localhost:5000/api/stores","description":"<p>Update store details. Only provided fields will be updated.</p>\n<p><strong>Allowed Fields:</strong> name, logo, banner, category, description, phone, email, address, theme, settings, socialLinks, metadata</p>\n","urlObject":{"path":["api","stores"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[],"_postman_id":"2c0ed979-a55c-47e0-bddf-8aad7759a4db"},{"name":"Publish Store","id":"587ac073-d868-419d-ac2a-409a5a668160","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"POST","header":[],"url":"http://localhost:5000/api/stores/publish","description":"<p>Publish the store to make it publicly accessible.</p>\n","urlObject":{"path":["api","stores","publish"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[],"_postman_id":"587ac073-d868-419d-ac2a-409a5a668160"},{"name":"Unpublish Store","id":"46aa312d-d540-4526-92d2-373c754b6123","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"POST","header":[],"url":"http://localhost:5000/api/stores/unpublish","description":"<p>Unpublish the store to make it temporarily inaccessible to the public.</p>\n","urlObject":{"path":["api","stores","unpublish"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[],"_postman_id":"46aa312d-d540-4526-92d2-373c754b6123"},{"name":"Delete Store","id":"e9385054-27c4-4f03-baa2-5c4b3c7d7b22","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"DELETE","header":[],"url":"http://localhost:5000/api/stores","description":"<p>Delete the store and all associated products. This action cannot be undone.</p>\n","urlObject":{"path":["api","stores"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[],"_postman_id":"e9385054-27c4-4f03-baa2-5c4b3c7d7b22"},{"name":"Get Public Store","id":"21ed0110-f240-41f4-bdc1-274565269751","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:5000/api/stores/:slug","description":"<p>Get a published store's public details along with its products. Lookup by slug, subdomain, or ID.</p>\n<p><strong>No Authentication Required</strong></p>\n","urlObject":{"path":["api","stores",":slug"],"host":["http://localhost:5000"],"query":[],"variable":[{"id":"29ec84b2-77ad-4ae1-91bb-271fd1274734","type":"any","value":"johns-grocery-store","key":"slug"}]}},"response":[],"_postman_id":"21ed0110-f240-41f4-bdc1-274565269751"},{"name":"Get Stores by Category","id":"6da00b94-8b77-4afa-b912-f6d43cf494fe","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:5000/api/stores/category/:category","description":"<p>Get all published stores in a specific category, sorted by visitor count.</p>\n<p><strong>No Authentication Required</strong></p>\n","urlObject":{"path":["api","stores","category",":category"],"host":["http://localhost:5000"],"query":[],"variable":[{"id":"cec542aa-3919-4052-b10d-721b656f6090","type":"any","value":"grocery","key":"category"}]}},"response":[],"_postman_id":"6da00b94-8b77-4afa-b912-f6d43cf494fe"}],"id":"c47689f1-a977-427e-93de-c1ad176e4920","description":"<p>Store management endpoints. Create and manage your online store. Public endpoints available for viewing published stores.</p>\n","_postman_id":"c47689f1-a977-427e-93de-c1ad176e4920"},{"name":"Product","item":[{"name":"Create Product","id":"6f8f633c-6b2a-4b4f-acde-c234381b3103","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"name","value":"Fresh Apples","type":"text"},{"key":"description","value":"Organic fresh apples from Kashmir","type":"text"},{"key":"price","value":"120","type":"text"},{"key":"category","value":"fruits","type":"text"},{"key":"stock","value":"50","type":"text"},{"key":"images","type":"file","value":null}]},"url":"http://localhost:5000/api/products","description":"<p>Create a new product for your store. Supports image uploads (up to 5 images).</p>\n<p><strong>Content-Type:</strong> multipart/form-data</p>\n","urlObject":{"path":["api","products"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[],"_postman_id":"6f8f633c-6b2a-4b4f-acde-c234381b3103"},{"name":"Get My Products","id":"667a47e6-53ff-4fec-9430-fd04e4dcfe7a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"GET","header":[],"url":"http://localhost:5000/api/products?page=1&limit=20","description":"<p>Get all products for the authenticated user's store with pagination and filtering.</p>\n","urlObject":{"path":["api","products"],"host":["http://localhost:5000"],"query":[{"description":{"content":"<p>Page number</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Items per page</p>\n","type":"text/plain"},"key":"limit","value":"20"},{"disabled":true,"description":{"content":"<p>Filter by category</p>\n","type":"text/plain"},"key":"category","value":"fruits"},{"disabled":true,"description":{"content":"<p>Filter by status</p>\n","type":"text/plain"},"key":"status","value":"active"},{"disabled":true,"description":{"content":"<p>Full-text search</p>\n","type":"text/plain"},"key":"search","value":"apple"}],"variable":[]}},"response":[],"_postman_id":"667a47e6-53ff-4fec-9430-fd04e4dcfe7a"},{"name":"Get Product","id":"3360cbaa-cfd7-4916-86b7-74d4c843d36c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:5000/api/products/:id","description":"<p>Get a single product by ID. Increments the view count.</p>\n<p><strong>No Authentication Required</strong></p>\n","urlObject":{"path":["api","products",":id"],"host":["http://localhost:5000"],"query":[],"variable":[{"id":"4347b41b-33ef-4947-85e8-dc2123d66b1a","type":"any","value":"product-id-here","key":"id"}]}},"response":[],"_postman_id":"3360cbaa-cfd7-4916-86b7-74d4c843d36c"},{"name":"Update Product","id":"3ef705aa-1de4-446d-b473-aef3340777f7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"PUT","header":[],"body":{"mode":"formdata","formdata":[{"key":"name","value":"Premium Fresh Apples","type":"text"},{"key":"price","value":"150","type":"text"},{"key":"stock","value":"75","type":"text"},{"key":"images","type":"file","value":null,"disabled":true}]},"url":"http://localhost:5000/api/products/:id","description":"<p>Update a product. New images are appended to existing ones.</p>\n<p><strong>Content-Type:</strong> multipart/form-data</p>\n","urlObject":{"path":["api","products",":id"],"host":["http://localhost:5000"],"query":[],"variable":[{"id":"cd713f89-eb82-4b2f-9957-89b682761375","type":"any","value":"product-id-here","key":"id"}]}},"response":[],"_postman_id":"3ef705aa-1de4-446d-b473-aef3340777f7"},{"name":"Delete Product","id":"4e5da872-b528-4415-94b2-eb5aa26d3872","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"DELETE","header":[],"url":"http://localhost:5000/api/products/:id","description":"<p>Delete a product from the store.</p>\n","urlObject":{"path":["api","products",":id"],"host":["http://localhost:5000"],"query":[],"variable":[{"id":"8eb00f5f-fcf9-4f82-87d0-827c591a1175","type":"any","value":"product-id-here","key":"id"}]}},"response":[],"_postman_id":"4e5da872-b528-4415-94b2-eb5aa26d3872"},{"name":"Toggle Featured","id":"5de9a04f-2978-4d55-9fb9-13d0ae2336bd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"PATCH","header":[],"url":"http://localhost:5000/api/products/:id/featured","description":"<p>Toggle a product's featured status. Featured products appear first in listings.</p>\n","urlObject":{"path":["api","products",":id","featured"],"host":["http://localhost:5000"],"query":[],"variable":[{"id":"df399417-4103-4570-8c46-dc8822f368a3","type":"any","value":"product-id-here","key":"id"}]}},"response":[],"_postman_id":"5de9a04f-2978-4d55-9fb9-13d0ae2336bd"},{"name":"Bulk Update Products","id":"ed11c035-3508-4e54-852f-a5b637dea5f1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"ids\": [\"product-id-1\", \"product-id-2\", \"product-id-3\"],\n  \"action\": \"activate\"\n}"},"url":"http://localhost:5000/api/products/bulk","description":"<p>Perform bulk actions on multiple products.</p>\n<p><strong>Actions:</strong> activate, archive, delete</p>\n","urlObject":{"path":["api","products","bulk"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[],"_postman_id":"ed11c035-3508-4e54-852f-a5b637dea5f1"}],"id":"a76413dd-8f0f-4f69-bafb-a52812ccdd42","description":"<p>Product management endpoints. Add, update, and manage products for your store.</p>\n","_postman_id":"a76413dd-8f0f-4f69-bafb-a52812ccdd42"},{"name":"Order","item":[{"name":"Create Order","id":"c318adc5-5b28-42ad-a121-7327831890fd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"customer\": {\n    \"name\": \"Jane Smith\",\n    \"phone\": \"+919876543210\",\n    \"email\": \"jane@example.com\",\n    \"address\": \"456 Park Avenue, Mumbai\"\n  },\n  \"items\": [\n    {\n      \"product\": \"product-id-here\",\n      \"quantity\": 2\n    },\n    {\n      \"product\": \"product-id-here-2\",\n      \"quantity\": 1\n    }\n  ],\n  \"notes\": \"Please deliver before 5 PM\",\n  \"message\": \"Hello, I need fresh produce\",\n  \"inquiry\": false\n}"},"url":"http://localhost:5000/api/orders/store/:storeId","description":"<p>Create a new order or inquiry for a store. Authentication is optional.</p>\n<p><strong>Authentication:</strong> Optional</p>\n","urlObject":{"path":["api","orders","store",":storeId"],"host":["http://localhost:5000"],"query":[],"variable":[{"id":"095e4bd1-e16a-4cf6-a380-1c06b940a4ec","type":"any","value":"store-id-here","key":"storeId"}]}},"response":[],"_postman_id":"c318adc5-5b28-42ad-a121-7327831890fd"},{"name":"Get My Orders","id":"1291bc6d-4838-4e74-a086-685ae9242ee9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"GET","header":[],"url":"http://localhost:5000/api/orders?page=1&limit=20","description":"<p>Get all orders for the authenticated user's store with pagination and filtering.</p>\n","urlObject":{"path":["api","orders"],"host":["http://localhost:5000"],"query":[{"description":{"content":"<p>Page number</p>\n","type":"text/plain"},"key":"page","value":"1"},{"description":{"content":"<p>Items per page</p>\n","type":"text/plain"},"key":"limit","value":"20"},{"disabled":true,"description":{"content":"<p>Filter by status</p>\n","type":"text/plain"},"key":"status","value":"pending"}],"variable":[]}},"response":[],"_postman_id":"1291bc6d-4838-4e74-a086-685ae9242ee9"},{"name":"Update Order Status","id":"42543af6-1aac-4237-b87a-5e0a6d61bfe6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"PUT","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"status\": \"delivered\",\n  \"paymentStatus\": \"paid\"\n}"},"url":"http://localhost:5000/api/orders/:id","description":"<p>Update order status and payment status.</p>\n<p><strong>Status Values:</strong> pending, confirmed, shipped, delivered, cancelled\n<strong>Payment Status:</strong> pending, paid, failed, refunded</p>\n","urlObject":{"path":["api","orders",":id"],"host":["http://localhost:5000"],"query":[],"variable":[{"id":"86586dbf-e5e9-44d6-8322-8ebc2cf97993","type":"any","value":"order-id-here","key":"id"}]}},"response":[],"_postman_id":"42543af6-1aac-4237-b87a-5e0a6d61bfe6"},{"name":"Get Order Stats","id":"9b06dd4a-805f-4979-88a0-8be9b20735f9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"GET","header":[],"url":"http://localhost:5000/api/orders/stats","description":"<p>Get order statistics for the store including total, pending, completed, inquiries, and monthly orders.</p>\n","urlObject":{"path":["api","orders","stats"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[],"_postman_id":"9b06dd4a-805f-4979-88a0-8be9b20735f9"}],"id":"ef53d59d-0884-456a-95de-3379d1416586","description":"<p>Order management endpoints. Create and manage customer orders.</p>\n","_postman_id":"ef53d59d-0884-456a-95de-3379d1416586"}],"variable":[{"key":"base_url","value":"http://localhost:5000","type":"string"},{"key":"token","value":"","type":"string"}]}