{"info":{"_postman_id":"b7214737-3ca6-48c2-8f52-abc0c57aa83c","name":"E-Commerce API Collection","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"description":"<html><head></head><body></body></html>","owner":"41713303","collectionId":"b7214737-3ca6-48c2-8f52-abc0c57aa83c","publishedId":"2sBXVbFsuN","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2025-12-27T10:39:52.000Z"},"item":[{"name":"Authentication","item":[{"name":"Login","id":"c5d08627-5683-415f-9c08-3e77ba7ec0c8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"Email\":\"rojenashehata@gmail.com\",\r\n    \"Password\":\"P@ssw0rd\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/api/Authentication/Login","description":"<p>Logs in a user and returns a <strong>JWT token</strong> to authorize access to protected endpoints.</p>\n<p>This endpoint allows clients to:</p>\n<ul>\n<li><p>Login with <strong>email and password</strong></p>\n</li>\n<li><p>Receive an <strong>authorization token (Bearer token)</strong></p>\n</li>\n<li><p>Access protected APIs (e.g., Orders, Payments)</p>\n</li>\n</ul>\n<h2 id=\"📥-request-body\">📥 Request Body</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"email\": \"string\",\n  \"password\": \"string\"\n}\n\n</code></pre>\n<hr />\n<h2 id=\"📤-responses\">📤 Responses</h2>\n<h3 id=\"✅-200-ok\">✅ 200 OK</h3>\n<p>Returns user info and an <strong>authorization token</strong>.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"email\": \"user@example.com\",\n  \"displayName\": \"John Doe\",\n  \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"\n}\n\n</code></pre>\n<hr />\n<h3 id=\"❌-400-bad-request\">❌ 400 Bad Request</h3>\n<p>Returned when the request is invalid or missing required fields.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"title\": \"Validation Error\",\n  \"status\": 400,\n  \"detail\": \"Email or password is missing or invalid.\"\n}\n\n</code></pre>\n<hr />\n<h3 id=\"❌-401-unauthorized\">❌ 401 Unauthorized</h3>\n<p>Returned when credentials are incorrect.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"title\": \"Unauthorized\",\n  \"status\": 401,\n  \"detail\": \"Invalid email or password.\"\n}  \n\n</code></pre>\n<h2 id=\"🧠-notes\">🧠 Notes</h2>\n<ul>\n<li><p>This endpoint <strong>provides authorization</strong> — the token must be included in the <code>Authorization</code> header for all protected endpoints.</p>\n</li>\n<li><p>Example for future requests:</p>\n</li>\n</ul>\n","urlObject":{"path":["api","Authentication","Login"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"3f4ce257-08f0-4585-b58b-ee531d7c82f6","name":"Login","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"Email\":\"rojenashehata@gmail.com\",\r\n    \"Password\":\"P@ssw0rd\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/api/Authentication/Login"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Date","value":"Sat, 27 Dec 2025 11:17:06 GMT"},{"key":"Server","value":"Kestrel"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"{\n    \"email\": \"rojenashehata@gmail.com\",\n    \"displayName\": \"Rojena Shehata\",\n    \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiUm9qZW5hX1NoZWhhdGEiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9lbWFpbGFkZHJlc3MiOiJyb2plbmFzaGVoYXRhQGdtYWlsLmNvbSIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvcm9sZSI6IlN1cGVyQWRtaW4iLCJleHAiOjE3NjY5MjA2MjYsImlzcyI6Imh0dHBzOi8vbG9jYWxob3N0OjcwNDciLCJhdWQiOiJNeVN0b3JlIn0.JVL7OJNCKH-A7NlyQkiAIjv-Bk4grWSAo1evIJuhCiw\"\n}"},{"id":"7038aec1-a5e2-4874-9ce9-a89e20a424ef","name":"Login","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"Email\":\"rojenashehata@gmail.com\",\r\n    \"Password\":\"P@ssw0rd\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/api/Authentication/Login"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"title\": \"Validation Error!!\",\n    \"status\": 400,\n    \"detail\": \"One or More Validation Error Occured!\",\n    \"Errors\": {\n        \"Email\": [\n            \"The Email field is not a valid e-mail address.\"\n        ]\n    }\n}"}],"_postman_id":"c5d08627-5683-415f-9c08-3e77ba7ec0c8"},{"name":"Register","id":"deaca98b-cf25-4661-aad6-d0577cb8502b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"\r\n{\r\n  \"email\": \"rojenashehata20@gmail.com\",\r\n  \"displayName\": \"roje\",\r\n  \"userName\": \"f\",\r\n  \"password\": \"ssw0rd\",\r\n  \"phoneNumber\": \"011123456789\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/api/Authentication/Register","description":"<p>Registers a new user and returns a <strong>JWT token</strong> for authorization.</p>\n<p>This endpoint allows clients to:</p>\n<ul>\n<li><p>Create a new account with email, username, display name, password, and phone number</p>\n</li>\n<li><p>Receive an <strong>authorization token (Bearer token)</strong> immediately after registration</p>\n</li>\n<li><p>Access protected endpoints without a separate login</p>\n</li>\n</ul>\n<h2 id=\"📥-request-body\">📥 Request Body</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"email\": \"string\",\n  \"displayName\": \"string\",\n  \"userName\": \"string\",\n  \"password\": \"string\",\n  \"phoneNumber\": \"string\"\n}\n\n</code></pre><hr />\n<h2 id=\"📤-responses\">📤 Responses</h2>\n<h3 id=\"✅-200-ok\">✅ 200 OK</h3>\n<p>Returns the registered user info and a <strong>Bearer token</strong> for authorization.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"email\": \"user@example.com\",\n  \"displayName\": \"John Doe\",\n  \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"\n}\n\n</code></pre>\n<h3 id=\"❌-400-bad-request\">❌ 400 Bad Request</h3>\n<p>Returned when the registration data is invalid or email/username already exists.</p>\n","urlObject":{"path":["api","Authentication","Register"],"host":[""],"query":[{"disabled":true,"key":"","value":null}],"variable":[]}},"response":[{"id":"ab9a11e5-d47c-4c9e-a87b-3079bca6f625","name":"Register","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"email\": \"rojenashehata@example.com\",\r\n  \"displayName\": \"Rojena Shehata\",\r\n  \"userName\": \"rojena.s\",\r\n  \"password\": \"P@ssw0rd123!\",\r\n  \"phoneNumber\": \"+201012345678\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/api/Authentication/Register"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Date","value":"Sat, 27 Dec 2025 11:38:21 GMT"},{"key":"Server","value":"Kestrel"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"{\n    \"email\": \"rojenashehata@example.com\",\n    \"displayName\": \"Rojena Shehata\",\n    \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoicm9qZW5hLnMiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9lbWFpbGFkZHJlc3MiOiJyb2plbmFzaGVoYXRhQGV4YW1wbGUuY29tIiwiZXhwIjoxNzY2OTIxOTAxLCJpc3MiOiJodHRwczovL2xvY2FsaG9zdDo3MDQ3IiwiYXVkIjoiTXlTdG9yZSJ9.sPONa91f-KWd59AP1AGa9v6GPu8VInoAatoQhqNHVoM\"\n}"}],"_postman_id":"deaca98b-cf25-4661-aad6-d0577cb8502b"},{"name":"EmailExists","id":"fa7cd1eb-cee5-438a-a94c-59895e3d1609","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/api/Authentication/emailExists?Email=rojenashehata@gmail.com ","description":"<p>Checks whether a given email is already registered in the system.</p>\n<h2 id=\"🔗-endpoint\">🔗 Endpoint</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>GET /api/Authentication/emailExists\n\n</code></pre><hr />\n<h2 id=\"🔍-query-parameters\">🔍 Query Parameters</h2>\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>email</td>\n<td>string</td>\n<td>The email address to check</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"📤-responses\">📤 Responses</h2>\n<h3 id=\"✅-200-ok\">✅ 200 OK</h3>\n<p>Returns <code>true</code> if the email already exists, otherwise <code>false</code>.</p>\n<h3 id=\"❌-400-bad-request\">❌ 400 Bad Request</h3>\n<p>Returned when the email parameter is missing or invalid.</p>\n","urlObject":{"path":["api","Authentication","emailExists"],"host":[""],"query":[{"key":"Email","value":"rojenashehata@gmail.com "}],"variable":[]}},"response":[{"id":"e621493a-b672-4f29-b0ee-eb7fefb9a43d","name":"EmailExists","originalRequest":{"method":"GET","header":[],"url":{"raw":"/api/Authentication/emailExists?Email=rojenashehata@gmail.com ","host":[""],"path":["api","Authentication","emailExists"],"query":[{"key":"Email","value":"rojenashehata@gmail.com "}]}},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Date","value":"Sat, 27 Dec 2025 11:39:04 GMT"},{"key":"Server","value":"Kestrel"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"true"}],"_postman_id":"fa7cd1eb-cee5-438a-a94c-59895e3d1609"},{"name":"GetCurrentUser","id":"6354f9b4-8688-4e15-b806-997040e86c67","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"GET","header":[],"url":"/api/Authentication/CurrentUser","description":"<p>Retrieves information about the <strong>currently authenticated user</strong>.</p>\n<p>This endpoint allows clients to:</p>\n<ul>\n<li><p>Verify the logged-in user session</p>\n</li>\n<li><p>Retrieve user details like email and display name</p>\n</li>\n<li><p>Refresh the Bearer token if needed</p>\n</li>\n</ul>\n<p><strong>Authorization is required</strong> via Bearer token.</p>\n<h2 id=\"🔐-authorization\">🔐 Authorization</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Bearer Token (Required)\n\n</code></pre><p><strong>Header Example:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: Bearer &lt;JWT_TOKEN&gt;\n\n</code></pre><p>StartFragment</p>\n<h2 id=\"📤-responses\">📤 Responses</h2>\n<h3 id=\"✅-200-ok\">✅ 200 OK</h3>\n<p>Returns the authenticated user's information along with a JWT token.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"email\": \"user@example.com\",\n  \"displayName\": \"John Doe\",\n  \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"\n}\n\n</code></pre>\n<hr />\n<h3 id=\"❌-401-unauthorized\">❌ 401 Unauthorized</h3>\n<p>Returned when the Bearer token is missing or invalid.</p>\n<h3 id=\"❌-404-not-found\">❌ 404 Not Found</h3>\n<p>Returned if the authenticated user does not exist in the database (rare case).</p>\n<p>EndFragment</p>\n","urlObject":{"path":["api","Authentication","CurrentUser"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"9b532ece-e4ba-45ff-a644-d2970e6794f7","name":"Get Current User","originalRequest":{"method":"GET","header":[],"url":"/api/Authentication/CurrentUser"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Date","value":"Sat, 27 Dec 2025 11:40:07 GMT"},{"key":"Server","value":"Kestrel"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"{\n    \"email\": \"rojenashehata@gmail.com\",\n    \"displayName\": \"Rojena Shehata\",\n    \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiUm9qZW5hX1NoZWhhdGEiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9lbWFpbGFkZHJlc3MiOiJyb2plbmFzaGVoYXRhQGdtYWlsLmNvbSIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvcm9sZSI6IlN1cGVyQWRtaW4iLCJleHAiOjE3NjY5MjIwMDgsImlzcyI6Imh0dHBzOi8vbG9jYWxob3N0OjcwNDciLCJhdWQiOiJNeVN0b3JlIn0.jMQGGMeYNlzSfer71NqQCRIQB3IQouHKXB6gIQwVHsc\"\n}"}],"_postman_id":"6354f9b4-8688-4e15-b806-997040e86c67"},{"name":"Get Current User Address","id":"ada8f00f-6a64-4be8-931b-23657ef6b684","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"GET","header":[],"url":"/api/Authentication/Address","description":"<p>Retrieves the <strong>saved shipping address</strong> of the currently authenticated user.</p>\n<p><strong>Authorization is required</strong> via Bearer token.</p>\n<h2 id=\"📤-responses\">📤 Responses</h2>\n<h3 id=\"✅-200-ok\">✅ 200 OK</h3>\n<p>Returns the authenticated user's address.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"firstName\": \"John\",\n  \"lastName\": \"Doe\",\n  \"street\": \"Main Street 12\",\n  \"city\": \"Cairo\",\n  \"country\": \"Egypt\"\n}\n\n</code></pre>\n<hr />\n<h3 id=\"❌-401-unauthorized\">❌ 401 Unauthorized</h3>\n<p>Returned when the Bearer token is missing or invalid.</p>\n<h3 id=\"❌-404-not-found\">❌ 404 Not Found</h3>\n<p>Returned if the user has not saved an address.</p>\n","urlObject":{"path":["api","Authentication","Address"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"a2821ace-705f-4448-8454-b24c90594d8d","name":"GetCurrentUserAddress","originalRequest":{"method":"GET","header":[],"url":"/api/Authentication/Address"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Date","value":"Sat, 27 Dec 2025 11:41:03 GMT"},{"key":"Server","value":"Kestrel"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"{\n    \"firstName\": \"Rojena\",\n    \"lastName\": \"Shehata\",\n    \"street\": \"AbdElNaser\",\n    \"city\": \"Assiut\",\n    \"country\": \"Egypt\"\n}"}],"_postman_id":"ada8f00f-6a64-4be8-931b-23657ef6b684"},{"name":"UpdateCurrentUserAddress","id":"d9b71630-8df3-418d-90f1-09b3b082e83d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n  \"firstName\": \"rojena\",\r\n  \"lastName\": \"shahata\",\r\n  \"street\": \"AbdElNaser\",\r\n  \"city\": \"Assiut\",\r\n  \"country\": \"Egypt\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/api/Authentication/Address","description":"<p>Updates the <strong>shipping address</strong> of the currently authenticated user.</p>\n<p><strong>Authorization is required</strong> via Bearer token.</p>\n<h2 id=\"📥-request-body\">📥 Request Body</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"firstName\": \"John\",\n  \"lastName\": \"Doe\",\n  \"street\": \"Main Street 12\",\n  \"city\": \"Cairo\",\n  \"country\": \"Egypt\"\n}\n\n</code></pre>\n<hr />\n<h2 id=\"📤-responses\">📤 Responses</h2>\n<h3 id=\"✅-200-ok\">✅ 200 OK</h3>\n<p>Returns the updated address.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"firstName\": \"John\",\n  \"lastName\": \"Doe\",\n  \"street\": \"Main Street 12\",\n  \"city\": \"Cairo\",\n  \"country\": \"Egypt\"\n}\n\n</code></pre>\n<h3 id=\"❌-400-bad-request\">❌ 400 Bad Request</h3>\n<p>Returned when the request body is invalid or missing required fields.</p>\n<h3 id=\"❌-401-unauthorized\">❌ 401 Unauthorized</h3>\n<p>Returned when the Bearer token is missing or invalid.</p>\n","urlObject":{"path":["api","Authentication","Address"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"9cd24012-8a76-44ef-92d9-008244f301af","name":"New Request","originalRequest":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n  \"firstName\": \"Rojena\",\r\n  \"lastName\": \"Shehata\",\r\n  \"street\": \"Sheikh Zayed Road, Business Bay\",\r\n  \"city\": \"Dubai\",\r\n  \"country\": \"United Arab Emirates\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/api/Authentication/Address"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"},{"key":"Date","value":"Sat, 27 Dec 2025 11:43:53 GMT"},{"key":"Server","value":"Kestrel"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"firstName\": \"Rojena\",\n    \"lastName\": \"Shehata\",\n    \"street\": \"Sheikh Zayed Road, Business Bay\",\n    \"city\": \"Dubai\",\n    \"country\": \"United Arab Emirates\"\n}"}],"_postman_id":"d9b71630-8df3-418d-90f1-09b3b082e83d"}],"id":"00d374b3-49f2-4a27-bdc9-537789049fd1","_postman_id":"00d374b3-49f2-4a27-bdc9-537789049fd1","description":""},{"name":"Products","item":[{"name":"Get all Products","id":"6ea5fc69-e1b2-47e8-96d5-ecf0194af85d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"url":"/api/Products?Search=jea&PageSize=2","description":"<p>Retrieves a paginated list of products with optional filtering, searching, and sorting.</p>\n<p>This endpoint allows clients to:</p>\n<ul>\n<li><p>Filter products by Brand and Type</p>\n</li>\n<li><p>Search products by name</p>\n</li>\n<li><p>Sort results by name or price</p>\n</li>\n<li><p>Control pagination using page number and page size</p>\n</li>\n</ul>\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>BrandId</td>\n<td>int?</td>\n<td>Filters products by brand ID</td>\n</tr>\n<tr>\n<td>TypeId</td>\n<td>string?</td>\n<td>Filters products by type</td>\n</tr>\n<tr>\n<td>Search</td>\n<td>string?</td>\n<td>Searches products by name</td>\n</tr>\n<tr>\n<td>sort</td>\n<td>int?</td>\n<td>Sorting option (see below)</td>\n</tr>\n<tr>\n<td>PageNumber</td>\n<td>int</td>\n<td>Page number to retrieve (default: 1)</td>\n</tr>\n<tr>\n<td>PageSize</td>\n<td>int</td>\n<td>Number of items per page</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"🔃-sorting-options\">🔃 Sorting Options</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">1 – Name (Ascending)\n2 – Name (Descending)\n3 – Price (Ascending)\n4 – Price (Descendin\n\n</code></pre>\n<h2 id=\"📤-responses\">📤 Responses</h2>\n<h3 id=\"✅-200-ok\">✅ 200 OK</h3>\n<p>Returns the product details.</p>\n","urlObject":{"path":["api","Products"],"host":[""],"query":[{"disabled":true,"key":"BrandId","value":"30"},{"disabled":true,"key":"TypeId","value":"hh"},{"key":"Search","value":"jea"},{"disabled":true,"key":"sort","value":"1"},{"disabled":true,"key":"PageNumber","value":"3"},{"key":"PageSize","value":"2"}],"variable":[]}},"response":[{"id":"a7a1de36-66ff-42c7-9cb6-e91e0432e71f","name":"Get all Products","originalRequest":{"method":"GET","header":[],"url":{"raw":"/api/Products?PageNumber=1&BrandId=2","host":[""],"path":["api","Products"],"query":[{"key":"TypeId","value":"1","disabled":true},{"key":"Search","value":"jea","disabled":true},{"key":"sort","value":"1","disabled":true},{"key":"PageNumber","value":"3","disabled":true},{"key":"PageNumber","value":"1"},{"key":"PageSize","value":"2","disabled":true},{"key":"BrandId","value":"2"}]}},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"},{"key":"Date","value":"Sat, 27 Dec 2025 10:53:15 GMT"},{"key":"Server","value":"Kestrel"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"title\": \"Validation Error!!\",\n    \"status\": 400,\n    \"detail\": \"One or More Validation Error Occured!\",\n    \"Errors\": {\n        \"PageNumber\": [\n            \"The value 'tt' is not valid for PageNumber.\"\n        ]\n    }\n}"},{"id":"9b237152-0b85-4f03-a0a2-a73039030c69","name":"Get all Products","originalRequest":{"method":"GET","header":[],"url":{"raw":"/api/Products?Search=jea&PageSize=","host":[""],"path":["api","Products"],"query":[{"key":"BrandId","value":"30","disabled":true},{"key":"TypeId","value":"hh","disabled":true},{"key":"Search","value":"jea"},{"key":"sort","value":"1","type":"text","disabled":true},{"key":"PageNumber","value":"3","disabled":true},{"key":"PageSize","value":""}]}},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"pageIndex\": 1,\n    \"pageSize\": 1,\n    \"count\": 1,\n    \"data\": [\n        {\n            \"id\": 4,\n            \"name\": \"Slim Fit Jeans\",\n            \"description\": \"These mid-rise slim fit jeans offer a comfortable stretch and a stylish look for all occasions.\",\n            \"pictureUrl\": \"https://localhost:7047/images/products/SlimFitJeans.jpg\",\n            \"price\": 350,\n            \"productBrand\": \"ZARA\",\n            \"productType\": \"Bottoms\"\n        }\n    ]\n}"},{"id":"bd3b84ae-53e6-499e-822d-8f7408dd0b23","name":"Get all Products","originalRequest":{"method":"GET","header":[],"url":{"raw":"/api/Products?TypeId=1&PageSize=2","host":[""],"path":["api","Products"],"query":[{"key":"BrandId","value":"30","disabled":true},{"key":"TypeId","value":"1"},{"key":"Search","value":"jea","disabled":true},{"key":"sort","value":"1","type":"text","disabled":true},{"key":"PageNumber","value":"3","disabled":true},{"key":"PageSize","value":"2"}]}},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"pageIndex\": 1,\n    \"pageSize\": 2,\n    \"count\": 4,\n    \"data\": [\n        {\n            \"id\": 3,\n            \"name\": \"Classic White T-Shirt\",\n            \"description\": \"A soft cotton white t-shirt that goes with everything. Perfect for casual everyday wear.\",\n            \"pictureUrl\": \"https://localhost:7047/images/products/ClassicWhiteTShirt.jpeg\",\n            \"price\": 120,\n            \"productBrand\": \"H&M\",\n            \"productType\": \"Tops\"\n        },\n        {\n            \"id\": 6,\n            \"name\": \"Cotton Hoodie\",\n            \"description\": \"Soft and cozy cotton hoodie with adjustable drawstring and kangaroo pocket. Ideal for cool evenings.\",\n            \"pictureUrl\": \"https://localhost:7047/images/products/CottonHoodie.jpg\",\n            \"price\": 400,\n            \"productBrand\": \"Nike\",\n            \"productType\": \"Tops\"\n        }\n    ]\n}"}],"_postman_id":"6ea5fc69-e1b2-47e8-96d5-ecf0194af85d"},{"name":"Get Product By Id","id":"74f18ced-8ae7-40e6-9140-14f35443cbaf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"url":"/api/Products/4","description":"<h2 id=\"description\">Description</h2>\n<p>Retrieves the <strong>details of a single product</strong> using its unique identifier.</p>\n<p>This endpoint allows clients to:</p>\n<ul>\n<li><p>Get full product information by <strong>Product ID</strong></p>\n</li>\n<li><p>Retrieve related data such as <strong>Brand</strong> and <strong>Product Type</strong></p>\n</li>\n<li><p>Handle cases where the requested product does not exist</p>\n</li>\n</ul>\n<hr />\n<h2 id=\"📤-responses\">📤 Responses</h2>\n<h3 id=\"✅-200-ok\">✅ 200 OK</h3>\n<p>Returns the product details</p>\n<h3 id=\"❌-404-not-found\">❌ 404 Not Found</h3>\n<p>Returned when the product with the specified ID does not exist.</p>\n<h4 id=\"not-found-endpoint\">Not Found Endpoint</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"title\": \"Error While Processing The HTTP Request..EndPoint Not Found\",\n    \"status\": 404,\n    \"detail\": \"EndPoint /api/Produc/4 Not Found\",\n    \"instance\": \"/api/Produc/4\"\n}\n\n</code></pre>\n<h4 id=\"not-found-product\">Not Found Product</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"type\": \"NotFound\",\n    \"title\": \"Product.NotFound\",\n    \"status\": 404,\n    \"detail\": \"Product With Id:100 Is Not Found\",\n    \"traceId\": \"00-6a96c32bb07f13b2ffedf08cc24a5713-885900f0104398cb-00\"\n}\n\n</code></pre>\n<h3 id=\"❌-400-bad-request\">❌ 400 Bad Request</h3>\n<p>Returned when the provided product ID is invalid.</p>\n","urlObject":{"path":["api","Products","4"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"42385d36-f0b3-4586-a004-3c2391b18b0b","name":"Get Product By Id","originalRequest":{"method":"GET","header":[{"key":"","value":"","type":"text","disabled":true}],"url":"/api/Products/4"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"},{"key":"Date","value":"Sat, 27 Dec 2025 10:51:52 GMT"},{"key":"Server","value":"Kestrel"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"id\": 4,\n    \"name\": \"Slim Fit Jeans\",\n    \"description\": \"These mid-rise slim fit jeans offer a comfortable stretch and a stylish look for all occasions.\",\n    \"pictureUrl\": \"https://localhost:7047/images/products/SlimFitJeans.jpg\",\n    \"price\": 350,\n    \"productBrand\": \"ZARA\",\n    \"productType\": \"Bottoms\"\n}"},{"id":"43447750-9789-40f3-b08f-45ce04c49f78","name":"Get Product By Id_Not Found Product","originalRequest":{"method":"GET","header":[{"key":"","value":"","type":"text","disabled":true}],"url":"/api/Products/100"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"type\": \"NotFound\",\n    \"title\": \"Product.NotFound\",\n    \"status\": 404,\n    \"detail\": \"Product With Id:100 Is Not Found\",\n    \"traceId\": \"00-6a96c32bb07f13b2ffedf08cc24a5713-885900f0104398cb-00\"\n}"},{"id":"9bb47275-945f-4792-85c3-2553ff70a6db","name":"Get Product By Id_Not Found Endpoint","originalRequest":{"method":"GET","header":[{"key":"","value":"","type":"text","disabled":true}],"url":"/api/Produc/4"},"status":"Not Found","code":404,"_postman_previewlanguage":"","header":[],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\r\n    \"title\": \"Error While Processing The HTTP Request..EndPoint Not Found\",\r\n    \"status\": 404,\r\n    \"detail\": \"EndPoint /api/Produc/4 Not Found\",\r\n    \"instance\": \"/api/Produc/4\"\r\n}"}],"_postman_id":"74f18ced-8ae7-40e6-9140-14f35443cbaf"},{"name":"Get All Brands","id":"7db2815b-d5f4-49b0-bea2-6dd71848b12f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/api/Products/Brands","description":"<p>Retrieves a list of <strong>all available product brands</strong>.</p>\n<p>This endpoint allows clients to:</p>\n<ul>\n<li><p>Get all product brands used in the system</p>\n</li>\n<li><p>Display brand names for product selection</p>\n</li>\n</ul>\n<h2 id=\"📤-responses\">📤 Responses</h2>\n<h3 id=\"✅-200-ok\">✅ 200 OK</h3>\n<p>Returns a list of product brands.</p>\n","urlObject":{"path":["api","Products","Brands"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"bc4e8353-51a6-4520-b124-8c072247bde0","name":"Get All Brands","originalRequest":{"method":"GET","header":[],"url":"/api/Products/Brands"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Date","value":"Sat, 27 Dec 2025 10:52:44 GMT"},{"key":"Server","value":"Kestrel"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 1,\n        \"name\": \"H&M\"\n    },\n    {\n        \"id\": 2,\n        \"name\": \"ZARA\"\n    },\n    {\n        \"id\": 3,\n        \"name\": \"Nike\"\n    },\n    {\n        \"id\": 4,\n        \"name\": \"Activ\"\n    },\n    {\n        \"id\": 5,\n        \"name\": \"Mango\"\n    },\n    {\n        \"id\": 6,\n        \"name\": \"Levi's\"\n    }\n]"}],"_postman_id":"7db2815b-d5f4-49b0-bea2-6dd71848b12f"},{"name":"Get All Types","id":"f8825bfb-e80c-4e01-9e0c-a38a7b42fd8e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/api/Products/Types","description":"<p>Retrieves a list of <strong>all available product types</strong>.</p>\n<p>This endpoint allows clients to:</p>\n<ul>\n<li><p>Get all product types used in the system</p>\n</li>\n<li><p>Display type names for product selection</p>\n</li>\n</ul>\n<h2 id=\"📤-responses\">📤 Responses</h2>\n<h3 id=\"✅-200-ok\">✅ 200 OK</h3>\n<p>Returns a list of product brands.</p>\n","urlObject":{"path":["api","Products","Types"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"73b9835c-c4f0-4588-9f5c-e9e85538cc01","name":"Get All Types","originalRequest":{"method":"GET","header":[],"url":"/api/Products/Types"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Date","value":"Sat, 27 Dec 2025 10:52:56 GMT"},{"key":"Server","value":"Kestrel"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 1,\n        \"name\": \"Tops\"\n    },\n    {\n        \"id\": 2,\n        \"name\": \"Bottoms\"\n    },\n    {\n        \"id\": 3,\n        \"name\": \"Outerwear & Dresses\"\n    },\n    {\n        \"id\": 4,\n        \"name\": \"Accessories & Footwear\"\n    }\n]"}],"_postman_id":"f8825bfb-e80c-4e01-9e0c-a38a7b42fd8e"},{"name":"Get Image","id":"604a7ab0-76e4-4cae-8da4-40db361a61e1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://localhost:7047/images/products/SlimFitJeans.jpg","urlObject":{"protocol":"https","port":"7047","path":["images","products","SlimFitJeans.jpg"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"604a7ab0-76e4-4cae-8da4-40db361a61e1"}],"id":"e5305bca-62da-484c-8a21-020e1cd4aa65","_postman_id":"e5305bca-62da-484c-8a21-020e1cd4aa65","description":""},{"name":"Baskets","item":[{"name":"Get Basket","id":"abbde19b-aa1b-47e0-bff4-d0a26254d919","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/api/Baskets?Id=Basket02","description":"<p>This endpoint allows clients to:</p>\n<ul>\n<li><p>Retrieve the current basket state</p>\n</li>\n<li><p>Display basket items and totals</p>\n</li>\n<li><p>Resume a user’s shopping session</p>\n</li>\n</ul>\n<h2 id=\"🔗-endpoint\">🔗 Endpoint</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>GET /api/Baskets\n\n</code></pre><hr />\n<h2 id=\"🔍-query-parameter\">🔍 Query Parameter</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Id</td>\n<td>string</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"📤-responses\">📤 Responses</h2>\n<h3 id=\"✅-200-ok\">✅ 200 OK</h3>\n<p>Returns the basket details.</p>\n<h3 id=\"❌-400-bad-request\">❌ 400 Bad Request</h3>\n<p>Returned when the basket ID query parameter is missing or invalid.</p>\n","urlObject":{"path":["api","Baskets"],"host":[""],"query":[{"key":"Id","value":"Basket02"}],"variable":[]}},"response":[{"id":"3bf7a17e-7034-4d09-9498-68e14e669b57","name":"Get Basket","originalRequest":{"method":"GET","header":[],"url":{"raw":"/api/Baskets?Id=Basket02","host":[""],"path":["api","Baskets"],"query":[{"key":"Id","value":"Basket02"}]}},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Date","value":"Sat, 27 Dec 2025 11:10:05 GMT"},{"key":"Server","value":"Kestrel"},{"key":"Transfer-Encoding","value":"chunked"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"Basket02\",\n    \"items\": [\n        {\n            \"id\": 3,\n            \"productName\": \"product01\",\n            \"pictureUrl\": \"images/products/ClassicWhiteTShirt.jpeg\",\n            \"price\": 100,\n            \"quantity\": 200\n        }\n    ],\n    \"clientSecret\": null,\n    \"paymentIntentId\": null,\n    \"deliveryMethodId\": null,\n    \"shippingPrice\": null\n}"}],"_postman_id":"abbde19b-aa1b-47e0-bff4-d0a26254d919"},{"name":"Create or Update Basket","id":"ea412faa-aa23-45a8-9cdd-68db81b980e0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"id\": \"string\",\r\n  \"items\": [\r\n    {\r\n      \"id\": 0,\r\n      \"productName\": \"string\",\r\n      \"pictureUrl\": \"string\",\r\n      \"price\": 0,\r\n      \"quantity\": 0\r\n    }\r\n  ],\r\n  \"clientSecret\": \"string\",\r\n  \"paymentIntentId\": \"string\",\r\n  \"deliveryMethodId\": 0,\r\n  \"shippingPrice\": 0\r\n}","options":{"raw":{"language":"json"}}},"url":"/api/Baskets","description":"<p>The <strong>basket ID is generated on the client side</strong> and sent with the request.</p>\n<p>If a basket with the provided ID already exists, it will be <strong>updated</strong>.</p>\n<p>If it does not exist, a <strong>new basket</strong> will be created using the same ID.</p>\n<p>This endpoint allows clients to:</p>\n<ul>\n<li><p>Create and manage a user basket</p>\n</li>\n<li><p>Add or update basket items</p>\n</li>\n<li><p>Set delivery method and shipping price</p>\n</li>\n<li><p>Store payment intent information for checkout</p>\n</li>\n</ul>\n<h2 id=\"request-body\">Request Body</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"id\": \"string\",\n  \"items\": [\n    {\n      \"id\": 0,\n      \"productName\": \"string\",\n      \"pictureUrl\": \"string\",\n      \"price\": 0,\n      \"quantity\": 0\n    }\n  ],\n  \"clientSecret\": \"string\",\n  \"paymentIntentId\": \"string\",\n  \"deliveryMethodId\": 0,\n  \"shippingPrice\": 0\n}\n\n</code></pre>\n<hr />\n<h2 id=\"📤-responses\">📤 Responses</h2>\n<h3 id=\"✅-200-ok\">✅ 200 OK</h3>\n<p>Returns the created or updated basket</p>\n<h3 id=\"❌-400-bad-request\">❌ 400 Bad Request</h3>\n<p>Returned when the request body is invalid.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"title\": \"Validation Error\",\n  \"status\": 400,\n  \"detail\": \"One or more validation errors occurred.\"\n}\n\n</code></pre><hr />\n<h2 id=\"🧠-notes\">🧠 Notes</h2>\n<ul>\n<li><p>The <code>id</code> is <strong>required</strong> and must be generated on the <strong>client side</strong> (e.g., UUID).</p>\n</li>\n<li><p>The same basket ID is reused for updates.</p>\n</li>\n<li><p>Item quantities overwrite previous values.</p>\n</li>\n<li><p>Payment fields are optional until checkout.</p>\n</li>\n</ul>\n","urlObject":{"path":["api","Baskets"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"ea412faa-aa23-45a8-9cdd-68db81b980e0"},{"name":"Delete Basket","id":"38243409-4f69-419b-bc5f-65dab4af9e54","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"body":{"mode":"raw","raw":"{\r\n    \"Id\":\"Basket02\",\r\n    \"Items\":\r\n    [\r\n        {\r\n            \"Id\":1,\r\n            \"ProductName\":\"product01\",\r\n            \"PictureUrl\":\"test\",\r\n            \"Price\":100,\r\n            \"Quantity\":\"200\"\r\n        }\r\n    ]\r\n}"},"url":"/api/Baskets/Basket01","description":"<p>StartFragment</p>\n<p>Deletes an existing shopping basket using its unique identifier.<br />This endpoint allows clients to:</p>\n<ul>\n<li><p>Remove a basket when checkout is completed</p>\n</li>\n<li><p>Clear the basket on logout</p>\n</li>\n<li><p>Reset the shopping cart state</p>\n</li>\n</ul>\n<h2 id=\"🔗-endpoint\">🔗 Endpoint</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">DELETE /api/Baskets/{id}\n\n</code></pre>\n<h2 id=\"📤-responses\">📤 Responses</h2>\n<h3 id=\"✅-200-ok\">✅ 200 OK</h3>\n<p>Returns <code>true</code> if the basket was deleted successfully, otherwise <code>false</code>.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>true\n\n</code></pre><hr />\n<h3 id=\"❌-404-not-found\">❌ 404 Not Found</h3>\n<p>Returned when the basket with the specified ID does not exist.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"title\": \"Not Found\",\n  \"status\": 404,\n  \"detail\": \"Basket with the specified ID was not found.\"\n}\n\n</code></pre>\n<hr />\n<h3 id=\"❌-400-bad-request\">❌ 400 Bad Request</h3>\n<p>Returned when the provided basket ID is invalid.</p>\n<p>EndFragment</p>\n","urlObject":{"path":["api","Baskets","Basket01"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"38243409-4f69-419b-bc5f-65dab4af9e54"}],"id":"fce1cacc-36ae-4243-bed0-31e11a461701","_postman_id":"fce1cacc-36ae-4243-bed0-31e11a461701","description":""},{"name":"Orders","item":[{"name":"CreateOrder","id":"e92f7d84-f288-41eb-867a-54746841bca8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"baskedId\": \"Basket02\",\r\n  \"deliveryMethodId\": 2,\r\n  \"address\": {\r\n    \"firstName\": \"Rojena\",\r\n    \"lastName\": \"Shehata\",\r\n    \"city\": \"Cairo\",\r\n    \"street\": \"Nasr City, Street 10\",\r\n    \"country\": \"Egypt\"\r\n  }\r\n}\r\n","options":{"raw":{"language":"json"}}},"url":"/api/Orders","description":"<p>Creates a new order from the user’s shopping basket.</p>\n<p>This endpoint allows <strong>authenticated users</strong> to:</p>\n<ul>\n<li><p>Create an order using an existing basket</p>\n</li>\n<li><p>Choose a delivery method</p>\n</li>\n<li><p>Provide shipping address details</p>\n</li>\n<li><p>Complete the checkout process</p>\n</li>\n</ul>\n<p>Creates a new order from the user’s shopping basket.</p>\n<p>This endpoint allows <strong>authenticated users</strong> to:</p>\n<ul>\n<li><p>Create an order using an existing basket</p>\n</li>\n<li><p>Choose a delivery method</p>\n</li>\n<li><p>Provide shipping address details</p>\n</li>\n<li><p>Complete the checkout process</p>\n</li>\n</ul>\n<p>The order is created using the <strong>client-generated basket ID</strong> and is associated with the <strong>authenticated user</strong>.</p>\n<hr />\n<h2 id=\"🔗-endpoint\">🔗 Endpoint</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>POST /api/Orders\n\n</code></pre><hr />\n<h2 id=\"🔐-authorization\">🔐 Authorization</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Bearer Token (Required)\n\n</code></pre><p><strong>Header Example:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: Bearer &lt;JWT_TOKEN&gt;\n\n</code></pre><hr />\n<h2 id=\"📥-request-body\">📥 Request Body</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"basketId\": \"string\",\n  \"deliveryMethodId\": 0,\n  \"shipToAddress\": {\n    \"firstName\": \"string\",\n    \"lastName\": \"string\",\n    \"city\": \"string\",\n    \"street\": \"string\",\n    \"country\": \"string\"\n  }\n}\n\n</code></pre>\n<h2 id=\"📤-responses\">📤 Responses</h2>\n<h3 id=\"✅-200-ok\">✅ 200 OK</h3>\n<p>Returns the created order details.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"id\": 15,\n  \"buyerEmail\": \"user@example.com\",\n  \"orderDate\": \"2025-01-10T14:30:00Z\",\n  \"status\": \"Pending\",\n  \"shipToAddress\": {\n    \"firstName\": \"John\",\n    \"lastName\": \"Doe\",\n    \"city\": \"Cairo\",\n    \"street\": \"Main Street 12\",\n    \"country\": \"Egypt\"\n  },\n  \"deliveryMethod\": \"Standard Delivery\",\n  \"shippingPrice\": 30,\n  \"subtotal\": 240,\n  \"total\": 270,\n  \"orderItems\": [\n    {\n      \"productId\": 3,\n      \"productName\": \"Classic White T-Shirt\",\n      \"pictureUrl\": \"https://localhost:7047/images/products/ClassicWhiteTShirt.jpeg\",\n      \"price\": 120,\n      \"quantity\": 2\n    }\n  ]\n}\n\n</code></pre>\n<hr />\n<h3 id=\"❌-400-bad-request\">❌ 400 Bad Request</h3>\n<p>Returned when the request body is invalid or the basket is empty.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"title\": \"Validation Error\",\n  \"status\": 400,\n  \"detail\": \"Invalid order data or empty basket.\"\n}\n\n</code></pre>\n<hr />\n<h3 id=\"❌-401-unauthorized\">❌ 401 Unauthorized</h3>\n<p>Returned when the Bearer token is missing or invalid.</p>\n<hr />\n<h3 id=\"❌-404-not-found\">❌ 404 Not Found</h3>\n<p>Returned when the basket or delivery method does not exist.</p>\n<h2 id=\"🧠-notes\">🧠 Notes</h2>\n<ul>\n<li><p>Authentication is <strong>required</strong>.</p>\n</li>\n<li><p>The basket must exist and contain items.</p>\n</li>\n<li><p>The basket is cleared after successful order creation.</p>\n</li>\n<li><p>Returning <strong>200 OK</strong> simplifies frontend handling of the response.</p>\n</li>\n</ul>\n","urlObject":{"path":["api","Orders"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"e92f7d84-f288-41eb-867a-54746841bca8"},{"name":"GetAllDeliveryMethods","id":"b9791017-18b5-4088-ad46-69ace1c96d4d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"url":"/api/Orders/deliveryMethods","description":"<p>StartFragment</p>\n<p>Retrieves a list of <strong>available delivery methods</strong> that can be used during checkout.</p>\n<p>This endpoint allows clients to:</p>\n<ul>\n<li><p>Display delivery options to users</p>\n</li>\n<li><p>Show delivery time and cost information</p>\n</li>\n<li><p>Select a delivery method when creating an order</p>\n</li>\n</ul>\n<p>EndFragment</p>\n<p>StartFragment</p>\n<h2 id=\"📤-responses\">📤 Responses</h2>\n<h3 id=\"✅-200-ok\">✅ 200 OK</h3>\n<p>Returns a list of delivery methods.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">[\n  {\n    \"id\": 5,\n    \"shortName\": \"UPS1\",\n    \"description\": \"Fastest delivery time\",\n    \"deliveryTime\": \"1-2 Days\",\n    \"cost\": 0.00\n  },\n  {\n    \"id\": 6,\n    \"shortName\": \"UPS2\",\n    \"description\": \"Get it within 5 days\",\n    \"deliveryTime\": \"2-5 Days\",\n    \"cost\": 0.00\n  },\n  {\n    \"id\": 7,\n    \"shortName\": \"UPS3\",\n    \"description\": \"Slower but cheap\",\n    \"deliveryTime\": \"5-10 Days\",\n    \"cost\": 0.00\n  },\n  {\n    \"id\": 8,\n    \"shortName\": \"FREE\",\n    \"description\": \"Free! You get what you pay for\",\n    \"deliveryTime\": \"1-2 Weeks\",\n    \"cost\": 0.00\n  }\n]\n\n</code></pre>\n<hr />\n<h3 id=\"❌-404-not-found\">❌ 404 Not Found</h3>\n<p>Returned when no delivery methods are available.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"title\": \"Not Found\",\n  \"status\": 404,\n  \"detail\": \"No delivery methods were found.\"\n}\n\n</code></pre>\n<hr />\n<h2 id=\"🧠-notes\">🧠 Notes</h2>\n<ul>\n<li><p>This endpoint does not require authentication.</p>\n</li>\n<li><p>Delivery methods are used when creating an order.</p>\n</li>\n<li><p>The delivery cost is added to the order total during checkout.</p>\n</li>\n</ul>\n","urlObject":{"path":["api","Orders","deliveryMethods"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"b9791017-18b5-4088-ad46-69ace1c96d4d"},{"name":"GetOrderForSpecificUserById","id":"cdd7f985-8a48-479a-a713-407aa3a69c7a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[{"key":"Authorization","value":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiUm9qZW5hX1NoZWhhdGEiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9lbWFpbGFkZHJlc3MiOiJyb2plbmFzaGVoYXRhQGdtYWlsLmNvbSIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvcm9sZSI6IlN1cGVyQWRtaW4iLCJleHAiOjE3NjU1MDAzNjgsImlzcyI6Imh0dHBzOi8vbG9jYWxob3N0OjcwNDciLCJhdWQiOiJNeVN0b3JlIn0.NT2YtKLe9NTOD58u2eSjgXfvJ6-jhTdEImZe_JgwmIo","type":"text"}],"url":"/api/Orders/d93b29c1-cd22-4ab1-48aa-08de35447325","description":"<p>Retrieves the details of a specific order for the <strong>authenticated user</strong> by order ID.</p>\n<p>This endpoint allows clients to:</p>\n<ul>\n<li><p>Fetch a single order for the currently logged-in user</p>\n</li>\n<li><p>Display order items, totals, and shipping information</p>\n</li>\n<li><p>Track order status and details</p>\n</li>\n</ul>\n<p><strong>Authorization is required</strong> via Bearer token.</p>\n<h2 id=\"📤-responses\">📤 Responses</h2>\n<h3 id=\"✅-200-ok\">✅ 200 OK</h3>\n<p>Returns the order details.</p>\n<h3 id=\"❌-401-unauthorized\">❌ 401 Unauthorized</h3>\n<p>Returned when the Bearer token is missing or invalid.</p>\n<h3 id=\"❌-404-not-found\">❌ 404 Not Found</h3>\n<p>Returned when the order does not exist or does not belong to the authenticated user.</p>\n<h3 id=\"❌-400-bad-request\">❌ 400 Bad Request</h3>\n<p>Returned when the provided order ID is invalid.</p>\n<h2 id=\"🧠-notes\">🧠 Notes</h2>\n<ul>\n<li><p>This endpoint <strong>requires authentication</strong>.</p>\n</li>\n<li><p>Users can only access their own orders.</p>\n</li>\n<li><p>Useful for order tracking, order details pages, and checkout history.</p>\n</li>\n</ul>\n","urlObject":{"path":["api","Orders","d93b29c1-cd22-4ab1-48aa-08de35447325"],"host":[""],"query":[{"disabled":true,"key":"","value":""}],"variable":[]}},"response":[],"_postman_id":"cdd7f985-8a48-479a-a713-407aa3a69c7a"},{"name":"GetAllOrdersForSpecificUserAsync","id":"c1914f8a-05bc-44f5-95a5-1426b49e3958","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[{"key":"Authorization","value":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiUm9qZW5hX1NoZWhhdGEiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9lbWFpbGFkZHJlc3MiOiJyb2plbmFzaGVoYXRhQGdtYWlsLmNvbSIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvcm9sZSI6IlN1cGVyQWRtaW4iLCJleHAiOjE3NjU1MDAzNjgsImlzcyI6Imh0dHBzOi8vbG9jYWxob3N0OjcwNDciLCJhdWQiOiJNeVN0b3JlIn0.NT2YtKLe9NTOD58u2eSjgXfvJ6-jhTdEImZe_JgwmIo","type":"text"}],"url":"/api/orders","description":"<p>StartFragment</p>\n<p>Retrieves <strong>all orders for the authenticated user</strong>.</p>\n<p>This endpoint allows clients to:</p>\n<ul>\n<li><p>Fetch a list of all orders placed by the logged-in user</p>\n</li>\n<li><p>Display order summaries, statuses, and totals</p>\n</li>\n<li><p>Support order history or account dashboard functionality</p>\n</li>\n</ul>\n<p><strong>Authorization is required</strong> via Bearer token.</p>\n<p>EndFragment</p>\n<p>StartFragment</p>\n<h2 id=\"📤-responses\">📤 Responses</h2>\n<h3 id=\"✅-200-ok\">✅ 200 OK</h3>\n<p>Returns a list of orders for the authenticated user.</p>\n<p>EndFragment  </p>\n<p>StartFragment</p>\n<h3 id=\"❌-401-unauthorized\">❌ 401 Unauthorized</h3>\n<p>Returned when the Bearer token is missing or invalid.</p>\n<p>EndFragment<br />StartFragment</p>\n<h2 id=\"notes\">Notes</h2>\n<ul>\n<li><p>This endpoint <strong>requires authentication</strong>.</p>\n</li>\n<li><p>Returns only orders belonging to the <strong>authenticated user</strong>.</p>\n</li>\n</ul>\n<p>EndFragment</p>\n","urlObject":{"path":["api","orders"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"c1914f8a-05bc-44f5-95a5-1426b49e3958"}],"id":"11b1bbb2-aa97-4433-830b-c0d78cf3ad8b","_postman_id":"11b1bbb2-aa97-4433-830b-c0d78cf3ad8b","description":""},{"name":"Payments","item":[{"name":"CreateORUpdatePaymentIntent","id":"5d10c8f5-63f3-4f72-9d6b-28f353c3e92a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[],"url":"/api/Payments/b1bd6fd3-998f-4f28-b6b8-2e4d76ca55e4","urlObject":{"path":["api","Payments","b1bd6fd3-998f-4f28-b6b8-2e4d76ca55e4"],"host":[""],"query":[],"variable":[]}},"response":[],"_postman_id":"5d10c8f5-63f3-4f72-9d6b-28f353c3e92a"},{"name":"Webhook","id":"3e990365-c750-490b-9d48-167f8ff06c24","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"urlObject":{"query":[],"variable":[]},"url":""},"response":[],"_postman_id":"3e990365-c750-490b-9d48-167f8ff06c24"}],"id":"def94b3e-9f67-452a-951f-698960759d21","_postman_id":"def94b3e-9f67-452a-951f-698960759d21","description":""}],"event":[{"listen":"prerequest","script":{"id":"ead3f25e-5a44-48a6-a327-230860e95c1d","type":"text/javascript","packages":{},"requests":{},"exec":[""]}},{"listen":"test","script":{"id":"250369fd-276d-44aa-aa54-1707f0ff6b03","type":"text/javascript","packages":{},"requests":{},"exec":[""]}}],"variable":[{"key":"BaseUrl","value":""}]}