{"info":{"_postman_id":"58399224-30b1-418a-8cb7-df2223198fb3","name":"planner","description":"<html><head></head><body><h1 id=\"planner-api-documentation\">Planner API Documentation</h1>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code> 1.0.0 \n\n</code></pre><pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>OAS 3.0\n\n</code></pre><h2 id=\"\"></h2>\n<p>Overview</p>\n<p>This API powers a planner application that allows users to create,<br>update, complete, and delete tasks with authentication.</p>\n<h2 id=\"servers\">Servers</h2>\n<p><a href=\"https://planner-backend-i13a.onrender.com/\">https://planner-backend-i13a.onrender.com/</a></p>\n<h2 id=\"authentication\">Authentication</h2>\n<p>This API uses JWT authentication.</p>\n<p>After logging in, include the token in the request header:</p>\n<p>Authorization: Bearer</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"Planner API Documentation","slug":"planner-api-documentation"}],"owner":"48023599","collectionId":"58399224-30b1-418a-8cb7-df2223198fb3","publishedId":"2sBXVhEX36","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-01-16T15:18:15.000Z"},"item":[{"name":"plans","item":[{"name":"Get Plans","id":"bf7af8f4-6123-4472-aedc-0ed2df9a569e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{jwt}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{URL}}api/v1/plans?page=1&limit=5","description":"<h2 id=\"get-all-plans\">Get All Plans</h2>\n<p>Retrieve a paginated list of all available plans in the system.</p>\n<hr />\n<h3 id=\"endpoint\">Endpoint</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>GET /api/v1/plans\n\n</code></pre><hr />\n<h3 id=\"description\">Description</h3>\n<p>Returns all plans stored in the database. Supports pagination and sorting.</p>\n<hr />\n<h3 id=\"http-method\">HTTP Method</h3>\n<p><code>GET</code></p>\n<hr />\n<h3 id=\"authentication\">Authentication</h3>\n<p><strong>Protected</strong> ✅</p>\n<p>Requires a valid access token.</p>\n<p>Include the authorization header:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: Bearer &lt;access_token&gt;\n\n</code></pre><hr />\n<h3 id=\"request-headers\">Request Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Content-Type</td>\n<td>String</td>\n<td>Yes</td>\n<td>application/json</td>\n</tr>\n<tr>\n<td>Authorization</td>\n<td>String</td>\n<td>Yes</td>\n<td>Bearer access token</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"query-parameters-optional\">Query Parameters (Optional)</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>page</td>\n<td>Number</td>\n<td>Page number for pagination</td>\n</tr>\n<tr>\n<td>limit</td>\n<td>Number</td>\n<td>Number of plans per page</td>\n</tr>\n<tr>\n<td>sort</td>\n<td>String</td>\n<td>Sort order: <code>asc</code> or <code>desc</code></td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"example-request\">Example Request</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>/api/v1/plans?page=1&amp;limit=5  'returns 5 plans per page'\n/api/v1/plans?sort=plan 'sort plan by ascending order'\n/api/v1/plans?sort=-plan 'sort plan by descending order'\n\n</code></pre><pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>200 OK\n\n</code></pre><p><strong>Response Body</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"results\": 2,\n  \"data\": {\n    \"docs\": [\n      {\n          \"_id\": \"6965ee96a69a94bf1c08729d\",\n          \"plan\": \"ppppppppppppppppp\",\n          \"user\": \"6962225f15d8e9bcb9d0fc9d\",\n      },\n      {\n          \"_id\": \"6965ee96a69a94bf1c08729d\",\n          \"plan\": \"ppppppppppppppppp\",\n          \"user\": \"6962225f15d8e9bcb9d0fc9d\",\n      }\n    ]\n  }\n}\n\n</code></pre><hr />\n<h3 id=\"error-responses\">Error Responses</h3>\n<h4 id=\"401--unauthorized\">401 – Unauthorized</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"You are not logged in\"\n}\n\n</code></pre><h4 id=\"500--server-error\">500 – Server Error</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"error\",\n  \"message\": \"Something went wrong\"\n}\n\n</code></pre><hr />\n","urlObject":{"path":["v1","plans"],"host":["{{URL}}api"],"query":[{"key":"page","value":"1"},{"key":"limit","value":"5"}],"variable":[]}},"response":[],"_postman_id":"bf7af8f4-6123-4472-aedc-0ed2df9a569e"},{"name":"Create a new plan","id":"b90ebdc1-80ea-47e2-b9ad-bc94d96e9abc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"plan\": \"study\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{URL}}api/v1/plans","description":"<h1 id=\"create-a-plan\">Create a Plan</h1>\n<p>Add a new plan to the list of all available plans in the system.</p>\n<hr />\n<h2 id=\"endpoint\">Endpoint</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>POST /api/v1/plans\n\n</code></pre><hr />\n<h2 id=\"description\">Description</h2>\n<p>Creates a new plan and stores it in the database.</p>\n<hr />\n<h2 id=\"http-method\">HTTP Method</h2>\n<p><code>POST</code></p>\n<hr />\n<h2 id=\"authentication\">Authentication</h2>\n<p><strong>Protected</strong> ✅</p>\n<p>Requires a valid access token.</p>\n<p>Include the authorization header:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: Bearer &lt;access_token&gt;\n\n</code></pre><hr />\n<h2 id=\"request-headers\">Request Headers</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Content-Type</td>\n<td>String</td>\n<td>Yes</td>\n<td>application/json</td>\n</tr>\n<tr>\n<td>Authorization</td>\n<td>String</td>\n<td>Yes</td>\n<td>Bearer access token</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h2 id=\"request-body\">Request Body</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"plan\": \"Basic\",\n}\n\n</code></pre><hr />\n<h2 id=\"successful-response\">Successful Response</h2>\n<h3 id=\"status-code\">Status Code</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>201 Created\n\n</code></pre><h3 id=\"response-body\">Response Body</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"data\": {\n    \"plan\": {\n      \"_id\": \"65af88b84342a592ac5e62a\",\n      \"plan\": \"Basic\",\n      \"createdAt\": \"2026-01-01T10:30:00.000Z\",\n       \"user\": \"696b959b3062f17504b5908a\",\n    }\n  }\n}\n\n</code></pre><hr />\n<h2 id=\"error-responses\">Error Responses</h2>\n<h3 id=\"401--unauthorized\">401 – Unauthorized</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"You are not logged in\"\n}\n\n</code></pre><hr />\n<h3 id=\"400--bad-request-validation-error\">400 – Bad Request (Validation Error)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"Plan is required\"\n}\n\n</code></pre><hr />\n<h3 id=\"500--server-error\">500 – Server Error</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"error\",\n  \"message\": \"Something went wrong\"\n}\n\n</code></pre><hr />\n","urlObject":{"path":["v1","plans"],"host":["{{URL}}api"],"query":[],"variable":[]}},"response":[],"_postman_id":"b90ebdc1-80ea-47e2-b9ad-bc94d96e9abc"},{"name":"Get plan","id":"35370453-0494-4237-8aa8-bca170ff590e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{URL}}api/v1/plans/695c4446b62913b6cec56ec3","description":"<h2 id=\"get-a-plan\">Get a Plan</h2>\n<p>Retrieve a single plan by its unique ID.</p>\n<hr />\n<h3 id=\"endpoint\">Endpoint</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>GET /api/v1/plans/:id\n\n</code></pre><hr />\n<h3 id=\"description\">Description</h3>\n<p>Returns a single plan stored in the database that matches the provided ID.</p>\n<hr />\n<h3 id=\"http-method\">HTTP Method</h3>\n<p><code>GET</code></p>\n<hr />\n<h3 id=\"authentication\">Authentication</h3>\n<p><strong>Protected</strong> ✅  </p>\n<p>Requires a valid access token.</p>\n<p>Include the authorization header:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: Bearer &lt;access_token&gt;\n\n</code></pre><hr />\n<h3 id=\"request-headers\">Request Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Content-Type</td>\n<td>String</td>\n<td>Yes</td>\n<td>application/json</td>\n</tr>\n<tr>\n<td>Authorization</td>\n<td>String</td>\n<td>Yes</td>\n<td>Bearer access token</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"path-parameters\">Path Parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>String</td>\n<td>Yes</td>\n<td>Unique ID of the plan</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"successful-response\">Successful Response</h3>\n<p><strong>Status Code</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>200 OK\n\n</code></pre><p><strong>Response Body</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"data\": {\n    \"plan\": {\n      \"_id\": \"65af88c94342a592ac5e62b\",\n      \"plan\": \"Pro\",\n      \"createdAt\": \"2026-01-01T10:32:00.000Z\"\n    }\n  }\n}\n\n</code></pre><blockquote>\n</blockquote>\n<p>ℹ️ <code>results</code> is intentionally omitted since this endpoint returns a single resource.</p>\n<hr />\n<h3 id=\"error-responses\">Error Responses</h3>\n<h4 id=\"401--unauthorized\">401 – Unauthorized</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"You are not logged in\"\n}\n\n</code></pre><h4 id=\"404--not-found\">404 – Not Found</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"No plan found with that ID\"\n}\n\n</code></pre><h4 id=\"500--server-error\">500 – Server Error</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"error\",\n  \"message\": \"Something went wrong\"\n}\n\n</code></pre>","urlObject":{"path":["v1","plans","695c4446b62913b6cec56ec3"],"host":["{{URL}}api"],"query":[],"variable":[]}},"response":[],"_postman_id":"35370453-0494-4237-8aa8-bca170ff590e"},{"name":"Update plan","id":"c40da61c-c901-477a-a49f-d51fca49cdd7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"completed\":true\r\n}","options":{"raw":{"language":"json"}}},"url":"{{URL}}api/v1/plans/694ecdb817c152d66efe141f","description":"<h2 id=\"update-a-plan\">Update a Plan</h2>\n<p>Update an existing plan in the system.</p>\n<hr />\n<h3 id=\"endpoint\">Endpoint</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>PATCH /api/v1/plans/:id\n\n</code></pre><hr />\n<h3 id=\"description\">Description</h3>\n<p>Updates one or more fields of a plan stored in the database.</p>\n<hr />\n<h3 id=\"http-method\">HTTP Method</h3>\n<p><code>PATCH</code></p>\n<hr />\n<h3 id=\"authentication\">Authentication</h3>\n<p><strong>Protected</strong> ✅</p>\n<p>Requires a valid access token.</p>\n<p>Include the authorization header:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: Bearer &lt;access_token&gt;\n\n</code></pre><hr />\n<h3 id=\"request-headers\">Request Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Content-Type</td>\n<td>String</td>\n<td>Yes</td>\n<td>application/json</td>\n</tr>\n<tr>\n<td>Authorization</td>\n<td>String</td>\n<td>Yes</td>\n<td>Bearer access token</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"path-parameters\">Path Parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>String</td>\n<td>Yes</td>\n<td>Unique ID of the plan</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"request-body-partial-update\">Request Body (Partial Update)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"plan\": \"Basic\"\n}\n\n</code></pre><blockquote>\n<p>&lt;p &gt;Only the fields provided will be updated.&lt;/p&gt; </p>\n</blockquote>\n<hr />\n<h3 id=\"successful-response\">Successful Response</h3>\n<p><strong>Status Code</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>200 OK\n\n</code></pre><p><strong>Response Body</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"data\": {\n    \"plan\": {\n      \"_id\": \"65af88b84342a592ac5e62a\",\n      \"plan\": \"Basic\",\n      \"updatedAt\": \"2026-01-05T14:20:00.000Z\"\n    }\n  }\n}\n\n</code></pre><hr />\n<h3 id=\"error-responses\">Error Responses</h3>\n<h4 id=\"401--unauthorized\">401 – Unauthorized</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"You are not logged in\"\n}\n\n</code></pre><h4 id=\"400--bad-request\">400 – Bad Request</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"Invalid update data\"\n}\n\n</code></pre><h4 id=\"404--not-found\">404 – Not Found</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"No plan found with that ID\"\n}\n\n</code></pre><h4 id=\"500--server-error\">500 – Server Error</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"error\",\n  \"message\": \"Something went wrong\"\n}\n\n</code></pre>","urlObject":{"path":["v1","plans","694ecdb817c152d66efe141f"],"host":["{{URL}}api"],"query":[],"variable":[]}},"response":[],"_postman_id":"c40da61c-c901-477a-a49f-d51fca49cdd7"},{"name":"Delete","id":"fb25993c-81bc-46a1-a2fc-cdbf83ce402f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{jwt}}"}]},"isInherited":false},"method":"DELETE","header":[],"url":"{{URL}}api/v1/plans/694fc0e8cfdd00c905cd3389","description":"<h1 id=\"delete-a-plan\">Delete a Plan</h1>\n<p>Delete a plan in the system.</p>\n<hr />\n<h2 id=\"endpoint\">Endpoint</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>DELETE /api/v1/plans/:id\n\n</code></pre><hr />\n<h2 id=\"description\">Description</h2>\n<p>This endpoint updates a plan stored in the database.</p>\n<hr />\n<h2 id=\"http-method\">HTTP Method</h2>\n<p><code>DELETE</code></p>\n<hr />\n<h2 id=\"authentication\">Authentication</h2>\n<ul>\n<li>Protected: ✅ Requires authentication token</li>\n</ul>\n<p>Include the authorization header:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: Bearer &lt;access_token&gt;\n\n</code></pre><hr />\n<h2 id=\"request-headers\">Request Headers</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Content-Type</td>\n<td>String</td>\n<td>Yes</td>\n<td>application/json</td>\n</tr>\n<tr>\n<td>Authorization</td>\n<td>String</td>\n<td>Optional</td>\n<td>Bearer token (if protected)</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h2 id=\"successful-response\">Successful Response</h2>\n<h3 id=\"status-code\">Status Code</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>200 OK\n\n</code></pre><h3 id=\"response-body\">Response Body</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"data\":null\n}\n\n</code></pre><hr />\n<h2 id=\"error-responses\">Error Responses</h2>\n<h3 id=\"500--server-error\">500 – Server Error</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"error\",\n  \"message\": \"Something went wrong\"\n}\n\n</code></pre><h3 id=\"401--unauthorized-if-protected\">401 – Unauthorized (if protected)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"You are not logged in\"\n}\n\n</code></pre>","urlObject":{"path":["v1","plans","694fc0e8cfdd00c905cd3389"],"host":["{{URL}}api"],"query":[],"variable":[]}},"response":[],"_postman_id":"fb25993c-81bc-46a1-a2fc-cdbf83ce402f"}],"id":"8df5831f-9efa-4d56-a5b5-ea46bc79216b","description":"<h1 id=\"plans\">Plans</h1>\n<p>This folder includes all api endpoint to access and manipulate all plans data.</p>\n","_postman_id":"8df5831f-9efa-4d56-a5b5-ea46bc79216b"},{"name":"users","item":[{"name":"Get all users","id":"0e1adb1a-394c-4446-a3f8-9f9da6bbce98","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":"{\r\n    \"fullName\":\"Arikpo Blessing\",\r\n    \"userName\":\"arikpo\",\r\n    \"email\":\"arikpo@gmail.com\",\r\n    \"password\":\"123456789\",\r\n    \"confirmPassword\":\"123456789\"\r\n}"},"url":"{{URL}}api/v1/users","description":"<h2 id=\"get-all-users\">Get All Users</h2>\n<p>Retrieve a paginated list of all users in the system.</p>\n<hr />\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><strong>GET</strong> <code>/api/v1/users</code></p>\n<hr />\n<h3 id=\"description\">Description</h3>\n<p>Returns all users stored in the database.</p>\n<p>Supports <strong>pagination</strong> and <strong>sorting</strong>.</p>\n<hr />\n<h3 id=\"authentication\">Authentication</h3>\n<p>🔒 <strong>Protected</strong></p>\n<p>Requires a valid access token.</p>\n<p>Include the authorization header:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: Bearer &lt;access_token&gt;\n\n</code></pre><hr />\n<h3 id=\"request-headers\">Request Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Content-Type</td>\n<td>String</td>\n<td>Yes</td>\n<td>application/json</td>\n</tr>\n<tr>\n<td>Authorization</td>\n<td>String</td>\n<td>Yes</td>\n<td>Bearer access token</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"query-parameters-optional\">Query Parameters (Optional)</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>page</td>\n<td>Number</td>\n<td>Page number for pagination</td>\n</tr>\n<tr>\n<td>limit</td>\n<td>Number</td>\n<td>Number of users per page</td>\n</tr>\n<tr>\n<td>sort</td>\n<td>String</td>\n<td>Sort order (<code>field</code> or <code>-field</code>)</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"example-requests\">Example Requests</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>/api/v1/users?page=1&amp;limit=5\n\n</code></pre><p>Returns 5 users per page.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>/api/v1/users?sort=name\n\n</code></pre><p>Sorts users in ascending order by name.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>/api/v1/users?sort=-createdAt\n\n</code></pre><p>Sorts users in descending order by creation date.</p>\n<hr />\n<h3 id=\"success-response\">Success Response</h3>\n<p><strong>200 OK</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"results\": 2,\n  \"data\": {\n    \"docs\": [\n      {\n        \"_id\": \"6965ee96a69a94bf1c08729d\",\n        \"name\": \"Jane Doe\",\n        \"email\": \"jane@example.com\",\n        \"role\": \"user\",\n        \"createdAt\": \"2026-01-15T10:12:00.000Z\"\n      },\n      {\n        \"_id\": \"6965ee96a69a94bf1c08729d\",\n        \"name\": \"John Doe\",\n        \"email\": \"john@example.com\",\n        \"role\": \"admin\",\n        \"createdAt\": \"2026-01-10T08:45:00.000Z\"\n      }\n    ]\n  }\n}\n\n</code></pre><hr />\n<h3 id=\"error-responses\">Error Responses</h3>\n<h4 id=\"401--unauthorized\">401 – Unauthorized</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"You are not logged in\"\n}\n\n</code></pre><h4 id=\"500--server-error\">500 – Server Error</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"error\",\n  \"message\": \"Something went wrong\"\n}\n\n</code></pre>","urlObject":{"path":["v1","users"],"host":["{{URL}}api"],"query":[],"variable":[]}},"response":[],"_postman_id":"0e1adb1a-394c-4446-a3f8-9f9da6bbce98"},{"name":"update me","id":"782c3629-dbe3-4e4a-afba-00222a5a6f26","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{jwt}}"}]},"isInherited":false},"method":"PATCH","header":[],"body":{"mode":"formdata","formdata":[{"key":"fullName","value":"ejojo","type":"text","uuid":"ed9dbde0-68d3-4e89-a66b-dcda3a64966b"}]},"url":"{{URL}}api/v1/users/updateMe","description":"<h2 id=\"update-a-user\">Update a User</h2>\n<p>Update an existing user in the system.</p>\n<hr />\n<h3 id=\"endpoint\">Endpoint</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>PATCH /api/v1/users/updateMe\n\n</code></pre><hr />\n<h3 id=\"description\">Description</h3>\n<p>Updates one or more fields of a user stored in the database.</p>\n<hr />\n<h3 id=\"http-method\">HTTP Method</h3>\n<p><code>PATCH</code></p>\n<hr />\n<h3 id=\"authentication\">Authentication</h3>\n<p><strong>Protected</strong> ✅</p>\n<p>Requires a valid access token.</p>\n<p>Include the authorization header:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: Bearer &lt;access_token&gt;\n\n</code></pre><hr />\n<h3 id=\"request-headers\">Request Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Content-Type</td>\n<td>String</td>\n<td>Yes</td>\n<td>application/json</td>\n</tr>\n<tr>\n<td>Authorization</td>\n<td>String</td>\n<td>Yes</td>\n<td>Bearer access token</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<hr />\n<h3 id=\"request-body-partial-update\">Request Body (Partial Update)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"email\": \"ejojo@gmail.com\"\n}\n\n</code></pre><blockquote>\n<p>&lt;p &gt;Only the fields provided will be updated.&lt;/p&gt; </p>\n</blockquote>\n<hr />\n<h3 id=\"successful-response\">Successful Response</h3>\n<p><strong>Status Code</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>200 OK\n\n</code></pre><p><strong>Response Body</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"data\": {\n    \"user\": {\n      \n\"_id\"\n:\"696b959b3062f17504b5908a\"\n      \"fullName\"\n:\"test\"\n      \"email\":\"test@gmail.com\"\n      \"photo\"\n:\"default.jpg\"\n    }\n  }\n}\n\n</code></pre><hr />\n<h3 id=\"error-responses\">Error Responses</h3>\n<h4 id=\"401--unauthorized\">401 – Unauthorized</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"You are not logged in\"\n}\n\n</code></pre><h4 id=\"400--bad-request\">400 – Bad Request</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"Invalid update data\"\n}\n\n</code></pre><h4 id=\"404--not-found\">404 – Not Found</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"No plan found with that ID\"\n}\n\n</code></pre><h4 id=\"500--server-error\">500 – Server Error</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"error\",\n  \"message\": \"Something went wrong\"\n}\n\n</code></pre>","urlObject":{"path":["v1","users","updateMe"],"host":["{{URL}}api"],"query":[],"variable":[]}},"response":[],"_postman_id":"782c3629-dbe3-4e4a-afba-00222a5a6f26"},{"name":"delete current user","id":"187cceab-d1c9-4776-a897-539f1e996329","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{jwt}}"}]},"isInherited":false},"method":"DELETE","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"{{URL}}api/v1/users/deleteMe","description":"<h1 id=\"delete-a-user\">Delete a User</h1>\n<p>Delete a user in the system.</p>\n<hr />\n<h2 id=\"endpoint\">Endpoint</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>DELETE /api/v1/users/:id\n\n</code></pre><hr />\n<h2 id=\"description\">Description</h2>\n<p>This endpoint updates a plan stored in the database.</p>\n<hr />\n<h2 id=\"http-method\">HTTP Method</h2>\n<p><code>DELETE</code></p>\n<hr />\n<h2 id=\"authentication\">Authentication</h2>\n<ul>\n<li>Protected: ✅ Requires authentication token</li>\n</ul>\n<p>Include the authorization header:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: Bearer &lt;access_token&gt;\n\n</code></pre><hr />\n<h2 id=\"request-headers\">Request Headers</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Content-Type</td>\n<td>String</td>\n<td>Yes</td>\n<td>application/json</td>\n</tr>\n<tr>\n<td>Authorization</td>\n<td>String</td>\n<td>Optional</td>\n<td>Bearer token (if protected)</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h2 id=\"successful-response\">Successful Response</h2>\n<h3 id=\"status-code\">Status Code</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>200 OK\n\n</code></pre><h3 id=\"response-body\">Response Body</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"data\":null\n}\n\n</code></pre><hr />\n<h2 id=\"error-responses\">Error Responses</h2>\n<h3 id=\"500--server-error\">500 – Server Error</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"error\",\n  \"message\": \"Something went wrong\"\n}\n\n</code></pre><h3 id=\"401--unauthorized-if-protected\">401 – Unauthorized (if protected)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"You are not logged in\"\n}\n\n</code></pre>","urlObject":{"path":["v1","users","deleteMe"],"host":["{{URL}}api"],"query":[],"variable":[]}},"response":[],"_postman_id":"187cceab-d1c9-4776-a897-539f1e996329"},{"name":"Get Current User","id":"2cae856c-5cda-48a6-b000-3846b0aea66c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{jwt}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{URL}}api/v1/users/me","description":"<h1 id=\"get-a-user\">Get a User</h1>\n<p>Retrieve a single user by an user id storedin the rquest object.</p>\n<hr />\n<h2 id=\"endpoint\">Endpoint</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>GET /api/v1/users/me\n\n</code></pre><hr />\n<h2 id=\"description\">Description</h2>\n<p>This endpoint returns a user stored in the database.</p>\n<hr />\n<h2 id=\"http-method\">HTTP Method</h2>\n<p><code>GET</code></p>\n<hr />\n<h2 id=\"authentication\">Authentication</h2>\n<ul>\n<li>Protected: ✅ Requires authentication token</li>\n</ul>\n<p>Include the authorization header:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: Bearer &lt;access_token&gt;\n\n</code></pre><hr />\n<h2 id=\"request-headers\">Request Headers</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Content-Type</td>\n<td>String</td>\n<td>Yes</td>\n<td>application/json</td>\n</tr>\n<tr>\n<td>Authorization</td>\n<td>String</td>\n<td>Optional</td>\n<td>Bearer token (if protected)</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h2 id=\"successful-response\">Successful Response</h2>\n<h3 id=\"status-code\">Status Code</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>200 OK\n\n</code></pre><h3 id=\"response-body\">Response Body</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"results\": 3,\n  \"data\": {\n    \"user\": \n      {\n     \"fullName\":\"Essien Jojo\"\n     \"email\":\"ejojo@gmail.com\"\n     \"photo\":\"user-695aad0f7d95f1a0870e2ec3-1767862410756.jpeg\"\n     \"active\":true\n }\n  }\n}\n\n</code></pre><hr />\n<h2 id=\"error-responses\">Error Responses</h2>\n<h3 id=\"500--server-error\">500 – Server Error</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"error\",\n  \"message\": \"Something went wrong\"\n}\n\n</code></pre><h3 id=\"401--unauthorized-if-protected\">401 – Unauthorized (if protected)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"You are not logged in\"\n}\n\n</code></pre>","urlObject":{"path":["v1","users","me"],"host":["{{URL}}api"],"query":[],"variable":[]}},"response":[],"_postman_id":"2cae856c-5cda-48a6-b000-3846b0aea66c"}],"id":"8f42ddfe-a63d-46f7-947a-2f7e26a9ce94","description":"<h1 id=\"users\">Users</h1>\n<p>This folder includes allapi end point to manage and manipulate users data.</p>\n","_postman_id":"8f42ddfe-a63d-46f7-947a-2f7e26a9ce94"},{"name":"authentication","item":[{"name":"sign up","event":[{"listen":"test","script":{"id":"eacf0990-e4b2-434f-8753-d8792ff41505","exec":["pm.environment.set(\"jwt\", pm.response.json().token);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"f3d44621-e703-4b7b-86b1-18c94c2a4ac8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"fullName\":\"test1\",\r\n    \"email\":\"test1@gmail.com\",\r\n    \"password\":\"123456789\",\r\n    \"confirmPassword\":\"123456789\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{URL}}api/v1/users/signUp","description":"<h2 id=\"create-a-user-sign-up\">Create a User (Sign Up)</h2>\n<p>Create a new user and store their details in the system.</p>\n<hr />\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><strong>POST</strong> <code>/api/v1/users/signup</code></p>\n<blockquote>\n</blockquote>\n<p><code>POST</code> is used to create new resources.<br /><code>signup</code> endpoints are typically <strong>public</strong>, not protected.</p>\n<hr />\n<h3 id=\"description\">Description</h3>\n<p>Creates a new user account and saves the user’s information in the database.</p>\n<hr />\n<h3 id=\"authentication\">Authentication</h3>\n<p>🔓 <strong>Public</strong>  </p>\n<p>No authentication required.</p>\n<blockquote>\n</blockquote>\n<p>If you intend this to be <strong>admin-only user creation</strong>, tell me and I’ll document it correctly.</p>\n<hr />\n<h3 id=\"request-headers\">Request Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Content-Type</td>\n<td>String</td>\n<td>Yes</td>\n<td>application/json</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"request-body-example\">Request Body (Example)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"fullName\": \"Essien Jojo\",\n  \"email\": \"ejojo@gmail.com\",\n  \"password\": \"********\",\n  \"passwordConfirm\": \"********\"\n}\n\n</code></pre><blockquote>\n</blockquote>\n<p>Password fields are required during sign-up but <strong>never returned</strong> in responses.</p>\n<hr />\n<h3 id=\"success-response\">Success Response</h3>\n<p><strong>201 Created</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"data\": {\n    \"user\": {\n      \"fullName\": \"Essien Jojo\",\n      \"email\": \"ejojo@gmail.com\",\n      \"photo\": \"user-695aad0f7d95f1a0870e2ec3-1767862410756.jpeg\",\n      \"active\": true\n    }\n  }\n}\n\n</code></pre><hr />\n<h3 id=\"error-responses\">Error Responses</h3>\n<h4 id=\"400--bad-request\">400 – Bad Request</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"Invalid input data\"\n}\n\n</code></pre><h4 id=\"500--server-error\">500 – Server Error</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"error\",\n  \"message\": \"Something went wrong\"\n}\n\n</code></pre><hr />\n","urlObject":{"path":["v1","users","signUp"],"host":["{{URL}}api"],"query":[],"variable":[]}},"response":[],"_postman_id":"f3d44621-e703-4b7b-86b1-18c94c2a4ac8"},{"name":"login","event":[{"listen":"test","script":{"id":"2986ea19-0054-448b-8344-bf987b72c6c1","exec":["pm.environment.set(\"jwt\", pm.response.json().token);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"13a76b1b-b1d9-4097-aaf7-e2e175676e02","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"email\":\"ejojo@gmail.com\",\r\n    \"password\":\"12345678\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{URL}}api/v1/users/login","description":"<h2 id=\"authenticate-a-user-login\">Authenticate a User (Login)</h2>\n<p>Authenticate a user and grant access to the system.</p>\n<hr />\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><strong>POST</strong> <code>/api/v1/users/login</code></p>\n<hr />\n<h3 id=\"description\">Description</h3>\n<p>Authenticates a user using their credentials and returns an access token along with user details.</p>\n<hr />\n<h3 id=\"http-method\">HTTP Method</h3>\n<p><strong>POST</strong></p>\n<blockquote>\n<p>&lt;p &gt;Login actions create a new authentication session/token.&lt;/p&gt; </p>\n</blockquote>\n<hr />\n<h3 id=\"authentication\">Authentication</h3>\n<p>🔓 <strong>Public</strong>  </p>\n<p>No authentication required.</p>\n<blockquote>\n<p>&lt;p &gt;You cannot require a token to obtain a token.&lt;/p&gt; </p>\n</blockquote>\n<hr />\n<h3 id=\"request-headers\">Request Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Content-Type</td>\n<td>String</td>\n<td>Yes</td>\n<td>application/json</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"request-body-example\">Request Body (Example)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"email\": \"ejojo@gmail.com\",\n  \"password\": \"********\"\n}\n\n</code></pre><hr />\n<h3 id=\"success-response\">Success Response</h3>\n<p><strong>200 OK</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n  \"data\": {\n    \"user\": {\n      \"fullName\": \"Essien Jojo\",\n      \"email\": \"ejojo@gmail.com\",\n      \"photo\": \"user-695aad0f7d95f1a0870e2ec3-1767862410756.jpeg\",\n      \"active\": true\n    }\n  }\n}\n\n</code></pre><hr />\n<h3 id=\"error-responses\">Error Responses</h3>\n<h4 id=\"400--bad-request-invalid-credentials\">400 – Bad Request (Invalid Credentials)</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"Incorrect email or password\"\n}\n\n</code></pre><h4 id=\"500--server-error\">500 – Server Error</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"error\",\n  \"message\": \"Something went wrong\"\n}\n\n</code></pre>","urlObject":{"path":["v1","users","login"],"host":["{{URL}}api"],"query":[],"variable":[]}},"response":[],"_postman_id":"13a76b1b-b1d9-4097-aaf7-e2e175676e02"},{"name":"forgot password","id":"e869023d-8999-41e3-828a-afd69ff7c566","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"email\":\"test3@gmail.com\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{URL}}api/v1/users/forgotPassword","description":"<h2 id=\"forgot-password\">Forgot Password</h2>\n<p>Initiate the password reset process for a user account.</p>\n<hr />\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><strong>POST</strong> <code>/api/v1/users/forgotPassword</code></p>\n<hr />\n<h3 id=\"description\">Description</h3>\n<p>Generates a password reset token and sends a password reset link to the user’s registered email address.</p>\n<hr />\n<h3 id=\"http-method\">HTTP Method</h3>\n<p><strong>POST</strong></p>\n<blockquote>\n<p>&lt;p &gt;Used to initiate a password recovery flow.&lt;/p&gt; </p>\n</blockquote>\n<hr />\n<h3 id=\"authentication\">Authentication</h3>\n<p>🔓 <strong>Public</strong>  </p>\n<p>No authentication required.</p>\n<hr />\n<h3 id=\"request-headers\">Request Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Content-Type</td>\n<td>String</td>\n<td>Yes</td>\n<td>application/json</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"request-body-example\">Request Body (Example)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"email\": \"ejojo@gmail.com\"\n}\n\n</code></pre><hr />\n<h3 id=\"success-response\">Success Response</h3>\n<p><strong>200 OK</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"message\": \"Password reset token sent to email\"\n}\n\n</code></pre><blockquote>\n<p>&lt;p &gt;For security reasons, the response should be the same whether the email exists or not.&lt;/p&gt; </p>\n</blockquote>\n<hr />\n<h3 id=\"error-responses\">Error Responses</h3>\n<h4 id=\"400--bad-request\">400 – Bad Request</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"Please provide an email address\"\n}\n\n</code></pre><h4 id=\"500--server-error\">500 – Server Error</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"error\",\n  \"message\": \"Something went wrong\"\n}\n\n</code></pre>","urlObject":{"path":["v1","users","forgotPassword"],"host":["{{URL}}api"],"query":[],"variable":[]}},"response":[],"_postman_id":"e869023d-8999-41e3-828a-afd69ff7c566"},{"name":"reset password","event":[{"listen":"test","script":{"id":"bf189d5b-b3f6-40e1-a9f1-13dad3ce0ab8","exec":["pm.environment.set(\"jwt\", pm.response.json().token);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"c68ded72-efcd-4cef-9fcb-b56e13be1f86","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"password\":\"newPass123\",\r\n    \"confirmPassword\":\"newPass123\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{URL}}api/v1/users/resetPassword/c7cec0edbd6131c5ddaecee61d2a951b9cba1449fd768162be6dbb80491dbbe1","description":"<h2 id=\"reset-password\">Reset Password</h2>\n<p>Reset a user’s password using a valid password reset token.</p>\n<hr />\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><strong>PATCH</strong><br /><code>/api/v1/users/resetPassword/:token</code></p>\n<p><strong>Example</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>/api/v1/users/resetPassword/37d95304cff1cbbf87409d655aac84082c6185d95be6b11db84f62d08edfda75\n\n</code></pre><hr />\n<h3 id=\"description\">Description</h3>\n<p>Validates the password reset token and updates the user’s password.</p>\n<p>Once successful, the reset token is invalidated.</p>\n<hr />\n<h3 id=\"http-method\">HTTP Method</h3>\n<p><strong>PATCH</strong></p>\n<blockquote>\n<p>&lt;p &gt;Used to partially update a user resource (password only).&lt;/p&gt; </p>\n</blockquote>\n<hr />\n<h3 id=\"authentication\">Authentication</h3>\n<p>🔓 <strong>Public</strong></p>\n<p>No authentication required.</p>\n<blockquote>\n<p>&lt;p &gt;Access is granted through the reset token itself.&lt;/p&gt; </p>\n</blockquote>\n<hr />\n<h3 id=\"request-headers\">Request Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Content-Type</td>\n<td>String</td>\n<td>Yes</td>\n<td>application/json</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"request-body-example\">Request Body (Example)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"currentPassword\":\"current\",\n  \"password\": \"NewSecurePassword123!\",\n  \"confirmPassword\": \"NewSecurePassword123!\"\n}\n\n</code></pre><hr />\n<h3 id=\"success-response\">Success Response</h3>\n<p><strong>200 OK</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"message\": \"Password reset successful\"\n}\n\n</code></pre><blockquote>\n<p>&lt;p &gt;You may optionally return a new JWT token after reset.&lt;/p&gt; </p>\n</blockquote>\n<hr />\n<h3 id=\"error-responses\">Error Responses</h3>\n<h4 id=\"400--invalid-or-expired-token\">400 – Invalid or Expired Token</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"Token is invalid or has expired\"\n}\n\n</code></pre><h4 id=\"400--validation-error\">400 – Validation Error</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"Passwords do not match\"\n}\n\n</code></pre><h4 id=\"500--server-error\">500 – Server Error</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"error\",\n  \"message\": \"Something went wrong\"\n}\n\n</code></pre>","urlObject":{"path":["v1","users","resetPassword","c7cec0edbd6131c5ddaecee61d2a951b9cba1449fd768162be6dbb80491dbbe1"],"host":["{{URL}}api"],"query":[],"variable":[]}},"response":[],"_postman_id":"c68ded72-efcd-4cef-9fcb-b56e13be1f86"},{"name":"update my password","event":[{"listen":"test","script":{"id":"f20f9c00-d2d0-4809-8f93-2334dddfbdad","exec":["pm.environment.set(\"jwt\", pm.response.json().token);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"699a2464-b6e8-48fe-8c86-45eb5c9a3531","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{jwt}}"}]},"isInherited":false},"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"passwordCurrent\":\"123456789\",\r\n    \"password\":\"update12345\",\r\n    \"confirmPassword\":\"update12345\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{URL}}api/v1/users/updateMyPassword","description":"<h2 id=\"update-my-password\">Update My Password</h2>\n<p>Update the password of the currently authenticated user.</p>\n<hr />\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><strong>PATCH</strong><br /><code>/api/v1/users/updateMyPassword</code></p>\n<hr />\n<h3 id=\"description\">Description</h3>\n<p>Allows a logged-in user to change their password by providing their current password and a new password.</p>\n<p>All existing authentication tokens are invalidated after a successful update.</p>\n<hr />\n<h3 id=\"http-method\">HTTP Method</h3>\n<p><strong>PATCH</strong></p>\n<hr />\n<h3 id=\"authentication\">Authentication</h3>\n<p>🔒 <strong>Protected</strong></p>\n<p>Requires a valid access token.</p>\n<p><strong>Authorization Header</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: Bearer &lt;access_token&gt;\n\n</code></pre><hr />\n<h3 id=\"request-headers\">Request Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Content-Type</td>\n<td>String</td>\n<td>Yes</td>\n<td>application/json</td>\n</tr>\n<tr>\n<td>Authorization</td>\n<td>String</td>\n<td>Yes</td>\n<td>Bearer access token</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"request-body-example\">Request Body (Example)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"currentPassword\": \"OldPassword123!\",\n  \"password\": \"NewSecurePassword123!\",\n  \"passwordConfirm\": \"NewSecurePassword123!\"\n}\n\n</code></pre><hr />\n<h3 id=\"success-response\">Success Response</h3>\n<p><strong>200 OK</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n  \"message\": \"Password updated successfully\"\n}\n\n</code></pre>","urlObject":{"path":["v1","users","updateMyPassword"],"host":["{{URL}}api"],"query":[],"variable":[]}},"response":[],"_postman_id":"699a2464-b6e8-48fe-8c86-45eb5c9a3531"}],"id":"39936f40-4e6c-4b4b-a832-d6a30e274c89","_postman_id":"39936f40-4e6c-4b4b-a832-d6a30e274c89","description":""},{"name":"tasks","item":[{"name":"create task","id":"f64900fe-3579-4c4a-92ff-441744c98f6b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{jwt}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"task\":\"Study Plants\",\r\n    \"dueDate\":\"05-1-2026\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{URL}}api/v1/tasks","description":"<h2 id=\"create-a-task\">Create a Task</h2>\n<p>Create a new task in the system.</p>\n<hr />\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><strong>POST</strong><br /><code>/api/v1/tasks</code></p>\n<hr />\n<h3 id=\"description\">Description</h3>\n<p>Creates a new task and stores it in the database.</p>\n<p>The task is automatically associated with the authenticated user.</p>\n<hr />\n<h3 id=\"http-method\">HTTP Method</h3>\n<p><strong>POST</strong></p>\n<blockquote>\n<p>&lt;p &gt;Used to create a new resource.&lt;/p&gt; </p>\n</blockquote>\n<hr />\n<h3 id=\"authentication\">Authentication</h3>\n<p>🔒 <strong>Protected</strong></p>\n<p>Requires a valid access token.</p>\n<p><strong>Authorization Header</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: Bearer &lt;access_token&gt;\n\n</code></pre><hr />\n<h3 id=\"request-headers\">Request Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Content-Type</td>\n<td>String</td>\n<td>Yes</td>\n<td>application/json</td>\n</tr>\n<tr>\n<td>Authorization</td>\n<td>String</td>\n<td>Yes</td>\n<td>Bearer access token</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"request-body-example\">Request Body (Example)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"task\": \"Finish API documentation\",\n  \"dueDate\": \"2026-01-20\",\n  \"priority\": \"high\"\n}\n\n</code></pre><blockquote>\n<p>&lt;p &gt;Optional fields can be omitted depending on your schema.&lt;/p&gt; </p>\n</blockquote>\n<hr />\n<h3 id=\"success-response\">Success Response</h3>\n<p><strong>201 Created</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"data\": {\n    \"task\": {\n      \"_id\": \"6970aa96a69a94bf1c08745e\",\n      \"title\": \"Finish API documentation\",\n      \"description\": \"Complete users and tasks API docs\",\n      \"dueDate\": \"2026-01-20T00:00:00.000Z\",\n      \"priority\": \"high\",\n      \"completed\": false,\n      \"user\": \"6962225f15d8e9bcb9d0fc9d\",\n      \"createdAt\": \"2026-01-18T22:10:00.000Z\"\n    }\n  }\n}\n\n</code></pre><hr />\n<h3 id=\"error-responses\">Error Responses</h3>\n<h4 id=\"400--bad-request\">400 – Bad Request</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"Invalid input data\"\n}\n\n</code></pre><h4 id=\"401--unauthorized\">401 – Unauthorized</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"You are not logged in\"\n}\n\n</code></pre><h4 id=\"500--server-error\">500 – Server Error</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"error\",\n  \"message\": \"Something went wrong\"\n}\n\n</code></pre>","urlObject":{"path":["v1","tasks"],"host":["{{URL}}api"],"query":[],"variable":[]}},"response":[],"_postman_id":"f64900fe-3579-4c4a-92ff-441744c98f6b"},{"name":"Get all task","id":"4d74eba1-4885-42c5-b06e-db3a44b0d3cc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{jwt}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{URL}}api/v1/tasks?completed=true","description":"<h2 id=\"get-all-tasks\">Get All Tasks</h2>\n<p>Retrieve a paginated list of all tasks in the system.</p>\n<hr />\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><strong>GET</strong><br /><code>/api/v1/tasks</code></p>\n<hr />\n<h3 id=\"description\">Description</h3>\n<p>Returns all tasks stored in the database.</p>\n<p>Supports <strong>pagination</strong>, <strong>sorting</strong>, and <strong>filtering</strong>.</p>\n<p>Access can be restricted to <strong>admin-only</strong> or scoped to the authenticated user, depending on your implementation.</p>\n<hr />\n<h3 id=\"http-method\">HTTP Method</h3>\n<p><strong>GET</strong></p>\n<hr />\n<h3 id=\"authentication\">Authentication</h3>\n<p>🔒 <strong>Protected</strong></p>\n<p>Requires a valid access token.</p>\n<p><strong>Authorization Header</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: Bearer &lt;access_token&gt;\n\n</code></pre><hr />\n<h3 id=\"request-headers\">Request Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Authorization</td>\n<td>String</td>\n<td>Yes</td>\n<td>Bearer access token</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"query-parameters-optional\">Query Parameters (Optional)</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>page</td>\n<td>Number</td>\n<td>Page number for pagination</td>\n</tr>\n<tr>\n<td>limit</td>\n<td>Number</td>\n<td>Number of tasks per page</td>\n</tr>\n<tr>\n<td>sort</td>\n<td>String</td>\n<td>Sort order (<code>field</code> or <code>-field</code>)</td>\n</tr>\n<tr>\n<td>completed</td>\n<td>Boolean</td>\n<td>Filter by completion status</td>\n</tr>\n<tr>\n<td>priority</td>\n<td>String</td>\n<td>Filter by priority (<code>low</code>, <code>medium</code>, <code>high</code>)</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"example-requests\">Example Requests</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>/api/v1/tasks?page=1&amp;limit=10\n\n</code></pre><pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>/api/v1/tasks?sort=-createdAt\n\n</code></pre><pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>/api/v1/tasks?completed=false&amp;priority=high\n\n</code></pre><hr />\n<h3 id=\"success-response\">Success Response</h3>\n<p><strong>200 OK</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"results\": 2,\n  \"data\": {\n    \"docs\": [\n      {\n        \"_id\": \"6970aa96a69a94bf1c08745e\",\n        \"task\": \"Finish API documentation\",\n        \"priority\": \"high\",\n        \"completed\": false,\n        \"user\": \"6962225f15d8e9bcb9d0fc9d\",\n        \"createdAt\": \"2026-01-18T22:10:00.000Z\"\n      },\n      {\n        \"_id\": \"6970aa96a69a94bf1c08745f\",\n        \"task\": \"Deploy backend\",\n        \"priority\": \"medium\",\n        \"completed\": true,\n        \"user\": \"6962225f15d8e9bcb9d0fc9d\",\n        \"createdAt\": \"2026-01-17T18:30:00.000Z\"\n      }\n    ]\n  }\n}\n\n</code></pre><hr />\n<h3 id=\"error-responses\">Error Responses</h3>\n<h4 id=\"401--unauthorized\">401 – Unauthorized</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"You are not logged in\"\n}\n\n</code></pre><h4 id=\"500--server-error\">500 – Server Error</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"error\",\n  \"message\": \"Something went wrong\"\n}\n\n</code></pre>","urlObject":{"path":["v1","tasks"],"host":["{{URL}}api"],"query":[{"key":"completed","value":"true"}],"variable":[]}},"response":[],"_postman_id":"4d74eba1-4885-42c5-b06e-db3a44b0d3cc"},{"name":"delete task","id":"d7fa1656-615f-4474-bac9-a4ab53f69f36","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{jwt}}"}]},"isInherited":false},"method":"DELETE","header":[],"url":"{{URL}}api/v1/tasks/6958b452d8449de00088a188","description":"<h2 id=\"delete-a-task\">Delete a Task</h2>\n<p>Delete an existing task from the system.</p>\n<hr />\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><strong>DELETE</strong><br /><code>/api/v1/tasks/:id</code></p>\n<hr />\n<h3 id=\"description\">Description</h3>\n<p>Deletes a task identified by its ID.</p>\n<p>Only the task owner (or an admin) is allowed to delete the task.</p>\n<hr />\n<h3 id=\"http-method\">HTTP Method</h3>\n<p><strong>DELETE</strong></p>\n<hr />\n<h3 id=\"authentication\">Authentication</h3>\n<p>🔒 <strong>Protected</strong></p>\n<p>Requires a valid access token.</p>\n<p><strong>Authorization Header</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: Bearer &lt;access_token&gt;\n\n</code></pre><hr />\n<h3 id=\"request-headers\">Request Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Authorization</td>\n<td>String</td>\n<td>Yes</td>\n<td>Bearer access token</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"url-parameters\">URL Parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>String</td>\n<td>ID of the task</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"example-request\">Example Request</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>DELETE /api/v1/tasks/6970aa96a69a94bf1c08745e\n\n</code></pre><hr />\n<h3 id=\"success-response\">Success Response</h3>\n<p><strong>204 No Content</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"data\": null\n}\n\n</code></pre><blockquote>\n<p>&lt;p &gt;No response body is required for a successful delete.&lt;/p&gt; </p>\n</blockquote>\n<hr />\n<h3 id=\"error-responses\">Error Responses</h3>\n<h4 id=\"401--unauthorized\">401 – Unauthorized</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"You are not logged in\"\n}\n\n</code></pre><h4 id=\"403--forbidden\">403 – Forbidden</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"You do not have permission to delete this task\"\n}\n\n</code></pre><h4 id=\"404--not-found\">404 – Not Found</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"No task found with that ID\"\n}\n\n</code></pre><h4 id=\"500--server-error\">500 – Server Error</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"error\",\n  \"message\": \"Something went wrong\"\n}\n\n</code></pre>","urlObject":{"path":["v1","tasks","6958b452d8449de00088a188"],"host":["{{URL}}api"],"query":[],"variable":[]}},"response":[],"_postman_id":"d7fa1656-615f-4474-bac9-a4ab53f69f36"}],"id":"14b4b889-26e7-46f8-9e51-430ac638c50c","_postman_id":"14b4b889-26e7-46f8-9e51-430ac638c50c","description":""},{"name":"Plans/Tasks","item":[{"name":"Get all task plan url","id":"3462b79a-fc33-46ec-b0ca-4d16a6a88458","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{jwt}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{URL}}api/v1/plans/6958b410d8449de00088a185/tasks","description":"<p>StartFragment</p>\n<h2 id=\"get-tasks-for-a-specific-plan\">Get Tasks for a Specific Plan</h2>\n<p>Retrieve all tasks associated with a particular plan.</p>\n<hr />\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><strong>GET</strong><br /><code>/api/v1/plans/:planId/tasks</code></p>\n<p><strong>Example</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>/api/v1/plans/6963c079a4b3e84b1d29e60c/tasks\n\n</code></pre><hr />\n<h3 id=\"description\">Description</h3>\n<p>Returns all tasks that belong to the specified plan ID.  </p>\n<p>Supports <strong>pagination</strong>, <strong>sorting</strong>, and <strong>filtering</strong>.</p>\n<hr />\n<h3 id=\"http-method\">HTTP Method</h3>\n<p><strong>GET</strong></p>\n<hr />\n<h3 id=\"authentication\">Authentication</h3>\n<p>🔒 <strong>Protected</strong>  </p>\n<p>Requires a valid access token.</p>\n<p><strong>Authorization Header</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: Bearer &lt;access_token&gt;\n\n</code></pre><hr />\n<h3 id=\"request-headers\">Request Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Authorization</td>\n<td>String</td>\n<td>Yes</td>\n<td>Bearer access token</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"url-parameters\">URL Parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>planId</td>\n<td>String</td>\n<td>ID of the plan</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"query-parameters-optional\">Query Parameters (Optional)</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>page</td>\n<td>Number</td>\n<td>Page number for pagination</td>\n</tr>\n<tr>\n<td>limit</td>\n<td>Number</td>\n<td>Number of tasks per page</td>\n</tr>\n<tr>\n<td>sort</td>\n<td>String</td>\n<td>Sort order (<code>field</code> or <code>-field</code>)</td>\n</tr>\n<tr>\n<td>completed</td>\n<td>Boolean</td>\n<td>Filter by completion status</td>\n</tr>\n<tr>\n<td>priority</td>\n<td>String</td>\n<td>Filter by priority (<code>low</code>, <code>medium</code>, <code>high</code>)</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"example-requests\">Example Requests</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>/api/v1/plans/6963c079a4b3e84b1d29e60c/tasks?page=1&amp;limit=5\n\n</code></pre><pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>/api/v1/plans/6963c079a4b3e84b1d29e60c/tasks?completed=false\n\n</code></pre><hr />\n<h3 id=\"success-response\">Success Response</h3>\n<p><strong>200 OK</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"results\": 2,\n  \"data\": {\n    \"docs\": [\n      {\n        \"_id\": \"6970aa96a69a94bf1c08745e\",\n        \"task\": \"Design UI\",\n        \"description\": \"Create dashboard UI\",\n        \"priority\": \"high\",\n        \"completed\": false,\n        \"plan\": \"6963c079a4b3e84b1d29e60c\",\n        \"user\": \"6962225f15d8e9bcb9d0fc9d\",\n        \"createdAt\": \"2026-01-18T22:10:00.000Z\"\n      },\n      {\n        \"_id\": \"6970aa96a69a94bf1c08745f\",\n        \"task\": \"Build API\",\n        \"priority\": \"medium\",\n        \"completed\": true,\n        \"plan\": \"6963c079a4b3e84b1d29e60c\",\n        \"user\": \"6962225f15d8e9bcb9d0fc9d\",\n        \"createdAt\": \"2026-01-17T18:30:00.000Z\"\n      }\n    ]\n  }\n}\n\n</code></pre><hr />\n<h3 id=\"error-responses\">Error Responses</h3>\n<h4 id=\"401--unauthorized\">401 – Unauthorized</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"You are not logged in\"\n}\n\n</code></pre><h4 id=\"404--plan-not-found\">404 – Plan Not Found</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"No plan found with that ID\"\n}\n\n</code></pre><h4 id=\"500--server-error\">500 – Server Error</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"error\",\n  \"message\": \"Something went wrong\"\n}\n\n</code></pre>","urlObject":{"path":["v1","plans","6958b410d8449de00088a185","tasks"],"host":["{{URL}}api"],"query":[],"variable":[]}},"response":[],"_postman_id":"3462b79a-fc33-46ec-b0ca-4d16a6a88458"},{"name":"create task plan url","id":"ed82c1cf-05fc-46fb-aab7-0791229f0d68","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{jwt}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"task\":\"Study Techh\",\r\n    \"dueDate\":\"05-1-2026\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{URL}}api/v1/plans/6958b410d8449de00088a185/tasks","description":"<p>StartFragment</p>\n<h2 id=\"create-a-task-for-a-specific-plan\">Create a Task for a Specific Plan</h2>\n<p>Create a new task that belongs to a particular plan.</p>\n<hr />\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><strong>POST</strong><br /><code>/api/v1/plans/:planId/tasks</code></p>\n<p><strong>Example</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>/api/v1/plans/6963c079a4b3e84b1d29e60c/tasks\n\n</code></pre><hr />\n<h3 id=\"description\">Description</h3>\n<p>Creates a new task and automatically associates it with the specified plan ID.  </p>\n<p>The task is also linked to the authenticated user.</p>\n<hr />\n<h3 id=\"http-method\">HTTP Method</h3>\n<p><strong>POST</strong></p>\n<hr />\n<h3 id=\"authentication\">Authentication</h3>\n<p>🔒 <strong>Protected</strong>  </p>\n<p>Requires a valid access token.</p>\n<p><strong>Authorization Header</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: Bearer &lt;access_token&gt;\n\n</code></pre><hr />\n<h3 id=\"request-headers\">Request Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Content-Type</td>\n<td>String</td>\n<td>Yes</td>\n<td>application/json</td>\n</tr>\n<tr>\n<td>Authorization</td>\n<td>String</td>\n<td>Yes</td>\n<td>Bearer access token</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"url-parameters\">URL Parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>planId</td>\n<td>String</td>\n<td>ID of the plan</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"request-body-example\">Request Body (Example)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"task\": \"Implement authentication\",\n  \"description\": \"Add login and signup flow\",\n  \"dueDate\": \"2026-01-25\",\n  \"priority\": \"high\"\n}\n\n</code></pre><blockquote>\n</blockquote>\n<p>The <code>plan</code> field is <strong>not required</strong> in the body — it is derived from <code>planId</code>.</p>\n<hr />\n<h3 id=\"success-response\">Success Response</h3>\n<p><strong>201 Created</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"data\": {\n    \"task\": {\n      \"_id\": \"6971bb96a69a94bf1c08761a\",\n      \"task\": \"Implement authentication\",\n      \"description\": \"Add login and signup flow\",\n      \"dueDate\": \"2026-01-25T00:00:00.000Z\",\n      \"priority\": \"high\",\n      \"completed\": false,\n      \"plan\": \"6963c079a4b3e84b1d29e60c\",\n      \"user\": \"6962225f15d8e9bcb9d0fc9d\",\n      \"createdAt\": \"2026-01-19T09:30:00.000Z\"\n    }\n  }\n}\n\n</code></pre><hr />\n<h3 id=\"error-responses\">Error Responses</h3>\n<h4 id=\"400--bad-request\">400 – Bad Request</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"Invalid input data\"\n}\n\n</code></pre><h4 id=\"401--unauthorized\">401 – Unauthorized</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"You are not logged in\"\n}\n\n</code></pre><h4 id=\"404--plan-not-found\">404 – Plan Not Found</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"No plan found with that ID\"\n}\n\n</code></pre><h4 id=\"500--server-error\">500 – Server Error</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"error\",\n  \"message\": \"Something went wrong\"\n}\n\n</code></pre>","urlObject":{"path":["v1","plans","6958b410d8449de00088a185","tasks"],"host":["{{URL}}api"],"query":[],"variable":[]}},"response":[],"_postman_id":"ed82c1cf-05fc-46fb-aab7-0791229f0d68"}],"id":"7da8674d-85f7-4973-a35f-1f361d8ef418","_postman_id":"7da8674d-85f7-4973-a35f-1f361d8ef418","description":""},{"name":"User/plans","item":[{"name":"user/plans","id":"02c89824-636f-4bfd-a52b-9d5f49ccdea8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"description":"<h2 id=\"get-all-plans-for-a-specific-user\">Get All Plans for a Specific User</h2>\n<p>Retrieve all plans that belong to a particular user.</p>\n<hr />\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><strong>GET</strong><br /><code>/api/v1/users/:userId/plans</code></p>\n<p><strong>Example</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>/api/v1/users/69644604c184de7fd9d26e1a/plans\n\n</code></pre><hr />\n<h3 id=\"description\">Description</h3>\n<p>Returns all plans created by or assigned to the specified user.</p>\n<p>Supports <strong>pagination</strong> and <strong>sorting</strong>.</p>\n<hr />\n<h3 id=\"http-method\">HTTP Method</h3>\n<p><strong>GET</strong></p>\n<hr />\n<h3 id=\"authentication\">Authentication</h3>\n<p>🔒 <strong>Protected</strong></p>\n<p>Requires a valid access token.</p>\n<p><strong>Authorization Header</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: Bearer &lt;access_token&gt;\n\n</code></pre><hr />\n<h3 id=\"request-headers\">Request Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Authorization</td>\n<td>String</td>\n<td>Yes</td>\n<td>Bearer access token</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"url-parameters\">URL Parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>userId</td>\n<td>String</td>\n<td>ID of the user</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"query-parameters-optional\">Query Parameters (Optional)</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>page</td>\n<td>Number</td>\n<td>Page number for pagination</td>\n</tr>\n<tr>\n<td>limit</td>\n<td>Number</td>\n<td>Number of plans per page</td>\n</tr>\n<tr>\n<td>sort</td>\n<td>String</td>\n<td>Sort order (<code>field</code> or <code>-field</code>)</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"example-requests\">Example Requests</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>/api/v1/users/69644604c184de7fd9d26e1a/plans?page=1&amp;limit=5\n\n</code></pre><pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>/api/v1/users/69644604c184de7fd9d26e1a/plans?sort=-createdAt\n\n</code></pre><hr />\n<h3 id=\"success-response\">Success Response</h3>\n<p><strong>200 OK</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"results\": 2,\n  \"data\": {\n    \"docs\": [\n      {\n        \"_id\": \"6963c079a4b3e84b1d29e60c\",\n        \"plan\": \"January Productivity Plan\",\n        \"user\": \"69644604c184de7fd9d26e1a\",\n        \"createdAt\": \"2026-01-10T08:30:00.000Z\"\n      },\n      {\n        \"_id\": \"6963c079a4b3e84b1d29e60d\",\n        \"plan\": \"Fitness Plan\",\n        \"user\": \"69644604c184de7fd9d26e1a\",\n        \"createdAt\": \"2026-01-05T12:15:00.000Z\"\n      }\n    ]\n  }\n}\n\n</code></pre><hr />\n<h3 id=\"error-responses\">Error Responses</h3>\n<h4 id=\"401--unauthorized\">401 – Unauthorized</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"You are not logged in\"\n}\n\n</code></pre><h4 id=\"403--forbidden\">403 – Forbidden</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"You do not have permission to view these plans\"\n}\n\n</code></pre><h4 id=\"404--user-not-found\">404 – User Not Found</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"No user found with that ID\"\n}\n\n</code></pre><h4 id=\"500--server-error\">500 – Server Error</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"error\",\n  \"message\": \"Something went wrong\"\n}\n\n</code></pre>","urlObject":{"query":[],"variable":[]},"url":""},"response":[],"_postman_id":"02c89824-636f-4bfd-a52b-9d5f49ccdea8"},{"name":"user/plans create","id":"d59e1b1e-9c37-410a-9215-610139e9168f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \r\n}","options":{"raw":{"language":"json"}}},"url":"{{URL}}api/v1/users/69644604c184de7fd9d26e1a/plans","description":"<p>StartFragment</p>\n<h2 id=\"create-a-plan-for-a-specific-user\">Create a Plan for a Specific User</h2>\n<p>Create a new plan and associate it with a particular user.</p>\n<hr />\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><strong>POST</strong><br /><code>/api/v1/users/:userId/plans</code></p>\n<p><strong>Example</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>/api/v1/users/69644604c184de7fd9d26e1a/plans\n\n</code></pre><hr />\n<h3 id=\"description\">Description</h3>\n<p>Creates a new plan and automatically associates it with the specified user ID.</p>\n<hr />\n<h3 id=\"http-method\">HTTP Method</h3>\n<p><strong>POST</strong></p>\n<hr />\n<h3 id=\"authentication\">Authentication</h3>\n<p>🔒 <strong>Protected</strong>  </p>\n<p>Requires a valid access token.</p>\n<p><strong>Authorization Header</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: Bearer &lt;access_token&gt;\n\n</code></pre><hr />\n<h3 id=\"request-headers\">Request Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Content-Type</td>\n<td>String</td>\n<td>Yes</td>\n<td>application/json</td>\n</tr>\n<tr>\n<td>Authorization</td>\n<td>String</td>\n<td>Yes</td>\n<td>Bearer access token</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"url-parameters\">URL Parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>userId</td>\n<td>String</td>\n<td>ID of the user</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"request-body-example\">Request Body (Example)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"title\": \"Q1 Growth Plan\",\n}\n\n</code></pre><blockquote>\n</blockquote>\n<p>The <code>user</code> field is <strong>not required</strong> in the request body — it is derived from <code>userId</code>.</p>\n<hr />\n<h3 id=\"success-response\">Success Response</h3>\n<p><strong>201 Created</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"success\",\n  \"data\": {\n    \"plan\": {\n      \"_id\": \"6963c079a4b3e84b1d29e60c\",\n      \"plan\": \"Q1 Growth Plan\",\n      \"user\": \"69644604c184de7fd9d26e1a\",\n      \"createdAt\": \"2026-01-18T14:40:00.000Z\"\n    }\n  }\n}\n\n</code></pre><hr />\n<h3 id=\"error-responses\">Error Responses</h3>\n<h4 id=\"400--bad-request\">400 – Bad Request</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"Invalid input data\"\n}\n\n</code></pre><h4 id=\"401--unauthorized\">401 – Unauthorized</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"You are not logged in\"\n}\n\n</code></pre><h4 id=\"403--forbidden\">403 – Forbidden</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"You do not have permission to create a plan for this user\"\n}\n\n</code></pre><h4 id=\"404--user-not-found\">404 – User Not Found</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"fail\",\n  \"message\": \"No user found with that ID\"\n}\n\n</code></pre><h4 id=\"500--server-error\">500 – Server Error</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"status\": \"error\",\n  \"message\": \"Something went wrong\"\n}\n\n</code></pre>","urlObject":{"path":["v1","users","69644604c184de7fd9d26e1a","plans"],"host":["{{URL}}api"],"query":[],"variable":[]}},"response":[],"_postman_id":"d59e1b1e-9c37-410a-9215-610139e9168f"}],"id":"861c44d1-45a8-44fd-800b-603a32ecc4b4","_postman_id":"861c44d1-45a8-44fd-800b-603a32ecc4b4","description":""}]}