{
  "info": {
    "_postman_id": "e3f6b6a0-4c1a-4b1e-9c1a-ecommercemvccore-api",
    "name": "eCommerceMVCCore API",
    "description": "JSON REST API for eCommerceMVCCore (.NET 10 port) — covers /api/Token authentication and every endpoint under Areas/API (Storefront, Cart, Orders, Account). Every route except /api/Token is relative to /api/{{lang}}.\n\nRun \"Auth > Issue Token\" first — its test script automatically saves the returned access_token into the {{token}} collection variable, which every authenticated request below uses via Bearer auth.\n\nSee api.html in this same Documentation folder for the full narrative reference (response envelope shape, auth rules, etc).",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    { "key": "baseUrl", "value": "http://localhost:5209", "type": "string" },
    { "key": "lang", "value": "en", "type": "string" },
    { "key": "token", "value": "", "type": "string" },
    { "key": "productId", "value": "149", "type": "string" },
    { "key": "orderId", "value": "10", "type": "string" },
    { "key": "username", "value": "adm_use", "type": "string" },
    { "key": "password", "value": "adm_use123", "type": "string" }
  ],
  "item": [
    {
      "name": "Auth",
      "item": [
        {
          "name": "Issue Token",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// Saves the access_token into the {{token}} collection variable so every",
                  "// request in the Account (Users) folder below can reuse it via Bearer auth.",
                  "if (pm.response.code === 200) {",
                  "  const json = pm.response.json();",
                  "  pm.collectionVariables.set('token', json.access_token);",
                  "  pm.test('Token issued', () => pm.expect(json.access_token).to.be.a('string'));",
                  "} else {",
                  "  pm.test('Token issue failed - check username/password variables', () => pm.expect(pm.response.code).to.eql(200));",
                  "}"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/x-www-form-urlencoded" }
            ],
            "body": {
              "mode": "urlencoded",
              "urlencoded": [
                { "key": "grant_type", "value": "password", "type": "text" },
                { "key": "username", "value": "{{username}}", "type": "text" },
                { "key": "password", "value": "{{password}}", "type": "text" }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/api/Token",
              "host": [ "{{baseUrl}}" ],
              "path": [ "api", "Token" ]
            },
            "description": "Password-grant token issuance. Only grant_type=password is supported. Response includes access_token (JWT, containing role claims), token_type, expires_in (seconds), userID, userName, pictureURL."
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [{ "key": "Content-Type", "value": "application/x-www-form-urlencoded" }],
                "body": { "mode": "urlencoded", "urlencoded": [
                  { "key": "grant_type", "value": "password" },
                  { "key": "username", "value": "adm_use" },
                  { "key": "password", "value": "adm_use123" }
                ]},
                "url": { "raw": "{{baseUrl}}/api/Token", "host": ["{{baseUrl}}"], "path": ["api","Token"] }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"access_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n  \"token_type\": \"bearer\",\n  \"expires_in\": 1209599,\n  \"userID\": \"86344938-10f6-4e38-9eb4-3b756766ef78\",\n  \"userName\": \"adm_use\",\n  \"pictureURL\": \"/content/images/f1b36ae8-d1b7-4bd4-8112-5ddcba541141.jpg\"\n}"
            },
            {
              "name": "400 Bad Request - wrong credentials",
              "originalRequest": {
                "method": "POST",
                "header": [{ "key": "Content-Type", "value": "application/x-www-form-urlencoded" }],
                "body": { "mode": "urlencoded", "urlencoded": [
                  { "key": "grant_type", "value": "password" },
                  { "key": "username", "value": "adm_use" },
                  { "key": "password", "value": "wrong" }
                ]},
                "url": { "raw": "{{baseUrl}}/api/Token", "host": ["{{baseUrl}}"], "path": ["api","Token"] }
              },
              "status": "Bad Request",
              "code": 400,
              "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"error\": \"invalid_grant\",\n  \"error_description\": \"The user name or password is incorrect.\"\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Storefront",
      "item": [
        {
          "name": "Store Info",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{baseUrl}}/api/{{lang}}/store-info", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","store-info"] }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/{{lang}}/store-info", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","store-info"] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\",\n  \"Data\": {\n    \"StoreName\": \"Your Store\",\n    \"StoreIntro\": \"eCommerce MVC is an extendable, adaptable eCommerce project developed with C# ASP.NET Core MVC. It has all the features a fully functional online shopping website requires.\",\n    \"Address\": \" \",\n    \"CurrencySymbol\": \"$\",\n    \"PhoneNumber\": null,\n    \"MobileNumber\": null,\n    \"WhatsAppNumber\": null,\n    \"Email\": \"contact@email.com\",\n    \"FacebookURL\": null,\n    \"TwitterURL\": null,\n    \"InstagramURL\": null,\n    \"YouTubeURL\": null,\n    \"LinkedInURL\": null\n  }\n}"
            }
          ]
        },
        {
          "name": "Sliders",
          "request": {
            "method": "GET",
            "url": { "raw": "{{baseUrl}}/api/{{lang}}/sliders", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","sliders"] }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/{{lang}}/sliders", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","sliders"] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\",\n  \"Data\": [\n    {\n      \"ImageLink\": \"/content/images/site/sliders/slider1.jpg\",\n      \"Heading\": \"Welcome to eCommerce MVC\",\n      \"Summary\": \"eCommerce MVC is an extendable, adaptable eCommerce project developed with C# ASP.NET Core MVC. It has all the features a fully functional online shopping website requires.\",\n      \"Link\": \"/en/search\"\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "Featured Categories",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/{{lang}}/featured-categories?recordSize=3",
              "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","featured-categories"],
              "query": [{ "key": "recordSize", "value": "3" }]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/{{lang}}/featured-categories?recordSize=3", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","featured-categories"], "query": [{ "key": "recordSize", "value": "3" }] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\",\n  \"Data\": [\n    {\n      \"ID\": 2,\n      \"ParentCategoryID\": null,\n      \"Name\": \"Headphones \",\n      \"Summary\": null,\n      \"Description\": null,\n      \"IsFeatured\": true,\n      \"SanitizedName\": \"headphones\",\n      \"DisplaySeqNo\": 0,\n      \"Picture\": \"/content/images/demo/c0ed2af7-6eb6-4b8a-bb73-45c4b4d410f1.png\",\n      \"ProductsCount\": 8\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "Categories Menu",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/{{lang}}/categories-menu",
              "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","categories-menu"]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/{{lang}}/categories-menu", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","categories-menu"] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\",\n  \"Data\": [\n    {\n      \"Children\": [],\n      \"ID\": 2,\n      \"ParentCategoryID\": null,\n      \"Name\": \"Headphones \",\n      \"Summary\": null,\n      \"Description\": null,\n      \"IsFeatured\": false,\n      \"SanitizedName\": \"headphones\",\n      \"DisplaySeqNo\": 0,\n      \"Picture\": \"/content/images/demo/c0ed2af7-6eb6-4b8a-bb73-45c4b4d410f1.png\",\n      \"ProductsCount\": 8\n    },\n    {\n      \"Children\": [\n        {\n          \"Children\": null,\n          \"ID\": 3,\n          \"ParentCategoryID\": null,\n          \"Name\": \"Stands\",\n          \"SanitizedName\": \"stands\",\n          \"Picture\": \"/content/images/demo/7ecffd94-2365-452a-95be-cbb69b9c59cc.png\",\n          \"ProductsCount\": 18\n        }\n      ],\n      \"ID\": 4,\n      \"Name\": \"Chargers\",\n      \"SanitizedName\": \"chargers\",\n      \"ProductsCount\": 18\n    }\n  ]\n}\n\nNote: the \"Uncategorized\" category is filtered out of this response."
            }
          ]
        },
        {
          "name": "Configurations (all)",
          "request": {
            "method": "GET",
            "url": { "raw": "{{baseUrl}}/api/{{lang}}/configurations", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","configurations"] }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/{{lang}}/configurations", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","configurations"] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\",\n  \"Data\": {\n    \"ApplicationName\": \"Your Store\",\n    \"CurrencySymbol\": \"$\",\n    \"EnableCashOnDeliveryMethod\": \"true\",\n    \"EnableMultilingual\": \"false\"\n  }\n}\n\n(abridged - every key from Configurations.html is returned)"
            }
          ]
        },
        {
          "name": "Configurations (single key)",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/{{lang}}/configurations?key=CurrencySymbol",
              "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","configurations"],
              "query": [{ "key": "key", "value": "CurrencySymbol" }]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/{{lang}}/configurations?key=CurrencySymbol", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","configurations"], "query": [{ "key": "key", "value": "CurrencySymbol" }] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\",\n  \"Data\": {\n    \"Key\": \"CurrencySymbol\",\n    \"Value\": \"$\"\n  }\n}"
            },
            {
              "name": "404 Not Found - unknown key",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/{{lang}}/configurations?key=NoSuchKey", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","configurations"], "query": [{ "key": "key", "value": "NoSuchKey" }] } },
              "status": "Not Found", "code": 404, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 404,\n  \"StatusMessage\": \"Not Found\"\n}"
            }
          ]
        },
        {
          "name": "Featured Products",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/{{lang}}/featured-products?recordSize=3",
              "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","featured-products"],
              "query": [{ "key": "recordSize", "value": "3" }]
            }
          },
          "response": [
            {
              "name": "200 OK - none marked featured",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/{{lang}}/featured-products?recordSize=3", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","featured-products"], "query": [{ "key": "recordSize", "value": "3" }] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\",\n  \"Data\": []\n}"
            }
          ]
        },
        {
          "name": "Search Products",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/{{lang}}/search?q=adapter&pageNo=1&recordSize=3",
              "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","search"],
              "query": [
                { "key": "category", "value": "", "disabled": true, "description": "Prefer this query param over the {category} route segment" },
                { "key": "q", "value": "adapter" },
                { "key": "priceFrom", "value": "0", "disabled": true },
                { "key": "priceTo", "value": "0", "disabled": true },
                { "key": "sortby", "value": "", "disabled": true },
                { "key": "pageNo", "value": "1" },
                { "key": "recordSize", "value": "3" }
              ]
            },
            "description": "Category filter: use ?category=adapters (query string), NOT /search/adapters (route segment) - see api.html for why."
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/{{lang}}/search?q=adapter&pageNo=1&recordSize=3", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","search"], "query": [{ "key": "q", "value": "adapter" }, { "key": "pageNo", "value": "1" }, { "key": "recordSize", "value": "3" }] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\",\n  \"Data\": {\n    \"TotalRecords\": 5,\n    \"TotalPages\": 0,\n    \"SearchFilters\": {\n      \"CategoryID\": null,\n      \"SearchTerm\": \"adapter\",\n      \"PriceFrom\": 0.0,\n      \"PriceTo\": 0.0,\n      \"SortBy\": \"\",\n      \"PageNo\": 1,\n      \"RecordSize\": 3\n    },\n    \"Products\": [\n      {\n        \"ID\": 149,\n        \"CategoryID\": 6,\n        \"Name\": \"Apple 18W USB-C Power Adapter\",\n        \"Summary\": \"Compact design18W powerApple USB Power AdaptorCompatibility : iPhone/iPad Mini/iPod models\",\n        \"Description\": \"\",\n        \"Price\": 12.50,\n        \"Discount\": 8.50,\n        \"Cost\": 0.00,\n        \"IsFeatured\": false,\n        \"SKU\": \"10231\",\n        \"Tags\": \"Accessories;ADAPTER\",\n        \"StockQuantity\": 8,\n        \"ProductSpecifications\": [],\n        \"Pictures\": [ { \"URL\": \"/content/images/demo/150.png\", \"IsThumbnail\": true } ]\n      }\n    ]\n  }\n}"
            }
          ]
        },
        {
          "name": "Product Details",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/{{lang}}/product-details/{{productId}}",
              "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","product-details","{{productId}}"]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/{{lang}}/product-details/149", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","product-details","149"] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\",\n  \"Data\": {\n    \"ID\": 149,\n    \"CategoryID\": 6,\n    \"Name\": \"Apple 18W USB-C Power Adapter\",\n    \"Price\": 12.50,\n    \"Discount\": 8.50,\n    \"Cost\": 0.00,\n    \"IsFeatured\": false,\n    \"SKU\": \"10231\",\n    \"StockQuantity\": 8,\n    \"TotalRatings\": 0,\n    \"AverageRatings\": 0,\n    \"ProductSpecifications\": [],\n    \"Pictures\": [ { \"URL\": \"/content/images/demo/150.png\", \"IsThumbnail\": true } ]\n  }\n}"
            },
            {
              "name": "404 Not Found",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/{{lang}}/product-details/999999", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","product-details","999999"] } },
              "status": "Not Found", "code": 404, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 404,\n  \"StatusMessage\": \"Not Found\"\n}"
            }
          ]
        },
        {
          "name": "Product Comments",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/{{lang}}/product-comments/30?pageNo=1&recordSize=10",
              "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","product-comments","30"],
              "query": [{ "key": "pageNo", "value": "1" }, { "key": "recordSize", "value": "10" }]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/{{lang}}/product-comments/30", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","product-comments","30"] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\",\n  \"Data\": {\n    \"TotalComments\": 2,\n    \"TotalPages\": 0,\n    \"CommentsListFilters\": { \"PageNo\": 1, \"RecordSize\": 10 },\n    \"Comments\": [\n      {\n        \"ID\": 2,\n        \"Product\": { \"ProductID\": 30, \"ProductTitle\": \"GameSir-F2- Grip puBG hand Controller\" },\n        \"TimeStamp\": \"2026-09-13T14:31:13.0651861\",\n        \"UserID\": \"a634ecb5-d723-40f8-8d45-b12e4d762eb8\",\n        \"UserName\": \"doc_demo_user\",\n        \"Rating\": 5,\n        \"Text\": \"Great grip, works well for long gaming sessions.\"\n      }\n    ]\n  }\n}"
            }
          ]
        },
        {
          "name": "Related Products",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/{{lang}}/related-products/{{productId}}?recordSize=6",
              "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","related-products","{{productId}}"],
              "query": [{ "key": "recordSize", "value": "6" }]
            },
            "description": "Falls back to featured products if there aren't at least 6 in the same category."
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/{{lang}}/related-products/149", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","related-products","149"] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\",\n  \"Data\": []\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Cart",
      "description": "Cart state is session-based (AppSession cookie) - NOT tied to a signed-in user. Enable Postman's cookie jar for this baseUrl so add-to-cart / cart / apply-promo / clear-cart share the same session.",
      "item": [
        {
          "name": "Add To Cart",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/api/{{lang}}/add-to-cart/{{productId}}?quantity=1",
              "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","add-to-cart","{{productId}}"],
              "query": [{ "key": "quantity", "value": "1" }]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "POST", "url": { "raw": "{{baseUrl}}/api/{{lang}}/add-to-cart/149?quantity=2", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","add-to-cart","149"], "query": [{ "key": "quantity", "value": "2" }] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\",\n  \"Data\": {\n    \"Message\": \"Product added to cart.\",\n    \"CartItems\": [\n      { \"ItemID\": 149, \"Quantity\": 2, \"Price\": 8.50, \"ProductTotal\": 17.00 }\n    ],\n    \"CartTotal\": 17.00\n  }\n}"
            },
            {
              "name": "400 Bad Request - insufficient stock",
              "originalRequest": { "method": "POST", "url": { "raw": "{{baseUrl}}/api/{{lang}}/add-to-cart/149?quantity=9999", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","add-to-cart","149"], "query": [{ "key": "quantity", "value": "9999" }] } },
              "status": "Bad Request", "code": 400, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 400,\n  \"StatusMessage\": \"Bad Request\",\n  \"Data\": {\n    \"Message\": \"Sorry, this product isn't available in specified quantity.\"\n  }\n}"
            }
          ]
        },
        {
          "name": "Apply Promo",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/api/{{lang}}/apply-promo?promoCode=YOURCODE",
              "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","apply-promo"],
              "query": [{ "key": "promoCode", "value": "YOURCODE" }]
            },
            "description": "promoCode MUST be sent as a query-string parameter, not a form/JSON body - [ApiController] binds this plain string parameter from the URI."
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "POST", "url": { "raw": "{{baseUrl}}/api/{{lang}}/apply-promo?promoCode=DOCTEST10", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","apply-promo"], "query": [{ "key": "promoCode", "value": "DOCTEST10" }] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\",\n  \"Data\": {\n    \"Message\": \"Success. Enjoy discount of 10.00 %.\"\n  }\n}"
            },
            {
              "name": "400 Bad Request - invalid code",
              "originalRequest": { "method": "POST", "url": { "raw": "{{baseUrl}}/api/{{lang}}/apply-promo?promoCode=NOPE123", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","apply-promo"], "query": [{ "key": "promoCode", "value": "NOPE123" }] } },
              "status": "Bad Request", "code": 400, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 400,\n  \"StatusMessage\": \"Bad Request\",\n  \"Data\": {\n    \"Message\": \"Invalid promo/voucher.\"\n  }\n}"
            },
            {
              "name": "400 Bad Request - expired code",
              "originalRequest": { "method": "POST", "url": { "raw": "{{baseUrl}}/api/{{lang}}/apply-promo?promoCode=EXPIRED", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","apply-promo"], "query": [{ "key": "promoCode", "value": "EXPIRED" }] } },
              "status": "Bad Request", "code": 400, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 400,\n  \"StatusMessage\": \"Bad Request\",\n  \"Data\": {\n    \"Message\": \"Sorry. This promo/voucher has expired.\"\n  }\n}"
            }
          ]
        },
        {
          "name": "Get Cart",
          "request": {
            "method": "GET",
            "url": { "raw": "{{baseUrl}}/api/{{lang}}/cart", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","cart"] }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/{{lang}}/cart", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","cart"] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\",\n  \"Data\": {\n    \"CartItems\": [\n      {\n        \"Product\": { \"ID\": 149, \"Title\": \"Apple 18W USB-C Power Adapter\", \"Picture\": \"/content/images/demo/150.png\" },\n        \"Price\": 8.50,\n        \"Quantity\": 2,\n        \"ProductTotal\": 17.00\n      }\n    ],\n    \"PromoApplied\": false,\n    \"Promo\": null,\n    \"SubTotal\": 17.00,\n    \"Discount\": 0.0,\n    \"DeliveryCharges\": 0.0,\n    \"FinalTotal\": 17.00\n  }\n}"
            }
          ]
        },
        {
          "name": "Clear Cart",
          "request": {
            "method": "POST",
            "url": { "raw": "{{baseUrl}}/api/{{lang}}/clear-cart", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","clear-cart"] }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "POST", "url": { "raw": "{{baseUrl}}/api/{{lang}}/clear-cart", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","clear-cart"] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\"\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Orders",
      "item": [
        {
          "name": "Track Order",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/{{lang}}/order-tracking/{{orderId}}",
              "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","order-tracking","{{orderId}}"]
            },
            "description": "No auth needed for a guest order. For a non-guest order, needs a Bearer token belonging to the order's owner, or a token whose role claims include Administrator."
          },
          "response": [
            {
              "name": "200 OK - guest order",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/{{lang}}/order-tracking/10", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","order-tracking","10"] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\",\n  \"Data\": {\n    \"Status\": \"Placed\",\n    \"PaymentMethod\": \"Cash On Delivery\",\n    \"PlacedOn\": \"13-09-2026 14:00:11\",\n    \"UpdatedOn\": \"13-09-2026 14:00:11\",\n    \"UniqueCode\": \"fc527d8d-0241-4d5c-bde8-1886aa274ccf\",\n    \"OrderDetails\": {\n      \"OrderItems\": [ { \"ID\": 144, \"ProductName\": \"Apple HDMI To HDMI Cable\", \"Price\": 6.00, \"Quantity\": 1, \"ProductTotal\": 6.00 } ],\n      \"TotalAmmount\": 6.00,\n      \"Discount\": 0.00,\n      \"PromoDetails\": \"\",\n      \"DeliveryCharges\": 0.00,\n      \"FinalAmmount\": 6.00\n    },\n    \"ContactDetails\": {\n      \"GuestOrder\": true,\n      \"CustomerID\": null,\n      \"CustomerName\": \"Guest API Buyer\",\n      \"CustomerEmail\": \"gue************@example.com\",\n      \"CustomerPhone\": \"5559876543\"\n    },\n    \"ShippingDetails\": {\n      \"CustomerCountry\": \"Testland\",\n      \"CustomerCity\": \"Testville\",\n      \"CustomerAddress\": \"1 Guest Way\",\n      \"CustomerZipCode\": \"99999\"\n    },\n    \"OrderHistory\": [\n      { \"ModifiedOn\": \"13-09-2026 14:00:11\", \"Status\": \"Placed\", \"Note\": \"Order Placed.\" }\n    ]\n  }\n}"
            },
            {
              "name": "401 Unauthorized - non-guest order, no/wrong token",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/{{lang}}/order-tracking/9", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","order-tracking","9"] } },
              "status": "Unauthorized", "code": 401, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 401,\n  \"StatusMessage\": \"Unauthorized\"\n}"
            },
            {
              "name": "404 Not Found",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/{{lang}}/order-tracking/999999", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","order-tracking","999999"] } },
              "status": "Not Found", "code": 404, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 404,\n  \"StatusMessage\": \"Not Found\"\n}"
            }
          ]
        },
        {
          "name": "Place Order (Cash on Delivery)",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/x-www-form-urlencoded" }],
            "body": {
              "mode": "urlencoded",
              "urlencoded": [
                { "key": "FullName", "value": "Guest API Buyer", "type": "text" },
                { "key": "Email", "value": "guest_api_buyer@example.com", "type": "text" },
                { "key": "PhoneNumber", "value": "5559876543", "type": "text" },
                { "key": "Country", "value": "Testland", "type": "text" },
                { "key": "City", "value": "Testville", "type": "text" },
                { "key": "Address", "value": "1 Guest Way", "type": "text" },
                { "key": "ZipCode", "value": "99999", "type": "text" },
                { "key": "CreateAccount", "value": "false", "type": "text" }
              ]
            },
            "url": { "raw": "{{baseUrl}}/api/{{lang}}/place-order-cod", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","place-order-cod"] },
            "description": "Run \"Cart > Add To Cart\" first - this places whatever is in the current session's cart. If a Bearer token is attached, the order is linked to that user. Otherwise: CreateAccount=true registers a new (passwordless) account and signs it in via cookie; CreateAccount=false places a guest order."
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [{ "key": "Content-Type", "value": "application/x-www-form-urlencoded" }],
                "body": { "mode": "urlencoded", "urlencoded": [
                  { "key": "FullName", "value": "Guest API Buyer" },
                  { "key": "Email", "value": "guest_api_buyer@example.com" },
                  { "key": "PhoneNumber", "value": "5559876543" },
                  { "key": "Country", "value": "Testland" },
                  { "key": "City", "value": "Testville" },
                  { "key": "Address", "value": "1 Guest Way" },
                  { "key": "ZipCode", "value": "99999" },
                  { "key": "CreateAccount", "value": "false" }
                ]},
                "url": { "raw": "{{baseUrl}}/api/{{lang}}/place-order-cod", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","place-order-cod"] }
              },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\",\n  \"Data\": {\n    \"Message\": \"Your order has been placed successfuly.\",\n    \"OrderID\": 10\n  }\n}"
            },
            {
              "name": "400 Bad Request - empty cart",
              "originalRequest": { "method": "POST", "url": { "raw": "{{baseUrl}}/api/{{lang}}/place-order-cod", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","place-order-cod"] } },
              "status": "Bad Request", "code": 400, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 400,\n  \"StatusMessage\": \"Bad Request\",\n  \"Data\": {\n    \"Message\": \"Invalid products in cart.\"\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Account (Users)",
      "auth": {
        "type": "bearer",
        "bearer": [{ "key": "token", "value": "{{token}}", "type": "string" }]
      },
      "item": [
        {
          "name": "Register",
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/x-www-form-urlencoded" }],
            "body": {
              "mode": "urlencoded",
              "urlencoded": [
                { "key": "FullName", "value": "API Test User", "type": "text" },
                { "key": "UserName", "value": "api_test_user", "type": "text" },
                { "key": "Email", "value": "api_test_user@example.com", "type": "text" },
                { "key": "Password", "value": "Test@1234", "type": "text" },
                { "key": "ConfirmPassword", "value": "Test@1234", "type": "text" }
              ]
            },
            "url": { "raw": "{{baseUrl}}/api/{{lang}}/user/register", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","user","register"] }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "POST", "url": { "raw": "{{baseUrl}}/api/{{lang}}/user/register", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","user","register"] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\"\n}"
            },
            {
              "name": "400 Bad Request - duplicate username",
              "originalRequest": { "method": "POST", "url": { "raw": "{{baseUrl}}/api/{{lang}}/user/register", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","user","register"] } },
              "status": "Bad Request", "code": 400, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 400,\n  \"StatusMessage\": \"Bad Request\",\n  \"Data\": \"Username 'api_test_user' is already taken.\"\n}"
            },
            {
              "name": "400 Bad Request - mismatched passwords",
              "originalRequest": { "method": "POST", "url": { "raw": "{{baseUrl}}/api/{{lang}}/user/register", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","user","register"] } },
              "status": "Bad Request", "code": 400, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 400,\n  \"StatusMessage\": \"Bad Request\",\n  \"Data\": \"The password and confirmation password do not match.\"\n}"
            },
            {
              "name": "400 Bad Request - missing required fields",
              "originalRequest": { "method": "POST", "url": { "raw": "{{baseUrl}}/api/{{lang}}/user/register", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","user","register"] } },
              "status": "Bad Request", "code": 400, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 400,\n  \"StatusMessage\": \"Bad Request\",\n  \"Data\": \"The Email field is required.\\nThe Full Name field is required.\\nThe Password field is required.\\nThe UserName field is required.\"\n}"
            }
          ]
        },
        {
          "name": "Logout",
          "request": {
            "auth": { "type": "noauth" },
            "method": "GET",
            "url": { "raw": "{{baseUrl}}/api/{{lang}}/user/logout", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","user","logout"] },
            "description": "No-op - JWTs are stateless/self-expiring, there is nothing server-side to invalidate. Kept only so an existing client's logout call keeps working."
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/{{lang}}/user/logout", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","user","logout"] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\"\n}"
            }
          ]
        },
        {
          "name": "Get My Info",
          "request": {
            "method": "GET",
            "url": { "raw": "{{baseUrl}}/api/{{lang}}/user/info", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","user","info"] }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/{{lang}}/user/info", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","user","info"] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\",\n  \"Data\": {\n    \"ID\": \"86344938-10f6-4e38-9eb4-3b756766ef78\",\n    \"PictureURL\": \"/content/images/f1b36ae8-d1b7-4bd4-8112-5ddcba541141.jpg\",\n    \"FullName\": \"Admin\",\n    \"UserName\": \"adm_use\",\n    \"Email\": \"adm_use@domain.com\",\n    \"PhoneNumber\": \"(312)555-0690\",\n    \"Country\": \"Adminsburg\",\n    \"City\": \"Adminstria\",\n    \"Address\": \"404 Block D, Adm Street\",\n    \"ZipCode\": \"123456\",\n    \"RegisteredOn\": \"2026-09-11T14:52:02.354265\"\n  }\n}"
            },
            {
              "name": "401 Unauthorized - no/invalid token",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/{{lang}}/user/info", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","user","info"] } },
              "status": "Unauthorized", "code": 401, "_postman_previewlanguage": "text",
              "header": [],
              "body": ""
            }
          ]
        },
        {
          "name": "Update My Info",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/x-www-form-urlencoded" }],
            "body": {
              "mode": "urlencoded",
              "urlencoded": [
                { "key": "FullName", "value": "Admin Updated", "type": "text" },
                { "key": "Email", "value": "adm_use@domain.com", "type": "text" },
                { "key": "UserName", "value": "adm_use", "type": "text" },
                { "key": "PhoneNumber", "value": "5551234567", "type": "text" },
                { "key": "Country", "value": "Testland", "type": "text" },
                { "key": "City", "value": "Testville", "type": "text" },
                { "key": "Address", "value": "123 Test St", "type": "text" },
                { "key": "ZipCode", "value": "12345", "type": "text" }
              ]
            },
            "url": { "raw": "{{baseUrl}}/api/{{lang}}/user/info/update", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","user","info","update"] }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "POST", "url": { "raw": "{{baseUrl}}/api/{{lang}}/user/info/update", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","user","info","update"] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\"\n}"
            }
          ]
        },
        {
          "name": "Update My Password",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/x-www-form-urlencoded" }],
            "body": {
              "mode": "urlencoded",
              "urlencoded": [
                { "key": "OldPassword", "value": "Test@1234", "type": "text" },
                { "key": "NewPassword", "value": "NewTest@1234", "type": "text" },
                { "key": "ConfirmPassword", "value": "NewTest@1234", "type": "text" }
              ]
            },
            "url": { "raw": "{{baseUrl}}/api/{{lang}}/user/password/update", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","user","password","update"] }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "POST", "url": { "raw": "{{baseUrl}}/api/{{lang}}/user/password/update", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","user","password","update"] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\"\n}"
            },
            {
              "name": "400 Bad Request - wrong old password",
              "originalRequest": { "method": "POST", "url": { "raw": "{{baseUrl}}/api/{{lang}}/user/password/update", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","user","password","update"] } },
              "status": "Bad Request", "code": 400, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 400,\n  \"StatusMessage\": \"Bad Request\",\n  \"Data\": \"Incorrect password.\"\n}"
            }
          ]
        },
        {
          "name": "Get My Comments",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/{{lang}}/user/comments?pageNo=1&recordSize=10",
              "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","user","comments"],
              "query": [{ "key": "searchTerm", "value": "", "disabled": true }, { "key": "pageNo", "value": "1" }, { "key": "recordSize", "value": "10" }]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/{{lang}}/user/comments", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","user","comments"] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\",\n  \"Data\": {\n    \"TotalComments\": 1,\n    \"TotalPages\": 0,\n    \"CommentsListFilters\": { \"PageNo\": 1, \"RecordSize\": 10 },\n    \"Comments\": [\n      {\n        \"ID\": 1,\n        \"Product\": { \"ProductID\": 30, \"ProductTitle\": \"GameSir-F2- Grip puBG hand Controller\" },\n        \"TimeStamp\": \"2026-09-11T22:39:57.1061694\",\n        \"UserID\": \"86344938-10f6-4e38-9eb4-3b756766ef78\",\n        \"UserName\": \"adm_use\",\n        \"Rating\": 5,\n        \"Text\": \"Nice Product...\"\n      }\n    ]\n  }\n}"
            }
          ]
        },
        {
          "name": "Get My Orders",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/api/{{lang}}/user/orders?pageNo=1&recordSize=10",
              "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","user","orders"],
              "query": [{ "key": "orderStatus", "value": "0", "disabled": true }, { "key": "pageNo", "value": "1" }, { "key": "recordSize", "value": "10" }]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/{{lang}}/user/orders", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","user","orders"] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\",\n  \"Data\": {\n    \"TotalOrders\": 1,\n    \"TotalPages\": 0,\n    \"OrdersListFilters\": { \"PageNo\": 1, \"RecordSize\": 10 },\n    \"Orders\": [\n      {\n        \"ID\": 9,\n        \"PlacedOn\": \"2026-09-13T13:03:44.1717599\",\n        \"Status\": \"Processing\",\n        \"PaymentMethod\": \"Cash On Delivery\",\n        \"FinalAmmount\": 8.50\n      }\n    ]\n  }\n}"
            }
          ]
        },
        {
          "name": "Update My Avatar",
          "request": {
            "method": "POST",
            "body": {
              "mode": "formdata",
              "formdata": [
                { "key": "picture", "type": "file", "src": [] }
              ]
            },
            "url": { "raw": "{{baseUrl}}/api/{{lang}}/user/avatar/update", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","user","avatar","update"] },
            "description": "Must be a genuine multipart/form-data request with a file field - sending no body at all (no multipart content-type) returns 400, not a silent no-op."
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "POST", "url": { "raw": "{{baseUrl}}/api/{{lang}}/user/avatar/update", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","user","avatar","update"] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\"\n}"
            },
            {
              "name": "400 Bad Request - no file",
              "originalRequest": { "method": "POST", "url": { "raw": "{{baseUrl}}/api/{{lang}}/user/avatar/update", "host": ["{{baseUrl}}"], "path": ["api","{{lang}}","user","avatar","update"] } },
              "status": "Bad Request", "code": 400, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 400,\n  \"StatusMessage\": \"Bad Request\"\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Health Check",
      "item": [
        {
          "name": "API Base",
          "request": {
            "method": "GET",
            "url": { "raw": "{{baseUrl}}/api/APIBase", "host": ["{{baseUrl}}"], "path": ["api","APIBase"] },
            "description": "Kept for parity with the source project's generic Web API fallback route - not used for anything functional, just a simple health check."
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": { "method": "GET", "url": { "raw": "{{baseUrl}}/api/APIBase", "host": ["{{baseUrl}}"], "path": ["api","APIBase"] } },
              "status": "OK", "code": 200, "_postman_previewlanguage": "json",
              "header": [{ "key": "Content-Type", "value": "application/json" }],
              "body": "{\n  \"StatusCode\": 200,\n  \"StatusMessage\": \"OK\"\n}"
            }
          ]
        }
      ]
    }
  ]
}
