{
 "info": {
  "name": "eqomOS Partner API",
  "_postman_id": "eqomos-partner-api-v1",
  "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
  "description": "Headless commerce API for partners building their own storefront. Generated from the OpenAPI spec (openapi.yaml) \u2014 every request carries its example body, and every request carries an example response.\n\n## Start here\n\n1. Set `apiKey` and `apiSecret` in the collection **Variables** tab.\n2. Run **Authentication \u2192 Exchange your API key\u2026** \u2014 it stores `accessToken` automatically.\n3. Tokens last 15 minutes; re-run it when calls start returning 401.\n\n## Two credentials, two questions\n\nEvery request carries a partner credential (`X-Api-Key` + `Authorization: Bearer`). Requests under **Customer Profile / Cart & Wishlist / Orders / Checkout** additionally need `X-Customer-Token`, the shopper's web JWT.\n\n## Signing a shopper in is two steps on an OTP tenant\n\nRun **Customer Identity \u2192 Step 1 \u2026/check** (verifies the password and sends the OTP), then **Step 2 \u2026/login** with the same credential plus the `otp`. Login stores `customerToken` automatically.\n"
 },
 "variable": [
  {
   "key": "baseUrl",
   "value": "https://ns-multiclientapi.dealyug.com/v1",
   "type": "string"
  },
  {
   "key": "apiKey",
   "value": "",
   "type": "string"
  },
  {
   "key": "apiSecret",
   "value": "",
   "type": "string"
  },
  {
   "key": "accessToken",
   "value": "",
   "type": "string"
  },
  {
   "key": "customerToken",
   "value": "",
   "type": "string"
  },
  {
   "key": "skuId",
   "value": "",
   "type": "string"
  },
  {
   "key": "countryId",
   "value": "101",
   "type": "string"
  },
  {
   "key": "stateId",
   "value": "",
   "type": "string"
  },
  {
   "key": "cityId",
   "value": "",
   "type": "string"
  },
  {
   "key": "pincode",
   "value": "400709",
   "type": "string"
  },
  {
   "key": "catId",
   "value": "",
   "type": "string"
  },
  {
   "key": "bannerType",
   "value": "HOME",
   "type": "string"
  },
  {
   "key": "orderId",
   "value": "181",
   "type": "string"
  },
  {
   "key": "groupOrderId",
   "value": "AGU181",
   "type": "string"
  },
  {
   "key": "siteMasterId",
   "value": "4",
   "type": "string"
  },
  {
   "key": "query",
   "value": "watch",
   "type": "string"
  },
  {
   "key": "cat",
   "value": "84",
   "type": "string"
  },
  {
   "key": "filter",
   "value": "cat=84",
   "type": "string"
  },
  {
   "key": "page",
   "value": "1",
   "type": "string"
  },
  {
   "key": "totalRecord",
   "value": "12",
   "type": "string"
  },
  {
   "key": "groupname",
   "value": "CANCEL_ORDER",
   "type": "string"
  },
  {
   "key": "leadTypeId",
   "value": "109",
   "type": "string"
  },
  {
   "key": "idempotencyKey",
   "value": "order-2026-07-24-7f3a9c",
   "type": "string"
  }
 ],
 "item": [
  {
   "name": "1. Authentication",
   "item": [
    {
     "name": "Exchange your API key + secret for a 15-minute access token",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/auth/token",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "auth",
        "token"
       ]
      },
      "description": "Exchange your API key + secret for a 15-minute access token\n\nThe only endpoint that takes no token \u2014 it mints the one every other call presents. Throttled per IP and key. There is no refresh token by design: a short TTL plus a cheap re-mint beats a refresh lifecycle.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"apiKey\": \"{{apiKey}}\",\n  \"apiSecret\": \"{{apiSecret}}\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "Content-Type",
          "value": "application/json"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/auth/token",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "auth",
          "token"
         ]
        },
        "description": "Exchange your API key + secret for a 15-minute access token\n\nThe only endpoint that takes no token \u2014 it mints the one every other call presents. Throttled per IP and key. There is no refresh token by design: a short TTL plus a cheap re-mint beats a refresh lifecycle.",
        "body": {
         "mode": "raw",
         "raw": "{\n  \"apiKey\": \"{{apiKey}}\",\n  \"apiSecret\": \"{{apiSecret}}\"\n}",
         "options": {
          "raw": {
           "language": "json"
          }
         }
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Token issued.\",\n  \"response\": {\n    \"accessToken\": \"eyJhbGciOiJIUzI1NiJ9...\",\n    \"tokenType\": \"Bearer\",\n    \"expiresIn\": 900,\n    \"scopes\": [\n      \"catalog:read\",\n      \"geo:read\"\n    ]\n  }\n}"
      }
     ],
     "event": [
      {
       "listen": "test",
       "script": {
        "type": "text/javascript",
        "exec": [
         "const b = pm.response.json();",
         "pm.test('token issued', () => pm.expect(b.status).to.eql('SUCCESS'));",
         "if (b.status === 'SUCCESS') {",
         "  // Collection variable, so the collection is self-contained: set apiKey/apiSecret and go.",
         "  pm.collectionVariables.set('accessToken', b.response.accessToken);",
         "  console.log('Scopes granted:', b.response.scopes);",
         "} else {",
         "  console.error('Auth failed (uniform message; real reason is server-side against X-Request-Id:',",
         "                pm.response.headers.get('X-Request-Id'), ')');",
         "}"
        ]
       }
      }
     ]
    }
   ]
  },
  {
   "name": "2. Catalog  (scope: catalog:read)",
   "item": [
    {
     "name": "Category tree for your tenant (header / footer navigation)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/catalog/categories?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "catalog",
        "categories"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Category tree for your tenant (header / footer navigation)\n\n**Scope `catalog:read`.** The full published category hierarchy for your tenant. Tenant-scoped by the platform \u2014 no id is sent."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/catalog/categories?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "catalog",
          "categories"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Category tree for your tenant (header / footer navigation)\n\n**Scope `catalog:read`.** The full published category hierarchy for your tenant. Tenant-scoped by the platform \u2014 no id is sent."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record found successfully\",\n  \"response\": {\n    \"rootParentCategoryByOrder\": {\n      \"518\": [\n        519\n      ],\n      \"95\": [\n        319\n      ],\n      \"458\": [\n        355\n      ],\n      \"492\": [\n        493\n      ],\n      \"133\": [\n        184\n      ],\n      \"121\": [\n        516\n      ],\n      \"291\": [\n        292\n      ],\n      \"523\": []\n    },\n    \"categoryHierarchy\": {\n      \"518\": {\n        \"519\": [],\n        \"520\": [],\n        \"521\": []\n      },\n      \"95\": {\n        \"319\": [],\n        \"465\": [],\n        \"466\": [\n          \"480\"\n        ],\n        \"489\": [],\n        \"490\": [\n          \"327\"\n        ],\n        \"84\": [\n          \"326\"\n        ]\n      },\n      \"458\": {\n        \"355\": [],\n        \"357\": [],\n        \"517\": []\n      },\n      \"492\": {\n        \"493\": [\n          \"495\"\n        ],\n        \"499\": [\n          \"509\"\n        ]\n      },\n      \"133\": {\n        \"184\": [],\n        \"515\": [],\n        \"246\": []\n      },\n      \"121\": {\n        \"516\": [],\n        \"341\": [],\n        \"385\": []\n      },\n      \"291\": {\n        \"292\": []\n      },\n      \"523\": {}\n    },\n    \"rootCategoryByOrder\": [\n      518\n    ],\n    \"categoriesMap\": {\n      \"472\": {\n        \"id\": 472,\n        \"name\": \"Charging Accessories\",\n        \"displayName\": \"Charging Accessories\",\n        \"description\": \"Charging Accessories\",\n        \"catlevel\": 1,\n        \"seqno\": 1,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"474\": {\n        \"id\": 474,\n        \"name\": \"SmartPhones\",\n        \"displayName\": \"SmartPhones\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 3,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"476\": {\n        \"id\": 476,\n        \"name\": \"Health Care\",\n        \"displayName\": \"Health Care\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 51,\n        \"parentId\": 475,\n        \"parentName\": \"Personal Care and Grooming\"\n      },\n      \"355\": {\n        \"id\": 355,\n        \"name\": \"Travel Accessories\",\n        \"displayName\": \"Travel Accessories\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 55,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"477\": {\n        \"id\": 477,\n        \"name\": \"Massager\",\n        \"displayName\": \"Massager\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 197,\n        \"parentId\": 294,\n        \"parentName\": \"Health Devices\"\n      },\n      \"510\": {\n        \"id\": 510,\n        \"name\": \"Air Conditioner\",\n        \"displayName\": \"Air Conditioner\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 207,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      },\n      \"357\": {\n        \"id\": 357,\n        \"name\": \"Luggage Trolleys\",\n        \"displayName\": \"Luggage Trolleys\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 56,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"511\": {\n        \"id\": 511,\n        \"name\": \"Washing Machine\",\n        \"displayName\": \"Washing Machine\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 208,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      }\n    }\n  }\n}"
      }
     ]
    },
    {
     "name": "Home-page composition",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/catalog/home?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "catalog",
        "home"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Home-page composition\n\n**Scope `catalog:read`.** Everything the storefront home page renders: featured rails, banners and blocks for your tenant."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/catalog/home?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "catalog",
          "home"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Home-page composition\n\n**Scope `catalog:read`.** Everything the storefront home page renders: featured rails, banners and blocks for your tenant."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"bannerList1\": [\n      {\n        \"id\": 35,\n        \"type\": \"HOME_ADVERTISE_1\",\n        \"name\": \"Air India Merchandise\",\n        \"skuId\": 0,\n        \"langId\": 7066,\n        \"langCode\": \"en\",\n        \"langName\": \"English\",\n        \"sku\": null\n      }\n    ],\n    \"homeRootIds\": [\n      \"\"\n    ],\n    \"categoryHierarchy\": {\n      \"518\": {\n        \"519\": [],\n        \"520\": [],\n        \"521\": []\n      },\n      \"95\": {\n        \"319\": [],\n        \"465\": [],\n        \"466\": [\n          \"480\"\n        ],\n        \"489\": [],\n        \"490\": [\n          \"327\"\n        ],\n        \"84\": [\n          \"326\"\n        ]\n      },\n      \"458\": {\n        \"355\": [],\n        \"357\": [],\n        \"517\": []\n      },\n      \"492\": {\n        \"493\": [\n          \"495\"\n        ],\n        \"499\": [\n          \"509\"\n        ]\n      },\n      \"133\": {\n        \"184\": [],\n        \"515\": [],\n        \"246\": []\n      },\n      \"121\": {\n        \"516\": [],\n        \"341\": [],\n        \"385\": []\n      },\n      \"291\": {\n        \"292\": []\n      },\n      \"523\": {}\n    },\n    \"rootCategoryByOrder\": [\n      518\n    ],\n    \"brandList\": [\n      {\n        \"id\": 47,\n        \"name\": \"Marks And Spencer\",\n        \"image\": \"Image Not Available.jpg\",\n        \"description\": \"Marks And Spencer\",\n        \"isactive\": 1,\n        \"sequenceNo\": 1,\n        \"active\": \"YES\",\n        \"cd\": null\n      }\n    ],\n    \"langList\": [\n      {\n        \"code\": \"en\",\n        \"value\": \"English\",\n        \"cd\": null\n      }\n    ],\n    \"bannerList3\": [\n      {\n        \"id\": 23,\n        \"type\": \"HOME_ADVERTISE_3\",\n        \"name\": \"HeroBanner-1\",\n        \"skuId\": 0,\n        \"langId\": 7066,\n        \"langCode\": \"en\",\n        \"langName\": \"English\",\n        \"sku\": null\n      }\n    ],\n    \"bannerList2\": [\n      {\n        \"id\": 26,\n        \"type\": \"HOME_ADVERTISE_2\",\n        \"name\": \"Headphones- Travel\",\n        \"skuId\": 0,\n        \"langId\": 7066,\n        \"langCode\": \"en\",\n        \"langName\": \"English\",\n        \"sku\": null\n      }\n    ]\n  }\n}"
      }
     ]
    },
    {
     "name": "Promotional banners",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/catalog/banners?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "catalog",
        "banners"
       ],
       "query": [
        {
         "key": "type",
         "value": "{{bannerType}}",
         "disabled": true
        },
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Promotional banners\n\n**Scope `catalog:read`.** Banners for a placement. Pass `type` (e.g. `HOME`)."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/catalog/banners?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "catalog",
          "banners"
         ],
         "query": [
          {
           "key": "type",
           "value": "{{bannerType}}",
           "disabled": true
          },
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Promotional banners\n\n**Scope `catalog:read`.** Banners for a placement. Pass `type` (e.g. `HOME`)."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Success\",\n  \"response\": [\n    {\n      \"id\": 36,\n      \"type\": \"HOME\",\n      \"name\": \"ADIDAS INDIA\",\n      \"skuId\": 0,\n      \"langId\": 7066,\n      \"langCode\": \"en\",\n      \"langName\": \"English\",\n      \"sku\": null\n    }\n  ]\n}"
      }
     ]
    },
    {
     "name": "\u201cNew trends\u201d rail",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/catalog/new-trends?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "catalog",
        "new-trends"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "\u201cNew trends\u201d rail\n\n**Scope `catalog:read`.** The curated new-arrivals rail for your tenant."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/catalog/new-trends?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "catalog",
          "new-trends"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "\u201cNew trends\u201d rail\n\n**Scope `catalog:read`.** The curated new-arrivals rail for your tenant."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"FAIL\",\n  \"message\": \"The record not found\",\n  \"response\": null\n}"
      }
     ]
    },
    {
     "name": "\u201cTop offers\u201d rail",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/catalog/top-offers?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "catalog",
        "top-offers"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "\u201cTop offers\u201d rail\n\n**Scope `catalog:read`.** The curated offers rail for your tenant."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/catalog/top-offers?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "catalog",
          "top-offers"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "\u201cTop offers\u201d rail\n\n**Scope `catalog:read`.** The curated offers rail for your tenant."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"FAIL\",\n  \"message\": \"The record not found\",\n  \"response\": null\n}"
      }
     ]
    },
    {
     "name": "Brands on your tenant",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/catalog/brands?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "catalog",
        "brands"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Brands on your tenant\n\n**Scope `catalog:read`.** Every brand published on your tenant."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/catalog/brands?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "catalog",
          "brands"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Brands on your tenant\n\n**Scope `catalog:read`.** Every brand published on your tenant."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"webCartYouSave\": 0.0,\n    \"webCartTotalPayable\": 0.0,\n    \"categoryHierarchy\": {\n      \"518\": {\n        \"519\": [],\n        \"520\": [],\n        \"521\": []\n      },\n      \"95\": {\n        \"319\": [],\n        \"465\": [],\n        \"466\": [\n          \"480\"\n        ],\n        \"489\": [],\n        \"490\": [\n          \"327\"\n        ],\n        \"84\": [\n          \"326\"\n        ]\n      },\n      \"458\": {\n        \"355\": [],\n        \"357\": [],\n        \"517\": []\n      },\n      \"492\": {\n        \"493\": [\n          \"495\"\n        ],\n        \"499\": [\n          \"509\"\n        ]\n      },\n      \"133\": {\n        \"184\": [],\n        \"515\": [],\n        \"246\": []\n      },\n      \"121\": {\n        \"516\": [],\n        \"341\": [],\n        \"385\": []\n      },\n      \"291\": {\n        \"292\": []\n      },\n      \"523\": {}\n    },\n    \"brandList\": [\n      {\n        \"id\": 6,\n        \"name\": \"Wildcraft\",\n        \"image\": \"6_29052026151447.jpg\",\n        \"description\": \"Wildcraft\",\n        \"isactive\": 1,\n        \"sequenceNo\": 1,\n        \"active\": \"YES\",\n        \"cd\": null\n      }\n    ],\n    \"langList\": [\n      {\n        \"code\": \"en\",\n        \"value\": \"English\",\n        \"cd\": null\n      }\n    ],\n    \"totalAccuralPoints\": 0,\n    \"webCartTotalItems\": 0,\n    \"webCartShippingCost\": 0.0\n  }\n}"
      }
     ]
    },
    {
     "name": "Brands within a category",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/catalog/brands-by-category?catId={{catId}}",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "catalog",
        "brands-by-category"
       ],
       "query": [
        {
         "key": "catId",
         "value": "{{catId}}"
        },
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Brands within a category\n\n**Scope `catalog:read`.** Brands that have products in a category. Pass `catId`."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/catalog/brands-by-category?catId={{catId}}",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "catalog",
          "brands-by-category"
         ],
         "query": [
          {
           "key": "catId",
           "value": "{{catId}}"
          },
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Brands within a category\n\n**Scope `catalog:read`.** Brands that have products in a category. Pass `catId`."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record found successfully\",\n  \"response\": [\n    {\n      \"id\": 6,\n      \"name\": \"Wildcraft\",\n      \"image\": \"6_29052026151447.jpg\",\n      \"description\": \"Wildcraft\",\n      \"isactive\": 1,\n      \"sequenceNo\": 1,\n      \"active\": \"YES\",\n      \"cd\": null\n    }\n  ]\n}"
      }
     ]
    },
    {
     "name": "Search products",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/catalog/search?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "catalog",
        "search"
       ],
       "query": [
        {
         "key": "cat",
         "value": "{{cat}}",
         "disabled": true
        },
        {
         "key": "query",
         "value": "{{query}}",
         "disabled": true
        },
        {
         "key": "page",
         "value": "{{page}}",
         "disabled": true
        },
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Search products\n\n**Scope `catalog:read`.** Keyword / category search. `filter`, `page` and sort are parameters on this endpoint \u2014 there is no separate filter or sort route."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/catalog/search?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "catalog",
          "search"
         ],
         "query": [
          {
           "key": "cat",
           "value": "{{cat}}",
           "disabled": true
          },
          {
           "key": "query",
           "value": "{{query}}",
           "disabled": true
          },
          {
           "key": "page",
           "value": "{{page}}",
           "disabled": true
          },
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Search products\n\n**Scope `catalog:read`.** Keyword / category search. `filter`, `page` and sort are parameters on this endpoint \u2014 there is no separate filter or sort route."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"prductList\": {\n      \"draw\": 0,\n      \"recordsTotal\": 613,\n      \"recordsFiltered\": 613,\n      \"data\": [\n        {\n          \"skuId\": 1061,\n          \"skuCode\": \"NUC-3\",\n          \"skuName\": \"Noize Ultimate Combo - 3.1kg\",\n          \"offerPrice\": 8047.0,\n          \"offerMrp\": 9897.0,\n          \"images\": [\n            \"Noize-Ultimate-Combo---3-1kg-1-1780755640402.jpg\"\n          ],\n          \"wsBean\": [],\n          \"currentInventory\": 29999\n        }\n      ],\n      \"recordPerPage\": 24,\n      \"currentPageNo\": 1,\n      \"filtterMap\": null\n    },\n    \"categoryHierarchy\": {\n      \"518\": {\n        \"519\": [],\n        \"520\": [],\n        \"521\": []\n      },\n      \"95\": {\n        \"319\": [],\n        \"465\": [],\n        \"466\": [\n          \"480\"\n        ],\n        \"489\": [],\n        \"490\": [\n          \"327\"\n        ],\n        \"84\": [\n          \"326\"\n        ]\n      },\n      \"458\": {\n        \"355\": [],\n        \"357\": [],\n        \"517\": []\n      },\n      \"492\": {\n        \"493\": [\n          \"495\"\n        ],\n        \"499\": [\n          \"509\"\n        ]\n      },\n      \"133\": {\n        \"184\": [],\n        \"515\": [],\n        \"246\": []\n      },\n      \"121\": {\n        \"516\": [],\n        \"341\": [],\n        \"385\": []\n      },\n      \"291\": {\n        \"292\": []\n      },\n      \"523\": {}\n    },\n    \"categoriesMap\": {\n      \"472\": {\n        \"id\": 472,\n        \"name\": \"Charging Accessories\",\n        \"displayName\": \"Charging Accessories\",\n        \"description\": \"Charging Accessories\",\n        \"catlevel\": 1,\n        \"seqno\": 1,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"474\": {\n        \"id\": 474,\n        \"name\": \"SmartPhones\",\n        \"displayName\": \"SmartPhones\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 3,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"476\": {\n        \"id\": 476,\n        \"name\": \"Health Care\",\n        \"displayName\": \"Health Care\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 51,\n        \"parentId\": 475,\n        \"parentName\": \"Personal Care and Grooming\"\n      },\n      \"355\": {\n        \"id\": 355,\n        \"name\": \"Travel Accessories\",\n        \"displayName\": \"Travel Accessories\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 55,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"477\": {\n        \"id\": 477,\n        \"name\": \"Massager\",\n        \"displayName\": \"Massager\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 197,\n        \"parentId\": 294,\n        \"parentName\": \"Health Devices\"\n      },\n      \"510\": {\n        \"id\": 510,\n        \"name\": \"Air Conditioner\",\n        \"displayName\": \"Air Conditioner\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 207,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      },\n      \"357\": {\n        \"id\": 357,\n        \"name\": \"Luggage Trolleys\",\n        \"displayName\": \"Luggage Trolleys\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 56,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"511\": {\n        \"id\": 511,\n        \"name\": \"Washing Machine\",\n        \"displayName\": \"Washing Machine\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 208,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      }\n    },\n    \"homePageSliderDefData\": [\n      {\n        \"id\": 16,\n        \"slidertype\": 800,\n        \"slidertypename\": \"SLIDER\",\n        \"siteMasterId\": null,\n        \"siteMasterName\": null,\n        \"slidername\": null,\n        \"slidercode\": \"SL2\",\n        \"sliderdisplayname\": \"Technology Curated For Modern Travel\"\n      }\n    ],\n    \"langList\": [\n      {\n        \"code\": \"en\",\n        \"value\": \"English\",\n        \"cd\": null\n      }\n    ],\n    \"pageName\": \"catelog\",\n    \"categoryBannerMap\": null,\n    \"prductFiltter\": {\n      \"proudctSizeFiltter\": [\n        {\n          \"key\": 0,\n          \"value\": null,\n          \"count\": 155\n        }\n      ],\n      \"skuVarinatColorFiltter\": [\n        {\n          \"key\": 3048,\n          \"value\": \"Anchor Blue\",\n          \"code\": \"1598_color1781592325829.jpg\",\n          \"count\": 1\n        }\n      ],\n      \"proudctBrandFiltter\": [\n        {\n          \"key\": 1,\n          \"value\": \"Apple\",\n          \"count\": 232\n        }\n      ],\n      \"minMaxPrice\": [\n        {\n          \"key\": null,\n          \"value\": \"246221.0\",\n          \"cd\": null\n        }\n      ],\n      \"supplyType\": [\n        {\n          \"key\": 7078,\n          \"value\": \"Stock\",\n          \"cd\": null\n        }\n      ],\n      \"proudctTagFiltter\": [\n        {\n          \"key\": 1,\n          \"value\": \"Maharaja Picks\",\n          \"count\": 1\n        }\n      ],\n      \"proudctColorFiltter\": [\n        {\n          \"key\": 0,\n          \"value\": null,\n          \"count\": 155\n        }\n      ],\n      \"proudctCategoryFiltter\": [\n        {\n          \"key\": 39,\n          \"value\": \"AirPods Pro 3\",\n          \"count\": 1\n        }\n      ]\n    }\n  }\n}"
      }
     ]
    },
    {
     "name": "Category / filtered listing with paging + sort",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/catalog/listing?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "catalog",
        "listing"
       ],
       "query": [
        {
         "key": "filter",
         "value": "{{filter}}",
         "disabled": true
        },
        {
         "key": "page",
         "value": "{{page}}",
         "disabled": true
        },
        {
         "key": "totalRecord",
         "value": "{{totalRecord}}",
         "disabled": true
        },
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Category / filtered listing with paging + sort\n\n**Scope `catalog:read`.** The listing grid. **Filtering, sorting and \u201cload more\u201d are all parameters here** (`filter`, `page`, `totalRecord`), not separate endpoints."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/catalog/listing?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "catalog",
          "listing"
         ],
         "query": [
          {
           "key": "filter",
           "value": "{{filter}}",
           "disabled": true
          },
          {
           "key": "page",
           "value": "{{page}}",
           "disabled": true
          },
          {
           "key": "totalRecord",
           "value": "{{totalRecord}}",
           "disabled": true
          },
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Category / filtered listing with paging + sort\n\n**Scope `catalog:read`.** The listing grid. **Filtering, sorting and \u201cload more\u201d are all parameters here** (`filter`, `page`, `totalRecord`), not separate endpoints."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record found successfully\",\n  \"response\": {\n    \"categoryHierarchy\": {\n      \"518\": {\n        \"519\": [],\n        \"520\": [],\n        \"521\": []\n      },\n      \"95\": {\n        \"319\": [],\n        \"465\": [],\n        \"466\": [\n          \"480\"\n        ],\n        \"489\": [],\n        \"490\": [\n          \"327\"\n        ],\n        \"84\": [\n          \"326\"\n        ]\n      },\n      \"458\": {\n        \"355\": [],\n        \"357\": [],\n        \"517\": []\n      },\n      \"492\": {\n        \"493\": [\n          \"495\"\n        ],\n        \"499\": [\n          \"509\"\n        ]\n      },\n      \"133\": {\n        \"184\": [],\n        \"515\": [],\n        \"246\": []\n      },\n      \"121\": {\n        \"516\": [],\n        \"341\": [],\n        \"385\": []\n      },\n      \"291\": {\n        \"292\": []\n      },\n      \"523\": {}\n    },\n    \"categoriesMap\": {\n      \"472\": {\n        \"id\": 472,\n        \"name\": \"Charging Accessories\",\n        \"displayName\": \"Charging Accessories\",\n        \"description\": \"Charging Accessories\",\n        \"catlevel\": 1,\n        \"seqno\": 1,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"474\": {\n        \"id\": 474,\n        \"name\": \"SmartPhones\",\n        \"displayName\": \"SmartPhones\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 3,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"476\": {\n        \"id\": 476,\n        \"name\": \"Health Care\",\n        \"displayName\": \"Health Care\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 51,\n        \"parentId\": 475,\n        \"parentName\": \"Personal Care and Grooming\"\n      },\n      \"355\": {\n        \"id\": 355,\n        \"name\": \"Travel Accessories\",\n        \"displayName\": \"Travel Accessories\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 55,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"477\": {\n        \"id\": 477,\n        \"name\": \"Massager\",\n        \"displayName\": \"Massager\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 197,\n        \"parentId\": 294,\n        \"parentName\": \"Health Devices\"\n      },\n      \"510\": {\n        \"id\": 510,\n        \"name\": \"Air Conditioner\",\n        \"displayName\": \"Air Conditioner\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 207,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      },\n      \"357\": {\n        \"id\": 357,\n        \"name\": \"Luggage Trolleys\",\n        \"displayName\": \"Luggage Trolleys\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 56,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"511\": {\n        \"id\": 511,\n        \"name\": \"Washing Machine\",\n        \"displayName\": \"Washing Machine\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 208,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      }\n    },\n    \"langList\": [\n      {\n        \"code\": \"en\",\n        \"value\": \"English\",\n        \"cd\": null\n      }\n    ],\n    \"categoryBannerMap\": null\n  }\n}"
      }
     ]
    },
    {
     "name": "Search autocomplete suggestions",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/catalog/autocomplete?query={{query}}",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "catalog",
        "autocomplete"
       ],
       "query": [
        {
         "key": "query",
         "value": "{{query}}"
        },
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Search autocomplete suggestions\n\n**Scope `catalog:read`.** Type-ahead suggestions for a partial query."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/catalog/autocomplete?query={{query}}",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "catalog",
          "autocomplete"
         ],
         "query": [
          {
           "key": "query",
           "value": "{{query}}"
          },
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Search autocomplete suggestions\n\n**Scope `catalog:read`.** Type-ahead suggestions for a partial query."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"ProductData\": [\n      {\n        \"key\": 1222,\n        \"value\": \"Men Polo Collar T-Shirts Test Black S\",\n        \"cd\": null\n      }\n    ],\n    \"CategoryData\": [\n      {\n        \"parentName\": \"Air India Merchandise\",\n        \"rootId\": 0,\n        \"displayName\": \"T-shirts\",\n        \"rootName\": null,\n        \"name\": \"Tshirts\",\n        \"id\": 520,\n        \"key\": 520,\n        \"parentId\": 518\n      }\n    ]\n  }\n}"
      }
     ]
    },
    {
     "name": "Full detail for one SKU (product page)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/catalog/product-detail?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "catalog",
        "product-detail"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Full detail for one SKU (product page)\n\n**Scope `catalog:read`.** The SKU must be on your tenant; a foreign or unknown id answers `404` identically."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/catalog/product-detail?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "catalog",
          "product-detail"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Full detail for one SKU (product page)\n\n**Scope `catalog:read`.** The SKU must be on your tenant; a foreign or unknown id answers `404` identically."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"id\": 912,\n    \"mainSkuId\": 0,\n    \"mainProductId\": null,\n    \"productCode\": \"AWMIX450\",\n    \"productName\": \"Aiwa MI-X450 Pro Enigma high Efficiency Audio Speaker with Retro Styling - Rose Gold\",\n    \"isapproved\": 1,\n    \"sellerId\": 11,\n    \"sellerName\": \"ZRPL\"\n  }\n}"
      }
     ]
    },
    {
     "name": "Deferred product-page data",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/catalog/product-async?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "catalog",
        "product-async"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Deferred product-page data\n\n**Scope `catalog:read`.** Flash offers and size/colour options, split out so the page can render first."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/catalog/product-async?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "catalog",
          "product-async"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Deferred product-page data\n\n**Scope `catalog:read`.** Flash offers and size/colour options, split out so the page can render first."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"isFlashSale\": false,\n    \"sizeTypes\": [\n      {\n        \"key\": 7062,\n        \"value\": \"UK\",\n        \"cd\": null\n      }\n    ],\n    \"langList\": [\n      {\n        \"code\": \"en\",\n        \"value\": \"English\",\n        \"cd\": null\n      }\n    ],\n    \"stock\": true\n  }\n}"
      }
     ]
    },
    {
     "name": "Product image gallery",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/catalog/product-gallery?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "catalog",
        "product-gallery"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Product image gallery\n\n**Scope `catalog:read`.** Gallery images for a SKU on your tenant."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/catalog/product-gallery?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "catalog",
          "product-gallery"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Product image gallery\n\n**Scope `catalog:read`.** Gallery images for a SKU on your tenant."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"skuName\": \"Aiwa MI-X450 Pro Enigma high Efficiency Audio Speaker with Retro Styling - Rose Gold\",\n    \"skuGalleryList\": [],\n    \"skuId\": 912\n  }\n}"
      }
     ]
    },
    {
     "name": "\u201cLearn more\u201d rich content",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/catalog/product-learn-more?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "catalog",
        "product-learn-more"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "\u201cLearn more\u201d rich content\n\n**Scope `catalog:read`.** Long-form marketing content blocks for a SKU."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/catalog/product-learn-more?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "catalog",
          "product-learn-more"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "\u201cLearn more\u201d rich content\n\n**Scope `catalog:read`.** Long-form marketing content blocks for a SKU."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"skuName\": \"Aiwa MI-X450 Pro Enigma high Efficiency Audio Speaker with Retro Styling - Rose Gold\",\n    \"stagSkuSpecificationBeans\": [],\n    \"skuDetailsBean\": {\n      \"id\": 898,\n      \"skuId\": 912,\n      \"skuName\": \"Aiwa MI-X450 Pro Enigma high Efficiency Audio Speaker with Retro Styling - Rose Gold\",\n      \"description\": \"<p>120W portable speaker with deep bass and immersive sound powered by a 22500mAh batter\\u2026\",\n      \"warranty\": \"120W portable speaker with deep bass dual wireless microphones multiple connectivity opt\\u2026\",\n      \"sizeChart\": null,\n      \"videoLink\": \"\",\n      \"title\": \"\"\n    },\n    \"skuLearnMoreList\": [],\n    \"skuId\": 912\n  }\n}"
      }
     ]
    },
    {
     "name": "Static product content",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/catalog/product-static-content?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "catalog",
        "product-static-content"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Static product content\n\n**Scope `catalog:read`.** Static spec / description content for a SKU."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/catalog/product-static-content?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "catalog",
          "product-static-content"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Static product content\n\n**Scope `catalog:read`.** Static spec / description content for a SKU."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record added successfully.\",\n  \"response\": {\n    \"skuId\": 101,\n    \"staticContent\": \"<h3>Product care</h3><p>Wipe with a soft, dry cloth. Avoid moisture.</p>\",\n    \"contentType\": \"LEARN_MORE\"\n  }\n}"
      }
     ]
    },
    {
     "name": "Filtered / sorted product listing",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/catalog/filter-listing",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "catalog",
        "filter-listing"
       ]
      },
      "description": "Filtered / sorted product listing\n\n**Scope `catalog:read`.** No customer token. Filtered, sorted, paged product listing (the jqx-grid filter view). Tenant-scoped and fail-closed; all filters are bound.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "q",
         "value": "watch"
        },
        {
         "key": "page",
         "value": "1"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/catalog/filter-listing",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "catalog",
          "filter-listing"
         ]
        },
        "description": "Filtered / sorted product listing\n\n**Scope `catalog:read`.** No customer token. Filtered, sorted, paged product listing (the jqx-grid filter view). Tenant-scoped and fail-closed; all filters are bound.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "q",
           "value": "watch"
          },
          {
           "key": "page",
           "value": "1"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"recordsTotal\": 12,\n  \"recordsFiltered\": 12,\n  \"data\": []\n}"
      }
     ]
    },
    {
     "name": "Product card/component data for a set of SKU ids",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/catalog/product-components-by-ids",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "catalog",
        "product-components-by-ids"
       ]
      },
      "description": "Product card/component data for a set of SKU ids\n\n**Scope `catalog:read`.** No customer token. Returns card/component data for the comma-separated `productId` SKU ids (for a partner-rendered \"recently viewed\" strip). Tenant-scoped: ids on another tenant are dropped.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "productId",
         "value": "101,102,103"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/catalog/product-components-by-ids",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "catalog",
          "product-components-by-ids"
         ]
        },
        "description": "Product card/component data for a set of SKU ids\n\n**Scope `catalog:read`.** No customer token. Returns card/component data for the comma-separated `productId` SKU ids (for a partner-rendered \"recently viewed\" strip). Tenant-scoped: ids on another tenant are dropped.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "productId",
           "value": "101,102,103"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"recentViewGuestLogin\": []\n  }\n}"
      }
     ]
    },
    {
     "name": "Product reviews (anonymised)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/catalog/product-reviews",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "catalog",
        "product-reviews"
       ]
      },
      "description": "Product reviews (anonymised)\n\n**Scope `catalog:read`.** No customer token. Ratings and reviews for the SKU in `offerId`. Tenant-scoped (reviews for a SKU not on your tenant come back empty). Reviewer identity is NOT returned - reviews are anonymised to rating, title, text, likes and date.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "offerId",
         "value": "101"
        },
        {
         "key": "page",
         "value": "1"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/catalog/product-reviews",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "catalog",
          "product-reviews"
         ]
        },
        "description": "Product reviews (anonymised)\n\n**Scope `catalog:read`.** No customer token. Ratings and reviews for the SKU in `offerId`. Tenant-scoped (reviews for a SKU not on your tenant come back empty). Reviewer identity is NOT returned - reviews are anonymised to rating, title, text, likes and date.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "offerId",
           "value": "101"
          },
          {
           "key": "page",
           "value": "1"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record found successfully\",\n  \"response\": {\n    \"reviewList\": [\n      {\n        \"id\": 88,\n        \"rating\": 5,\n        \"title\": \"Excellent quality\",\n        \"review\": \"Looks premium and arrived on time.\",\n        \"likes\": 3,\n        \"dislikes\": 0,\n        \"cd\": \"2026-06-12 10:04:00\",\n        \"wuserName\": null,\n        \"wuserId\": null,\n        \"wuserMobileNo\": null\n      }\n    ]\n  }\n}"
      }
     ]
    },
    {
     "name": "Related products (you may also like)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/catalog/related-products",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "catalog",
        "related-products"
       ]
      },
      "description": "Related products (you may also like)\n\n**Scope `catalog:read`.** No customer token. Related products for the SKU in the `id` param (which is a SKU id). Guarded: the SKU must be published on your tenant, else `404`.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "id",
         "value": "101"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/catalog/related-products",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "catalog",
          "related-products"
         ]
        },
        "description": "Related products (you may also like)\n\n**Scope `catalog:read`.** No customer token. Related products for the SKU in the `id` param (which is a SKU id). Guarded: the SKU must be published on your tenant, else `404`.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "id",
           "value": "101"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": [\n    {\n      \"skuId\": 205,\n      \"skuCode\": \"TM-WATCH-205\",\n      \"skuName\": \"Classic Leather Strap Watch\",\n      \"offerPrice\": 2499.0,\n      \"offerMrp\": 3999.0,\n      \"images\": [\n        \"/static/www/images/skuImages/205/205_1.jpg\"\n      ],\n      \"isInventoryAvailable\": true,\n      \"currentInventory\": 34,\n      \"shortDescription\": \"Analog watch with a genuine leather strap.\"\n    }\n  ]\n}"
      }
     ]
    },
    {
     "name": "Recipes attached to a SKU",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/catalog/sku-recipes",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "catalog",
        "sku-recipes"
       ]
      },
      "description": "Recipes attached to a SKU\n\n**Scope `catalog:read`.** No customer token. Returns the recipe(s) for `skuId`. Guarded: the SKU must be published on your tenant, else `404`.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "skuId",
         "value": "101"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/catalog/sku-recipes",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "catalog",
          "sku-recipes"
         ]
        },
        "description": "Recipes attached to a SKU\n\n**Scope `catalog:read`.** No customer token. Returns the recipe(s) for `skuId`. Guarded: the SKU must be published on your tenant, else `404`.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "skuId",
           "value": "101"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record found successfully\",\n  \"response\": [\n    {\n      \"id\": 12,\n      \"skuId\": 101,\n      \"productTitle\": \"Masala Chai\",\n      \"description\": \"A spiced Indian milk tea.\",\n      \"imageName\": \"/static/www/images/recipeimages/masala-chai.jpg\",\n      \"ingredients\": \"Tea leaves, milk, ginger, cardamom, sugar\",\n      \"steps\": \"Boil water with the spices, add tea and milk, simmer, then strain.\",\n      \"cookingtime\": \"10 mins\",\n      \"serve\": \"2\",\n      \"mealTime\": \"Morning\",\n      \"isactive\": 1\n    }\n  ]\n}"
      }
     ]
    }
   ]
  },
  {
   "name": "3. Geo  (scope: geo:read)",
   "item": [
    {
     "name": "Countries",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/geo/countries?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "geo",
        "countries"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Countries\n\n**Scope `geo:read`.** Global reference data \u2014 identical for every tenant."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/geo/countries?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "geo",
          "countries"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Countries\n\n**Scope `geo:read`.** Global reference data \u2014 identical for every tenant."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": [\n    {\n      \"id\": 101,\n      \"code\": \"IN\",\n      \"name\": \"India\",\n      \"isactive\": true,\n      \"flagimage\": null,\n      \"mobilecode\": \"91\"\n    }\n  ]\n}"
      }
     ]
    },
    {
     "name": "Countries with dialling / ISO detail",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/geo/countries-detail?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "geo",
        "countries-detail"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Countries with dialling / ISO detail\n\n**Scope `geo:read`.** Countries with ISO codes and dialling prefixes."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/geo/countries-detail?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "geo",
          "countries-detail"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Countries with dialling / ISO detail\n\n**Scope `geo:read`.** Countries with ISO codes and dialling prefixes."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"countriesList\": [\n      {\n        \"key\": 101,\n        \"value\": \"India\",\n        \"cd\": null\n      }\n    ]\n  }\n}"
      }
     ]
    },
    {
     "name": "States of a country",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/geo/states?countryId={{countryId}}",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "geo",
        "states"
       ],
       "query": [
        {
         "key": "countryId",
         "value": "{{countryId}}"
        }
       ]
      },
      "description": "States of a country\n\n**Scope `geo:read`.** Pass `countryId` as a parameter, never a path segment."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/geo/states?countryId={{countryId}}",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "geo",
          "states"
         ],
         "query": [
          {
           "key": "countryId",
           "value": "{{countryId}}"
          }
         ]
        },
        "description": "States of a country\n\n**Scope `geo:read`.** Pass `countryId` as a parameter, never a path segment."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Success\",\n  \"response\": [\n    {\n      \"id\": 1,\n      \"code\": \"AN\",\n      \"name\": \"Andaman And Nicobar Islands\",\n      \"countryId\": 101,\n      \"country\": \"India\",\n      \"isactive\": true\n    }\n  ]\n}"
      }
     ]
    },
    {
     "name": "Cities of a state",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/geo/cities?stateId={{stateId}}",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "geo",
        "cities"
       ],
       "query": [
        {
         "key": "stateId",
         "value": "{{stateId}}"
        }
       ]
      },
      "description": "Cities of a state\n\n**Scope `geo:read`.** Pass `stateId`."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/geo/cities?stateId={{stateId}}",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "geo",
          "cities"
         ],
         "query": [
          {
           "key": "stateId",
           "value": "{{stateId}}"
          }
         ]
        },
        "description": "Cities of a state\n\n**Scope `geo:read`.** Pass `stateId`."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Success\",\n  \"response\": [\n    {\n      \"id\": 1056,\n      \"stateId\": 1,\n      \"state\": \"Andaman And Nicobar Islands\",\n      \"code\": \"CBD\",\n      \"name\": \"Nicobar\",\n      \"isactive\": true\n    }\n  ]\n}"
      }
     ]
    },
    {
     "name": "Resolve a pincode to country / state / city",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/geo/pincode?pincode={{pincode}}",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "geo",
        "pincode"
       ],
       "query": [
        {
         "key": "pincode",
         "value": "{{pincode}}"
        }
       ]
      },
      "description": "Resolve a pincode to country / state / city\n\n**Scope `geo:read`.** Look up an address from a postcode. Pass `pincode`."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/geo/pincode?pincode={{pincode}}",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "geo",
          "pincode"
         ],
         "query": [
          {
           "key": "pincode",
           "value": "{{pincode}}"
          }
         ]
        },
        "description": "Resolve a pincode to country / state / city\n\n**Scope `geo:read`.** Look up an address from a postcode. Pass `pincode`."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Success\",\n  \"response\": {\n    \"pincode\": \"400709\",\n    \"city\": \"Navi Mumbai\",\n    \"stateName\": \"Maharashtra\",\n    \"stateId\": \"21\",\n    \"pincodeId\": \"15092\",\n    \"cityId\": \"1042\",\n    \"countryName\": \"India\",\n    \"countryId\": \"101\"\n  }\n}"
      }
     ]
    },
    {
     "name": "Areas / localities of a city",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/geo/city-area?cityId={{cityId}}",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "geo",
        "city-area"
       ],
       "query": [
        {
         "key": "cityId",
         "value": "{{cityId}}"
        }
       ]
      },
      "description": "Areas / localities of a city\n\n**Scope `geo:read`.** Pass `cityId`."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/geo/city-area?cityId={{cityId}}",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "geo",
          "city-area"
         ],
         "query": [
          {
           "key": "cityId",
           "value": "{{cityId}}"
          }
         ]
        },
        "description": "Areas / localities of a city\n\n**Scope `geo:read`.** Pass `cityId`."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Success\",\n  \"response\": [\n    {\n      \"id\": 1,\n      \"cityId\": 1,\n      \"city\": \"Abohar\",\n      \"regionId\": 21,\n      \"region\": \"WEST\",\n      \"pincode\": \"152116\",\n      \"isactive\": true,\n      \"countryId\": 101\n    }\n  ]\n}"
      }
     ]
    }
   ]
  },
  {
   "name": "4. Reference  (scope: geo:read)",
   "item": [
    {
     "name": "Values of a lookup group",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/reference/group-values?groupname={{groupname}}",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "reference",
        "group-values"
       ],
       "query": [
        {
         "key": "groupname",
         "value": "{{groupname}}"
        }
       ]
      },
      "description": "Values of a lookup group\n\n**Scope `geo:read`.** Neutral reference vocabularies (kept under `geo:read`, not the commercial catalogue scope). Pass `groupname`."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/reference/group-values?groupname={{groupname}}",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "reference",
          "group-values"
         ],
         "query": [
          {
           "key": "groupname",
           "value": "{{groupname}}"
          }
         ]
        },
        "description": "Values of a lookup group\n\n**Scope `geo:read`.** Neutral reference vocabularies (kept under `geo:read`, not the commercial catalogue scope). Pass `groupname`."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"type\": [\n      {\n        \"key\": 109,\n        \"value\": \"Customer Wants Order Cancellation\",\n        \"cd\": null\n      }\n    ]\n  }\n}"
      }
     ]
    },
    {
     "name": "Sub-types of a lead / group type",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/reference/group-subtypes?leadTypeId={{leadTypeId}}",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "reference",
        "group-subtypes"
       ],
       "query": [
        {
         "key": "leadTypeId",
         "value": "{{leadTypeId}}"
        }
       ]
      },
      "description": "Sub-types of a lead / group type\n\n**Scope `geo:read`.** Pass `leadTypeId`."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/reference/group-subtypes?leadTypeId={{leadTypeId}}",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "reference",
          "group-subtypes"
         ],
         "query": [
          {
           "key": "leadTypeId",
           "value": "{{leadTypeId}}"
          }
         ]
        },
        "description": "Sub-types of a lead / group type\n\n**Scope `geo:read`.** Pass `leadTypeId`."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"subtype\": [\n      {\n        \"key\": 144,\n        \"value\": \"Customer Has Dropped His Plan\",\n        \"cd\": null\n      }\n    ]\n  }\n}"
      }
     ]
    },
    {
     "name": "Order cancellation reasons",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/reference/cancel-reasons?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "reference",
        "cancel-reasons"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Order cancellation reasons\n\n**Scope `geo:read`.** The cancellation-reason vocabulary for order flows."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/reference/cancel-reasons?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "reference",
          "cancel-reasons"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Order cancellation reasons\n\n**Scope `geo:read`.** The cancellation-reason vocabulary for order flows."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"reasons\": [\n      {\n        \"key\": 144,\n        \"value\": \"Customer Has Dropped His Plan\",\n        \"cd\": null\n      }\n    ]\n  }\n}"
      }
     ]
    }
   ]
  },
  {
   "name": "5. Customer Identity  (scope: customer:auth)",
   "item": [
    {
     "name": "Step 1 of OTP login \u2014 verify the password and send the login OTP",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/auth/check",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "auth",
        "check"
       ]
      },
      "description": "Step 1 of OTP login \u2014 verify the password and send the login OTP\n\n**Scope `customer:auth`.** On an OTP tenant this is **step 1** of signing in: it verifies the password and, if correct, generates a one-time code, stores it against the shopper and sends it by SMS, returning a resend timer. It starts no session \u2014 follow with `/customer/auth/login` (step 2). \u26a0\ufe0f Identify the shopper by `loginUserName` here (not `emailid`/`mobileno`). \u26a0\ufe0f It answers identically for wrong password and unknown account, so it cannot enumerate accounts. \u26a0\ufe0f Where SMS delivery is disabled the code is stored but not sent, and login cannot complete.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "webUserBean",
         "value": "{\"loginUserName\":\"9876500000\",\"password\":\"S3cret!\"}"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Credentials accepted, OTP sent",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/auth/check",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "auth",
          "check"
         ]
        },
        "description": "Step 1 of OTP login \u2014 verify the password and send the login OTP\n\n**Scope `customer:auth`.** On an OTP tenant this is **step 1** of signing in: it verifies the password and, if correct, generates a one-time code, stores it against the shopper and sends it by SMS, returning a resend timer. It starts no session \u2014 follow with `/customer/auth/login` (step 2). \u26a0\ufe0f Identify the shopper by `loginUserName` here (not `emailid`/`mobileno`). \u26a0\ufe0f It answers identically for wrong password and unknown account, so it cannot enumerate accounts. \u26a0\ufe0f Where SMS delivery is disabled the code is stored but not sent, and login cannot complete.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "webUserBean",
           "value": "{\"loginUserName\":\"9876500000\",\"password\":\"S3cret!\"}"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"OTP has been sent on your registered mobile number.\",\n  \"response\": {\n    \"resendAfterSeconds\": 30\n  }\n}"
      },
      {
       "name": "Credentials rejected",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/auth/check",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "auth",
          "check"
         ]
        },
        "description": "Step 1 of OTP login \u2014 verify the password and send the login OTP\n\n**Scope `customer:auth`.** On an OTP tenant this is **step 1** of signing in: it verifies the password and, if correct, generates a one-time code, stores it against the shopper and sends it by SMS, returning a resend timer. It starts no session \u2014 follow with `/customer/auth/login` (step 2). \u26a0\ufe0f Identify the shopper by `loginUserName` here (not `emailid`/`mobileno`). \u26a0\ufe0f It answers identically for wrong password and unknown account, so it cannot enumerate accounts. \u26a0\ufe0f Where SMS delivery is disabled the code is stored but not sent, and login cannot complete.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "webUserBean",
           "value": "{\"loginUserName\":\"9876500000\",\"password\":\"S3cret!\"}"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"FAIL\",\n  \"message\": \"Invalid email or password\",\n  \"response\": null\n}"
      }
     ]
    },
    {
     "name": "Step 2 of OTP login \u2014 submit the OTP, receive the customer token",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/auth/login",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "auth",
        "login"
       ]
      },
      "description": "Step 2 of OTP login \u2014 submit the OTP, receive the customer token\n\n**Scope `customer:auth`.** Signing in is a two-step flow on an OTP tenant (which includes site\u00a04). Call `/customer/auth/check` first (it sends the OTP), then call this with the same credential plus the `otp`. On a non-OTP tenant, call this directly with just the password. Identify the shopper by `emailid` or `mobileno`. On success the response carries the `JWT` you send as `X-Customer-Token` on every customer-bound route.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "webUserBean",
         "value": "{\"mobileno\":\"9876500000\",\"password\":\"S3cret!\",\"otp\":\"483920\"}"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Signed in \u2014 token issued",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/auth/login",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "auth",
          "login"
         ]
        },
        "description": "Step 2 of OTP login \u2014 submit the OTP, receive the customer token\n\n**Scope `customer:auth`.** Signing in is a two-step flow on an OTP tenant (which includes site\u00a04). Call `/customer/auth/check` first (it sends the OTP), then call this with the same credential plus the `otp`. On a non-OTP tenant, call this directly with just the password. Identify the shopper by `emailid` or `mobileno`. On success the response carries the `JWT` you send as `X-Customer-Token` on every customer-bound route.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "webUserBean",
           "value": "{\"mobileno\":\"9876500000\",\"password\":\"S3cret!\",\"otp\":\"483920\"}"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Success\",\n  \"response\": {\n    \"JWT\": \"eyJhbGciOiJIUzUxMiJ9.<web-jwt>\",\n    \"JWT_WEB_REFRESH_TOKEN\": \"eyJhbGciOiJIUzUxMiJ9.<refresh>\",\n    \"JWT_WEB_REFRESH_EXPIRY\": 10800,\n    \"webUserBean\": {\n      \"id\": 89,\n      \"name\": \"Partner Test\"\n    }\n  }\n}"
      },
      {
       "name": "OTP not supplied (call /check first)",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/auth/login",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "auth",
          "login"
         ]
        },
        "description": "Step 2 of OTP login \u2014 submit the OTP, receive the customer token\n\n**Scope `customer:auth`.** Signing in is a two-step flow on an OTP tenant (which includes site\u00a04). Call `/customer/auth/check` first (it sends the OTP), then call this with the same credential plus the `otp`. On a non-OTP tenant, call this directly with just the password. Identify the shopper by `emailid` or `mobileno`. On success the response carries the `JWT` you send as `X-Customer-Token` on every customer-bound route.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "webUserBean",
           "value": "{\"mobileno\":\"9876500000\",\"password\":\"S3cret!\",\"otp\":\"483920\"}"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"FAIL\",\n  \"message\": \"Please enter OTP.\",\n  \"response\": null\n}"
      }
     ],
     "event": [
      {
       "listen": "test",
       "script": {
        "type": "text/javascript",
        "exec": [
         "const b = pm.response.json();",
         "// Two-step on an OTP tenant: run 'check' first (it sends the OTP), then this with the otp.",
         "if (b.status === 'SUCCESS' && b.response && b.response.JWT) {",
         "  pm.collectionVariables.set('customerToken', b.response.JWT);",
         "  console.log('Customer token stored - customer-scoped requests will now work.');",
         "} else {",
         "  console.log('No token yet:', b.message, '(did you call /customer/auth/check first?)');",
         "}"
        ]
       }
      }
     ]
    },
    {
     "name": "Register a new shopper on your tenant",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/auth/register",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "auth",
        "register"
       ]
      },
      "description": "Register a new shopper on your tenant\n\n**Scope `customer:auth`.** Creates a shopper and starts OTP verification. The tenant is stamped server-side. Throttled (registration is otherwise an enumeration oracle). Site\u00a04 additionally requires a membership id downstream.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Partner Test\",\n  \"emailid\": \"shopper@example.com\",\n  \"mobileno\": \"9876500000\",\n  \"password\": \"S3cret!\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     },
     "response": [
      {
       "name": "Created \u2014 OTP sent",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/json"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/auth/register",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "auth",
          "register"
         ]
        },
        "description": "Register a new shopper on your tenant\n\n**Scope `customer:auth`.** Creates a shopper and starts OTP verification. The tenant is stamped server-side. Throttled (registration is otherwise an enumeration oracle). Site\u00a04 additionally requires a membership id downstream.",
        "body": {
         "mode": "raw",
         "raw": "{\n  \"name\": \"Partner Test\",\n  \"emailid\": \"shopper@example.com\",\n  \"mobileno\": \"9876500000\",\n  \"password\": \"S3cret!\"\n}",
         "options": {
          "raw": {
           "language": "json"
          }
         }
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Dear User, OTP is forwarded to your Registered Mobile number. OTP will expire in 5 minutes\",\n  \"response\": {\n    \"webUserBean\": {\n      \"id\": 89,\n      \"name\": \"Partner Test\",\n      \"emailid\": \"shopper@example.com\",\n      \"mobileno\": \"9876500000\",\n      \"isOtpVerificationRequired\": true\n    },\n    \"otpResendIntervalSeconds\": 30,\n    \"otpResendRemainingSeconds\": 30\n  }\n}"
      },
      {
       "name": "Validation / precondition failure",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/json"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/auth/register",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "auth",
          "register"
         ]
        },
        "description": "Register a new shopper on your tenant\n\n**Scope `customer:auth`.** Creates a shopper and starts OTP verification. The tenant is stamped server-side. Throttled (registration is otherwise an enumeration oracle). Site\u00a04 additionally requires a membership id downstream.",
        "body": {
         "mode": "raw",
         "raw": "{\n  \"name\": \"Partner Test\",\n  \"emailid\": \"shopper@example.com\",\n  \"mobileno\": \"9876500000\",\n  \"password\": \"S3cret!\"\n}",
         "options": {
          "raw": {
           "language": "json"
          }
         }
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"FAIL\",\n  \"message\": \"Invalid data found, Please enter valid data\",\n  \"response\": {\n    \"password\": \"Your password must be at least 8 characters long and include uppercase, lowercase, number, and special character. Avoid sequences (e.g., 1234, abcd), repeated characters (e.g., 1111), and previously compromised passwords.\"\n  }\n}"
      }
     ]
    },
    {
     "name": "Send a signup OTP",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/auth/otp/send",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "auth",
        "otp",
        "send"
       ]
      },
      "description": "Send a signup OTP\n\n**Scope `customer:auth`.** Throttled \u2014 it sends messages. SMS delivery is tenant-dependent.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "webUserBean",
         "value": "{\"mobileno\":\"9876500000\",\"emailid\":\"shopper@example.com\"}"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/auth/otp/send",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "auth",
          "otp",
          "send"
         ]
        },
        "description": "Send a signup OTP\n\n**Scope `customer:auth`.** Throttled \u2014 it sends messages. SMS delivery is tenant-dependent.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "webUserBean",
           "value": "{\"mobileno\":\"9876500000\",\"emailid\":\"shopper@example.com\"}"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"FAIL\",\n  \"message\": \"Something went wrong\",\n  \"response\": null\n}"
      }
     ]
    },
    {
     "name": "Verify a signup OTP",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/auth/otp/verify",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "auth",
        "otp",
        "verify"
       ]
      },
      "description": "Verify a signup OTP\n\n**Scope `customer:auth`.** Throttled \u2014 an unthrottled six-digit check is brute-forceable.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "webUserBean",
         "value": "{\"mobileno\":\"9876500000\",\"otp\":\"483920\"}"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/auth/otp/verify",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "auth",
          "otp",
          "verify"
         ]
        },
        "description": "Verify a signup OTP\n\n**Scope `customer:auth`.** Throttled \u2014 an unthrottled six-digit check is brute-forceable.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "webUserBean",
           "value": "{\"mobileno\":\"9876500000\",\"otp\":\"483920\"}"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"FAIL\",\n  \"message\": \"OTP is invalid, Please enter valid OTP\",\n  \"response\": null\n}"
      }
     ]
    },
    {
     "name": "Start a password reset",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/auth/password/forgot",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "auth",
        "password",
        "forgot"
       ]
      },
      "description": "Start a password reset\n\n**Scope `customer:auth`.** Sends a reset code. Answers the same for a known and an unknown address (enumeration-safe) and does not change the existing password.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"loginUserName\": \"9876500000\",\n  \"mobileno\": \"9876500000\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/json"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/auth/password/forgot",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "auth",
          "password",
          "forgot"
         ]
        },
        "description": "Start a password reset\n\n**Scope `customer:auth`.** Sends a reset code. Answers the same for a known and an unknown address (enumeration-safe) and does not change the existing password.",
        "body": {
         "mode": "raw",
         "raw": "{\n  \"loginUserName\": \"9876500000\",\n  \"mobileno\": \"9876500000\"\n}",
         "options": {
          "raw": {
           "language": "json"
          }
         }
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Reset password link send on your provided email.\",\n  \"response\": null\n}"
      }
     ]
    },
    {
     "name": "Complete a password reset",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/auth/password/reset",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "auth",
        "password",
        "reset"
       ]
      },
      "description": "Complete a password reset\n\n**Scope `customer:auth`.** Finds the shopper by the reset OTP and sets the new password. Replay is refused.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"mobileno\": \"9876500000\",\n  \"otp\": \"483920\",\n  \"password\": \"N3wpass!\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/json"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/auth/password/reset",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "auth",
          "password",
          "reset"
         ]
        },
        "description": "Complete a password reset\n\n**Scope `customer:auth`.** Finds the shopper by the reset OTP and sets the new password. Replay is refused.",
        "body": {
         "mode": "raw",
         "raw": "{\n  \"mobileno\": \"9876500000\",\n  \"otp\": \"483920\",\n  \"password\": \"N3wpass!\"\n}",
         "options": {
          "raw": {
           "language": "json"
          }
         }
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"FAIL\",\n  \"message\": \"User Account does not exist. Please enter a valid username. OR maybe you are using an in\\u2026\",\n  \"response\": null\n}"
      }
     ]
    },
    {
     "name": "Log the shopper out (revoke the customer token)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/auth/logout?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "auth",
        "logout"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Log the shopper out (revoke the customer token)\n\n**Scope `customer:auth`.** Send the shopper's `X-Customer-Token`; the session behind it is revoked immediately."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/auth/logout?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "auth",
          "logout"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Log the shopper out (revoke the customer token)\n\n**Scope `customer:auth`.** Send the shopper's `X-Customer-Token`; the session behind it is revoked immediately."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"logout successfully.\",\n  \"response\": null\n}"
      }
     ]
    }
   ]
  },
  {
   "name": "6. Customer Profile  (scope: customer:profile:read)",
   "item": [
    {
     "name": "The authenticated shopper's own account",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/profile?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "profile"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "The authenticated shopper's own account\n\n**Scope `customer:profile:read`.** Requires `X-Customer-Token`. No user id is accepted \u2014 the shopper is derived from the token, so this can only return the caller's own account."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/profile?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "profile"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "The authenticated shopper's own account\n\n**Scope `customer:profile:read`.** Requires `X-Customer-Token`. No user id is accepted \u2014 the shopper is derived from the token, so this can only return the caller's own account."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record found successfully\",\n  \"response\": {\n    \"webUserBean\": {\n      \"id\": 49,\n      \"emailid\": \"shopper@example.com\",\n      \"salutation\": \"\",\n      \"name\": \"Shopper\",\n      \"lastName\": \"Singh\",\n      \"mobileno\": \"9876500000\"\n    },\n    \"categoryHierarchy\": {\n      \"518\": {\n        \"519\": [],\n        \"520\": [],\n        \"521\": []\n      },\n      \"95\": {\n        \"319\": [],\n        \"465\": [],\n        \"466\": [\n          \"480\"\n        ],\n        \"489\": [],\n        \"490\": [\n          \"327\"\n        ],\n        \"84\": [\n          \"326\"\n        ]\n      },\n      \"458\": {\n        \"355\": [],\n        \"357\": [],\n        \"517\": []\n      },\n      \"492\": {\n        \"493\": [\n          \"495\"\n        ],\n        \"499\": [\n          \"509\"\n        ]\n      },\n      \"133\": {\n        \"184\": [],\n        \"515\": [],\n        \"246\": []\n      },\n      \"121\": {\n        \"516\": [],\n        \"341\": [],\n        \"385\": []\n      },\n      \"291\": {\n        \"292\": []\n      },\n      \"523\": {}\n    },\n    \"categoriesMap\": {\n      \"472\": {\n        \"id\": 472,\n        \"name\": \"Charging Accessories\",\n        \"displayName\": \"Charging Accessories\",\n        \"description\": \"Charging Accessories\",\n        \"catlevel\": 1,\n        \"seqno\": 1,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"474\": {\n        \"id\": 474,\n        \"name\": \"SmartPhones\",\n        \"displayName\": \"SmartPhones\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 3,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"476\": {\n        \"id\": 476,\n        \"name\": \"Health Care\",\n        \"displayName\": \"Health Care\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 51,\n        \"parentId\": 475,\n        \"parentName\": \"Personal Care and Grooming\"\n      },\n      \"355\": {\n        \"id\": 355,\n        \"name\": \"Travel Accessories\",\n        \"displayName\": \"Travel Accessories\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 55,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"477\": {\n        \"id\": 477,\n        \"name\": \"Massager\",\n        \"displayName\": \"Massager\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 197,\n        \"parentId\": 294,\n        \"parentName\": \"Health Devices\"\n      },\n      \"510\": {\n        \"id\": 510,\n        \"name\": \"Air Conditioner\",\n        \"displayName\": \"Air Conditioner\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 207,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      },\n      \"357\": {\n        \"id\": 357,\n        \"name\": \"Luggage Trolleys\",\n        \"displayName\": \"Luggage Trolleys\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 56,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"511\": {\n        \"id\": 511,\n        \"name\": \"Washing Machine\",\n        \"displayName\": \"Washing Machine\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 208,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      }\n    },\n    \"langList\": [\n      {\n        \"code\": \"en\",\n        \"value\": \"English\",\n        \"cd\": null\n      }\n    ],\n    \"categoryBannerMap\": null\n  }\n}"
      }
     ]
    },
    {
     "name": "The shopper's saved addresses",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/addresses?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "addresses"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "The shopper's saved addresses\n\n**Scope `customer:profile:read`.** Requires `X-Customer-Token`."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/addresses?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "addresses"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "The shopper's saved addresses\n\n**Scope `customer:profile:read`.** Requires `X-Customer-Token`."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record found successfully\",\n  \"response\": {\n    \"userAddressListData\": [\n      {\n        \"id\": 92,\n        \"pincodeId\": 1,\n        \"pincode\": \"152116\",\n        \"userId\": 49,\n        \"userName\": \"Shopper\",\n        \"name\": \"COD Test Addr\",\n        \"mobileno\": \"9876500000\",\n        \"phoneno\": null\n      }\n    ],\n    \"webUserBean\": {\n      \"id\": 49,\n      \"emailid\": \"shopper@example.com\",\n      \"salutation\": \"\",\n      \"name\": \"Shopper\",\n      \"lastName\": \"Singh\",\n      \"mobileno\": \"9876500000\"\n    },\n    \"categoryHierarchy\": {\n      \"518\": {\n        \"519\": [],\n        \"520\": [],\n        \"521\": []\n      },\n      \"95\": {\n        \"319\": [],\n        \"465\": [],\n        \"466\": [\n          \"480\"\n        ],\n        \"489\": [],\n        \"490\": [\n          \"327\"\n        ],\n        \"84\": [\n          \"326\"\n        ]\n      },\n      \"458\": {\n        \"355\": [],\n        \"357\": [],\n        \"517\": []\n      },\n      \"492\": {\n        \"493\": [\n          \"495\"\n        ],\n        \"499\": [\n          \"509\"\n        ]\n      },\n      \"133\": {\n        \"184\": [],\n        \"515\": [],\n        \"246\": []\n      },\n      \"121\": {\n        \"516\": [],\n        \"341\": [],\n        \"385\": []\n      },\n      \"291\": {\n        \"292\": []\n      },\n      \"523\": {}\n    },\n    \"userAddressListDataStr\": \"[{\\\"id\\\":92,\\\"pincodeId\\\":1,\\\"pincode\\\":\\\"152116\\\",\\\"userId\\\":49,\\\"userName\\\":\\\"Shopper\\\",\\\"name\\\":\\\"COD Te\\u2026\",\n    \"categoriesMap\": {\n      \"472\": {\n        \"id\": 472,\n        \"name\": \"Charging Accessories\",\n        \"displayName\": \"Charging Accessories\",\n        \"description\": \"Charging Accessories\",\n        \"catlevel\": 1,\n        \"seqno\": 1,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"474\": {\n        \"id\": 474,\n        \"name\": \"SmartPhones\",\n        \"displayName\": \"SmartPhones\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 3,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"476\": {\n        \"id\": 476,\n        \"name\": \"Health Care\",\n        \"displayName\": \"Health Care\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 51,\n        \"parentId\": 475,\n        \"parentName\": \"Personal Care and Grooming\"\n      },\n      \"355\": {\n        \"id\": 355,\n        \"name\": \"Travel Accessories\",\n        \"displayName\": \"Travel Accessories\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 55,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"477\": {\n        \"id\": 477,\n        \"name\": \"Massager\",\n        \"displayName\": \"Massager\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 197,\n        \"parentId\": 294,\n        \"parentName\": \"Health Devices\"\n      },\n      \"510\": {\n        \"id\": 510,\n        \"name\": \"Air Conditioner\",\n        \"displayName\": \"Air Conditioner\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 207,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      },\n      \"357\": {\n        \"id\": 357,\n        \"name\": \"Luggage Trolleys\",\n        \"displayName\": \"Luggage Trolleys\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 56,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"511\": {\n        \"id\": 511,\n        \"name\": \"Washing Machine\",\n        \"displayName\": \"Washing Machine\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 208,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      }\n    },\n    \"langList\": [\n      {\n        \"code\": \"en\",\n        \"value\": \"English\",\n        \"cd\": null\n      }\n    ],\n    \"countryList\": [\n      {\n        \"key\": 101,\n        \"value\": \"India\",\n        \"cd\": null\n      }\n    ],\n    \"categoryBannerMap\": null\n  }\n}"
      }
     ]
    },
    {
     "name": "Loyalty points balance / history",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/points?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "points"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Loyalty points balance / history\n\n**Scope `customer:profile:read`.** Requires `X-Customer-Token`."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/points?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "points"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Loyalty points balance / history\n\n**Scope `customer:profile:read`.** Requires `X-Customer-Token`."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record found successfully\",\n  \"response\": {\n    \"webUserBean\": {\n      \"id\": 49,\n      \"emailid\": \"shopper@example.com\",\n      \"salutation\": \"\",\n      \"name\": \"Shopper\",\n      \"lastName\": \"Singh\",\n      \"mobileno\": \"9876500000\"\n    },\n    \"categoryHierarchy\": {\n      \"518\": {\n        \"519\": [],\n        \"520\": [],\n        \"521\": []\n      },\n      \"95\": {\n        \"319\": [],\n        \"465\": [],\n        \"466\": [\n          \"480\"\n        ],\n        \"489\": [],\n        \"490\": [\n          \"327\"\n        ],\n        \"84\": [\n          \"326\"\n        ]\n      },\n      \"458\": {\n        \"355\": [],\n        \"357\": [],\n        \"517\": []\n      },\n      \"492\": {\n        \"493\": [\n          \"495\"\n        ],\n        \"499\": [\n          \"509\"\n        ]\n      },\n      \"133\": {\n        \"184\": [],\n        \"515\": [],\n        \"246\": []\n      },\n      \"121\": {\n        \"516\": [],\n        \"341\": [],\n        \"385\": []\n      },\n      \"291\": {\n        \"292\": []\n      },\n      \"523\": {}\n    },\n    \"categoriesMap\": {\n      \"472\": {\n        \"id\": 472,\n        \"name\": \"Charging Accessories\",\n        \"displayName\": \"Charging Accessories\",\n        \"description\": \"Charging Accessories\",\n        \"catlevel\": 1,\n        \"seqno\": 1,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"474\": {\n        \"id\": 474,\n        \"name\": \"SmartPhones\",\n        \"displayName\": \"SmartPhones\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 3,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"476\": {\n        \"id\": 476,\n        \"name\": \"Health Care\",\n        \"displayName\": \"Health Care\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 51,\n        \"parentId\": 475,\n        \"parentName\": \"Personal Care and Grooming\"\n      },\n      \"355\": {\n        \"id\": 355,\n        \"name\": \"Travel Accessories\",\n        \"displayName\": \"Travel Accessories\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 55,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"477\": {\n        \"id\": 477,\n        \"name\": \"Massager\",\n        \"displayName\": \"Massager\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 197,\n        \"parentId\": 294,\n        \"parentName\": \"Health Devices\"\n      },\n      \"510\": {\n        \"id\": 510,\n        \"name\": \"Air Conditioner\",\n        \"displayName\": \"Air Conditioner\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 207,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      },\n      \"357\": {\n        \"id\": 357,\n        \"name\": \"Luggage Trolleys\",\n        \"displayName\": \"Luggage Trolleys\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 56,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"511\": {\n        \"id\": 511,\n        \"name\": \"Washing Machine\",\n        \"displayName\": \"Washing Machine\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 208,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      }\n    },\n    \"categoryBannerMap\": null\n  }\n}"
      }
     ]
    },
    {
     "name": "The shopper's saved cards",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/cards?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "cards"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "The shopper's saved cards\n\n**Scope `customer:profile:read`.** Requires `X-Customer-Token`."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/cards?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "cards"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "The shopper's saved cards\n\n**Scope `customer:profile:read`.** Requires `X-Customer-Token`."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record found successfully\",\n  \"response\": {\n    \"webUserBean\": {\n      \"id\": 49,\n      \"emailid\": \"shopper@example.com\",\n      \"salutation\": \"\",\n      \"name\": \"Shopper\",\n      \"lastName\": \"Singh\",\n      \"mobileno\": \"9876500000\"\n    },\n    \"categoryHierarchy\": {\n      \"518\": {\n        \"519\": [],\n        \"520\": [],\n        \"521\": []\n      },\n      \"95\": {\n        \"319\": [],\n        \"465\": [],\n        \"466\": [\n          \"480\"\n        ],\n        \"489\": [],\n        \"490\": [\n          \"327\"\n        ],\n        \"84\": [\n          \"326\"\n        ]\n      },\n      \"458\": {\n        \"355\": [],\n        \"357\": [],\n        \"517\": []\n      },\n      \"492\": {\n        \"493\": [\n          \"495\"\n        ],\n        \"499\": [\n          \"509\"\n        ]\n      },\n      \"133\": {\n        \"184\": [],\n        \"515\": [],\n        \"246\": []\n      },\n      \"121\": {\n        \"516\": [],\n        \"341\": [],\n        \"385\": []\n      },\n      \"291\": {\n        \"292\": []\n      },\n      \"523\": {}\n    },\n    \"categoriesMap\": {\n      \"472\": {\n        \"id\": 472,\n        \"name\": \"Charging Accessories\",\n        \"displayName\": \"Charging Accessories\",\n        \"description\": \"Charging Accessories\",\n        \"catlevel\": 1,\n        \"seqno\": 1,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"474\": {\n        \"id\": 474,\n        \"name\": \"SmartPhones\",\n        \"displayName\": \"SmartPhones\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 3,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"476\": {\n        \"id\": 476,\n        \"name\": \"Health Care\",\n        \"displayName\": \"Health Care\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 51,\n        \"parentId\": 475,\n        \"parentName\": \"Personal Care and Grooming\"\n      },\n      \"355\": {\n        \"id\": 355,\n        \"name\": \"Travel Accessories\",\n        \"displayName\": \"Travel Accessories\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 55,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"477\": {\n        \"id\": 477,\n        \"name\": \"Massager\",\n        \"displayName\": \"Massager\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 197,\n        \"parentId\": 294,\n        \"parentName\": \"Health Devices\"\n      },\n      \"510\": {\n        \"id\": 510,\n        \"name\": \"Air Conditioner\",\n        \"displayName\": \"Air Conditioner\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 207,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      },\n      \"357\": {\n        \"id\": 357,\n        \"name\": \"Luggage Trolleys\",\n        \"displayName\": \"Luggage Trolleys\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 56,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"511\": {\n        \"id\": 511,\n        \"name\": \"Washing Machine\",\n        \"displayName\": \"Washing Machine\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 208,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      }\n    },\n    \"payrocJstokenUrl\": null,\n    \"langList\": [\n      {\n        \"code\": \"en\",\n        \"value\": \"English\",\n        \"cd\": null\n      }\n    ],\n    \"countryList\": [\n      {\n        \"key\": 101,\n        \"value\": \"India\",\n        \"cd\": null\n      }\n    ],\n    \"categoryBannerMap\": null,\n    \"storeCardList\": []\n  }\n}"
      }
     ]
    },
    {
     "name": "Reviews the shopper has written",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/reviews?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "reviews"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Reviews the shopper has written\n\n**Scope `customer:profile:read`.** Requires `X-Customer-Token`."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/reviews?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "reviews"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Reviews the shopper has written\n\n**Scope `customer:profile:read`.** Requires `X-Customer-Token`."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record found successfully\",\n  \"response\": {\n    \"webUserBean\": {\n      \"id\": 49,\n      \"emailid\": \"shopper@example.com\",\n      \"salutation\": \"\",\n      \"name\": \"Shopper\",\n      \"lastName\": \"Singh\",\n      \"mobileno\": \"9876500000\"\n    },\n    \"categoryHierarchy\": {\n      \"518\": {\n        \"519\": [],\n        \"520\": [],\n        \"521\": []\n      },\n      \"95\": {\n        \"319\": [],\n        \"465\": [],\n        \"466\": [\n          \"480\"\n        ],\n        \"489\": [],\n        \"490\": [\n          \"327\"\n        ],\n        \"84\": [\n          \"326\"\n        ]\n      },\n      \"458\": {\n        \"355\": [],\n        \"357\": [],\n        \"517\": []\n      },\n      \"492\": {\n        \"493\": [\n          \"495\"\n        ],\n        \"499\": [\n          \"509\"\n        ]\n      },\n      \"133\": {\n        \"184\": [],\n        \"515\": [],\n        \"246\": []\n      },\n      \"121\": {\n        \"516\": [],\n        \"341\": [],\n        \"385\": []\n      },\n      \"291\": {\n        \"292\": []\n      },\n      \"523\": {}\n    },\n    \"categoriesMap\": {\n      \"472\": {\n        \"id\": 472,\n        \"name\": \"Charging Accessories\",\n        \"displayName\": \"Charging Accessories\",\n        \"description\": \"Charging Accessories\",\n        \"catlevel\": 1,\n        \"seqno\": 1,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"474\": {\n        \"id\": 474,\n        \"name\": \"SmartPhones\",\n        \"displayName\": \"SmartPhones\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 3,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"476\": {\n        \"id\": 476,\n        \"name\": \"Health Care\",\n        \"displayName\": \"Health Care\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 51,\n        \"parentId\": 475,\n        \"parentName\": \"Personal Care and Grooming\"\n      },\n      \"355\": {\n        \"id\": 355,\n        \"name\": \"Travel Accessories\",\n        \"displayName\": \"Travel Accessories\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 55,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"477\": {\n        \"id\": 477,\n        \"name\": \"Massager\",\n        \"displayName\": \"Massager\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 197,\n        \"parentId\": 294,\n        \"parentName\": \"Health Devices\"\n      },\n      \"510\": {\n        \"id\": 510,\n        \"name\": \"Air Conditioner\",\n        \"displayName\": \"Air Conditioner\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 207,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      },\n      \"357\": {\n        \"id\": 357,\n        \"name\": \"Luggage Trolleys\",\n        \"displayName\": \"Luggage Trolleys\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 56,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"511\": {\n        \"id\": 511,\n        \"name\": \"Washing Machine\",\n        \"displayName\": \"Washing Machine\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 208,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      }\n    },\n    \"langList\": [\n      {\n        \"code\": \"en\",\n        \"value\": \"English\",\n        \"cd\": null\n      }\n    ],\n    \"categoryBannerMap\": null\n  }\n}"
      }
     ]
    },
    {
     "name": "Create or update one of the shopper's addresses",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/address/save",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "address",
        "save"
       ]
      },
      "description": "Create or update one of the shopper's addresses\n\n**Scope `customer:profile:write`.** Requires `X-Customer-Token`. Creates an address when `id` is omitted; updates it when `id` is present (the address must belong to the shopper). The owner is always the authenticated shopper \u2014 any `userId` in the body is ignored.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Shopper Singh\",\n  \"mobileno\": \"9876500000\",\n  \"address\": \"12 MG Road\",\n  \"pincode\": \"400709\",\n  \"addressType\": \"HOME\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/json"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/address/save",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "address",
          "save"
         ]
        },
        "description": "Create or update one of the shopper's addresses\n\n**Scope `customer:profile:write`.** Requires `X-Customer-Token`. Creates an address when `id` is omitted; updates it when `id` is present (the address must belong to the shopper). The owner is always the authenticated shopper \u2014 any `userId` in the body is ignored.",
        "body": {
         "mode": "raw",
         "raw": "{\n  \"name\": \"Shopper Singh\",\n  \"mobileno\": \"9876500000\",\n  \"address\": \"12 MG Road\",\n  \"pincode\": \"400709\",\n  \"addressType\": \"HOME\"\n}",
         "options": {
          "raw": {
           "language": "json"
          }
         }
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Success\",\n  \"response\": {\n    \"id\": 321\n  }\n}"
      }
     ]
    },
    {
     "name": "Set one of the shopper's addresses as default",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/address/default",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "address",
        "default"
       ]
      },
      "description": "Set one of the shopper's addresses as default\n\n**Scope `customer:profile:write`.** Requires `X-Customer-Token`. Only the shopper's own addresses are affected.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "webUserAddressBean",
         "value": "{\"id\":321}"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/address/default",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "address",
          "default"
         ]
        },
        "description": "Set one of the shopper's addresses as default\n\n**Scope `customer:profile:write`.** Requires `X-Customer-Token`. Only the shopper's own addresses are affected.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "webUserAddressBean",
           "value": "{\"id\":321}"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Success\",\n  \"response\": null\n}"
      }
     ]
    },
    {
     "name": "Delete one of the shopper's addresses",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/address/delete",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "address",
        "delete"
       ]
      },
      "description": "Delete one of the shopper's addresses\n\n**Scope `customer:profile:write`.** Requires `X-Customer-Token`. The address must belong to the shopper; a foreign or unknown id is rejected.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "webUserAddressBean",
         "value": "{\"id\":321}"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/address/delete",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "address",
          "delete"
         ]
        },
        "description": "Delete one of the shopper's addresses\n\n**Scope `customer:profile:write`.** Requires `X-Customer-Token`. The address must belong to the shopper; a foreign or unknown id is rejected.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "webUserAddressBean",
           "value": "{\"id\":321}"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record deleted successfully\",\n  \"response\": null\n}"
      }
     ]
    },
    {
     "name": "Change the shopper's password",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/password/change",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "password",
        "change"
       ]
      },
      "description": "Change the shopper's password\n\n**Scope `customer:profile:write`.** Requires `X-Customer-Token`. The CURRENT password is required and verified before the change (send it as `currentPassword`); the new password travels in `webUserBean` as `password` + `confirmPassword`. Applies to the authenticated shopper only.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "currentPassword",
         "value": "OldPass!23"
        },
        {
         "key": "webUserBean",
         "value": "{\"password\":\"NewPass!45\",\"confirmPassword\":\"NewPass!45\"}"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/password/change",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "password",
          "change"
         ]
        },
        "description": "Change the shopper's password\n\n**Scope `customer:profile:write`.** Requires `X-Customer-Token`. The CURRENT password is required and verified before the change (send it as `currentPassword`); the new password travels in `webUserBean` as `password` + `confirmPassword`. Applies to the authenticated shopper only.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "currentPassword",
           "value": "OldPass!23"
          },
          {
           "key": "webUserBean",
           "value": "{\"password\":\"NewPass!45\",\"confirmPassword\":\"NewPass!45\"}"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record updated successfully\",\n  \"response\": null\n}"
      }
     ]
    },
    {
     "name": "The shopper's notifications",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/notifications?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "notifications"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "The shopper's notifications\n\n**Scope `customer:profile:read`.** Requires `X-Customer-Token`. Returns the bound shopper's notifications. Any `userId` sent is ignored - the authenticated shopper is used."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/notifications?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "notifications"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "The shopper's notifications\n\n**Scope `customer:profile:read`.** Requires `X-Customer-Token`. Returns the bound shopper's notifications. Any `userId` sent is ignored - the authenticated shopper is used."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record found successfully\",\n  \"response\": {\n    \"notificationList\": [\n      {\n        \"id\": 501,\n        \"notificationType\": \"ORDER\",\n        \"message\": \"Your order AGU181 has been dispatched.\",\n        \"isRead\": 0,\n        \"cd\": \"2026-06-20 14:05:00\"\n      }\n    ]\n  }\n}"
      }
     ]
    },
    {
     "name": "Unread notification count",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/notifications/count?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "notifications",
        "count"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Unread notification count\n\n**Scope `customer:profile:read`.** Requires `X-Customer-Token`. Unread count for the bound shopper (caller `userId` ignored)."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/notifications/count?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "notifications",
          "count"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Unread notification count\n\n**Scope `customer:profile:read`.** Requires `X-Customer-Token`. Unread count for the bound shopper (caller `userId` ignored)."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"count\": 3\n  }\n}"
      }
     ]
    },
    {
     "name": "Mark a notification read",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/notifications/read",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "notifications",
        "read"
       ]
      },
      "description": "Mark a notification read\n\n**Scope `customer:profile:read`.** Requires `X-Customer-Token`. Marks one of the bound shopper's own notifications as read. `notificationId` must be a notification addressed to that shopper on your tenant - anything else answers `404`, whether it belongs to another shopper or does not exist.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "notificationId",
         "value": "501"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/notifications/read",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "notifications",
          "read"
         ]
        },
        "description": "Mark a notification read\n\n**Scope `customer:profile:read`.** Requires `X-Customer-Token`. Marks one of the bound shopper's own notifications as read. `notificationId` must be a notification addressed to that shopper on your tenant - anything else answers `404`, whether it belongs to another shopper or does not exist.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "notificationId",
           "value": "501"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": null\n}"
      }
     ]
    },
    {
     "name": "Subscribe to a back-in-stock notification",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/notifications/subscribe-stock",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "notifications",
        "subscribe-stock"
       ]
      },
      "description": "Subscribe to a back-in-stock notification\n\n**Scope `engagement:write`.** Requires `X-Customer-Token`. Subscribes the shopper to a back-in-stock alert for `parentSkuId` (must be on your tenant, else `404`).",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "parentSkuId",
         "value": "101"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/notifications/subscribe-stock",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "notifications",
          "subscribe-stock"
         ]
        },
        "description": "Subscribe to a back-in-stock notification\n\n**Scope `engagement:write`.** Requires `X-Customer-Token`. Subscribes the shopper to a back-in-stock alert for `parentSkuId` (must be on your tenant, else `404`).",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "parentSkuId",
           "value": "101"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record added successfully.\",\n  \"response\": null\n}"
      }
     ]
    },
    {
     "name": "Write a product rating / review",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/review/rate",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "review",
        "rate"
       ]
      },
      "description": "Write a product rating / review\n\n**Scope `engagement:write`.** Requires `X-Customer-Token`. Posts a rating and review for `skuId` (must be on your tenant, else `404`). Title and review text are validated - HTML/script content is rejected with `400`.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "webUserOfferRatingReviewBean",
         "value": "{\"skuId\":101,\"rating\":5,\"title\":\"Excellent\",\"review\":\"Great quality, fast delivery.\"}"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/review/rate",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "review",
          "rate"
         ]
        },
        "description": "Write a product rating / review\n\n**Scope `engagement:write`.** Requires `X-Customer-Token`. Posts a rating and review for `skuId` (must be on your tenant, else `404`). Title and review text are validated - HTML/script content is rejected with `400`.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "webUserOfferRatingReviewBean",
           "value": "{\"skuId\":101,\"rating\":5,\"title\":\"Excellent\",\"review\":\"Great quality, fast delivery.\"}"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record added successfully.\",\n  \"response\": null\n}"
      }
     ]
    }
   ]
  },
  {
   "name": "7. Cart & Wishlist  (scope: cart:* / wishlist:*)",
   "item": [
    {
     "name": "The shopper's cart",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/cart?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "cart"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "The shopper's cart\n\n**Scope `cart:read`.** Requires `X-Customer-Token`."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/cart?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "cart"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "The shopper's cart\n\n**Scope `cart:read`.** Requires `X-Customer-Token`."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"webCartYouSave\": 0.0,\n    \"webCartTotalPayable\": 0.0,\n    \"webCartTotalPayableWithGV\": null,\n    \"categoryHierarchy\": {\n      \"518\": {\n        \"519\": [],\n        \"520\": [],\n        \"521\": []\n      },\n      \"95\": {\n        \"319\": [],\n        \"465\": [],\n        \"466\": [\n          \"480\"\n        ],\n        \"489\": [],\n        \"490\": [\n          \"327\"\n        ],\n        \"84\": [\n          \"326\"\n        ]\n      },\n      \"458\": {\n        \"355\": [],\n        \"357\": [],\n        \"517\": []\n      },\n      \"492\": {\n        \"493\": [\n          \"495\"\n        ],\n        \"499\": [\n          \"509\"\n        ]\n      },\n      \"133\": {\n        \"184\": [],\n        \"515\": [],\n        \"246\": []\n      },\n      \"121\": {\n        \"516\": [],\n        \"341\": [],\n        \"385\": []\n      },\n      \"291\": {\n        \"292\": []\n      },\n      \"523\": {}\n    },\n    \"webUserBean\": {\n      \"id\": 49,\n      \"emailid\": \"shopper@example.com\",\n      \"salutation\": \"\",\n      \"name\": \"Shopper\",\n      \"lastName\": \"Singh\",\n      \"mobileno\": \"9876500000\"\n    },\n    \"noofsku\": \"50\",\n    \"langList\": [\n      {\n        \"code\": \"en\",\n        \"value\": \"English\",\n        \"cd\": null\n      }\n    ],\n    \"totalAccuralPoints\": 0\n  }\n}"
      }
     ]
    },
    {
     "name": "Header summary (cart + wishlist counts)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/header?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "header"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Header summary (cart + wishlist counts)\n\n**Scope `cart:read`.** Requires `X-Customer-Token`. The small counts a storefront header shows."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/header?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "header"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Header summary (cart + wishlist counts)\n\n**Scope `cart:read`.** Requires `X-Customer-Token`. The small counts a storefront header shows."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"webCartShippingCost\": 0.0,\n    \"webCartYouSave\": 0.0,\n    \"webCartTotalPayable\": 0.0,\n    \"wishlistTotalItems\": 9,\n    \"webCartSkuQtyMap\": {},\n    \"webCartTotalAmount\": 0.0,\n    \"webCartSkuImageMap\": {},\n    \"totalAccuralPoints\": 0\n  }\n}"
      }
     ]
    },
    {
     "name": "Add a SKU to the cart",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/cart/add",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "cart",
        "add"
       ]
      },
      "description": "Add a SKU to the cart\n\n**Scope `cart:write`.** Requires `X-Customer-Token`. Name a **variant** SKU in `skuList`, not a parent grouping SKU. `parentSkuId` must be the SKU being bought - a variant is added by its own id, the same id in `parentSkuId` and in `skuList` - and a line whose `skuList` names a different SKU is refused with `CART_LINE_SKU_MISMATCH` (`200` with a `FAIL` envelope, not an error status).",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"parentSkuId\": 914,\n  \"skuList\": [\n    {\n      \"skuId\": 914,\n      \"qty\": 1\n    }\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     },
     "response": [
      {
       "name": "Added to the cart",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/json"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/cart/add",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "cart",
          "add"
         ]
        },
        "description": "Add a SKU to the cart\n\n**Scope `cart:write`.** Requires `X-Customer-Token`. Name a **variant** SKU in `skuList`, not a parent grouping SKU. `parentSkuId` must be the SKU being bought - a variant is added by its own id, the same id in `parentSkuId` and in `skuList` - and a line whose `skuList` names a different SKU is refused with `CART_LINE_SKU_MISMATCH` (`200` with a `FAIL` envelope, not an error status).",
        "body": {
         "mode": "raw",
         "raw": "{\n  \"parentSkuId\": 914,\n  \"skuList\": [\n    {\n      \"skuId\": 914,\n      \"qty\": 1\n    }\n  ]\n}",
         "options": {
          "raw": {
           "language": "json"
          }
         }
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record updated successfully.\",\n  \"response\": {\n    \"id\": null,\n    \"parentSkuId\": 914,\n    \"parentSkuName\": null,\n    \"skuId\": null,\n    \"skuName\": null,\n    \"userId\": 49,\n    \"userName\": null,\n    \"useremailid\": \"shopper@example.com\"\n  }\n}"
      },
      {
       "name": "Refused - skuList names a SKU other than parentSkuId",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/json"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/cart/add",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "cart",
          "add"
         ]
        },
        "description": "Add a SKU to the cart\n\n**Scope `cart:write`.** Requires `X-Customer-Token`. Name a **variant** SKU in `skuList`, not a parent grouping SKU. `parentSkuId` must be the SKU being bought - a variant is added by its own id, the same id in `parentSkuId` and in `skuList` - and a line whose `skuList` names a different SKU is refused with `CART_LINE_SKU_MISMATCH` (`200` with a `FAIL` envelope, not an error status).",
        "body": {
         "mode": "raw",
         "raw": "{\n  \"parentSkuId\": 914,\n  \"skuList\": [\n    {\n      \"skuId\": 914,\n      \"qty\": 1\n    }\n  ]\n}",
         "options": {
          "raw": {
           "language": "json"
          }
         }
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"FAIL\",\n  \"message\": \"This item could not be added to the cart. Please select the product option again and retry.\",\n  \"response\": {\n    \"code\": \"CART_LINE_SKU_MISMATCH\"\n  }\n}"
      }
     ]
    },
    {
     "name": "Remove a line from the cart",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/cart/remove",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "cart",
        "remove"
       ]
      },
      "description": "Remove a line from the cart\n\n**Scope `cart:write`.** Requires `X-Customer-Token`.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"parentSkuId\": 914,\n  \"skuList\": [\n    {\n      \"skuId\": 914,\n      \"qty\": 1\n    }\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/json"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/cart/remove",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "cart",
          "remove"
         ]
        },
        "description": "Remove a line from the cart\n\n**Scope `cart:write`.** Requires `X-Customer-Token`.",
        "body": {
         "mode": "raw",
         "raw": "{\n  \"parentSkuId\": 914,\n  \"skuList\": [\n    {\n      \"skuId\": 914,\n      \"qty\": 1\n    }\n  ]\n}",
         "options": {
          "raw": {
           "language": "json"
          }
         }
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record Deleted successfully.\",\n  \"response\": {\n    \"id\": null,\n    \"parentSkuId\": 914,\n    \"parentSkuName\": null,\n    \"skuId\": null,\n    \"skuName\": null,\n    \"userId\": 49,\n    \"userName\": null,\n    \"useremailid\": null\n  }\n}"
      }
     ]
    },
    {
     "name": "Is a SKU in stock in the quantity asked for?",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/cart/check-inventory",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "cart",
        "check-inventory"
       ]
      },
      "description": "Is a SKU in stock in the quantity asked for?\n\n**Scope `cart:write`.** Requires `X-Customer-Token`. The pre-flight a cart / checkout screen runs.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"parentSkuId\": 914,\n  \"quantity\": 1\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/json"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/cart/check-inventory",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "cart",
          "check-inventory"
         ]
        },
        "description": "Is a SKU in stock in the quantity asked for?\n\n**Scope `cart:write`.** Requires `X-Customer-Token`. The pre-flight a cart / checkout screen runs.",
        "body": {
         "mode": "raw",
         "raw": "{\n  \"parentSkuId\": 914,\n  \"quantity\": 1\n}",
         "options": {
          "raw": {
           "language": "json"
          }
         }
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Success\",\n  \"response\": {\n    \"id\": null,\n    \"parentSkuId\": 914,\n    \"parentSkuName\": null,\n    \"skuId\": null,\n    \"skuName\": null,\n    \"userId\": null,\n    \"userName\": null,\n    \"useremailid\": null\n  }\n}"
      }
     ]
    },
    {
     "name": "The shopper's wishlist",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/wishlist?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "wishlist"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "The shopper's wishlist\n\n**Scope `wishlist:read`.** Requires `X-Customer-Token`."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/wishlist?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "wishlist"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "The shopper's wishlist\n\n**Scope `wishlist:read`.** Requires `X-Customer-Token`."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"webUserBean\": {\n      \"id\": 49,\n      \"emailid\": \"shopper@example.com\",\n      \"salutation\": \"\",\n      \"name\": \"Shopper\",\n      \"lastName\": \"Singh\",\n      \"mobileno\": \"9876500000\"\n    },\n    \"categoryHierarchy\": {\n      \"518\": {\n        \"519\": [],\n        \"520\": [],\n        \"521\": []\n      },\n      \"95\": {\n        \"319\": [],\n        \"465\": [],\n        \"466\": [\n          \"480\"\n        ],\n        \"489\": [],\n        \"490\": [\n          \"327\"\n        ],\n        \"84\": [\n          \"326\"\n        ]\n      },\n      \"458\": {\n        \"355\": [],\n        \"357\": [],\n        \"517\": []\n      },\n      \"492\": {\n        \"493\": [\n          \"495\"\n        ],\n        \"499\": [\n          \"509\"\n        ]\n      },\n      \"133\": {\n        \"184\": [],\n        \"515\": [],\n        \"246\": []\n      },\n      \"121\": {\n        \"516\": [],\n        \"341\": [],\n        \"385\": []\n      },\n      \"291\": {\n        \"292\": []\n      },\n      \"523\": {}\n    },\n    \"categoriesMap\": {\n      \"472\": {\n        \"id\": 472,\n        \"name\": \"Charging Accessories\",\n        \"displayName\": \"Charging Accessories\",\n        \"description\": \"Charging Accessories\",\n        \"catlevel\": 1,\n        \"seqno\": 1,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"474\": {\n        \"id\": 474,\n        \"name\": \"SmartPhones\",\n        \"displayName\": \"SmartPhones\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 3,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"476\": {\n        \"id\": 476,\n        \"name\": \"Health Care\",\n        \"displayName\": \"Health Care\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 51,\n        \"parentId\": 475,\n        \"parentName\": \"Personal Care and Grooming\"\n      },\n      \"355\": {\n        \"id\": 355,\n        \"name\": \"Travel Accessories\",\n        \"displayName\": \"Travel Accessories\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 55,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"477\": {\n        \"id\": 477,\n        \"name\": \"Massager\",\n        \"displayName\": \"Massager\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 197,\n        \"parentId\": 294,\n        \"parentName\": \"Health Devices\"\n      },\n      \"510\": {\n        \"id\": 510,\n        \"name\": \"Air Conditioner\",\n        \"displayName\": \"Air Conditioner\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 207,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      },\n      \"357\": {\n        \"id\": 357,\n        \"name\": \"Luggage Trolleys\",\n        \"displayName\": \"Luggage Trolleys\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 56,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"511\": {\n        \"id\": 511,\n        \"name\": \"Washing Machine\",\n        \"displayName\": \"Washing Machine\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 208,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      }\n    },\n    \"userWishListData\": {\n      \"draw\": 0,\n      \"recordsTotal\": 9,\n      \"recordsFiltered\": 9,\n      \"data\": [\n        {\n          \"id\": null,\n          \"parentSkuId\": 1064,\n          \"parentSkuName\": \"Noize Creatine Monohydrate - 100g\",\n          \"offerprice\": 789.0,\n          \"skucode\": \"NCM-100G\",\n          \"wuserId\": null,\n          \"wuserName\": null,\n          \"wuserMobileNo\": null\n        }\n      ],\n      \"recordPerPage\": 24,\n      \"currentPageNo\": 1,\n      \"filtterMap\": null\n    },\n    \"langList\": [\n      {\n        \"code\": \"en\",\n        \"value\": \"English\",\n        \"cd\": null\n      }\n    ],\n    \"categoryBannerMap\": null\n  }\n}"
      }
     ]
    },
    {
     "name": "Add a SKU to the wishlist",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/wishlist/add",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "wishlist",
        "add"
       ]
      },
      "description": "Add a SKU to the wishlist\n\n**Scope `wishlist:write`.** Requires `X-Customer-Token`. Send `parentSkuId` as a form parameter.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "parentSkuId",
         "value": "914"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/wishlist/add",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "wishlist",
          "add"
         ]
        },
        "description": "Add a SKU to the wishlist\n\n**Scope `wishlist:write`.** Requires `X-Customer-Token`. Send `parentSkuId` as a form parameter.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "parentSkuId",
           "value": "914"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record added successfully.\",\n  \"response\": {\n    \"id\": null,\n    \"parentSkuId\": 914,\n    \"parentSkuName\": null,\n    \"offerprice\": 0.0,\n    \"skucode\": null,\n    \"wuserId\": 49,\n    \"wuserName\": null,\n    \"wuserMobileNo\": null\n  }\n}"
      }
     ]
    },
    {
     "name": "Remove an entry from the wishlist",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/wishlist/remove",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "wishlist",
        "remove"
       ]
      },
      "description": "Remove an entry from the wishlist\n\n**Scope `wishlist:write`.** Requires `X-Customer-Token`. Send `parentSkuId` as a form parameter.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "parentSkuId",
         "value": "914"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/wishlist/remove",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "wishlist",
          "remove"
         ]
        },
        "description": "Remove an entry from the wishlist\n\n**Scope `wishlist:write`.** Requires `X-Customer-Token`. Send `parentSkuId` as a form parameter.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "parentSkuId",
           "value": "914"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record Deleted successfully.\",\n  \"response\": {\n    \"id\": null,\n    \"parentSkuId\": 914,\n    \"parentSkuName\": null,\n    \"offerprice\": 0.0,\n    \"skucode\": null,\n    \"wuserId\": 49,\n    \"wuserName\": null,\n    \"wuserMobileNo\": null\n  }\n}"
      }
     ]
    },
    {
     "name": "Update a wishlist entry",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/wishlist/update",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "wishlist",
        "update"
       ]
      },
      "description": "Update a wishlist entry\n\n**Scope `wishlist:write`.** Requires `X-Customer-Token`. Targets an existing wishlist entry by `parentSkuId`.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"parentSkuId\": 914\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/json"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/wishlist/update",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "wishlist",
          "update"
         ]
        },
        "description": "Update a wishlist entry\n\n**Scope `wishlist:write`.** Requires `X-Customer-Token`. Targets an existing wishlist entry by `parentSkuId`.",
        "body": {
         "mode": "raw",
         "raw": "{\n  \"parentSkuId\": 914\n}",
         "options": {
          "raw": {
           "language": "json"
          }
         }
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"FAIL\",\n  \"message\": \"Error Fetching Record\",\n  \"response\": {\n    \"id\": null,\n    \"parentSkuId\": 914,\n    \"parentSkuName\": null,\n    \"offerprice\": 0.0,\n    \"skucode\": null,\n    \"wuserId\": 49,\n    \"wuserName\": null,\n    \"wuserMobileNo\": null\n  }\n}"
      }
     ]
    },
    {
     "name": "Move a cart line to save-for-later",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/cart/save-for-later",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "cart",
        "save-for-later"
       ]
      },
      "description": "Move a cart line to save-for-later\n\n**Scope `cart:write`.** Requires `X-Customer-Token`. Moves a cart line to the shopper's save-for-later list.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "webUserCartBean",
         "value": "{\"id\":88,\"parentSkuId\":101}"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/cart/save-for-later",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "cart",
          "save-for-later"
         ]
        },
        "description": "Move a cart line to save-for-later\n\n**Scope `cart:write`.** Requires `X-Customer-Token`. Moves a cart line to the shopper's save-for-later list.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "webUserCartBean",
           "value": "{\"id\":88,\"parentSkuId\":101}"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record updated successfully\",\n  \"response\": null\n}"
      }
     ]
    }
   ]
  },
  {
   "name": "8. Orders  (scope: orders:customer:read)",
   "item": [
    {
     "name": "The shopper's own orders",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/orders?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "orders"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "The shopper's own orders\n\n**Scope `orders:customer:read`.** Requires `X-Customer-Token`. Lists only the caller's orders."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/orders?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "orders"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "The shopper's own orders\n\n**Scope `orders:customer:read`.** Requires `X-Customer-Token`. Lists only the caller's orders."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record found successfully\",\n  \"response\": {\n    \"webUserBean\": {\n      \"id\": 49,\n      \"emailid\": \"shopper@example.com\",\n      \"salutation\": \"\",\n      \"name\": \"Shopper\",\n      \"lastName\": \"Singh\",\n      \"mobileno\": \"9876500000\"\n    },\n    \"categoryHierarchy\": {\n      \"518\": {\n        \"519\": [],\n        \"520\": [],\n        \"521\": []\n      },\n      \"95\": {\n        \"319\": [],\n        \"465\": [],\n        \"466\": [\n          \"480\"\n        ],\n        \"489\": [],\n        \"490\": [\n          \"327\"\n        ],\n        \"84\": [\n          \"326\"\n        ]\n      },\n      \"458\": {\n        \"355\": [],\n        \"357\": [],\n        \"517\": []\n      },\n      \"492\": {\n        \"493\": [\n          \"495\"\n        ],\n        \"499\": [\n          \"509\"\n        ]\n      },\n      \"133\": {\n        \"184\": [],\n        \"515\": [],\n        \"246\": []\n      },\n      \"121\": {\n        \"516\": [],\n        \"341\": [],\n        \"385\": []\n      },\n      \"291\": {\n        \"292\": []\n      },\n      \"523\": {}\n    },\n    \"categoriesMap\": {\n      \"472\": {\n        \"id\": 472,\n        \"name\": \"Charging Accessories\",\n        \"displayName\": \"Charging Accessories\",\n        \"description\": \"Charging Accessories\",\n        \"catlevel\": 1,\n        \"seqno\": 1,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"474\": {\n        \"id\": 474,\n        \"name\": \"SmartPhones\",\n        \"displayName\": \"SmartPhones\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 3,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"476\": {\n        \"id\": 476,\n        \"name\": \"Health Care\",\n        \"displayName\": \"Health Care\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 51,\n        \"parentId\": 475,\n        \"parentName\": \"Personal Care and Grooming\"\n      },\n      \"355\": {\n        \"id\": 355,\n        \"name\": \"Travel Accessories\",\n        \"displayName\": \"Travel Accessories\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 55,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"477\": {\n        \"id\": 477,\n        \"name\": \"Massager\",\n        \"displayName\": \"Massager\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 197,\n        \"parentId\": 294,\n        \"parentName\": \"Health Devices\"\n      },\n      \"510\": {\n        \"id\": 510,\n        \"name\": \"Air Conditioner\",\n        \"displayName\": \"Air Conditioner\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 207,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      },\n      \"357\": {\n        \"id\": 357,\n        \"name\": \"Luggage Trolleys\",\n        \"displayName\": \"Luggage Trolleys\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 56,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"511\": {\n        \"id\": 511,\n        \"name\": \"Washing Machine\",\n        \"displayName\": \"Washing Machine\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 208,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      }\n    },\n    \"langList\": [\n      {\n        \"code\": \"en\",\n        \"value\": \"English\",\n        \"cd\": null\n      }\n    ],\n    \"categoryBannerMap\": null,\n    \"webUserOrderListData\": {\n      \"draw\": 0,\n      \"recordsTotal\": 10,\n      \"recordsFiltered\": 10,\n      \"data\": [\n        {\n          \"id\": 488,\n          \"grouporderid\": \"AGS493\",\n          \"paymentorderid\": \"AS338\",\n          \"paymentName\": \"POSTPAID\",\n          \"offername\": \"Apple TV 4K Wi-Fi with 64GB storage\",\n          \"repOrderId\": null,\n          \"sellerName\": \"TeamsComputer\",\n          \"skuParentId\": 1554\n        }\n      ],\n      \"recordPerPage\": 10,\n      \"currentPageNo\": 1,\n      \"filtterMap\": null\n    }\n  }\n}"
      }
     ]
    },
    {
     "name": "One order in full",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/order-detail?orderId={{orderId}}",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "order-detail"
       ],
       "query": [
        {
         "key": "orderId",
         "value": "{{orderId}}"
        }
       ]
      },
      "description": "One order in full\n\n**Scope `orders:customer:read`.** Requires `X-Customer-Token`. Guarded: the `orderId` must belong to the caller, else `404`."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/order-detail?orderId={{orderId}}",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "order-detail"
         ],
         "query": [
          {
           "key": "orderId",
           "value": "{{orderId}}"
          }
         ]
        },
        "description": "One order in full\n\n**Scope `orders:customer:read`.** Requires `X-Customer-Token`. Guarded: the `orderId` must belong to the caller, else `404`."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record found successfully\",\n  \"response\": {\n    \"webUserBean\": {\n      \"id\": 49,\n      \"emailid\": \"shopper@example.com\",\n      \"salutation\": \"\",\n      \"name\": \"Shopper\",\n      \"lastName\": \"Singh\",\n      \"mobileno\": \"9876500000\"\n    },\n    \"categoryHierarchy\": {\n      \"518\": {\n        \"519\": [],\n        \"520\": [],\n        \"521\": []\n      },\n      \"95\": {\n        \"319\": [],\n        \"465\": [],\n        \"466\": [\n          \"480\"\n        ],\n        \"489\": [],\n        \"490\": [\n          \"327\"\n        ],\n        \"84\": [\n          \"326\"\n        ]\n      },\n      \"458\": {\n        \"355\": [],\n        \"357\": [],\n        \"517\": []\n      },\n      \"492\": {\n        \"493\": [\n          \"495\"\n        ],\n        \"499\": [\n          \"509\"\n        ]\n      },\n      \"133\": {\n        \"184\": [],\n        \"515\": [],\n        \"246\": []\n      },\n      \"121\": {\n        \"516\": [],\n        \"341\": [],\n        \"385\": []\n      },\n      \"291\": {\n        \"292\": []\n      },\n      \"523\": {}\n    },\n    \"categoriesMap\": {\n      \"472\": {\n        \"id\": 472,\n        \"name\": \"Charging Accessories\",\n        \"displayName\": \"Charging Accessories\",\n        \"description\": \"Charging Accessories\",\n        \"catlevel\": 1,\n        \"seqno\": 1,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"474\": {\n        \"id\": 474,\n        \"name\": \"SmartPhones\",\n        \"displayName\": \"SmartPhones\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 3,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"476\": {\n        \"id\": 476,\n        \"name\": \"Health Care\",\n        \"displayName\": \"Health Care\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 51,\n        \"parentId\": 475,\n        \"parentName\": \"Personal Care and Grooming\"\n      },\n      \"355\": {\n        \"id\": 355,\n        \"name\": \"Travel Accessories\",\n        \"displayName\": \"Travel Accessories\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 55,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"477\": {\n        \"id\": 477,\n        \"name\": \"Massager\",\n        \"displayName\": \"Massager\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 197,\n        \"parentId\": 294,\n        \"parentName\": \"Health Devices\"\n      },\n      \"510\": {\n        \"id\": 510,\n        \"name\": \"Air Conditioner\",\n        \"displayName\": \"Air Conditioner\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 207,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      },\n      \"357\": {\n        \"id\": 357,\n        \"name\": \"Luggage Trolleys\",\n        \"displayName\": \"Luggage Trolleys\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 56,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"511\": {\n        \"id\": 511,\n        \"name\": \"Washing Machine\",\n        \"displayName\": \"Washing Machine\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 208,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      }\n    },\n    \"langList\": [\n      {\n        \"code\": \"en\",\n        \"value\": \"English\",\n        \"cd\": null\n      }\n    ],\n    \"showBillingSeparately\": \"0\",\n    \"countryList\": [\n      {\n        \"key\": 101,\n        \"value\": \"India\",\n        \"cd\": null\n      }\n    ],\n    \"categoryBannerMap\": null,\n    \"webUserOrderListData\": []\n  }\n}"
      }
     ]
    },
    {
     "name": "Tracking / status for an order",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/order-tracking?orderId={{orderId}}",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "order-tracking"
       ],
       "query": [
        {
         "key": "orderId",
         "value": "{{orderId}}"
        }
       ]
      },
      "description": "Tracking / status for an order\n\n**Scope `orders:customer:read`.** Requires `X-Customer-Token`. Guarded on ownership of `orderId`."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/order-tracking?orderId={{orderId}}",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "order-tracking"
         ],
         "query": [
          {
           "key": "orderId",
           "value": "{{orderId}}"
          }
         ]
        },
        "description": "Tracking / status for an order\n\n**Scope `orders:customer:read`.** Requires `X-Customer-Token`. Guarded on ownership of `orderId`."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record found successfully\",\n  \"response\": {\n    \"brands\": [\n      {\n        \"id\": 6,\n        \"name\": \"Wildcraft\",\n        \"image\": \"6_29052026151447.jpg\",\n        \"description\": \"Wildcraft\",\n        \"isactive\": 1,\n        \"sequenceNo\": 1,\n        \"active\": \"YES\",\n        \"cd\": null\n      }\n    ],\n    \"webUserBean\": {\n      \"id\": 49,\n      \"emailid\": \"shopper@example.com\",\n      \"salutation\": \"\",\n      \"name\": \"Shopper\",\n      \"lastName\": \"Singh\",\n      \"mobileno\": \"9876500000\"\n    },\n    \"categoryHierarchy\": {\n      \"518\": {\n        \"519\": [],\n        \"520\": [],\n        \"521\": []\n      },\n      \"95\": {\n        \"319\": [],\n        \"465\": [],\n        \"466\": [\n          \"480\"\n        ],\n        \"489\": [],\n        \"490\": [\n          \"327\"\n        ],\n        \"84\": [\n          \"326\"\n        ]\n      },\n      \"458\": {\n        \"355\": [],\n        \"357\": [],\n        \"517\": []\n      },\n      \"492\": {\n        \"493\": [\n          \"495\"\n        ],\n        \"499\": [\n          \"509\"\n        ]\n      },\n      \"133\": {\n        \"184\": [],\n        \"515\": [],\n        \"246\": []\n      },\n      \"121\": {\n        \"516\": [],\n        \"341\": [],\n        \"385\": []\n      },\n      \"291\": {\n        \"292\": []\n      },\n      \"523\": {}\n    },\n    \"orderId\": 181,\n    \"categoriesMap\": {\n      \"472\": {\n        \"id\": 472,\n        \"name\": \"Charging Accessories\",\n        \"displayName\": \"Charging Accessories\",\n        \"description\": \"Charging Accessories\",\n        \"catlevel\": 1,\n        \"seqno\": 1,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"474\": {\n        \"id\": 474,\n        \"name\": \"SmartPhones\",\n        \"displayName\": \"SmartPhones\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 3,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"476\": {\n        \"id\": 476,\n        \"name\": \"Health Care\",\n        \"displayName\": \"Health Care\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 51,\n        \"parentId\": 475,\n        \"parentName\": \"Personal Care and Grooming\"\n      },\n      \"355\": {\n        \"id\": 355,\n        \"name\": \"Travel Accessories\",\n        \"displayName\": \"Travel Accessories\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 55,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"477\": {\n        \"id\": 477,\n        \"name\": \"Massager\",\n        \"displayName\": \"Massager\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 197,\n        \"parentId\": 294,\n        \"parentName\": \"Health Devices\"\n      },\n      \"510\": {\n        \"id\": 510,\n        \"name\": \"Air Conditioner\",\n        \"displayName\": \"Air Conditioner\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 207,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      },\n      \"357\": {\n        \"id\": 357,\n        \"name\": \"Luggage Trolleys\",\n        \"displayName\": \"Luggage Trolleys\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 56,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"511\": {\n        \"id\": 511,\n        \"name\": \"Washing Machine\",\n        \"displayName\": \"Washing Machine\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 208,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      }\n    },\n    \"orders\": [\n      [\n        {\n          \"fromStatusId\": 101,\n          \"fromStatusName\": \"New Order\",\n          \"toStatusId\": 101,\n          \"toStatusName\": \"New Order\",\n          \"trackingName\": \"New Order\",\n          \"trackingDate\": \"18 Jun 2026 08:18:55 PM\",\n          \"cd\": 1781813935000\n        }\n      ]\n    ],\n    \"langList\": [\n      {\n        \"code\": \"en\",\n        \"value\": \"English\",\n        \"cd\": null\n      }\n    ],\n    \"categoryBannerMap\": null\n  }\n}"
      }
     ]
    },
    {
     "name": "Delivery / product photos for an order",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/order-photos?orderId={{orderId}}",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "order-photos"
       ],
       "query": [
        {
         "key": "orderId",
         "value": "{{orderId}}"
        }
       ]
      },
      "description": "Delivery / product photos for an order\n\n**Scope `orders:customer:read`.** Requires `X-Customer-Token`. Guarded on ownership of `orderId`."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/order-photos?orderId={{orderId}}",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "order-photos"
         ],
         "query": [
          {
           "key": "orderId",
           "value": "{{orderId}}"
          }
         ]
        },
        "description": "Delivery / product photos for an order\n\n**Scope `orders:customer:read`.** Requires `X-Customer-Token`. Guarded on ownership of `orderId`."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"productPhotos\": {}\n  }\n}"
      }
     ]
    },
    {
     "name": "Cancel one of the shopper's orders (request; back-office settles the refund)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/order/cancel",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "order",
        "cancel"
       ]
      },
      "description": "Cancel one of the shopper's orders (request; back-office settles the refund)\n\n**Scope `orders:customer:write`.** Requires `X-Customer-Token`. Cancels the shopper's order named by `paymentorderid` (must belong to the shopper, else `404`). This is a REQUEST: it records the cancellation and moves the order to a pending refund status; the money refund is settled by the tenant's back-office (gateway refund for gateway-paid; gift-voucher / wallet for GV/COD). No money moves at this call.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "paymentorderid",
         "value": "AU126"
        },
        {
         "key": "remarks",
         "value": "Ordered by mistake"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/order/cancel",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "order",
          "cancel"
         ]
        },
        "description": "Cancel one of the shopper's orders (request; back-office settles the refund)\n\n**Scope `orders:customer:write`.** Requires `X-Customer-Token`. Cancels the shopper's order named by `paymentorderid` (must belong to the shopper, else `404`). This is a REQUEST: it records the cancellation and moves the order to a pending refund status; the money refund is settled by the tenant's back-office (gateway refund for gateway-paid; gift-voucher / wallet for GV/COD). No money moves at this call.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "paymentorderid",
           "value": "AU126"
          },
          {
           "key": "remarks",
           "value": "Ordered by mistake"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record updated successfully\",\n  \"response\": null\n}"
      }
     ]
    },
    {
     "name": "Download invoice(s) for the shopper's order(s)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/order/invoice",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "order",
        "invoice"
       ]
      },
      "description": "Download invoice(s) for the shopper's order(s)\n\n**Scope `orders:customer:read`.** Requires `X-Customer-Token`. Returns invoice data for the orders in `orderIdsInvoice` (payment order ids) or `groupOrderIdsInvoice` (group order ids). EVERY id must belong to the shopper - one foreign id fails the whole request (`404`).",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "orderIdsInvoice",
         "value": "AU126"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/order/invoice",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "order",
          "invoice"
         ]
        },
        "description": "Download invoice(s) for the shopper's order(s)\n\n**Scope `orders:customer:read`.** Requires `X-Customer-Token`. Returns invoice data for the orders in `orderIdsInvoice` (payment order ids) or `groupOrderIdsInvoice` (group order ids). EVERY id must belong to the shopper - one foreign id fails the whole request (`404`).",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "orderIdsInvoice",
           "value": "AU126"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record found successfully\",\n  \"response\": {\n    \"fileName\": \"invoice_AU126_1721822400000.pdf\",\n    \"outArray\": \"JVBERi0xLjQKJ...base64-encoded-PDF-bytes...\"\n  }\n}"
      }
     ]
    },
    {
     "name": "Re-order (rebuild the cart from) a past order",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/order/reorder",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "order",
        "reorder"
       ]
      },
      "description": "Re-order (rebuild the cart from) a past order\n\n**Scope `orders:customer:write`.** Requires `X-Customer-Token`. Rebuilds the cart from the shopper's past order named by `reOrderId` (a payment order id; must belong to the shopper, else `404`).",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "reOrderId",
         "value": "AU126"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/order/reorder",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "order",
          "reorder"
         ]
        },
        "description": "Re-order (rebuild the cart from) a past order\n\n**Scope `orders:customer:write`.** Requires `X-Customer-Token`. Rebuilds the cart from the shopper's past order named by `reOrderId` (a payment order id; must belong to the shopper, else `404`).",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "reOrderId",
           "value": "AU126"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record found successfully\",\n  \"response\": {\n    \"addedToCart\": 2,\n    \"skippedUnavailable\": 0,\n    \"cartItems\": [\n      {\n        \"skuId\": 101,\n        \"quantity\": 1\n      },\n      {\n        \"skuId\": 205,\n        \"quantity\": 1\n      }\n    ]\n  }\n}"
      }
     ]
    },
    {
     "name": "Raise a return / replacement request (back-office settles the refund)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/customer/order/return-replacement",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "customer",
        "order",
        "return-replacement"
       ]
      },
      "description": "Raise a return / replacement request (back-office settles the refund)\n\n**Scope `orders:customer:write`.** Requires `X-Customer-Token`. Raises a return or replacement request for the shopper's delivered order. The header order AND every line (`complaintMasterBeans[].grouporderid`) must belong to the shopper, else `404`. REQUEST only: it creates the return order + a lead and starts the pending refund; the refund is settled by the tenant's back-office. No money moves at this call.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "returnOrderBean",
         "value": "{\"paymentorderid\":\"AU126\",\"grouporderid\":\"AGU181\",\"remark\":\"Damaged\",\"complaintMasterBeans\":[{\"grouporderid\":\"AGU181-1\"}]}"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/customer/order/return-replacement",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "customer",
          "order",
          "return-replacement"
         ]
        },
        "description": "Raise a return / replacement request (back-office settles the refund)\n\n**Scope `orders:customer:write`.** Requires `X-Customer-Token`. Raises a return or replacement request for the shopper's delivered order. The header order AND every line (`complaintMasterBeans[].grouporderid`) must belong to the shopper, else `404`. REQUEST only: it creates the return order + a lead and starts the pending refund; the refund is settled by the tenant's back-office. No money moves at this call.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "returnOrderBean",
           "value": "{\"paymentorderid\":\"AU126\",\"grouporderid\":\"AGU181\",\"remark\":\"Damaged\",\"complaintMasterBeans\":[{\"grouporderid\":\"AGU181-1\"}]}"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record updated successfully\",\n  \"response\": null\n}"
      }
     ]
    }
   ]
  },
  {
   "name": "9. Checkout  (scope: checkout:read)",
   "item": [
    {
     "name": "Available payment methods",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/checkout/payment-options?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "checkout",
        "payment-options"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Available payment methods\n\n**Scope `checkout:read`.** Requires `X-Customer-Token`. Lists methods; moves no money."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/checkout/payment-options?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "checkout",
          "payment-options"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Available payment methods\n\n**Scope `checkout:read`.** Requires `X-Customer-Token`. Lists methods; moves no money."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"FAIL\",\n  \"message\": \"Kindly Select Address\",\n  \"response\": [\n    {\n      \"code\": \"en\",\n      \"value\": \"English\",\n      \"cd\": null\n    }\n  ]\n}"
      }
     ]
    },
    {
     "name": "Available shipping methods",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/checkout/shipping-options?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "checkout",
        "shipping-options"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Available shipping methods\n\n**Scope `checkout:read`.** Requires `X-Customer-Token`."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/checkout/shipping-options?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "checkout",
          "shipping-options"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Available shipping methods\n\n**Scope `checkout:read`.** Requires `X-Customer-Token`."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"webCartYouSave\": 0.0,\n    \"webCartTotalPayable\": 0.0,\n    \"shippingMap\": {\n      \"7263\": 0,\n      \"7251\": \"30\",\n      \"7262\": \"0\",\n      \"7250\": 0\n    },\n    \"isNonGvFlag\": true,\n    \"webUserBean\": {\n      \"id\": 49,\n      \"emailid\": \"shopper@example.com\",\n      \"salutation\": \"\",\n      \"name\": \"Shopper\",\n      \"lastName\": \"Singh\",\n      \"mobileno\": \"9876500000\"\n    },\n    \"webCartTotalPayableWithGV\": null,\n    \"langList\": [\n      {\n        \"code\": \"en\",\n        \"value\": \"English\",\n        \"cd\": null\n      }\n    ],\n    \"totalAccuralPoints\": 0\n  }\n}"
      }
     ]
    },
    {
     "name": "Combined payment + shipping detail",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/checkout/payment-shipping-details?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "checkout",
        "payment-shipping-details"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Combined payment + shipping detail\n\n**Scope `checkout:read`.** Requires `X-Customer-Token`."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/checkout/payment-shipping-details?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "checkout",
          "payment-shipping-details"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Combined payment + shipping detail\n\n**Scope `checkout:read`.** Requires `X-Customer-Token`."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"webCartYouSave\": 0.0,\n    \"webCartTotalPayable\": 0.0,\n    \"webUserBean\": {\n      \"id\": 49,\n      \"emailid\": \"shopper@example.com\",\n      \"salutation\": \"\",\n      \"name\": \"Shopper\",\n      \"lastName\": \"Singh\",\n      \"mobileno\": \"9876500000\"\n    },\n    \"categoryHierarchy\": {\n      \"518\": {\n        \"519\": [],\n        \"520\": [],\n        \"521\": []\n      },\n      \"95\": {\n        \"319\": [],\n        \"465\": [],\n        \"466\": [\n          \"480\"\n        ],\n        \"489\": [],\n        \"490\": [\n          \"327\"\n        ],\n        \"84\": [\n          \"326\"\n        ]\n      },\n      \"458\": {\n        \"355\": [],\n        \"357\": [],\n        \"517\": []\n      },\n      \"492\": {\n        \"493\": [\n          \"495\"\n        ],\n        \"499\": [\n          \"509\"\n        ]\n      },\n      \"133\": {\n        \"184\": [],\n        \"515\": [],\n        \"246\": []\n      },\n      \"121\": {\n        \"516\": [],\n        \"341\": [],\n        \"385\": []\n      },\n      \"291\": {\n        \"292\": []\n      },\n      \"523\": {}\n    },\n    \"langList\": [\n      {\n        \"code\": \"en\",\n        \"value\": \"English\",\n        \"cd\": null\n      }\n    ],\n    \"totalAccuralPoints\": 0,\n    \"webCartTotalItems\": 0,\n    \"webCartShippingCost\": 0.0\n  }\n}"
      }
     ]
    },
    {
     "name": "Checkout configuration for the tenant",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/checkout/config?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "checkout",
        "config"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Checkout configuration for the tenant\n\n**Scope `checkout:read`.** Requires `X-Customer-Token`."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/checkout/config?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "checkout",
          "config"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Checkout configuration for the tenant\n\n**Scope `checkout:read`.** Requires `X-Customer-Token`."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"guest.autocreate.customer.enabled\": \"1\",\n    \"guest.identity.match.mode\": \"MOBILE\",\n    \"otp.length\": \"6\",\n    \"otp.max.sends.per.hour\": \"5\",\n    \"checkout.membership.required\": \"1\",\n    \"otp.ttl.minutes\": \"5\",\n    \"otp.max.attempts\": \"5\",\n    \"guest.otp.required.existing.user\": \"1\"\n  }\n}"
      }
     ]
    },
    {
     "name": "Validate a gift voucher (does not redeem)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/checkout/validate-voucher",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "checkout",
        "validate-voucher"
       ]
      },
      "description": "Validate a gift voucher (does not redeem)\n\n**Scope `checkout:read`.** Requires `X-Customer-Token`. Reads the voucher and answers whether it is usable; redemption happens at payment.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"gvName\": \"YOURVOUCHER\",\n  \"offerIds\": [\n    1\n  ],\n  \"source\": \"WEB\",\n  \"siteMasterId\": 4\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/json"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/checkout/validate-voucher",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "checkout",
          "validate-voucher"
         ]
        },
        "description": "Validate a gift voucher (does not redeem)\n\n**Scope `checkout:read`.** Requires `X-Customer-Token`. Reads the voucher and answers whether it is usable; redemption happens at payment.",
        "body": {
         "mode": "raw",
         "raw": "{\n  \"gvName\": \"YOURVOUCHER\",\n  \"offerIds\": [\n    1\n  ],\n  \"source\": \"WEB\",\n  \"siteMasterId\": 4\n}",
         "options": {
          "raw": {
           "language": "json"
          }
         }
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"FAIL\",\n  \"message\": \"Something Went wrong, kindly refresh page then try again.\",\n  \"response\": null\n}"
      }
     ]
    },
    {
     "name": "Order confirmation (\u201cthank you\u201d) page",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/checkout/confirmation?groupOrderId={{groupOrderId}}",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "checkout",
        "confirmation"
       ],
       "query": [
        {
         "key": "groupOrderId",
         "value": "{{groupOrderId}}"
        }
       ]
      },
      "description": "Order confirmation (\u201cthank you\u201d) page\n\n**Scope `orders:customer:read`.** Requires `X-Customer-Token`. Guarded: the `groupOrderId` must belong to the caller."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/checkout/confirmation?groupOrderId={{groupOrderId}}",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "checkout",
          "confirmation"
         ],
         "query": [
          {
           "key": "groupOrderId",
           "value": "{{groupOrderId}}"
          }
         ]
        },
        "description": "Order confirmation (\u201cthank you\u201d) page\n\n**Scope `orders:customer:read`.** Requires `X-Customer-Token`. Guarded: the `groupOrderId` must belong to the caller."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record found successfully\",\n  \"response\": {\n    \"webUserBean\": {\n      \"id\": 49,\n      \"emailid\": \"shopper@example.com\",\n      \"salutation\": \"\",\n      \"name\": \"Shopper\",\n      \"lastName\": \"Singh\",\n      \"mobileno\": \"9876500000\"\n    },\n    \"categoryHierarchy\": {\n      \"518\": {\n        \"519\": [],\n        \"520\": [],\n        \"521\": []\n      },\n      \"95\": {\n        \"319\": [],\n        \"465\": [],\n        \"466\": [\n          \"480\"\n        ],\n        \"489\": [],\n        \"490\": [\n          \"327\"\n        ],\n        \"84\": [\n          \"326\"\n        ]\n      },\n      \"458\": {\n        \"355\": [],\n        \"357\": [],\n        \"517\": []\n      },\n      \"492\": {\n        \"493\": [\n          \"495\"\n        ],\n        \"499\": [\n          \"509\"\n        ]\n      },\n      \"133\": {\n        \"184\": [],\n        \"515\": [],\n        \"246\": []\n      },\n      \"121\": {\n        \"516\": [],\n        \"341\": [],\n        \"385\": []\n      },\n      \"291\": {\n        \"292\": []\n      },\n      \"523\": {}\n    },\n    \"categoriesMap\": {\n      \"472\": {\n        \"id\": 472,\n        \"name\": \"Charging Accessories\",\n        \"displayName\": \"Charging Accessories\",\n        \"description\": \"Charging Accessories\",\n        \"catlevel\": 1,\n        \"seqno\": 1,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"474\": {\n        \"id\": 474,\n        \"name\": \"SmartPhones\",\n        \"displayName\": \"SmartPhones\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 3,\n        \"parentId\": 468,\n        \"parentName\": \"Audio And Tech\"\n      },\n      \"476\": {\n        \"id\": 476,\n        \"name\": \"Health Care\",\n        \"displayName\": \"Health Care\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 51,\n        \"parentId\": 475,\n        \"parentName\": \"Personal Care and Grooming\"\n      },\n      \"355\": {\n        \"id\": 355,\n        \"name\": \"Travel Accessories\",\n        \"displayName\": \"Travel Accessories\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 55,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"477\": {\n        \"id\": 477,\n        \"name\": \"Massager\",\n        \"displayName\": \"Massager\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 197,\n        \"parentId\": 294,\n        \"parentName\": \"Health Devices\"\n      },\n      \"510\": {\n        \"id\": 510,\n        \"name\": \"Air Conditioner\",\n        \"displayName\": \"Air Conditioner\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 207,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      },\n      \"357\": {\n        \"id\": 357,\n        \"name\": \"Luggage Trolleys\",\n        \"displayName\": \"Luggage Trolleys\",\n        \"description\": \"\",\n        \"catlevel\": 1,\n        \"seqno\": 56,\n        \"parentId\": 458,\n        \"parentName\": \"Travel\"\n      },\n      \"511\": {\n        \"id\": 511,\n        \"name\": \"Washing Machine\",\n        \"displayName\": \"Washing Machine\",\n        \"description\": \"\",\n        \"catlevel\": 2,\n        \"seqno\": 208,\n        \"parentId\": 499,\n        \"parentName\": \"Home Appliances\"\n      }\n    },\n    \"errMsg\": \"Error in getting Order information, please try again\",\n    \"langList\": [\n      {\n        \"code\": \"en\",\n        \"value\": \"English\",\n        \"cd\": null\n      }\n    ],\n    \"categoryBannerMap\": null\n  }\n}"
      }
     ]
    },
    {
     "name": "Checkout review screen (cart, addresses, totals)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/checkout/review?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "checkout",
        "review"
       ],
       "query": [
        {
         "key": "groupOrderId",
         "value": "{{groupOrderId}}",
         "disabled": true
        }
       ]
      },
      "description": "Checkout review screen (cart, addresses, totals)\n\n**Scope `checkout:read`.** Requires `X-Customer-Token`. Returns the shopper's cart, saved addresses and language list for the checkout review step. Reads only; scoped to the authenticated shopper. If an OPTIONAL `groupOrderId` is supplied it must belong to the shopper (returns `404` otherwise)."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/checkout/review?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "checkout",
          "review"
         ],
         "query": [
          {
           "key": "groupOrderId",
           "value": "{{groupOrderId}}",
           "disabled": true
          }
         ]
        },
        "description": "Checkout review screen (cart, addresses, totals)\n\n**Scope `checkout:read`.** Requires `X-Customer-Token`. Returns the shopper's cart, saved addresses and language list for the checkout review step. Reads only; scoped to the authenticated shopper. If an OPTIONAL `groupOrderId` is supplied it must belong to the shopper (returns `404` otherwise)."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"webUserBean\": {\n      \"id\": 49,\n      \"emailid\": \"shopper@example.com\",\n      \"name\": \"Shopper\",\n      \"mobileno\": \"9876500000\"\n    },\n    \"cartOfferData\": [],\n    \"webUserAddressBeans\": []\n  }\n}"
      }
     ]
    },
    {
     "name": "Validate reward-point redemption against the cart",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/checkout/validate-reward",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "checkout",
        "validate-reward"
       ]
      },
      "description": "Validate reward-point redemption against the cart\n\n**Scope `checkout:read`.** Requires `X-Customer-Token`. Checks whether the reward points offered can be redeemed against the shopper's current cart total. Reads only; scoped to the authenticated shopper.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "rewardPoint",
         "value": "500"
        },
        {
         "key": "shipMethodTypeId",
         "value": "1"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/checkout/validate-reward",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "checkout",
          "validate-reward"
         ]
        },
        "description": "Validate reward-point redemption against the cart\n\n**Scope `checkout:read`.** Requires `X-Customer-Token`. Checks whether the reward points offered can be redeemed against the shopper's current cart total. Reads only; scoped to the authenticated shopper.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "rewardPoint",
           "value": "500"
          },
          {
           "key": "shipMethodTypeId",
           "value": "1"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"valid\": true,\n    \"redeemablePoints\": 500\n  }\n}"
      }
     ]
    },
    {
     "name": "Place the shopper's order (prepaid or COD)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Idempotency-Key",
        "value": "{{idempotencyKey}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/checkout/place-order",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "checkout",
        "place-order"
       ]
      },
      "description": "Place the shopper's order (prepaid or COD)\n\n**Scope `checkout:write`.** Requires `X-Customer-Token`. The first money write on this API. Recomputes totals server-side, reserves inventory and creates the order for the authenticated shopper; for a prepaid order it returns the payment-gateway details to redirect to, for **COD** it confirms the order directly (payment collected on delivery). Credit (B2B account) and card-on-delivery are rejected with `400`. Address ids (`addId`, `billingAddId`, `pickupAddressId`) must belong to the shopper or the call returns `404`. `siteMasterId` is ignored; the order is always placed on the tenant bound to your credential.\n\n**Idempotency (required).** Send a unique `Idempotency-Key` header per order. A retry with the same key returns the first attempt's outcome (with `Idempotency-Replayed: true`) and places nothing \u2014 so a network timeout never double-places. A request still processing under that key returns `409`; a new order needs a new key. Keys are honoured for 24 hours.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "addId",
         "value": "123"
        },
        {
         "key": "payGatewayId",
         "value": "22"
        },
        {
         "key": "payOptionId",
         "value": "35"
        },
        {
         "key": "shipMethodTypeId",
         "value": "1"
        },
        {
         "key": "source",
         "value": "WEB"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Idempotency-Key",
          "value": "{{idempotencyKey}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/checkout/place-order",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "checkout",
          "place-order"
         ]
        },
        "description": "Place the shopper's order (prepaid or COD)\n\n**Scope `checkout:write`.** Requires `X-Customer-Token`. The first money write on this API. Recomputes totals server-side, reserves inventory and creates the order for the authenticated shopper; for a prepaid order it returns the payment-gateway details to redirect to, for **COD** it confirms the order directly (payment collected on delivery). Credit (B2B account) and card-on-delivery are rejected with `400`. Address ids (`addId`, `billingAddId`, `pickupAddressId`) must belong to the shopper or the call returns `404`. `siteMasterId` is ignored; the order is always placed on the tenant bound to your credential.\n\n**Idempotency (required).** Send a unique `Idempotency-Key` header per order. A retry with the same key returns the first attempt's outcome (with `Idempotency-Replayed: true`) and places nothing \u2014 so a network timeout never double-places. A request still processing under that key returns `409`; a new order needs a new key. Keys are honoured for 24 hours.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "addId",
           "value": "123"
          },
          {
           "key": "payGatewayId",
           "value": "22"
          },
          {
           "key": "payOptionId",
           "value": "35"
          },
          {
           "key": "shipMethodTypeId",
           "value": "1"
          },
          {
           "key": "source",
           "value": "WEB"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Record found successfully\",\n  \"response\": {\n    \"orderPaymentNumber\": \"AGU182\",\n    \"userId\": 49,\n    \"gatewayMap\": {\n      \"status\": \"SUCCESS\",\n      \"gatewayStatus\": \"SUCCESS\"\n    }\n  }\n}"
      }
     ]
    }
   ]
  },
  {
   "name": "10. Engagement  (scope: engagement:public:write)",
   "item": [
    {
     "name": "Submit a contact / product enquiry (visitor not signed in)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/engagement/enquiry",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "engagement",
        "enquiry"
       ]
      },
      "description": "Submit a contact / product enquiry (visitor not signed in)\n\n**Scope `engagement:public:write`.** **No `X-Customer-Token`** - this is the contact form you show a signed-out visitor. Creates a lead on your tenant and emails a confirmation to the address supplied. The tenant is stamped server-side from your partner record; there is no site field to send. `skuId` is optional, but when present it must be a SKU on your tenant (else `404`). Free-text fields are validated: HTML or script content is rejected with `400`. Throttled per partner per tenant - every submission counts, not just failed ones.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "leadTypeId",
         "value": "175"
        },
        {
         "key": "dispositionId",
         "value": "215"
        },
        {
         "key": "name",
         "value": "Asha Menon"
        },
        {
         "key": "email",
         "value": "shopper@example.com"
        },
        {
         "key": "mobileNo",
         "value": "9876500000"
        },
        {
         "key": "details",
         "value": "Please call me about delivery timelines."
        }
       ]
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/engagement/enquiry",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "engagement",
          "enquiry"
         ]
        },
        "description": "Submit a contact / product enquiry (visitor not signed in)\n\n**Scope `engagement:public:write`.** **No `X-Customer-Token`** - this is the contact form you show a signed-out visitor. Creates a lead on your tenant and emails a confirmation to the address supplied. The tenant is stamped server-side from your partner record; there is no site field to send. `skuId` is optional, but when present it must be a SKU on your tenant (else `404`). Free-text fields are validated: HTML or script content is rejected with `400`. Throttled per partner per tenant - every submission counts, not just failed ones.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "leadTypeId",
           "value": "175"
          },
          {
           "key": "dispositionId",
           "value": "215"
          },
          {
           "key": "name",
           "value": "Asha Menon"
          },
          {
           "key": "email",
           "value": "shopper@example.com"
          },
          {
           "key": "mobileNo",
           "value": "9876500000"
          },
          {
           "key": "details",
           "value": "Please call me about delivery timelines."
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Dear User! we have received your request our team will get back to you soon\",\n  \"response\": null\n}"
      }
     ]
    },
    {
     "name": "Submit a campaign / offer lead for a product (visitor not signed in)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/engagement/campaign-lead",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "engagement",
        "campaign-lead"
       ]
      },
      "description": "Submit a campaign / offer lead for a product (visitor not signed in)\n\n**Scope `engagement:public:write`.** **No `X-Customer-Token`.** The lead form behind a campaign or offer landing page. `skuId` and `pincode` are REQUIRED: the product name is copied from the SKU, and the state and city are resolved from the pincode. The SKU must be on your tenant, else `404`. **Insert-only** - an `id` in the body is ignored and a new lead is always created. Free text is validated (`400` on HTML/script), and the route is throttled per partner per tenant.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"skuId\": 912,\n  \"name\": \"Asha Menon\",\n  \"email\": \"shopper@example.com\",\n  \"mobileNo\": \"9876500000\",\n  \"pincode\": \"400709\",\n  \"details\": \"Interested in this offer\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/json"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/engagement/campaign-lead",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "engagement",
          "campaign-lead"
         ]
        },
        "description": "Submit a campaign / offer lead for a product (visitor not signed in)\n\n**Scope `engagement:public:write`.** **No `X-Customer-Token`.** The lead form behind a campaign or offer landing page. `skuId` and `pincode` are REQUIRED: the product name is copied from the SKU, and the state and city are resolved from the pincode. The SKU must be on your tenant, else `404`. **Insert-only** - an `id` in the body is ignored and a new lead is always created. Free text is validated (`400` on HTML/script), and the route is throttled per partner per tenant.",
        "body": {
         "mode": "raw",
         "raw": "{\n  \"skuId\": 912,\n  \"name\": \"Asha Menon\",\n  \"email\": \"shopper@example.com\",\n  \"mobileNo\": \"9876500000\",\n  \"pincode\": \"400709\",\n  \"details\": \"Interested in this offer\"\n}",
         "options": {
          "raw": {
           "language": "json"
          }
         }
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Dear User! we have received your request our team will get back to you soon\",\n  \"response\": null\n}"
      }
     ]
    },
    {
     "name": "Newsletter signup (visitor not signed in)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "Content-Type",
        "value": "application/x-www-form-urlencoded"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/engagement/subscribe",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "engagement",
        "subscribe"
       ]
      },
      "description": "Newsletter signup (visitor not signed in)\n\n**Scope `engagement:public:write`.** **No `X-Customer-Token`.** Adds an email address to your tenant's newsletter list. The tenant is stamped server-side, and the duplicate check is scoped to it - the same address may be subscribed independently on another tenant. An address already on YOUR list answers `200` with a `FAIL` envelope, not an error status. Throttled per partner per tenant.",
      "body": {
       "mode": "urlencoded",
       "urlencoded": [
        {
         "key": "subscribeBean",
         "value": "{\"email\":\"shopper@example.com\"}"
        }
       ]
      }
     },
     "response": [
      {
       "name": "Added to the list",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/engagement/subscribe",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "engagement",
          "subscribe"
         ]
        },
        "description": "Newsletter signup (visitor not signed in)\n\n**Scope `engagement:public:write`.** **No `X-Customer-Token`.** Adds an email address to your tenant's newsletter list. The tenant is stamped server-side, and the duplicate check is scoped to it - the same address may be subscribed independently on another tenant. An address already on YOUR list answers `200` with a `FAIL` envelope, not an error status. Throttled per partner per tenant.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "subscribeBean",
           "value": "{\"email\":\"shopper@example.com\"}"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": \"Congratulations. If we have have anything of extreme value to send you we will. If not we won\\u2019t bug you. Our promise\",\n  \"response\": null\n}"
      },
      {
       "name": "Already on this tenant's list",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "Content-Type",
          "value": "application/x-www-form-urlencoded"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/engagement/subscribe",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "engagement",
          "subscribe"
         ]
        },
        "description": "Newsletter signup (visitor not signed in)\n\n**Scope `engagement:public:write`.** **No `X-Customer-Token`.** Adds an email address to your tenant's newsletter list. The tenant is stamped server-side, and the duplicate check is scoped to it - the same address may be subscribed independently on another tenant. An address already on YOUR list answers `200` with a `FAIL` envelope, not an error status. Throttled per partner per tenant.",
        "body": {
         "mode": "urlencoded",
         "urlencoded": [
          {
           "key": "subscribeBean",
           "value": "{\"email\":\"shopper@example.com\"}"
          }
         ]
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"FAIL\",\n  \"message\": \"Dear User! Provided email is already subscribed with us\",\n  \"response\": null\n}"
      }
     ]
    }
   ]
  },
  {
   "name": "11. ServiceDesk  (scope: servicedesk:*)",
   "item": [
    {
     "name": "Bookable service types, modes, concerns and items",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/servicedesk/catalogue?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "servicedesk",
        "catalogue"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Bookable service types, modes, concerns and items\n\n**Scope `servicedesk:catalog:read`.** Everything a booking funnel needs to render its first step. Tenant-scoped by your partner binding - no id is sent."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/servicedesk/catalogue?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "servicedesk",
          "catalogue"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Bookable service types, modes, concerns and items\n\n**Scope `servicedesk:catalog:read`.** Everything a booking funnel needs to render its first step. Tenant-scoped by your partner binding - no id is sent."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"serviceTypes\": {\n      \"1\": \"Advisory Consultation\",\n      \"2\": \"Home Services\"\n    },\n    \"modes\": [\n      {\n        \"id\": 4,\n        \"name\": \"At Home\"\n      }\n    ],\n    \"concerns\": [\n      {\n        \"id\": 3,\n        \"name\": \"Leaking tap\"\n      }\n    ],\n    \"serviceItems\": [\n      {\n        \"id\": 7,\n        \"name\": \"Plumbing Callout & Diagnosis\",\n        \"serviceTypeId\": 2,\n        \"durationMinutes\": 60\n      }\n    ]\n  }\n}"
      }
     ]
    },
    {
     "name": "Published, verified providers",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/servicedesk/providers?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "servicedesk",
        "providers"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Published, verified providers\n\n**Scope `servicedesk:provider:read`.** Only providers that are PUBLISHED and VERIFIED on your tenant. An unverified provider cannot be booked and is not listed."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/servicedesk/providers?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "servicedesk",
          "providers"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Published, verified providers\n\n**Scope `servicedesk:provider:read`.** Only providers that are PUBLISHED and VERIFIED on your tenant. An unverified provider cannot be booked and is not listed."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"providers\": [\n      {\n        \"id\": 5,\n        \"code\": \"SVCP-PLM-001\",\n        \"displayName\": \"Epsilon Plumbing Works\",\n        \"serviceTypeId\": 2,\n        \"ratingAvg\": 0.0\n      }\n    ]\n  }\n}"
      }
     ]
    },
    {
     "name": "Open slots for one provider over a date window",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/servicedesk/availability?providerId=5&fromDate=2026-09-03&toDate=2026-09-10",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "servicedesk",
        "availability"
       ],
       "query": [
        {
         "key": "providerId",
         "value": "5"
        },
        {
         "key": "fromDate",
         "value": "2026-09-03"
        },
        {
         "key": "toDate",
         "value": "2026-09-10"
        },
        {
         "key": "serviceModeId",
         "value": "4",
         "disabled": true
        }
       ]
      },
      "description": "Open slots for one provider over a date window\n\n**Scope `servicedesk:availability:read`.** \u26a0\ufe0f The window is CLAMPED to 62 days, not merely validated - an unbounded range is cheap to ask for and expensive to serve. Slots carry no counters, no version and no status (SF-032): a slot appearing here is not a promise it will still be free when you hold it."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/servicedesk/availability?providerId=5&fromDate=2026-09-03&toDate=2026-09-10",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "servicedesk",
          "availability"
         ],
         "query": [
          {
           "key": "providerId",
           "value": "5"
          },
          {
           "key": "fromDate",
           "value": "2026-09-03"
          },
          {
           "key": "toDate",
           "value": "2026-09-10"
          },
          {
           "key": "serviceModeId",
           "value": "4",
           "disabled": true
          }
         ]
        },
        "description": "Open slots for one provider over a date window\n\n**Scope `servicedesk:availability:read`.** \u26a0\ufe0f The window is CLAMPED to 62 days, not merely validated - an unbounded range is cheap to ask for and expensive to serve. Slots carry no counters, no version and no status (SF-032): a slot appearing here is not a promise it will still be free when you hold it."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"windowFrom\": \"2026-09-03\",\n    \"windowTo\": \"2026-09-10\",\n    \"slots\": [\n      {\n        \"id\": 167385,\n        \"slotDate\": \"2026-09-03\",\n        \"startTime\": \"08:00\",\n        \"endTime\": \"09:00\",\n        \"providerId\": 5,\n        \"serviceModeId\": 4\n      }\n    ]\n  }\n}"
      }
     ]
    },
    {
     "name": "The price for one slot",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/servicedesk/quote?slotId=167385&serviceTypeId=2&serviceItemId=7",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "servicedesk",
        "quote"
       ],
       "query": [
        {
         "key": "slotId",
         "value": "167385"
        },
        {
         "key": "serviceTypeId",
         "value": "2"
        },
        {
         "key": "serviceItemId",
         "value": "7"
        }
       ]
      },
      "description": "The price for one slot\n\n**Scope `servicedesk:availability:read`.** \u26a0\ufe0f SERVER-DERIVED, AND NOT AN INPUT TO ANYTHING. Price varies by slot - a modifier can move it by day, hour or lead time - so there is no single 'price of a service'. The confirm re-prices from the held slot regardless of what was quoted, so a stale quote costs a re-read, never a wrong charge. An unresolved quote says so and carries no number."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/servicedesk/quote?slotId=167385&serviceTypeId=2&serviceItemId=7",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "servicedesk",
          "quote"
         ],
         "query": [
          {
           "key": "slotId",
           "value": "167385"
          },
          {
           "key": "serviceTypeId",
           "value": "2"
          },
          {
           "key": "serviceItemId",
           "value": "7"
          }
         ]
        },
        "description": "The price for one slot\n\n**Scope `servicedesk:availability:read`.** \u26a0\ufe0f SERVER-DERIVED, AND NOT AN INPUT TO ANYTHING. Price varies by slot - a modifier can move it by day, hour or lead time - so there is no single 'price of a service'. The confirm re-prices from the held slot regardless of what was quoted, so a stale quote costs a re-read, never a wrong charge. An unresolved quote says so and carries no number."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"quote\": {\n      \"resolved\": true,\n      \"totalDisplay\": \"\\u20b9 649.00\",\n      \"lines\": [\n        {\n          \"label\": \"Service\",\n          \"amountDisplay\": \"\\u20b9 550.00\"\n        },\n        {\n          \"label\": \"CGST\",\n          \"amountDisplay\": \"\\u20b9 49.50\"\n        },\n        {\n          \"label\": \"SGST\",\n          \"amountDisplay\": \"\\u20b9 49.50\"\n        }\n      ]\n    }\n  }\n}"
      }
     ]
    },
    {
     "name": "Reserve a slot for your customer",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Idempotency-Key",
        "value": "{{idempotencyKey}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/servicedesk/hold?slotId=167385",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "servicedesk",
        "hold"
       ],
       "query": [
        {
         "key": "slotId",
         "value": "167385"
        }
       ]
      },
      "description": "Reserve a slot for your customer\n\n**Scope `servicedesk:booking:write`.** \u26a0\ufe0f REQUIRES `X-Customer-Token` for an EXISTING customer. This platform does not create a person's record on a partner's assertion, so a walk-up customer must be onboarded through the customer-auth scopes first. \u26a0\ufe0f `Idempotency-Key` is REQUIRED on this endpoint, and it is the only ServiceDesk write that requires one: confirm, cancel and reschedule are each bound to a hold token or a booking id the database will not spend twice, whereas a hold takes a FRESH unit of capacity on every call. A retry after a timeout you never saw resolve returns the original hold rather than taking a second one. Reuse the key verbatim to retry; a DIFFERENT request needs a NEW key. \u26a0\ufe0f The same key with a different body is `422`, never a replay of the first answer - being told you booked an appointment you did not ask for is discovered when somebody does not arrive. Keys are honoured for 24 hours. The hold is short-lived and is released automatically if you do not confirm."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Idempotency-Key",
          "value": "{{idempotencyKey}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/servicedesk/hold?slotId=167385",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "servicedesk",
          "hold"
         ],
         "query": [
          {
           "key": "slotId",
           "value": "167385"
          }
         ]
        },
        "description": "Reserve a slot for your customer\n\n**Scope `servicedesk:booking:write`.** \u26a0\ufe0f REQUIRES `X-Customer-Token` for an EXISTING customer. This platform does not create a person's record on a partner's assertion, so a walk-up customer must be onboarded through the customer-auth scopes first. \u26a0\ufe0f `Idempotency-Key` is REQUIRED on this endpoint, and it is the only ServiceDesk write that requires one: confirm, cancel and reschedule are each bound to a hold token or a booking id the database will not spend twice, whereas a hold takes a FRESH unit of capacity on every call. A retry after a timeout you never saw resolve returns the original hold rather than taking a second one. Reuse the key verbatim to retry; a DIFFERENT request needs a NEW key. \u26a0\ufe0f The same key with a different body is `422`, never a replay of the first answer - being told you booked an appointment you did not ask for is discovered when somebody does not arrive. Keys are honoured for 24 hours. The hold is short-lived and is released automatically if you do not confirm."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"outcome\": \"HELD\",\n    \"holdToken\": \"3f7c1e90-2b44-4a19-9c1d-8e5b7a0d1234\",\n    \"expiresAt\": \"2026-08-29T12:41:07\",\n    \"ttlSeconds\": 420\n  }\n}"
      }
     ]
    },
    {
     "name": "Give a held slot back",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/servicedesk/hold/release?holdToken=3f7c1e90-2b44-4a19-9c1d-8e5b7a0d1234",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "servicedesk",
        "hold",
        "release"
       ],
       "query": [
        {
         "key": "holdToken",
         "value": "3f7c1e90-2b44-4a19-9c1d-8e5b7a0d1234"
        }
       ]
      },
      "description": "Give a held slot back\n\n**Scope `servicedesk:booking:write`.** Releases a hold your customer owns. A token belonging to someone else affects nothing and is refused identically to one that expired - the two answers are the same sentence."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/servicedesk/hold/release?holdToken=3f7c1e90-2b44-4a19-9c1d-8e5b7a0d1234",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "servicedesk",
          "hold",
          "release"
         ],
         "query": [
          {
           "key": "holdToken",
           "value": "3f7c1e90-2b44-4a19-9c1d-8e5b7a0d1234"
          }
         ]
        },
        "description": "Give a held slot back\n\n**Scope `servicedesk:booking:write`.** Releases a hold your customer owns. A token belonging to someone else affects nothing and is refused identically to one that expired - the two answers are the same sentence."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"outcome\": \"RELEASED\"\n  }\n}"
      }
     ]
    },
    {
     "name": "Turn a held slot into a booking",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "X-Customer-Token",
        "value": "{{customerToken}}"
       },
       {
        "key": "Idempotency-Key",
        "value": "{{idempotencyKey}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/servicedesk/booking/confirm?holdToken=3f7c1e90-2b44-4a19-9c1d-8e5b7a0d1234&serviceTypeId=2&serviceItemId=7",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "servicedesk",
        "booking",
        "confirm"
       ],
       "query": [
        {
         "key": "holdToken",
         "value": "3f7c1e90-2b44-4a19-9c1d-8e5b7a0d1234"
        },
        {
         "key": "serviceTypeId",
         "value": "2"
        },
        {
         "key": "serviceItemId",
         "value": "7"
        },
        {
         "key": "concernId",
         "value": "3",
         "disabled": true
        },
        {
         "key": "couponCode",
         "value": "WELCOME10",
         "disabled": true
        },
        {
         "key": "expectedTotal",
         "value": "1298.00",
         "disabled": true
        },
        {
         "key": "customerNotes",
         "value": "Leak under the sink",
         "disabled": true
        }
       ]
      },
      "description": "Turn a held slot into a booking\n\n**Scope `servicedesk:booking:write`.** \u26a0\ufe0f NO AMOUNT, DISCOUNT, TAX OR TOTAL IS A REQUEST FIELD. Not validated - ABSENT. The whole breakdown is re-derived from the ids on the consumed hold. \u26a0\ufe0f NO PAYMENT IS CAPTURED. A confirmed booking sits UNPAID; that is the behaviour on every channel, not a partner limitation. \u26a0\ufe0f A `couponCode` that no longer applies is REFUSED with `response.outcome = COUPON_REFUSED` (status FAIL, message `That code cannot be applied.`), nothing is booked and the hold is NOT consumed. The refusal carries `response.fullPrice`, the server re-price of the same booking WITHOUT the coupon (display only), and `response.expectedTotal`, the same total as a plain decimal string. A coupon whose own configuration is faulty is answered the same way. \u26a0\ufe0f The message is that ONE sentence for EVERY coupon refusal, whatever the reason (unknown, expired, used up, per-customer limit, minimum order, scope); no reason is returned, so do not branch on the message. To book at that price, re-submit the same confirm WITHOUT `couponCode`, WITH `expectedTotal` set to that value, under a NEW `Idempotency-Key`, while the hold is still live. \u26a0\ufe0f `expectedTotal` is a COMPARISON value, never the price: the server prices the booking again and, if its total differs from `expectedTotal` to the paise (or `expectedTotal` is not a plain decimal with at most two places), REFUSES with `response.outcome = PRICE_CHANGED` (status FAIL), books nothing, leaves the hold unconsumed and returns the new `fullPrice` and `expectedTotal` - show the new price and re-submit with the new `expectedTotal` if the customer accepts. A confirm without `expectedTotal` behaves as before. \u26a0\ufe0f `Idempotency-Key` is OPTIONAL here, and that is deliberate rather than an omission. The guarantee is the HOLD TOKEN: it is consumed by one conditional statement, so a retry - even with NO header at all - replays the same booking rather than creating a second one. Sending a key additionally replays the FIRST response instead of re-running the call. \u26a0\ufe0f The same key with a DIFFERENT body is `422`, never a replay. Keys are honoured for 24 hours."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "X-Customer-Token",
          "value": "{{customerToken}}"
         },
         {
          "key": "Idempotency-Key",
          "value": "{{idempotencyKey}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/servicedesk/booking/confirm?holdToken=3f7c1e90-2b44-4a19-9c1d-8e5b7a0d1234&serviceTypeId=2&serviceItemId=7",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "servicedesk",
          "booking",
          "confirm"
         ],
         "query": [
          {
           "key": "holdToken",
           "value": "3f7c1e90-2b44-4a19-9c1d-8e5b7a0d1234"
          },
          {
           "key": "serviceTypeId",
           "value": "2"
          },
          {
           "key": "serviceItemId",
           "value": "7"
          },
          {
           "key": "concernId",
           "value": "3",
           "disabled": true
          },
          {
           "key": "couponCode",
           "value": "WELCOME10",
           "disabled": true
          },
          {
           "key": "expectedTotal",
           "value": "1298.00",
           "disabled": true
          },
          {
           "key": "customerNotes",
           "value": "Leak under the sink",
           "disabled": true
          }
         ]
        },
        "description": "Turn a held slot into a booking\n\n**Scope `servicedesk:booking:write`.** \u26a0\ufe0f NO AMOUNT, DISCOUNT, TAX OR TOTAL IS A REQUEST FIELD. Not validated - ABSENT. The whole breakdown is re-derived from the ids on the consumed hold. \u26a0\ufe0f NO PAYMENT IS CAPTURED. A confirmed booking sits UNPAID; that is the behaviour on every channel, not a partner limitation. \u26a0\ufe0f A `couponCode` that no longer applies is REFUSED with `response.outcome = COUPON_REFUSED` (status FAIL, message `That code cannot be applied.`), nothing is booked and the hold is NOT consumed. The refusal carries `response.fullPrice`, the server re-price of the same booking WITHOUT the coupon (display only), and `response.expectedTotal`, the same total as a plain decimal string. A coupon whose own configuration is faulty is answered the same way. \u26a0\ufe0f The message is that ONE sentence for EVERY coupon refusal, whatever the reason (unknown, expired, used up, per-customer limit, minimum order, scope); no reason is returned, so do not branch on the message. To book at that price, re-submit the same confirm WITHOUT `couponCode`, WITH `expectedTotal` set to that value, under a NEW `Idempotency-Key`, while the hold is still live. \u26a0\ufe0f `expectedTotal` is a COMPARISON value, never the price: the server prices the booking again and, if its total differs from `expectedTotal` to the paise (or `expectedTotal` is not a plain decimal with at most two places), REFUSES with `response.outcome = PRICE_CHANGED` (status FAIL), books nothing, leaves the hold unconsumed and returns the new `fullPrice` and `expectedTotal` - show the new price and re-submit with the new `expectedTotal` if the customer accepts. A confirm without `expectedTotal` behaves as before. \u26a0\ufe0f `Idempotency-Key` is OPTIONAL here, and that is deliberate rather than an omission. The guarantee is the HOLD TOKEN: it is consumed by one conditional statement, so a retry - even with NO header at all - replays the same booking rather than creating a second one. Sending a key additionally replays the FIRST response instead of re-running the call. \u26a0\ufe0f The same key with a DIFFERENT body is `422`, never a replay. Keys are honoured for 24 hours."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"outcome\": \"CONFIRMED\",\n    \"booking\": {\n      \"bookingNumber\": \"BKG-4-NMH99YPZKPAE7XWYHN\",\n      \"scheduledDate\": \"2026-09-03\",\n      \"scheduledStart\": \"08:00\",\n      \"scheduledEnd\": \"09:00\",\n      \"providerId\": 5,\n      \"serviceModeId\": 4,\n      \"currencyCode\": \"INR\",\n      \"baseAmount\": 550.0,\n      \"discountAmount\": 0.0,\n      \"taxAmount\": 99.0,\n      \"totalAmount\": 649.0,\n      \"paymentStatus\": \"UNPAID\"\n    }\n  }\n}"
      }
     ]
    },
    {
     "name": "One booking you created",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/servicedesk/booking/detail?bookingNumber=BKG-4-NMH99YPZKPAE7XWYHN",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "servicedesk",
        "booking",
        "detail"
       ],
       "query": [
        {
         "key": "bookingNumber",
         "value": "BKG-4-NMH99YPZKPAE7XWYHN"
        }
       ]
      },
      "description": "One booking you created\n\n**Scope `servicedesk:booking:read`.** \u26a0\ufe0f Only bookings YOUR integration created. A booking that does not exist, belongs to another partner, or sits on another tenant all answer the same refusal - a more helpful reply would confirm that a guessed booking number is real. \u26a0\ufe0f No customer name, phone or email is returned: you supplied the customer token, and this API is not a directory."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/servicedesk/booking/detail?bookingNumber=BKG-4-NMH99YPZKPAE7XWYHN",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "servicedesk",
          "booking",
          "detail"
         ],
         "query": [
          {
           "key": "bookingNumber",
           "value": "BKG-4-NMH99YPZKPAE7XWYHN"
          }
         ]
        },
        "description": "One booking you created\n\n**Scope `servicedesk:booking:read`.** \u26a0\ufe0f Only bookings YOUR integration created. A booking that does not exist, belongs to another partner, or sits on another tenant all answer the same refusal - a more helpful reply would confirm that a guessed booking number is real. \u26a0\ufe0f No customer name, phone or email is returned: you supplied the customer token, and this API is not a directory."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"booking\": {\n      \"bookingNumber\": \"BKG-4-NMH99YPZKPAE7XWYHN\",\n      \"scheduledDate\": \"2026-09-03\",\n      \"scheduledStart\": \"08:00\",\n      \"scheduledEnd\": \"09:00\",\n      \"providerId\": 5,\n      \"providerName\": \"Epsilon Plumbing Works\",\n      \"serviceTypeId\": 2,\n      \"serviceItemId\": 7,\n      \"serviceModeId\": 4,\n      \"statusName\": \"CONFIRMED\",\n      \"statusGroup\": \"OPEN\",\n      \"currencyCode\": \"INR\",\n      \"totalAmount\": 649.0,\n      \"refundedAmount\": 0.0,\n      \"paymentStatus\": \"UNPAID\"\n    }\n  }\n}"
      }
     ]
    },
    {
     "name": "The bookings you created",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/servicedesk/booking/list?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "servicedesk",
        "booking",
        "list"
       ],
       "query": [
        {
         "key": "fromDate",
         "value": "2026-09-01",
         "disabled": true
        },
        {
         "key": "toDate",
         "value": "2026-09-30",
         "disabled": true
        },
        {
         "key": "pageSize",
         "value": "25",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "0",
         "disabled": true
        }
       ]
      },
      "description": "The bookings you created\n\n**Scope `servicedesk:booking:read`.** Newest first. Narrowed to your integration in SQL, not by a filter you send."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/servicedesk/booking/list?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "servicedesk",
          "booking",
          "list"
         ],
         "query": [
          {
           "key": "fromDate",
           "value": "2026-09-01",
           "disabled": true
          },
          {
           "key": "toDate",
           "value": "2026-09-30",
           "disabled": true
          },
          {
           "key": "pageSize",
           "value": "25",
           "disabled": true
          },
          {
           "key": "offset",
           "value": "0",
           "disabled": true
          }
         ]
        },
        "description": "The bookings you created\n\n**Scope `servicedesk:booking:read`.** Newest first. Narrowed to your integration in SQL, not by a filter you send."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"totalRecords\": 1,\n    \"bookings\": [\n      {\n        \"bookingNumber\": \"BKG-4-NMH99YPZKPAE7XWYHN\",\n        \"scheduledDate\": \"2026-09-03\",\n        \"providerName\": \"Epsilon Plumbing Works\",\n        \"statusName\": \"CONFIRMED\",\n        \"currencyCode\": \"INR\",\n        \"totalAmount\": 649.0\n      }\n    ]\n  }\n}"
      }
     ]
    },
    {
     "name": "Cancel a booking you created",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "Idempotency-Key",
        "value": "{{idempotencyKey}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/servicedesk/booking/cancel?bookingId=4021",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "servicedesk",
        "booking",
        "cancel"
       ],
       "query": [
        {
         "key": "bookingId",
         "value": "4021"
        },
        {
         "key": "reason",
         "value": "Customer rescheduled by phone",
         "disabled": true
        }
       ]
      },
      "description": "Cancel a booking you created\n\n**Scope `servicedesk:booking:cancel`.** \u26a0\ufe0f A SEPARATE SCOPE FROM `booking:write`, deliberately: cancelling is what carries the refund consequence, so an integration that may create bookings is not automatically one that may cancel them. Subject to the tenant's policy cutoff - you cannot waive it. \u26a0\ufe0f `Idempotency-Key` is OPTIONAL here, and that is deliberate rather than an omission: this call is bound to a hold token or a booking id that the database itself will not spend twice, so a retry WITHOUT the header is already safe. Sending one additionally replays the FIRST response instead of re-running the call. \u26a0\ufe0f The same key with a DIFFERENT body is `422`, never a replay. Keys are honoured for 24 hours."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "Idempotency-Key",
          "value": "{{idempotencyKey}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/servicedesk/booking/cancel?bookingId=4021",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "servicedesk",
          "booking",
          "cancel"
         ],
         "query": [
          {
           "key": "bookingId",
           "value": "4021"
          },
          {
           "key": "reason",
           "value": "Customer rescheduled by phone",
           "disabled": true
          }
         ]
        },
        "description": "Cancel a booking you created\n\n**Scope `servicedesk:booking:cancel`.** \u26a0\ufe0f A SEPARATE SCOPE FROM `booking:write`, deliberately: cancelling is what carries the refund consequence, so an integration that may create bookings is not automatically one that may cancel them. Subject to the tenant's policy cutoff - you cannot waive it. \u26a0\ufe0f `Idempotency-Key` is OPTIONAL here, and that is deliberate rather than an omission: this call is bound to a hold token or a booking id that the database itself will not spend twice, so a retry WITHOUT the header is already safe. Sending one additionally replays the FIRST response instead of re-running the call. \u26a0\ufe0f The same key with a DIFFERENT body is `422`, never a replay. Keys are honoured for 24 hours."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"outcome\": \"CANCELLED\",\n    \"booking\": {\n      \"bookingNumber\": \"BKG-4-NMH99YPZKPAE7XWYHN\",\n      \"totalAmount\": 649.0\n    }\n  }\n}"
      }
     ]
    },
    {
     "name": "Move a booking you created to another slot",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       },
       {
        "key": "Idempotency-Key",
        "value": "{{idempotencyKey}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/servicedesk/booking/reschedule?bookingId=4021&targetSlotId=167390",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "servicedesk",
        "booking",
        "reschedule"
       ],
       "query": [
        {
         "key": "bookingId",
         "value": "4021"
        },
        {
         "key": "targetSlotId",
         "value": "167390"
        },
        {
         "key": "reason",
         "value": "Customer asked for a later time",
         "disabled": true
        }
       ]
      },
      "description": "Move a booking you created to another slot\n\n**Scope `servicedesk:booking:cancel`.** Moves the appointment to `targetSlotId`. The target is acquired through the same atomic statement a fresh hold uses, so a slot taken in between is refused rather than double-booked. \u26a0\ufe0f `Idempotency-Key` is OPTIONAL here, and that is deliberate rather than an omission: this call is bound to a hold token or a booking id that the database itself will not spend twice, so a retry WITHOUT the header is already safe. Sending one additionally replays the FIRST response instead of re-running the call. \u26a0\ufe0f The same key with a DIFFERENT body is `422`, never a replay. Keys are honoured for 24 hours."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         },
         {
          "key": "Idempotency-Key",
          "value": "{{idempotencyKey}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/servicedesk/booking/reschedule?bookingId=4021&targetSlotId=167390",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "servicedesk",
          "booking",
          "reschedule"
         ],
         "query": [
          {
           "key": "bookingId",
           "value": "4021"
          },
          {
           "key": "targetSlotId",
           "value": "167390"
          },
          {
           "key": "reason",
           "value": "Customer asked for a later time",
           "disabled": true
          }
         ]
        },
        "description": "Move a booking you created to another slot\n\n**Scope `servicedesk:booking:cancel`.** Moves the appointment to `targetSlotId`. The target is acquired through the same atomic statement a fresh hold uses, so a slot taken in between is refused rather than double-booked. \u26a0\ufe0f `Idempotency-Key` is OPTIONAL here, and that is deliberate rather than an omission: this call is bound to a hold token or a booking id that the database itself will not spend twice, so a retry WITHOUT the header is already safe. Sending one additionally replays the FIRST response instead of re-running the call. \u26a0\ufe0f The same key with a DIFFERENT body is `422`, never a replay. Keys are honoured for 24 hours."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"outcome\": \"RESCHEDULED\",\n    \"booking\": {\n      \"bookingNumber\": \"BKG-4-NMH99YPZKPAE7XWYHN\",\n      \"scheduledDate\": \"2026-09-05\",\n      \"scheduledStart\": \"08:00\",\n      \"totalAmount\": 649.0\n    }\n  }\n}"
      }
     ]
    }
   ]
  },
  {
   "name": "12. Digital  (scope: digital:*)",
   "item": [
    {
     "name": "The customer's digital purchases",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/digital/library?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "digital",
        "library"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "The customer's digital purchases\n\n**Scope `digital:library:read`.** Every entitlement this customer owns, with the server's own verdict on each: whether it can be downloaded now, and if not, why. \u26a0\ufe0f Requires `X-Customer-Token` - the scope is CUSTOMER-BOUND, so the customer is resolved before the handler runs and there is no customer id to send. Dates are epoch milliseconds. A LICENCE entitlement carries its `licenceKey`; a DOWNLOAD one does not."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/digital/library?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "digital",
          "library"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "The customer's digital purchases\n\n**Scope `digital:library:read`.** Every entitlement this customer owns, with the server's own verdict on each: whether it can be downloaded now, and if not, why. \u26a0\ufe0f Requires `X-Customer-Token` - the scope is CUSTOMER-BOUND, so the customer is resolved before the handler runs and there is no customer id to send. Dates are epoch milliseconds. A LICENCE entitlement carries its `licenceKey`; a DOWNLOAD one does not."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"count\": 2,\n    \"items\": [\n      {\n        \"grantCode\": \"iN34nkRGztUMvYszwRxfTG\",\n        \"productName\": \"Advanced Excel - Masterclass\",\n        \"skuCode\": \"DGT-XL-01\",\n        \"type\": \"LICENCE\",\n        \"status\": \"ACTIVE\",\n        \"orderNumber\": \"AS467\",\n        \"purchasedOn\": 1788599772000,\n        \"validFrom\": 1788619669000,\n        \"validUntil\": null,\n        \"neverExpires\": true,\n        \"firstAccessedOn\": null,\n        \"downloadsUsed\": 0,\n        \"maxDownloads\": null,\n        \"downloadsRemaining\": null,\n        \"unlimitedDownloads\": true,\n        \"devicesUsed\": 0,\n        \"maxDevices\": 1,\n        \"unlimitedDevices\": false,\n        \"downloadable\": true,\n        \"reason\": \"\",\n        \"reasonMessage\": \"\",\n        \"refundable\": true,\n        \"refundNote\": \"You have not opened this yet, so it can still be refunded.\",\n        \"licenceKey\": \"XXXXX-XXXXX-XXXXX-XXXXX-XXXXX\"\n      },\n      {\n        \"grantCode\": \"6wvrEhucNltgXXss3BGjTs\",\n        \"productName\": \"Field Safety Handbook\",\n        \"skuCode\": \"DGT-FS-02\",\n        \"type\": \"DOWNLOAD\",\n        \"status\": \"ACTIVE\",\n        \"orderNumber\": \"AS442\",\n        \"purchasedOn\": 1788512400000,\n        \"validFrom\": 1788512400000,\n        \"validUntil\": 1820048400000,\n        \"neverExpires\": false,\n        \"firstAccessedOn\": 1788516000000,\n        \"downloadsUsed\": 5,\n        \"maxDownloads\": 5,\n        \"downloadsRemaining\": 0,\n        \"unlimitedDownloads\": false,\n        \"devicesUsed\": 1,\n        \"maxDevices\": 2,\n        \"unlimitedDevices\": false,\n        \"downloadable\": false,\n        \"reason\": \"LIMIT\",\n        \"reasonMessage\": \"You have used all 5 downloads for this item.\",\n        \"refundable\": false,\n        \"refundNote\": \"You opened this on 3 September 2026, so it can no longer be refunded.\"\n      }\n    ]\n  }\n}"
      }
     ]
    },
    {
     "name": "Mint a fresh, single-use delivery token",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "X-Api-Key",
        "value": "{{apiKey}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{accessToken}}"
       }
      ],
      "url": {
       "raw": "{{baseUrl}}/digital/delivery/url?",
       "host": [
        "{{baseUrl}}"
       ],
       "path": [
        "digital",
        "delivery",
        "url"
       ],
       "query": [
        {
         "key": "siteMasterId",
         "value": "{{siteMasterId}}",
         "disabled": true
        }
       ]
      },
      "description": "Mint a fresh, single-use delivery token\n\n**Scope `digital:delivery:write`.** Returns a signed, expiring token for one asset of one grant. \u26a0\ufe0f THIS IS A `:write` SCOPE BECAUSE MINTING MANUFACTURES A SINGLE-USE CREDENTIAL that will consume the customer's download ceiling when it is spent - the mint EVALUATES the ceiling, the redeem spends it. A partner granted only `digital:library:read` therefore cannot produce download credentials. \u26a0\ufe0f Spend the token from YOUR OWN SERVER against `/ECOM/api/digital/delivery/{token}`; it is single-use, short-lived and bound to this customer. No absolute URL is returned, because ours would be meaningless in your page."
     },
     "response": [
      {
       "name": "Example response",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "X-Api-Key",
          "value": "{{apiKey}}"
         },
         {
          "key": "Authorization",
          "value": "Bearer {{accessToken}}"
         }
        ],
        "url": {
         "raw": "{{baseUrl}}/digital/delivery/url?",
         "host": [
          "{{baseUrl}}"
         ],
         "path": [
          "digital",
          "delivery",
          "url"
         ],
         "query": [
          {
           "key": "siteMasterId",
           "value": "{{siteMasterId}}",
           "disabled": true
          }
         ]
        },
        "description": "Mint a fresh, single-use delivery token\n\n**Scope `digital:delivery:write`.** Returns a signed, expiring token for one asset of one grant. \u26a0\ufe0f THIS IS A `:write` SCOPE BECAUSE MINTING MANUFACTURES A SINGLE-USE CREDENTIAL that will consume the customer's download ceiling when it is spent - the mint EVALUATES the ceiling, the redeem spends it. A partner granted only `digital:library:read` therefore cannot produce download credentials. \u26a0\ufe0f Spend the token from YOUR OWN SERVER against `/ECOM/api/digital/delivery/{token}`; it is single-use, short-lived and bound to this customer. No absolute URL is returned, because ours would be meaningless in your page."
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"message\": null,\n  \"response\": {\n    \"token\": \"v1.NH4xfjF-NDl-MTc4ODYwMTg3Nw.XXXXXXXXXXXXXXXXXXXXXX\",\n    \"assetId\": 1\n  }\n}"
      }
     ]
    }
   ]
  }
 ]
}