{"info":{"_postman_id":"a3c8539f-0c9b-4a66-9435-bf4f64f75ba6","name":"Smart AI Jobber API","description":"<html><head></head><body><p>Smart AI Jobber is an AI recommendation system that helps users get the jobs they are qualified for without going through the stress and hassle of sifting through tons of irrelevant jobs.</p>\n<p>Users can get AI recommendations straight to their emails. It uses MySQL with Sequelize ORM, JWT authentication, account verification, password recovery, job cache and rate limiter.EndFragment</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"45030267","collectionId":"a3c8539f-0c9b-4a66-9435-bf4f64f75ba6","publishedId":"2sB3WpQ11D","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2025-10-31T15:20:26.000Z"},"item":[{"name":"User / Admin Auth","item":[{"name":"Register User","id":"24a5c7c5-16f0-4576-87f7-59e9b77c0572","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"name\": \"Smart\",\r\n  \"email\": \"ogbeuwa@gmail.com\",\r\n  \"password\": \"1234567\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/api/auth/register","description":"<p><strong>Endpoint:</strong> <code>POST /api/auth/register</code></p>\n<p>Registers a new user by accepting their name, email, and password. On successful registration, an OTP (One-Time Password) is sent to the provided email address for verification.</p>\n<hr />\n<h3 id=\"request-body\">Request Body</h3>\n<ul>\n<li><p><strong>Content-Type:</strong> <code>application/json</code></p>\n</li>\n<li><p><strong>Fields:</strong></p>\n<ul>\n<li><p><code>name</code> (string, required): User's full name.</p>\n</li>\n<li><p><code>email</code> (string, required): User's email address. Must be unique.</p>\n</li>\n<li><p><code>password</code> (string, required): User's password (minimum requirements may apply).</p>\n</li>\n</ul>\n</li>\n</ul>\n<p><strong>Sample Request Body:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"name\": \"Smart\",\n  \"email\": \"ogbeuwa@gmail.com\",\n  \"password\": \"1234567\"\n}\n\n</code></pre>\n<hr />\n<h3 id=\"successful-response\">Successful Response</h3>\n<ul>\n<li><p><strong>Status:</strong> <code>201 Created</code></p>\n</li>\n<li><p><strong>Body:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">      { \"message\": \"OTP sent to your email\" }\n\n</code></pre>\n</li>\n</ul>\n<hr />\n<h3 id=\"error-responses\">Error Responses</h3>\n<ul>\n<li><p><strong>400 Bad Request:</strong></p>\n<ul>\n<li><p>Missing or invalid fields in the request body.</p>\n</li>\n<li><p>Example: <code>{ \"error\": \"Email is required\" }</code></p>\n</li>\n</ul>\n</li>\n<li><p><strong>409 Conflict:</strong></p>\n<ul>\n<li><p>Email already registered.</p>\n</li>\n<li><p>Example: <code>{ \"error\": \"Invalid credentials\" }</code></p>\n</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h3 id=\"usage-notes\">Usage Notes</h3>\n<ul>\n<li><p>The <code>baseURL</code> variable should be set in your environment to target the correct API server.</p>\n</li>\n<li><p>After registration, the user must complete the OTP verification flow to activate their account.</p>\n</li>\n<li><p>Ensure the email provided is accessible to receive the OTP.</p>\n</li>\n</ul>\n","urlObject":{"path":["api","auth","register"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"24a5c7c5-16f0-4576-87f7-59e9b77c0572"},{"name":"verifyOtp","id":"009cff31-272b-4db2-8f97-e5df2bdd6afa","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"email\": \"ogbeuwa@gmail.com\",\r\n    \"otp\": \"986675\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/api/auth/verify","description":"<h2 id=\"verify-user-account\">Verify User Account</h2>\n<p>This POST request is used to verify a user's account by validating the provided email address and one-time password (OTP). It is typically called after a user registers or requests account verification, and has received an OTP via email.</p>\n<h3 id=\"purpose\">Purpose</h3>\n<ul>\n<li>To confirm the user's identity and activate their account by verifying the OTP sent to their email address.</li>\n</ul>\n<h3 id=\"request-body-parameters\">Request Body Parameters</h3>\n<ul>\n<li><code>email</code> (string, required): The email address of the user to be verified. Example: <code>user@example.com</code></li>\n<li><code>otp</code> (string, required): The one-time password sent to the user's email. Example: <code>123456</code></li>\n</ul>\n<h4 id=\"example-request-body\">Example Request Body</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"email\": \"user@example.com\",\n  \"otp\": \"123456\"\n}\n</code></pre>\n<h3 id=\"expected-successful-response\">Expected Successful Response</h3>\n<ul>\n<li><strong>Status Code:</strong> 200 OK</li>\n<li><strong>Response Body:</strong><ul>\n<li>On successful verification, the response will be:<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Account verification was successful\n</code></pre></li>\n</ul>\n</li>\n</ul>\n<p>If the OTP is invalid or expired, an error response will be returned.</p>\n<hr />\n<p><strong>Endpoint:</strong> <code>POST /api/auth/verify</code></p>\n","urlObject":{"path":["api","auth","verify"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"009cff31-272b-4db2-8f97-e5df2bdd6afa"},{"name":"resend otp","id":"ed280ad4-575e-4260-beb7-d8f880fa2f2a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":"{\r\n  \"name\": \"Matthew\",\r\n  \"email\": \"ogbeuwa@gmail.com\",\r\n  \"password\": \"1234567\"\r\n}"},"url":"/api/auth/send-otp","description":"<p>Purpose: Resend a one-time password (OTP) to the user’s email for verification purposes (e.g., during signup or login verification).</p>\n<p>Method: GET</p>\n<p>URL: /api/auth/send-otp</p>\n<p>Required Params/Body:</p>\n<ul>\n<li>Path params: none</li>\n<li>Query params: none</li>\n</ul>\n<p>Example Success Response:</p>\n<ul>\n<li>Status: 201 Created</li>\n<li>Body:\n{\n  \"message\": \"OTP sent to your email\"\n}</li>\n</ul>\n<p>Usage Notes:</p>\n<ul>\n<li>Ensure the baseURL variable is set in your active environment.</li>\n<li>This request is part of the \"User / Admin Auth\" folder in the \"Smart AI Jobber API\" collection.</li>\n<li>If you intend to resend the OTP to a specific user, ensure the email value is correct and corresponds to an existing user/session state on the server.</li>\n</ul>\n","urlObject":{"path":["api","auth","send-otp"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"ed280ad4-575e-4260-beb7-d8f880fa2f2a"},{"name":"forgot password","id":"1705477e-c5ab-40e7-99cd-e7e977b12288","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"email\": \"ogbeuwa@gmail.com\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/api/auth/forgot","description":"<p>Initiates the password reset process by submitting the user’s email address. When a valid, registered email is provided, the server sends a password reset email to that address.</p>\n<p>HTTP</p>\n<ul>\n<li>Method: POST</li>\n<li>URL: /api/auth/forgot</li>\n</ul>\n<p>Request body</p>\n<ul>\n<li>Content-Type: application/json</li>\n<li>Schema: { \"email\": \"string\" }</li>\n<li>Example:\n{\n  \"email\": \"<a href=\"mailto:user@example.com\">user@example.com</a>\"\n}</li>\n</ul>\n<p>Successful response</p>\n<ul>\n<li>Status: 200 OK</li>\n<li>Typical body:\n{\n  \"message\": \"Password reset email has been sent to your email address.\"\n}</li>\n</ul>\n<p>Notes</p>\n<ul>\n<li>Ensure  is set in your environment.</li>\n</ul>\n","urlObject":{"path":["api","auth","forgot"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"1705477e-c5ab-40e7-99cd-e7e977b12288"},{"name":"reset password","id":"fafab65c-4716-4a22-b0ed-22532927e70c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n   \"email\": \"ogbeuwa@gmail.com\",\r\n   \"newPassword\": \"7654321\",\r\n   \"otp\": \"545701\" \r\n}","options":{"raw":{"language":"json"}}},"url":"/api/auth/reset","description":"<h2 id=\"password-reset-post\">Password Reset (POST)</h2>\n<p>This endpoint allows a user to reset their account password using a one-time password (OTP) sent to their email address. It is typically used after the user initiates a 'forgot password' flow and receives an OTP.</p>\n<h3 id=\"request-url\">Request URL</h3>\n<p><code>POST /api/auth/reset</code></p>\n<h3 id=\"request-body-parameters\">Request Body Parameters</h3>\n<p>Send a JSON object in the request body with the following fields:</p>\n<ul>\n<li><code>email</code> (string, required): The email address associated with the user's account.</li>\n<li><code>newPassword</code> (string, required): The new password the user wishes to set.</li>\n<li><code>otp</code> (string, required): The one-time password sent to the user's email for verification.</li>\n</ul>\n<p><strong>Example Request Body:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"email\": \"user@example.com\",\n  \"newPassword\": \"yourNewPassword123\",\n  \"otp\": \"123456\"\n}\n</code></pre>\n<h3 id=\"successful-response\">Successful Response</h3>\n<ul>\n<li><strong>Status Code:</strong> <code>201 Created</code></li>\n<li><strong>Response Body:</strong><pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"Password reset was successful.\"\n}\n</code></pre>\n</li>\n</ul>\n<h3 id=\"notes\">Notes</h3>\n<ul>\n<li>Ensure the OTP is valid and has not expired.</li>\n<li>If the OTP or email is invalid, an error response will be returned.</li>\n</ul>\n","urlObject":{"path":["api","auth","reset"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"fafab65c-4716-4a22-b0ed-22532927e70c"},{"name":"login","id":"ddd37126-4c94-4615-b5e1-379519c07ad1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"email\": \"easydatabundle@gmail.com\",\r\n  \"password\": \"1234567\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/api/auth/login","description":"<p>Summary: Authenticate a user and return an access token and message.</p>\n<p>Purpose: Use this endpoint to log users into the system using email and password credentials. Successful authentication returns a JSON response with a success message and (optionally) an access token to be used in subsequent authenticated requests.</p>\n<p>Request URL and method: POST /api/auth/login</p>\n<p>Path/Variable: baseURL - Base URL of the API environment (use the Beta or Production environment).</p>\n<p>Headers:</p>\n<ul>\n<li>Content-Type: application/json</li>\n<li>Accept: application/json</li>\n</ul>\n<p>Request body schema:\n{\"type\":\"object\",\"properties\":{\"email\":{\"type\":\"string\"},\"password\":{\"type\":\"string\"}},\"required\":[\"email\",\"password\"]}</p>\n<p>Example request body:\n{\"email\":\"<a href=\"mailto:user@example.com\">user@example.com</a>\",\"password\":\"yourPassword123\"}</p>\n<p>Expected responses:</p>\n<ul>\n<li>200 OK\nExample: {\"message\":\"Login successful\"}</li>\n</ul>\n<p>Notes:</p>\n<ul>\n<li>Ensure Content-Type is application/json.</li>\n</ul>\n","urlObject":{"path":["api","auth","login"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"ddd37126-4c94-4615-b5e1-379519c07ad1"},{"name":"change password logged in users","id":"7a9be73a-c61b-4e11-83f8-5770baea57f8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n   \"oldPassword\": \"7654321\",\r\n   \"newPassword\": \"0987654321\" \r\n}","options":{"raw":{"language":"json"}}},"url":"/api/auth/change-password","description":"<p>Purpose\nChange the password for the currently authenticated user.</p>\n<p>HTTP</p>\n<ul>\n<li>Method: POST</li>\n<li>URL: /api/auth/change-password</li>\n<li>Auth: Typically requires token. Ensure the user is logged in.</li>\n</ul>\n<p>Request Body (JSON)\n{\n  \"oldPassword\": \"string\",   // The user’s current password (required)\n  \"newPassword\": \"string\"    // The desired new password (required)\n}</p>\n<p>Validation and Notes</p>\n<ul>\n<li>Both fields are required.</li>\n<li>newPassword should meet your server-side password policy (length/complexity/history/reuse rules).</li>\n<li>On failure (e.g., wrong old password, policy violation), the API may return a 4xx response with an error message.</li>\n</ul>\n<p>Successful Response</p>\n<ul>\n<li>Status: 201 Created</li>\n<li>Body:\n{\n\"message\": \"Password change was successful.\"\n}</li>\n</ul>\n<p>Example\nRequest body:\n{\n  \"oldPassword\": \"7654321\",\n  \"newPassword\": \"0987654321\"\n}</p>\n<p>Expected 201 response:\n{\n  \"message\": \"Password change was successful.\"\n}</p>\n","urlObject":{"path":["api","auth","change-password"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"7a9be73a-c61b-4e11-83f8-5770baea57f8"},{"name":"logout","id":"5405f501-3b49-4645-b254-9be999c7289d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":"{\r\n   \"email\": \"ogbeuwa@gmail.com\",\r\n   \"newPassword\": \"7654321\",\r\n   \"otp\": \"545701\" \r\n}"},"url":"/api/auth/logout","description":"<p><strong>Logout Endpoint</strong></p>\n<p>This endpoint logs out a user from the application and is typically used to terminate the user's session securely.</p>\n<p><strong>Request</strong></p>\n<ul>\n<li><strong>Method:</strong> GET</li>\n<li><strong>URL:</strong> <code>/api/auth/logout</code></li>\n</ul>\n<p><strong>Successful Response</strong></p>\n<ul>\n<li><strong>Status Code:</strong> 200 OK</li>\n<li><strong>Response Body:</strong><ul>\n<li><code>message</code> (string): Confirmation message indicating successful logout.</li>\n</ul>\n</li>\n</ul>\n<p><strong>Example Response:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"Log out successful.\"\n}\n</code></pre>\n<p><strong>Notes:</strong></p>\n<ul>\n<li>This endpoint may be used as part of a password reset or security flow.</li>\n</ul>\n","urlObject":{"path":["api","auth","logout"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"5405f501-3b49-4645-b254-9be999c7289d"},{"name":"register admin","id":"b04643d7-d469-48e8-ac33-8fab12b52118","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"name\": \"Matthew\",\r\n  \"email\": \"easydatabundle@gmail.com\",\r\n  \"password\": \"1234567\",\r\n  \"role\": \"admin\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/api/auth/register","description":"<p>Purpose\nRegister a new admin user in the system. This endpoint creates a user record and sends an OTP to the provided email address for verification. Use this endpoint during initial admin onboarding or when adding additional admin accounts.</p>\n<p>Method and URL\nPOST /api/auth/register</p>\n<p>Required headers</p>\n<ul>\n<li>Content-Type: application/json (required)</li>\n<li>Accept: application/json (optional)</li>\n</ul>\n<p>URL variables</p>\n<ul>\n<li>baseURL: Base URL of the API (set via environment). Example: <a href=\"https://api.example.com\">https://api.example.com</a></li>\n</ul>\n<p>Request body (JSON)\nExample\n{\n  \"name\": \"Matthew\",\n  \"email\": \"<a href=\"mailto:easydatabundle@gmail.com\">easydatabundle@gmail.com</a>\",\n  \"password\": \"strongP@ssw0rd\",\n  \"role\": \"admin\"\n}</p>\n<p>JSON schema\n{\n  \"type\": \"object\",\n  \"required\": [\"name\", \"email\", \"password\", \"role\"],\n  \"properties\": {\n    \"name\": { \"type\": \"string\", \"description\": \"Full name of the admin user\", \"example\": \"Matthew\" },\n    \"email\": { \"type\": \"string\", \"format\": \"email\", \"description\": \"Admin's email address where OTP will be sent\", \"example\": \"<a href=\"mailto:easydatabundle@gmail.com\">easydatabundle@gmail.com</a>\" },\n    \"password\": { \"type\": \"string\", \"description\": \"Password for the account (min length 6)\", \"example\": \"strongP@ssw0rd\" },\n    \"role\": { \"type\": \"string\", \"enum\": [\"admin\", \"user\"], \"description\": \"Role assigned to the account (must be 'admin' for this endpoint)\", \"example\": \"admin\" }\n  }\n}</p>\n<p>Successful response\nStatus: 201\nBody\n{\n  \"message\": \"OTP sent to your email\"\n}</p>\n<p>Error responses</p>\n<ul>\n<li><p>400 Validation error - missing or invalid fields</p>\n<p>}</p>\n</li>\n</ul>\n","urlObject":{"path":["api","auth","register"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"f028916c-0073-4a20-91b9-c1143a35efcb","name":"Successful registration","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"{\"name\":\"Matthew\",\"email\":\"easydatabundle@gmail.com\",\"password\":\"1234567\",\"role\":\"admin\"}"},"url":"/api/auth/register"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","enabled":true},{"key":"Accept","value":"application/json","description":"","enabled":true}],"cookie":[],"responseTime":null,"body":"{\"message\":\"OTP sent to your email\"}"}],"_postman_id":"b04643d7-d469-48e8-ac33-8fab12b52118"}],"id":"f7ed0983-3a33-43e0-a10c-b85ed3d6a3a3","_postman_id":"f7ed0983-3a33-43e0-a10c-b85ed3d6a3a3","description":""},{"name":"User Profile","item":[{"name":"create profile","id":"e6e375b8-3f36-4493-84b2-05ada6a986c3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"skills","value":"[\"python\", \"React\", \"Expressjs\", \"sql\", \"web3\"]","type":"text","uuid":"b7cd6b93-bdeb-4f41-a271-458a8b447749"},{"key":"isRemotePreferred","value":"true","type":"text","uuid":"054a3ddd-665d-43d9-99de-576212b6e184"},{"key":"job_titles","value":"Junior Web Developer","type":"text","uuid":"91054aa7-8515-4a23-b467-55ae67e32715"},{"key":"preferred_location","value":"Abuja","type":"text","uuid":"78b37920-b700-44fb-8207-c723a6c824d1"},{"key":"country","value":"Nigeria","type":"text","uuid":"f4a5264a-61b3-4396-8a08-f03850f62990"},{"key":"resume","type":"file","uuid":"cfac197b-9cea-4a81-aee4-b794cf083355","src":"/C:/Users/USER/Downloads/roles (2).pdf"},{"key":"profileImage","type":"file","uuid":"2648f933-3fe3-4f01-bc2c-0ad444b18f8e","src":"/C:/Users/USER/Downloads/WhatsApp Image 2025-10-24 at 10.04.27 PM.jpeg"}]},"url":"/api/profile/create","description":"<p><strong>Purpose:</strong>\nCreates a new user profile in the system.</p>\n<p><strong>HTTP Method &amp; URL:</strong></p>\n<ul>\n<li><code>POST /api/profile/create</code></li>\n<li><code></code> is a variable for the API base URL.</li>\n</ul>\n<p><strong>Required Headers:</strong></p>\n<ul>\n<li><code>Content-Type: multipart/form-data</code></li>\n<li>`Authorization: \"token\" saved in cookies</li>\n</ul>\n<p><strong>Body Parameters (form-data):</strong></p>\n<ul>\n<li><code>skills</code> (array of strings): List of skills. Example: <code>[\"python\", \"React\", \"Expressjs\", \"sql\", \"web3\"]</code></li>\n<li><code>isRemotePreferred</code> (boolean): Whether remote work is preferred. Example: <code>true</code></li>\n<li><code>job_titles</code> (string): Desired job title(s). Example: <code>Junior Web Developer</code></li>\n<li><code>preferred_location</code> (string): Preferred job location. Example: <code>Abuja</code></li>\n<li><code>country</code> (string): Country of residence. Example: <code>Nigeria</code></li>\n<li><code>resume</code> (doc file): Add resume file. Example: <code>resume.pdf</code></li>\n<li><code>profileImage</code> (image file): Add profile image. Example: <code>image.png</code></li>\n</ul>\n<p><strong>Expected Successful Response:</strong></p>\n<ul>\n<li><strong>Status:</strong> <code>201 Created</code></li>\n<li><strong>Body Example:</strong></li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"title\": \"Profile Created\",\n  \"profile\": {\n    \"id\": \"&lt;uuid&gt;\",\n    \"skills\": \"[\\\"python\\\", \\\"React\\\", ...]\",\n    \"isRemotePreferred\": true,\n    \"job_titles\": \"Junior Web Developer\",\n    \"preferred_location\": \"Abuja\",\n    \"country\": \"Nigeria\",\n    \"resumeUrl\": \"http://localhost:3000/uploads/resume-...\",\n    \"profileImageUrl\": \"http://localhost:3000/uploads/profileIma...\",\n    \"userId\": 4,\n    \"updatedAt\": \"2025-10-31T12:23:56.239Z\",\n    \"createdAt\": \"2025-10-31T12:23:56.239Z\"\n  },\n  \"message\": \"Profile created successfully!\"\n}\n</code></pre>\n<p><strong>Common Errors:</strong></p>\n<ul>\n<li><code>400 Bad Request</code>: Missing or invalid fields in the request body.</li>\n<li><code>401 Unauthorized</code>: Missing or invalid token.</li>\n<li><code>500 Internal Server Error</code>: Server encountered an unexpected condition.</li>\n</ul>\n","urlObject":{"path":["api","profile","create"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"e6e375b8-3f36-4493-84b2-05ada6a986c3"},{"name":"get profile","id":"5105edd9-1492-4ace-a8eb-87f072e42e8d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"formdata","formdata":[{"key":"skills","value":"[\"python\", \"React\", \"Expressjs\", \"sql\", \"web3\"]","type":"text","uuid":"b7cd6b93-bdeb-4f41-a271-458a8b447749"},{"key":"isRemotePreferred","value":"true","type":"text","uuid":"054a3ddd-665d-43d9-99de-576212b6e184"},{"key":"job_titles","value":"Junior Web Developer","type":"text","uuid":"91054aa7-8515-4a23-b467-55ae67e32715"},{"key":"preferred_location","value":"Abuja","type":"text","uuid":"78b37920-b700-44fb-8207-c723a6c824d1"},{"key":"country","value":"Nigeria","type":"text","uuid":"f4a5264a-61b3-4396-8a08-f03850f62990"},{"key":"resume","type":"file","uuid":"cfac197b-9cea-4a81-aee4-b794cf083355","src":"/C:/Users/USER/Downloads/roles (2).pdf"},{"key":"profileImage","type":"file","uuid":"2648f933-3fe3-4f01-bc2c-0ad444b18f8e","src":"/C:/Users/USER/Downloads/WhatsApp Image 2025-10-24 at 10.04.27 PM.jpeg"}]},"url":"/api/profile/","description":"<h3 id=\"get-user-profile\">Get User Profile</h3>\n<p>This request retrieves the authenticated user's profile information from the API.</p>\n<p><strong>Endpoint:</strong> <code>GET /api/profile/</code></p>\n<h4 id=\"purpose\">Purpose</h4>\n<p>Use this endpoint to fetch the current user's profile details, including personal information, skills, job preferences, and associated resources such as resume and profile image URLs.</p>\n<h4 id=\"typical-response-structure\">Typical Response Structure</h4>\n<p>A successful response (<code>200 OK</code>) returns a JSON object with the following structure:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"title\": \"Your Profile\",\n  \"userProfile\": {\n    \"id\": 4,\n    \"name\": \"Smart\",\n    \"email\": \"ogbeuwa@gmail.com\",\n    \"role\": \"user\",\n    \"verified\": true,\n    \"createdAt\": \"2025-10-31T12:12:59.000Z\",\n    \"updatedAt\": \"2025-10-31T12:14:25.000Z\",\n    \"Profile\": {\n      \"id\": \"c406da8d-53fc-457e-9251-1b0fb3d7e6b8\",\n      \"skills\": \"[\\\"python\\\", \\\"React\\\", ...]\",\n      \"isRemotePreferred\": true,\n      \"job_titles\": \"Junior Web Developer\",\n      \"preferred_location\": \"Abuja\",\n      \"country\": \"Nigeria\",\n      \"resumeUrl\": \"http://localhost:3000/uploads/resume-...\",\n      \"profileImageUrl\": \"http://localhost:3000/uploads/profileIma...\",\n      \"createdAt\": \"2025-10-31T12:23:56.000Z\",\n      \"updatedAt\": \"2025-10-31T12:29:14.000Z\",\n      \"userId\": 4\n    }\n  }\n}\n</code></pre>\n<h5 id=\"key-fields\">Key Fields</h5>\n<ul>\n<li><strong>id, name, email, role, verified</strong>: Basic user info.</li>\n<li><strong>Profile</strong>: Nested object with skills, job preferences, resume/profile image URLs, and timestamps.</li>\n</ul>\n<h4 id=\"usage-notes\">Usage Notes</h4>\n<ul>\n<li>Ensure authentication is set up as required by the API.</li>\n<li>The response provides all profile details for the currently authenticated user.</li>\n</ul>\n","urlObject":{"path":["api","profile",""],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"5105edd9-1492-4ace-a8eb-87f072e42e8d"},{"name":"update profile","id":"c380d2c4-aa66-4c15-a591-15a3e4a74012","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"skills","value":"[\"python\", \"React\", \"Expressjs\", \"sql\", \"web3\"]","type":"text","uuid":"b7cd6b93-bdeb-4f41-a271-458a8b447749"},{"key":"isRemotePreferred","value":"true","type":"text","uuid":"054a3ddd-665d-43d9-99de-576212b6e184"},{"key":"job_titles","value":"Junior Web Developer","type":"text","uuid":"91054aa7-8515-4a23-b467-55ae67e32715"},{"key":"preferred_location","value":"Ottawa","type":"text","uuid":"78b37920-b700-44fb-8207-c723a6c824d1"},{"key":"country","value":"Canada","type":"text","uuid":"f4a5264a-61b3-4396-8a08-f03850f62990"},{"key":"resume","type":"file","uuid":"cfac197b-9cea-4a81-aee4-b794cf083355","src":"/C:/Users/USER/Downloads/roles (1).pdf"},{"key":"profileImage","type":"file","uuid":"2648f933-3fe3-4f01-bc2c-0ad444b18f8e","src":"/C:/Users/USER/Downloads/WhatsApp Image 2025-10-24 at 10.04.27 PM.jpeg"}]},"url":"/api/profile/update","description":"<p><strong>Purpose:</strong>\nThis POST request updates the profile information of an existing user.</p>\n<p><strong>Endpoint:</strong>\n<code>POST /api/profile/update</code></p>\n<p><strong>Body Parameters (multipart/form-data):</strong></p>\n<ul>\n<li><code>skills</code> (array of strings): List of the user's skills. Example: <code>[\"python\", \"React\", \"Expressjs\", \"sql\", \"web3\"]</code></li>\n<li><code>isRemotePreferred</code> (boolean): Indicates if the user prefers remote work. Example: <code>true</code></li>\n<li><code>job_titles</code> (string): The user's job title(s). Example: <code>Junior Web Developer</code></li>\n<li><code>preferred_location</code> (string): The user's preferred work location. Example: <code>Ottawa</code></li>\n<li><code>country</code> (string): The user's country. Example: <code>Canada</code></li>\n<li><code>resume</code> (doc file): Add resume file. Example: <code>resume.pdf</code></li>\n<li><code>profileImage</code> (image file): Add profile image. Example: <code>image/png</code></li>\n</ul>\n<p><strong>Successful Response (200 OK):</strong>\nReturns a JSON object containing:</p>\n<ul>\n<li><code>title</code>: Confirmation title (e.g., \"Profile Updated\").</li>\n<li><code>message</code>: Success message (e.g., \"Profile updated successfully!\").</li>\n<li><code>profile</code>: The updated profile object, including fields such as <code>id</code>, <code>skills</code>, <code>isRemotePreferred</code>, <code>job_titles</code>, <code>preferred_location</code>, <code>country</code>, <code>resumeUrl</code>, <code>profileImageUrl</code>, <code>createdAt</code>, <code>updatedAt</code>, and <code>userId</code>.</li>\n</ul>\n<p><strong>Example Response:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"title\": \"Profile Updated\",\n  \"message\": \"Profile updated successfully!\",\n  \"profile\": {\n    \"id\": \"bc87efbc-9796-46a8-b657-aded08e22d4a\",\n    \"skills\": \"[\\\"python\\\", \\\"React\\\", \\\"Expressjs\\\", \\\"sql\\\", ...]\",\n    \"isRemotePreferred\": true,\n    \"job_titles\": \"Junior Web Developer\",\n    \"preferred_location\": \"Ottawa\",\n    \"country\": \"Canada\",\n    \"resumeUrl\": \"http://localhost:3000/uploads/resume-...\",\n    \"profileImageUrl\": \"http://localhost:3000/uploads/profileIma...\",\n    \"createdAt\": \"2025-10-31T11:54:36.000Z\",\n    \"updatedAt\": \"2025-10-31T12:09:01.693Z\",\n    \"userId\": 1\n  }\n}\n</code></pre>\n","urlObject":{"path":["api","profile","update"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"c380d2c4-aa66-4c15-a591-15a3e4a74012"},{"name":"delete profile","id":"c5128942-fc24-4349-8a94-d342023f73f4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"body":{"mode":"formdata","formdata":[{"key":"skills","value":"[\"python\", \"React\", \"Expressjs\", \"sql\", \"web3\"]","type":"text","uuid":"b7cd6b93-bdeb-4f41-a271-458a8b447749"},{"key":"isRemotePreferred","value":"true","type":"text","uuid":"054a3ddd-665d-43d9-99de-576212b6e184"},{"key":"job_titles","value":"Junior Web Developer","type":"text","uuid":"91054aa7-8515-4a23-b467-55ae67e32715"},{"key":"preferred_location","value":"Ottawa","type":"text","uuid":"78b37920-b700-44fb-8207-c723a6c824d1"},{"key":"country","value":"Canada","type":"text","uuid":"f4a5264a-61b3-4396-8a08-f03850f62990"},{"key":"resume","type":"file","uuid":"cfac197b-9cea-4a81-aee4-b794cf083355","src":"/C:/Users/USER/Downloads/roles (1).pdf"},{"key":"profileImage","type":"file","uuid":"2648f933-3fe3-4f01-bc2c-0ad444b18f8e","src":"/C:/Users/USER/Downloads/WhatsApp Image 2025-10-24 at 10.04.27 PM.jpeg"}]},"url":"/api/profile/delete","description":"<p>Purpose: Permanently delete the authenticated user's profile and associated profile data.</p>\n<p>Method &amp; URL: DELETE /api/profile/delete</p>\n<p>Authentication: Requires a valid \"token\" in the cookies.</p>\n<p>Expected Response:</p>\n<ul>\n<li>200 OK {\"sucess\": true, \"message\": \"Account deleted successfully\"}</li>\n</ul>\n","urlObject":{"path":["api","profile","delete"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"c5128942-fc24-4349-8a94-d342023f73f4"}],"id":"8cdb786f-62bb-4c70-9d10-52e59377a8cc","_postman_id":"8cdb786f-62bb-4c70-9d10-52e59377a8cc","description":""},{"name":"Single Uploads (Resume / Profile Image)","item":[{"name":"upload resume","id":"8ed00959-6582-4573-b5b3-31cbd0660ff4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"resume","type":"file","uuid":"b98cf956-41c6-443b-bfff-8bed3f0132e5","src":"/C:/Users/USER/Downloads/ticket-SMFest Osazuwa.pdf"}]},"url":"/api/uploads/resume","description":"<p><strong>Endpoint:</strong> <code>POST /api/uploads/resume</code></p>\n<p><strong>Purpose:</strong>\nThis endpoint allows users to upload a resume file to the server.</p>\n<p><strong>Request Body:</strong></p>\n<ul>\n<li>Content-Type: <code>multipart/form-data</code></li>\n<li>Form Data:<ul>\n<li><code>resume</code> (file, required): The resume file to be uploaded. Supported formats typically include PDF, DOC, or DOCX.</li>\n</ul>\n</li>\n</ul>\n<p><strong>Example Request:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>POST /api/uploads/resume\nContent-Type: multipart/form-data\n\nForm Data:\n  resume: &lt;file&gt;\n</code></pre><p><strong>Successful Response:</strong></p>\n<ul>\n<li>Status: <code>201 Created</code></li>\n<li>Content-Type: <code>application/json</code></li>\n<li>Body:<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"Resume uploaded successfully\",\n  \"resumeUrl\": \"http://localhost:3000/uploads/resume-&lt;unique-id&gt;\"\n}\n</code></pre>\n</li>\n</ul>\n<p><strong>Notes:</strong></p>\n<ul>\n<li>The <code>resumeUrl</code> in the response provides a direct link to the uploaded resume file.</li>\n<li>Ensure that the <code>resume</code> field is included in the form data and contains a valid file.</li>\n<li>Authentication is required</li>\n</ul>\n","urlObject":{"path":["api","uploads","resume"],"host":[""],"query":[{"disabled":true,"key":"","value":null}],"variable":[]}},"response":[],"_postman_id":"8ed00959-6582-4573-b5b3-31cbd0660ff4"},{"name":"upload pofile image","id":"207de17c-e189-4209-b674-eab1ef0154a2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"profileImage","type":"file","uuid":"af165a6b-a946-4599-9307-b9f5922daba3","src":"/C:/Users/USER/Downloads/score-card.png"}]},"url":"/api/uploads/profile-image","description":"<p><strong>Purpose:</strong>\nUploads a user's profile image to the server.</p>\n<p><strong>URL:</strong>\n<code>POST /api/uploads/profile-image</code></p>\n<p><strong>Method:</strong>\nPOST</p>\n<p><strong>Required Form-Data Fields:</strong></p>\n<ul>\n<li><code>profileImage</code> (file, required): The image file to upload as the user's profile picture.</li>\n</ul>\n<p><strong>Expected Responses:</strong></p>\n<ul>\n<li><strong>201 Created</strong><pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"ProfileImage uploaded successfully\",\n  \"profileImageUrl\": \"http://localhost:3000/uploads/profileImage.jpg\"\n}\n</code></pre>\n</li>\n</ul>\n<p><strong>Common Errors:</strong></p>\n<ul>\n<li><strong>400 Bad Request:</strong> Missing or invalid file</li>\n</ul>\n","urlObject":{"path":["api","uploads","profile-image"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"207de17c-e189-4209-b674-eab1ef0154a2"}],"id":"f0af2adc-bd7b-4f79-b539-513abeccc135","_postman_id":"f0af2adc-bd7b-4f79-b539-513abeccc135","description":""},{"name":"Job Recommendations","item":[{"name":"recommend jobs","id":"f559e0c3-ec48-4d22-95a1-52d6a14383f3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/api/recommend","description":"<p><strong>Purpose:</strong><br />This endpoint retrieves a list of recommended jobs tailored to the user's profile or preferences powered with AI.</p>\n<p><strong>Endpoint:</strong><br /><code>GET /api/recommend</code></p>\n<p><strong>Query Parameters:</strong></p>\n<ul>\n<li>No required or optional query parameters are explicitly documented. The endpoint uses the <code></code> variable, which should be set in your environment.</li>\n</ul>\n<p><strong>Authentication:</strong></p>\n<ul>\n<li>User must be logged in with JWT token in cookies \"token\"</li>\n</ul>\n<p><strong>Expected Response:</strong></p>\n<ul>\n<li><p>On success (<code>200 OK</code>), returns a JSON object with:</p>\n<ul>\n<li><p><code>success</code> (boolean): Indicates if the request was successful.</p>\n</li>\n<li><p><code>message</code> (string): Status or informational message.</p>\n</li>\n<li><p><code>jobs</code> (array): List of recommended jobs. Each job object contains:</p>\n<ul>\n<li><p><code>job_id</code> (string): Unique identifier for the job.</p>\n</li>\n<li><p><code>title</code> (string): Job title.</p>\n</li>\n<li><p><code>company</code> (string): Company name.</p>\n</li>\n<li><p><code>location</code> (string): Job location (may be empty).</p>\n</li>\n<li><p><code>link</code> (string): URL to the job posting.</p>\n</li>\n<li><p><code>match_score</code> (integer): Match score (0-100) indicating relevance.</p>\n</li>\n<li><p><code>reason</code> (string): Explanation for the recommendation.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<p><strong>Example Response:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"success\": true,\n  \"message\": \"Job recommendations fetched successfully.\",\n  \"jobs\": [\n    {\n      \"job_id\": \"Z6d7dVef7rD01lS5AAAAAA==\",\n      \"title\": \"Junior Backend Developer (Python)\",\n      \"company\": \"MasterBorn\",\n      \"location\": \"\",\n      \"link\": \"https://up2staff.com/backend-developer-python\",\n      \"match_score\": 90,\n      \"reason\": \"Excellent match for 'Junior Web Developer' skills.\"\n    }\n    // ...more jobs\n  ]\n}\n\n</code></pre>\n<p><strong>Example Use Case:</strong><br />A user wants to see AI job recommendations based on their uploaded profile. This endpoint returns a curated list of jobs with match scores and reasons for each recommendation.</p>\n","urlObject":{"path":["api","recommend"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"f559e0c3-ec48-4d22-95a1-52d6a14383f3"}],"id":"17ca70bc-4534-46d7-a2a7-35d2b8a254c3","_postman_id":"17ca70bc-4534-46d7-a2a7-35d2b8a254c3","description":""},{"name":"Admin Actions","item":[{"name":"get all users","id":"a5db3b74-fc32-4343-b3be-daeb94e7a8a8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"formdata","formdata":[{"key":"skills","value":"[\"python\", \"React\", \"Expressjs\", \"sql\", \"web3\"]","type":"text","uuid":"b7cd6b93-bdeb-4f41-a271-458a8b447749"},{"key":"isRemotePreferred","value":"true","type":"text","uuid":"054a3ddd-665d-43d9-99de-576212b6e184"},{"key":"job_titles","value":"Junior Web Developer","type":"text","uuid":"91054aa7-8515-4a23-b467-55ae67e32715"},{"key":"preferred_location","value":"Abuja","type":"text","uuid":"78b37920-b700-44fb-8207-c723a6c824d1"},{"key":"country","value":"Nigeria","type":"text","uuid":"f4a5264a-61b3-4396-8a08-f03850f62990"},{"key":"resume","type":"file","uuid":"cfac197b-9cea-4a81-aee4-b794cf083355","src":"/C:/Users/USER/Downloads/roles (2).pdf"},{"key":"profileImage","type":"file","uuid":"2648f933-3fe3-4f01-bc2c-0ad444b18f8e","src":"/C:/Users/USER/Downloads/WhatsApp Image 2025-10-24 at 10.04.27 PM.jpeg"}]},"url":"/admin/users","description":"<p>Purpose: Retrieve all user accounts for administrative review, including optional profile information.</p>\n<p>Endpoint: /admin/users\nMethod: GET</p>\n<p>Path params: None.\nQuery params: None (endpoint returns all users). If the API later supports filtering (e.g., ?role=admin&amp;verified=true), document them here.</p>\n<p>Authentication: Logged in admin account </p>\n<p>Successful response (200) summary:\n{\n  success: boolean,\n  message: string,\n  users: [\n    {\n      id: number,\n      name: string,\n      email: string,\n      role: \"user\" | \"admin\" | string,\n      verified: boolean,\n      createdAt: ISODateString,\n      updatedAt: ISODateString,\n      Profile: null | {\n        id: string,\n        skills: string | string[],\n        isRemotePreferred: boolean,\n        job_titles: string,\n        preferred_location: string,\n        country: string,\n        resumeUrl?: string,\n        profileImageUrl?: string,\n        createdAt: ISODateString,\n        updatedAt: ISODateString,\n        userId: number\n      }\n    }\n  ]\n}</p>\n<p>Common status codes:</p>\n<ul>\n<li>200 OK: Users retrieved successfully.</li>\n<li>401 Unauthorized: Missing/invalid token.</li>\n<li>403 Forbidden: Authenticated but not authorized (requires admin).</li>\n<li>500 Internal Server Error: Unexpected server error.</li>\n</ul>\n<p>Usage notes:</p>\n<ul>\n<li>No request body is needed for GET; remove or ignore body to avoid confusion.</li>\n<li>Use environment variable baseURL to target different stages (local, staging, prod).</li>\n</ul>\n","urlObject":{"path":["admin","users"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"a5db3b74-fc32-4343-b3be-daeb94e7a8a8"},{"name":"get single user","id":"c8c01796-e41e-478b-a6fa-ac3b36138bb5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"formdata","formdata":[{"key":"skills","value":"[\"python\", \"React\", \"Expressjs\", \"sql\", \"web3\"]","type":"text","uuid":"b7cd6b93-bdeb-4f41-a271-458a8b447749"},{"key":"isRemotePreferred","value":"true","type":"text","uuid":"054a3ddd-665d-43d9-99de-576212b6e184"},{"key":"job_titles","value":"Junior Web Developer","type":"text","uuid":"91054aa7-8515-4a23-b467-55ae67e32715"},{"key":"preferred_location","value":"Abuja","type":"text","uuid":"78b37920-b700-44fb-8207-c723a6c824d1"},{"key":"country","value":"Nigeria","type":"text","uuid":"f4a5264a-61b3-4396-8a08-f03850f62990"},{"key":"resume","type":"file","uuid":"cfac197b-9cea-4a81-aee4-b794cf083355","src":"/C:/Users/USER/Downloads/roles (2).pdf"},{"key":"profileImage","type":"file","uuid":"2648f933-3fe3-4f01-bc2c-0ad444b18f8e","src":"/C:/Users/USER/Downloads/WhatsApp Image 2025-10-24 at 10.04.27 PM.jpeg"}]},"url":"/admin/users/4","description":"<p><strong>Purpose:</strong>\nFetch details for a single user by their unique ID (admin access required).</p>\n<p><strong>Endpoint:</strong>\n<code>GET /admin/users/:id</code></p>\n<ul>\n<li><strong>Path Parameter:</strong> <code>id</code> (integer) — The unique identifier of the user to retrieve. In this request, the value is <code>4</code>.</li>\n<li><strong>Environment Variable:</strong> <code>baseURL</code> — The base URL for the API, set in your active environment.</li>\n</ul>\n<p><strong>Authentication:</strong>\nThis endpoint is restricted to admin users. Ensure you are authenticated as an admin</p>\n<p><strong>Expected 200 Response:</strong>\nReturns a JSON object with user details and a nested <code>Profile</code> object.</p>\n<p><strong>Response Shape:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"success\": true,\n  \"message\": \"User detail retrieved\",\n  \"user\": {\n    \"id\": 4,\n    \"name\": \"Smart\",\n    \"email\": \"ogbeuwa@gmail.com\",\n    \"role\": \"user\",\n    \"verified\": true,\n    \"createdAt\": \"2025-10-31T12:12:59.000Z\",\n    \"updatedAt\": \"2025-10-31T12:14:25.000Z\",\n    \"Profile\": {\n      \"id\": \"...\",\n      \"skills\": \"[\\\"python\\\", \\\"React\\\", ...]\",\n      \"isRemotePreferred\": true,\n      \"job_titles\": \"Junior Web Developer\",\n      \"preferred_location\": \"Abuja\",\n      \"country\": \"Nigeria\",\n      \"resumeUrl\": \"...\",\n      \"profileImageUrl\": \"...\",\n      \"createdAt\": \"...\",\n      \"updatedAt\": \"...\",\n      \"userId\": 4\n    }\n  }\n}\n</code></pre><p><strong>Example Response Fields:</strong></p>\n<ul>\n<li><code>user.id</code> — User's unique ID</li>\n<li><code>user.name</code> — Full name</li>\n<li><code>user.email</code> — Email address</li>\n<li><code>user.role</code> — User role (e.g., 'user', 'admin')</li>\n<li><code>user.verified</code> — Email verification status</li>\n<li><code>user.Profile.skills</code> — Array of skills (as JSON string)</li>\n<li><code>user.Profile.isRemotePreferred</code> — Remote work preference</li>\n<li><code>user.Profile.job_titles</code> — Job title(s)</li>\n<li><code>user.Profile.preferred_location</code> — Preferred location</li>\n<li><code>user.Profile.country</code> — Country</li>\n<li><code>user.Profile.resumeUrl</code> — Link to resume</li>\n<li><code>user.Profile.profileImageUrl</code> — Link to profile image</li>\n</ul>\n<p><strong>Notes:</strong></p>\n<ul>\n<li>Ensure the <code>baseURL</code> environment variable is set correctly.</li>\n<li>Only accessible to admin users.</li>\n</ul>\n","urlObject":{"path":["admin","users","4"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"c8c01796-e41e-478b-a6fa-ac3b36138bb5"},{"name":"get users statistics","id":"60163e5b-e8ca-41e0-ae18-2df3a7b5c632","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/admin/stats","description":"<p><strong>Purpose:</strong>\nRetrieves aggregated statistics about users and profiles in the Smart AI Jobber system. Useful for admin dashboards and analytics.</p>\n<p><strong>Request URL:</strong>\n<code>GET /admin/stats</code></p>\n<p><strong>Parameters:</strong></p>\n<ul>\n<li>This endpoint does not require any query or path parameters.</li>\n<li>Requires appropriate admin authentication.</li>\n</ul>\n<p><strong>Example Response:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"success\": true,\n  \"message\": \"Smart AI Jobber stats fetched successfully\",\n  \"stats\": {\n    \"success\": true,\n    \"message\": \"Users statistics retrieved successfully\",\n    \"stats\": {\n      \"users\": {\n        \"total\": 2,\n        \"verified\": 1,\n        \"unverified\": 1\n      },\n      \"profiles\": {\n        \"total\": 1,\n        \"withImage\": 1,\n        \"withoutImage\": 0,\n        \"withResume\": 1,\n        \"withoutResume\": 0\n      }\n    }\n  }\n}\n</code></pre>\n<p><strong>Expected Status Codes:</strong></p>\n<ul>\n<li><code>200 OK</code>: Statistics successfully retrieved.</li>\n<li><code>401 Unauthorized</code>: Authentication required or failed.</li>\n<li><code>403 Forbidden</code>: Insufficient permissions.</li>\n<li><code>500 Internal Server Error</code>: Unexpected server error.</li>\n</ul>\n","urlObject":{"path":["admin","stats"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"60163e5b-e8ca-41e0-ae18-2df3a7b5c632"},{"name":"delete user account","id":"4bd294f6-24a5-4877-98eb-7df2cd5d01ae","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"body":{"mode":"formdata","formdata":[{"key":"skills","value":"[\"python\", \"React\", \"Expressjs\", \"sql\", \"web3\"]","type":"text","uuid":"b7cd6b93-bdeb-4f41-a271-458a8b447749"},{"key":"isRemotePreferred","value":"true","type":"text","uuid":"054a3ddd-665d-43d9-99de-576212b6e184"},{"key":"job_titles","value":"Junior Web Developer","type":"text","uuid":"91054aa7-8515-4a23-b467-55ae67e32715"},{"key":"preferred_location","value":"Abuja","type":"text","uuid":"78b37920-b700-44fb-8207-c723a6c824d1"},{"key":"country","value":"Nigeria","type":"text","uuid":"f4a5264a-61b3-4396-8a08-f03850f62990"},{"key":"resume","type":"file","uuid":"cfac197b-9cea-4a81-aee4-b794cf083355","src":"/C:/Users/USER/Downloads/roles (2).pdf"},{"key":"profileImage","type":"file","uuid":"2648f933-3fe3-4f01-bc2c-0ad444b18f8e","src":"/C:/Users/USER/Downloads/WhatsApp Image 2025-10-24 at 10.04.27 PM.jpeg"}]},"url":"/admin/users/5","description":"<p><strong>Purpose:</strong>\nDeletes a user account by user ID.</p>\n<p><strong>HTTP Method &amp; URL:</strong>\n<code>DELETE /admin/users/:userId</code></p>\n<p><strong>Path Parameter:</strong></p>\n<ul>\n<li><code>userId</code> (string or integer): The unique identifier of the user to delete. Example: <code>5</code></li>\n</ul>\n<p><strong>Expected Success Response:</strong></p>\n<ul>\n<li>Status: <code>200 OK</code></li>\n<li>Body:</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"success\": true,\n  \"message\": \"User 5 deleted successfully\"\n}\n</code></pre>\n<p><strong>Common Error Responses:</strong></p>\n<ul>\n<li><code>401 Unauthorized</code>: Authentication required or invalid credentials.</li>\n<li><code>404 Not Found</code>: User does not exist.</li>\n<li><code>500 Internal Server Error</code>: Unexpected server error.</li>\n</ul>\n<p><strong>Usage Notes:</strong></p>\n<ul>\n<li>The <code>baseURL</code> is an environment variable and should be set in your active Postman environment.</li>\n<li>This endpoint is part of the 'Smart AI Jobber API' collection.</li>\n</ul>\n","urlObject":{"path":["admin","users","5"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"4bd294f6-24a5-4877-98eb-7df2cd5d01ae"}],"id":"7e2d7fa6-c39d-439b-af99-10f80307c7b2","_postman_id":"7e2d7fa6-c39d-439b-af99-10f80307c7b2","description":""}],"variable":[{"key":"baseURL","value":"","type":"default"}]}