{
  "info": {
    "name": "Thyris Merchant Integrations",
    "description": "Self-contained customer-facing Postman collection for Thyris merchant integrations.\n\nSet collection variables before running:\n- baseUrl: https://merchant.thyris.cloud or your staging host\n- webhookBaseUrl: https://webhooks.thyris.cloud or your staging webhook host\n- apiKey: developer API key from Merchant Dashboard > Developers > API Keys\n- storeId: target store UUID from GET /api/v1/catalog/stores or GET /api/v1/procurement/stores\n\nCovers REST Catalog API, REST Procurement API, inbound/outbound webhooks, UCP-compatible catalog/procurement endpoints, and Merchant MCP JSON-RPC tools.\n\nUse 05-request-field-requirements.md for the full required/optional field matrix.\n\nIncludes direct product details, cart item and bundle mutation, cart archive, and corresponding MCP tools.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{apiKey}}",
        "type": "string"
      }
    ]
  },
  "event": [
    {
      "listen": "prerequest",
      "script": {
        "type": "text/javascript",
        "exec": [
          "pm.request.headers.upsert({ key: 'Accept', value: 'application/json' });"
        ]
      }
    }
  ],
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://merchant.thyris.cloud",
      "description": "Production or staging base URL."
    },
    {
      "key": "apiKey",
      "value": "tr_live_change_me",
      "type": "secret",
      "description": "Developer API key from Developers > API Keys. Keep secret."
    },
    {
      "key": "storeId",
      "value": "STORE_UUID",
      "description": "Target store UUID returned by GET /api/v1/catalog/stores."
    },
    {
      "key": "productId",
      "value": "PRODUCT_UUID",
      "description": "Internal product UUID saved automatically by product create/list requests."
    },
    {
      "key": "sku",
      "value": "POSTMAN-SKU-001",
      "description": "Stable product SKU used for idempotent upsert."
    },
    {
      "key": "externalId",
      "value": "postman_product_001",
      "description": "Stable source-system product ID used for idempotent upsert."
    },
    {
      "key": "catalogId",
      "value": "1234567890",
      "description": "10 digit catalog product ID used for cart creation. Saved automatically when available."
    },
    {
      "key": "cartId",
      "value": "CART_UUID",
      "description": "Internal cart UUID saved automatically by cart creation."
    },
    {
      "key": "checkoutId",
      "value": "chk_change_me",
      "description": "Checkout ID saved automatically by cart creation."
    },
    {
      "key": "paymentId",
      "value": "pay_change_me",
      "description": "Optional non-sensitive payment reference. payment integrations may supply it for reconciliation."
    },
    {
      "key": "orderId",
      "value": "ord_change_me",
      "description": "Public order ID saved automatically by order completion."
    },
    {
      "key": "orderInternalId",
      "value": "ORDER_UUID",
      "description": "Internal order UUID saved automatically when available."
    },
    {
      "key": "webhookSecret",
      "value": "change_me_shared_secret",
      "type": "secret",
      "description": "Optional shared secret sent as x-webhook-secret in receiver examples."
    },
    {
      "key": "outboundWebhookReceiverUrl",
      "value": "https://webhook.site/change-me",
      "description": "Receiver URL used only by outbound sample payload requests."
    },
    {
      "key": "searchQuery",
      "value": "postman",
      "description": "Search text for product/store list examples."
    },
    {
      "key": "webhookBaseUrl",
      "value": "https://webhooks.thyris.cloud",
      "description": "Public webhook base URL for inbound catalog/procurement webhook tests."
    },
    {
      "key": "supplierId",
      "value": "SUPPLIER_UUID",
      "description": "Procurement supplier UUID saved automatically when available."
    },
    {
      "key": "inventoryItemId",
      "value": "INVENTORY_ITEM_UUID",
      "description": "Procurement inventory item UUID saved automatically when available."
    },
    {
      "key": "procurementOrderId",
      "value": "PROCUREMENT_ORDER_UUID",
      "description": "Procurement order UUID saved automatically when available."
    },
    {
      "key": "procurementOrderPublicId",
      "value": "PO_change_me",
      "description": "Public procurement order ID saved automatically when available."
    },
    {
      "key": "procurementSku",
      "value": "POSTMAN-PROC-001",
      "description": "Stable procurement inventory SKU used for tests."
    },
    {
      "key": "supplierExternalId",
      "value": "postman_supplier_001",
      "description": "Stable external supplier ID used for tests."
    },
    {
      "key": "cartItemId",
      "value": "CART_ITEM_UUID",
      "description": "Set from an authorized cart or catalog response before running item and bundle examples."
    },
    {
      "key": "catalogId2",
      "value": "9876543210",
      "description": "Set from an authorized cart or catalog response before running item and bundle examples."
    },
    {
      "key": "refundId",
      "value": ""
    },
    {
      "key": "shipmentId",
      "value": ""
    },
    {
      "key": "trackingNumber",
      "value": ""
    }
  ],
  "item": [
    {
      "name": "00 Setup",
      "description": "Verify API key access and discover store IDs. Required variable: apiKey. Optional variable: searchQuery.",
      "item": [
        {
          "name": "List Stores",
          "description": "GET /api/v1/catalog/stores\n\nRequired: API key.\nOptional query: none.\nUse the returned data[].id as storeId for product, cart, order, webhook, UCP, and MCP requests.",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/catalog/stores",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "catalog",
                "stores"
              ]
            }
          }
        },
        {
          "name": "Search Stores",
          "description": "GET /api/v1/catalog/stores?q={{searchQuery}}\n\nRequired: API key.\nOptional query: q.\nSearches store name, slug, or ID.",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/catalog/stores?q={{searchQuery}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "catalog",
                "stores"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "{{searchQuery}}"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "01 REST Catalog API",
      "description": "Primary backend API for stores, products, carts, and orders. All requests require Authorization: Bearer {{apiKey}}.",
      "item": [
        {
          "name": "Products",
          "item": [
            {
              "name": "List Products",
              "description": "GET /api/v1/catalog/products\n\nRequired: API key.\nOptional query: storeId, q.\nSaves productId and catalogId from the first returned product when available.",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/v1/catalog/products?storeId={{storeId}}&q={{searchQuery}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "catalog",
                    "products"
                  ],
                  "query": [
                    {
                      "key": "storeId",
                      "value": "{{storeId}}"
                    },
                    {
                      "key": "q",
                      "value": "{{searchQuery}}"
                    }
                  ]
                }
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('Response is successful', function () { pm.expect(pm.response.code).to.be.oneOf([200]); });",
                      "const body = pm.response.json();",
                      "if (body.data && body.data[0]) {",
                      "  pm.collectionVariables.set('productId', body.data[0].id);",
                      "  if (body.data[0].catalogId) pm.collectionVariables.set('catalogId', body.data[0].catalogId);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Create or Upsert Product",
              "description": "POST /api/v1/catalog/products\n\nRequired body: storeId, name, price.\nOptional body: sku, externalId, description, currency, status, inStock, inventoryQuantity, imageUrl, imageUrls, productUrl, metadata, otherDetails, variants. imageUrls is ordered, optional, and limited to 20 URLs; the first URL is primary.\nIdempotency: matching sku or externalId in the same store updates the existing product.\nSaves productId and catalogId when available.",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"storeId\": \"{{storeId}}\",\n  \"sku\": \"{{sku}}\",\n  \"externalId\": \"{{externalId}}\",\n  \"name\": \"Postman Test Hoodie\",\n  \"description\": \"Created through the Thyris Postman collection.\",\n  \"price\": 49.9,\n  \"currency\": \"USD\",\n  \"status\": \"active\",\n  \"inStock\": true,\n  \"inventoryQuantity\": 12,\n  \"imageUrl\": \"https://example.com/images/postman-hoodie.png\",\n  \"imageUrls\": [\"https://example.com/images/postman-hoodie.png\", \"https://example.com/images/postman-hoodie-back.png\"],\n  \"productUrl\": \"https://store.example.com/products/postman-hoodie\",\n  \"metadata\": {\n    \"source\": \"postman\"\n  },\n  \"otherDetails\": {\n    \"brand\": \"Example Brand\",\n    \"category\": \"Apparel\",\n    \"tags\": [\"postman\", \"catalog\", \"hoodie\"]\n  },\n  \"variants\": [\n    {\n      \"sku\": \"POSTMAN-SKU-001-M\",\n      \"externalId\": \"postman_variant_001_m\",\n      \"name\": \"Postman Test Hoodie / Medium\",\n      \"price\": 49.9,\n      \"currency\": \"USD\",\n      \"status\": \"active\",\n      \"inStock\": true,\n      \"inventoryQuantity\": 6,\n      \"otherDetails\": {\n        \"size\": \"M\",\n        \"color\": \"black\"\n      }\n    }\n  ]\n}"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/catalog/products",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "catalog",
                    "products"
                  ]
                }
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('Product saved', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201]); });",
                      "const body = pm.response.json();",
                      "if (body.data) {",
                      "  if (body.data.id) pm.collectionVariables.set('productId', body.data.id);",
                      "  if (body.data.catalogId) pm.collectionVariables.set('catalogId', body.data.catalogId);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Get Product by ID",
              "description": "GET /api/v1/catalog/products/{{productId}}\n\nRequired: API key, productId path variable.\nOptional: none.",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/v1/catalog/products/{{productId}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "catalog",
                    "products",
                    "{{productId}}"
                  ]
                }
              }
            },
            {
              "name": "Update Product Price and Inventory",
              "description": "PATCH /api/v1/catalog/products/{{productId}}\n\nRequired: API key, productId path variable.\nOptional body: any product fields to update. This example sends price, inStock, and inventoryQuantity.\nInventory fields trigger product.inventory.updated outbound events.",
              "request": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"price\": 44.9,\n  \"inStock\": true,\n  \"inventoryQuantity\": 24\n}"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/catalog/products/{{productId}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "catalog",
                    "products",
                    "{{productId}}"
                  ]
                }
              }
            },
            {
              "name": "Delete Product",
              "description": "DELETE product request.\n\nRequired: API key and productId.\nOptional: none.\nDestructive: run intentionally.",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/v1/catalog/products/{{productId}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "catalog",
                    "products",
                    "{{productId}}"
                  ]
                }
              }
            },
            {
              "name": "Get Product Details by Catalog ID - No Flow",
              "description": "GET /api/v1/catalog/product-details\n\nDirect read-only product detail lookup. No ACP Runtime or Flow execution is required. Prefer catalogId returned by product search. The response includes the complete authorized product plus store and public merchant profile.",
              "request": {
                "method": "GET",
                "header": [],
                "url": "{{baseUrl}}/api/v1/catalog/product-details?catalogId={{catalogId}}"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('Direct product details response is successful', function () { pm.expect(pm.response.code).to.eql(200); });",
                      "const body = pm.response.json();",
                      "pm.test('Direct details include store and public merchant profile', function () {",
                      "  pm.expect(body.data).to.include.keys('catalogId', 'store', 'merchant');",
                      "  pm.expect(body.data.merchant).to.include.keys('id', 'name', 'slug', 'description', 'logoUrl', 'websiteUrl', 'industry', 'language');",
                      "  pm.expect(body.data.imageUrl).to.be.a('string').and.not.empty;",
                      "  pm.expect(body.data.merchant.logoUrl).to.be.a('string').and.not.empty;",
                      "});"
                    ]
                  }
                }
              ]
            }
          ],
          "description": "Product read/write requests. Create/upsert requires storeId, name, and price. SKU and externalId are strongly recommended idempotency keys."
        },
        {
          "name": "Carts",
          "item": [
            {
              "name": "List Carts",
              "description": "GET /api/v1/catalog/carts\n\nRequired: API key.\nOptional query: storeId.",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/v1/catalog/carts?storeId={{storeId}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "catalog",
                    "carts"
                  ],
                  "query": [
                    {
                      "key": "storeId",
                      "value": "{{storeId}}"
                    }
                  ]
                }
              }
            },
            {
              "name": "Create Cart",
              "description": "POST /api/v1/catalog/carts\n\nRequired body: storeId, items, item.catalogId, item.quantity.\nOptional body: metadata, otherDetails, item.metadata, item.otherDetails.\nSaves cartId and checkout.id when successful.",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"storeId\": \"{{storeId}}\",\n  \"items\": [\n    {\n      \"catalogId\": \"{{catalogId}}\",\n      \"quantity\": 2,\n      \"otherDetails\": {\n        \"giftWrap\": true\n      }\n    }\n  ],\n  \"metadata\": {\n    \"conversationId\": \"postman-demo\"\n  },\n  \"otherDetails\": {\n    \"channel\": \"postman\"\n  }\n}"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/catalog/carts",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "catalog",
                    "carts"
                  ]
                }
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('Cart created', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201]); });",
                      "const body = pm.response.json();",
                      "if (body.data) {",
                      "  if (body.data.id) pm.collectionVariables.set('cartId', body.data.id);",
                      "  if (body.data.checkout && body.data.checkout.id) pm.collectionVariables.set('checkoutId', body.data.checkout.id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Clear Cart",
              "description": "POST /api/v1/catalog/carts/clear?cartId={{cartId}}\n\nRequired: API key, cartId query parameter.\nOptional: none.\nOnly works before a checkoutId exists.",
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/v1/catalog/carts/clear?cartId={{cartId}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "catalog",
                    "carts",
                    "clear"
                  ],
                  "query": [
                    {
                      "key": "cartId",
                      "value": "{{cartId}}"
                    }
                  ]
                }
              }
            },
            {
              "name": "Mutate Cart - Add Item",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{apiKey}}"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  }
                ],
                "url": "{{baseUrl}}/api/v1/catalog/carts/items",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"cartId\": \"{{cartId}}\",\n  \"catalogId\": \"{{catalogId}}\",\n  \"quantity\": 1\n}"
                }
              },
              "response": []
            },
            {
              "name": "Mutate Cart - Update Item",
              "request": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{apiKey}}"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  }
                ],
                "url": "{{baseUrl}}/api/v1/catalog/carts/items",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"cartId\": \"{{cartId}}\",\n  \"itemId\": \"{{cartItemId}}\",\n  \"quantity\": 2\n}"
                }
              },
              "response": []
            },
            {
              "name": "Mutate Cart - Remove Item",
              "request": {
                "method": "DELETE",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{apiKey}}"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  }
                ],
                "url": "{{baseUrl}}/api/v1/catalog/carts/items",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"cartId\": \"{{cartId}}\",\n  \"itemId\": \"{{cartItemId}}\"\n}"
                }
              },
              "response": []
            },
            {
              "name": "Mutate Cart - Add Bundle",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{apiKey}}"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  }
                ],
                "url": "{{baseUrl}}/api/v1/catalog/carts/items",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"cartId\": \"{{cartId}}\",\n  \"items\": [\n    {\n      \"catalogId\": \"{{catalogId}}\",\n      \"quantity\": 1\n    },\n    {\n      \"catalogId\": \"{{catalogId2}}\",\n      \"quantity\": 2\n    }\n  ]\n}"
                }
              },
              "response": []
            },
            {
              "name": "Archive Cart",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{apiKey}}"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": "{{baseUrl}}/api/v1/catalog/carts/archive?cartId={{cartId}}"
              },
              "response": []
            },
            {
              "name": "List Archived Carts",
              "request": {
                "method": "GET",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{apiKey}}"
                  }
                ],
                "url": "{{baseUrl}}/api/v1/catalog/carts?storeId={{storeId}}&status=archived"
              },
              "response": []
            }
          ],
          "description": "Cart requests. Create cart requires storeId and at least one item with catalogId and quantity. Use 10 digit catalogId, not productId."
        },
        {
          "name": "Orders",
          "item": [
            {
              "name": "List Orders",
              "description": "GET /api/v1/catalog/orders\n\nRequired: API key.\nOptional query: storeId, q. q searches orderId, checkoutId, and paymentId.",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/v1/catalog/orders?storeId={{storeId}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "catalog",
                    "orders"
                  ],
                  "query": [
                    {
                      "key": "storeId",
                      "value": "{{storeId}}"
                    }
                  ]
                }
              }
            },
            {
              "name": "Complete Order",
              "description": "POST order completion request.\n\nRequired body: checkoutId, customer, shippingAddress.\nOptional body: payment.id/provider/status, billingAddress, metadata, otherDetails.\nPreserves a supplied payment reference or generates one internally, creates orderId, and deducts inventory. Saves orderId when successful.",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"checkoutId\": \"{{checkoutId}}\",\n  \"payment\": {\n    \"id\": \"{{paymentId}}\",\n    \"status\": \"paid\",\n    \"provider\": \"manual\"\n  },\n  \"customer\": {\n    \"name\": \"Example User\",\n    \"email\": \"user@example.com\",\n    \"phone\": \"+15551112233\"\n  },\n  \"shippingAddress\": {\n    \"line1\": \"Example Street 1\",\n    \"city\": \"Example City\",\n    \"country\": \"US\",\n    \"postalCode\": \"10001\"\n  },\n  \"billingAddress\": {\n    \"line1\": \"Example Street 1\",\n    \"city\": \"Example City\",\n    \"country\": \"US\",\n    \"postalCode\": \"10001\"\n  },\n  \"otherDetails\": {\n    \"deliveryNote\": \"Leave with reception\"\n  }\n}"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/catalog/orders",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "catalog",
                    "orders"
                  ]
                }
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('Order completed', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201]); });",
                      "const body = pm.response.json();",
                      "if (body.data) {",
                      "  if (body.data.id) pm.collectionVariables.set('orderInternalId', body.data.id);",
                      "  if (body.data.orderId) pm.collectionVariables.set('orderId', body.data.orderId);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Get Order",
              "description": "GET /api/v1/catalog/orders/{{orderId}}\n\nRequired: API key and orderId path variable.\nPath may be Thyris order UUID, public orderId, or checkoutId.",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/v1/catalog/orders/{{orderId}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "catalog",
                    "orders",
                    "{{orderId}}"
                  ]
                }
              }
            },
            {
              "name": "Update Order",
              "description": "PATCH /api/v1/catalog/orders/{{orderId}}\n\nRequired: API key and orderId path variable.\nOptional body: status, customer, shippingAddress, billingAddress, paymentDetails, metadata, otherDetails.\nstatus can be completed or cancelled.",
              "request": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"cancelled\",\n  \"paymentDetails\": {\n    \"status\": \"refunded\",\n    \"provider\": \"manual\"\n  }\n}"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/catalog/orders/{{orderId}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "catalog",
                    "orders",
                    "{{orderId}}"
                  ]
                }
              }
            }
          ],
          "description": "Order requests. Complete order requires checkoutId, customer, and shippingAddress."
        },
        {
          "name": "Post-purchase",
          "description": "Refund and shipment REST contracts. Use disposable completed orders.",
          "item": [
            {
              "name": "Create Refund",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{apiKey}}",
                    "type": "text"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json",
                    "type": "text"
                  },
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "type": "text"
                  }
                ],
                "url": "{{baseUrl}}/api/v1/catalog/refunds",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"orderId\": \"{{orderId}}\",\n  \"amount\": \"49.90\",\n  \"currency\": \"AZN\",\n  \"reason\": \"customer_return\",\n  \"metadata\": {\n    \"source\": \"postman\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Creates a requested partial refund. Omit amount to use the remaining refundable amount."
              },
              "response": [],
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('Refund created', () => pm.expect(pm.response.code).to.eql(201));",
                      "const b=pm.response.json(); if(b.data?.refundId) pm.collectionVariables.set('refundId', b.data.refundId);"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Get Refund",
              "request": {
                "method": "GET",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{apiKey}}",
                    "type": "text"
                  }
                ],
                "url": "{{baseUrl}}/api/v1/catalog/refunds?refundId={{refundId}}",
                "description": "Reads a refund by internal UUID or public refundId."
              },
              "response": []
            },
            {
              "name": "Update Refund",
              "request": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{apiKey}}",
                    "type": "text"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json",
                    "type": "text"
                  },
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "type": "text"
                  }
                ],
                "url": "{{baseUrl}}/api/v1/catalog/refunds",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"refundId\": \"{{refundId}}\",\n  \"status\": \"processing\",\n  \"provider\": \"postman-payment\",\n  \"providerRefundId\": \"provider-refund-postman\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Applies a valid refund lifecycle transition."
              },
              "response": []
            },
            {
              "name": "Create Shipment",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{apiKey}}",
                    "type": "text"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json",
                    "type": "text"
                  },
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "type": "text"
                  }
                ],
                "url": "{{baseUrl}}/api/v1/catalog/shipments",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"orderId\": \"{{orderId}}\",\n  \"status\": \"pending\",\n  \"carrier\": \"Postman Cargo\",\n  \"metadata\": {\n    \"source\": \"postman\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Creates an order shipment record."
              },
              "response": [],
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('Shipment created', () => pm.expect(pm.response.code).to.eql(201));",
                      "const b=pm.response.json(); if(b.data?.shipmentId) pm.collectionVariables.set('shipmentId', b.data.shipmentId);"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Get Shipment",
              "request": {
                "method": "GET",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{apiKey}}",
                    "type": "text"
                  }
                ],
                "url": "{{baseUrl}}/api/v1/catalog/shipments?shipmentId={{shipmentId}}",
                "description": "Reads by internal UUID, public shipmentId, or tracking number."
              },
              "response": []
            },
            {
              "name": "Update Shipment",
              "request": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{apiKey}}",
                    "type": "text"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json",
                    "type": "text"
                  },
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}",
                    "type": "text"
                  }
                ],
                "url": "{{baseUrl}}/api/v1/catalog/shipments",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"shipmentId\": \"{{shipmentId}}\",\n  \"status\": \"shipped\",\n  \"carrier\": \"Postman Cargo\",\n  \"trackingNumber\": \"{{trackingNumber}}\",\n  \"trackingUrl\": \"https://cargo.example/track/{{trackingNumber}}\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Moves a shipment to shipped; trackingNumber is required."
              },
              "response": []
            }
          ]
        }
      ]
    },
    {
      "name": "02 Catalog Webhooks",
      "description": "Inbound webhook sync into Thyris and outbound receiver sample payloads. Inbound requests require API key. Receiver examples are no-auth samples sent to your own URL.",
      "item": [
        {
          "name": "Inbound Webhook",
          "item": [
            {
              "name": "Upsert Product",
              "description": "POST /webhooks/catalog\n\nRequired body: event, product.storeId, product.name, product.price.\nRecommended: product.sku or product.externalId for idempotency.\nOptional product fields match the product API payload.",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"product.upserted\",\n  \"source\": \"postman\",\n  \"product\": {\n    \"storeId\": \"{{storeId}}\",\n    \"sku\": \"{{sku}}\",\n    \"externalId\": \"{{externalId}}\",\n    \"name\": \"Webhook Test Hoodie\",\n    \"description\": \"Synced through inbound catalog webhook.\",\n    \"price\": 39.9,\n    \"currency\": \"USD\",\n    \"status\": \"active\",\n    \"inStock\": true,\n    \"inventoryQuantity\": 15,\n    \"imageUrl\": \"https://example.com/images/webhook-hoodie.png\",\n    \"imageUrls\": [\"https://example.com/images/webhook-hoodie.png\", \"https://example.com/images/webhook-hoodie-back.png\"],\n    \"productUrl\": \"https://store.example.com/products/webhook-hoodie\",\n    \"otherDetails\": {\n      \"brand\": \"Example Brand\",\n      \"category\": \"Apparel\"\n    }\n  }\n}"
                },
                "url": {
                  "raw": "{{webhookBaseUrl}}/webhooks/catalog",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "webhooks",
                    "catalog"
                  ]
                }
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('Webhook processed', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201]); });",
                      "const body = pm.response.json();",
                      "const data = body.data || (body.results && body.results[0] && body.results[0].data);",
                      "if (data) {",
                      "  if (data.id) pm.collectionVariables.set('productId', data.id);",
                      "  if (data.catalogId) pm.collectionVariables.set('catalogId', data.catalogId);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Batch Upsert Products",
              "description": "POST /webhooks/catalog\n\nRequired body: event=catalog.batch.upserted, products[].storeId, products[].name, products[].price.\nOptional: source and all optional product fields.\nLimit: 250 products.",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"catalog.batch.upserted\",\n  \"source\": \"postman-batch\",\n  \"products\": [\n    {\n      \"storeId\": \"{{storeId}}\",\n      \"sku\": \"POSTMAN-BATCH-001\",\n      \"externalId\": \"postman_batch_001\",\n      \"name\": \"Postman Batch Product 1\",\n      \"price\": 19.9,\n      \"currency\": \"USD\",\n      \"status\": \"active\",\n      \"inStock\": true,\n      \"inventoryQuantity\": 10\n    },\n    {\n      \"storeId\": \"{{storeId}}\",\n      \"sku\": \"POSTMAN-BATCH-002\",\n      \"externalId\": \"postman_batch_002\",\n      \"name\": \"Postman Batch Product 2\",\n      \"price\": 29.9,\n      \"currency\": \"USD\",\n      \"status\": \"active\",\n      \"inStock\": true,\n      \"inventoryQuantity\": 8\n    }\n  ]\n}"
                },
                "url": {
                  "raw": "{{webhookBaseUrl}}/webhooks/catalog",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "webhooks",
                    "catalog"
                  ]
                }
              }
            },
            {
              "name": "Delete Product by SKU or External ID",
              "description": "POST /webhooks/catalog\n\nRequired body: event, product.storeId, and product.sku or product.externalId.\nOptional: source.\nMissing products are ignored.",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"product.deleted\",\n  \"source\": \"postman\",\n  \"product\": {\n    \"storeId\": \"{{storeId}}\",\n    \"sku\": \"{{sku}}\",\n    \"externalId\": \"{{externalId}}\"\n  }\n}"
                },
                "url": {
                  "raw": "{{webhookBaseUrl}}/webhooks/catalog",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "webhooks",
                    "catalog"
                  ]
                }
              }
            },
            {
              "name": "Refund - Requested",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{apiKey}}",
                    "type": "text"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json",
                    "type": "text"
                  },
                  {
                    "key": "X-Webhook-Event-ID",
                    "value": "refund-requested-{{$guid}}",
                    "type": "text"
                  }
                ],
                "url": "{{webhookBaseUrl}}/webhooks/catalog",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"refund.requested\",\n  \"direction\": \"inbound\",\n  \"source\": \"postman\",\n  \"refund\": {\n    \"orderId\": \"{{orderId}}\",\n    \"amount\": \"49.90\",\n    \"currency\": \"AZN\",\n    \"reason\": \"customer_return\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Creates a requested refund. X-Webhook-Event-ID is the idempotency key."
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('Refund webhook accepted', () => pm.expect(pm.response.code).to.be.oneOf([200,201]));",
                      "const b=pm.response.json(); const d=b.results?.[0]?.data; if(d?.refundId) pm.collectionVariables.set('refundId',d.refundId);"
                    ]
                  }
                }
              ],
              "response": []
            },
            {
              "name": "Refund - Succeeded",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{apiKey}}",
                    "type": "text"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json",
                    "type": "text"
                  },
                  {
                    "key": "X-Webhook-Event-ID",
                    "value": "refund-succeeded-{{$guid}}",
                    "type": "text"
                  }
                ],
                "url": "{{webhookBaseUrl}}/webhooks/catalog",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"refund.succeeded\",\n  \"direction\": \"inbound\",\n  \"source\": \"postman\",\n  \"refund\": {\n    \"refundId\": \"{{refundId}}\",\n    \"provider\": \"postman-payment\",\n    \"providerRefundId\": \"provider-refund-postman\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Marks an existing refund succeeded when the transition is valid."
              },
              "response": []
            },
            {
              "name": "Shipment - Created",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{apiKey}}",
                    "type": "text"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json",
                    "type": "text"
                  },
                  {
                    "key": "X-Webhook-Event-ID",
                    "value": "shipment-created-{{$guid}}",
                    "type": "text"
                  }
                ],
                "url": "{{webhookBaseUrl}}/webhooks/catalog",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"shipment.created\",\n  \"direction\": \"inbound\",\n  \"source\": \"postman\",\n  \"shipment\": {\n    \"orderId\": \"{{orderId}}\",\n    \"carrier\": \"Postman Cargo\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Creates a shipment."
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('Shipment webhook accepted', () => pm.expect(pm.response.code).to.be.oneOf([200,201]));",
                      "const b=pm.response.json(); const d=b.results?.[0]?.data; if(d?.shipmentId) pm.collectionVariables.set('shipmentId',d.shipmentId);"
                    ]
                  }
                }
              ],
              "response": []
            },
            {
              "name": "Shipment - Shipped",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{apiKey}}",
                    "type": "text"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json",
                    "type": "text"
                  },
                  {
                    "key": "X-Webhook-Event-ID",
                    "value": "shipment-shipped-{{$guid}}",
                    "type": "text"
                  }
                ],
                "url": "{{webhookBaseUrl}}/webhooks/catalog",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"shipment.shipped\",\n  \"direction\": \"inbound\",\n  \"source\": \"postman\",\n  \"shipment\": {\n    \"shipmentId\": \"{{shipmentId}}\",\n    \"orderId\": \"{{orderId}}\",\n    \"carrier\": \"Postman Cargo\",\n    \"trackingNumber\": \"{{trackingNumber}}\",\n    \"trackingUrl\": \"https://cargo.example/track/{{trackingNumber}}\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Updates an existing shipment to shipped."
              },
              "response": []
            }
          ],
          "description": "POST /webhooks/catalog. Use this when an external ERP/PIM/ecommerce system pushes product changes into Thyris."
        },
        {
          "name": "Outbound Receiver Examples",
          "description": "These requests simulate payloads Thyris sends to a configured merchant receiver. Set outboundWebhookReceiverUrl to your receiver endpoint. No Thyris API key is required because this sends to your URL.",
          "item": [
            {
              "name": "Sample Product Updated Payload",
              "description": "Sample outbound product event.\n\nRequired receiver behavior: accept POST JSON and return 2xx within 10 seconds.\nOptional validation: x-webhook-secret.",
              "auth": {
                "type": "noauth"
              },
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "x-webhook-secret",
                    "value": "{{webhookSecret}}"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"product.updated\",\n  \"direction\": \"outbound\",\n  \"source\": \"api\",\n  \"product\": {\n    \"storeId\": \"{{storeId}}\",\n    \"sku\": \"{{sku}}\",\n    \"externalId\": \"{{externalId}}\",\n    \"name\": \"Postman Test Hoodie\",\n    \"price\": 44.9,\n    \"currency\": \"USD\",\n    \"status\": \"active\",\n    \"inStock\": true,\n    \"inventoryQuantity\": 24\n  }\n}"
                },
                "url": {
                  "raw": "{{outboundWebhookReceiverUrl}}",
                  "host": [
                    "{{outboundWebhookReceiverUrl}}"
                  ]
                }
              }
            },
            {
              "name": "Sample Order Completed Payload",
              "description": "Sample outbound order.completed event.\n\nRequired receiver behavior: accept POST JSON and return 2xx within 10 seconds.\nOptional validation: x-webhook-secret.",
              "auth": {
                "type": "noauth"
              },
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "x-webhook-secret",
                    "value": "{{webhookSecret}}"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"order.completed\",\n  \"direction\": \"outbound\",\n  \"source\": \"api\",\n  \"order\": {\n    \"id\": \"ORDER_UUID\",\n    \"orderId\": \"{{orderId}}\",\n    \"checkoutId\": \"{{checkoutId}}\",\n    \"paymentId\": \"pay_1234567890abcdef12345678\",\n    \"status\": \"completed\",\n    \"totalQuantity\": 2,\n    \"totalAmount\": \"99.80\",\n    \"currency\": \"USD\",\n    \"items\": []\n  }\n}"
                },
                "url": {
                  "raw": "{{outboundWebhookReceiverUrl}}",
                  "host": [
                    "{{outboundWebhookReceiverUrl}}"
                  ]
                }
              }
            },
            {
              "name": "Sample Refund Succeeded Payload",
              "request": {
                "auth": {
                  "type": "noauth"
                },
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json",
                    "type": "text"
                  },
                  {
                    "key": "x-webhook-secret",
                    "value": "{{webhookSecret}}",
                    "type": "text"
                  }
                ],
                "url": "{{outboundWebhookReceiverUrl}}",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"refund.succeeded\",\n  \"direction\": \"outbound\",\n  \"source\": \"api\",\n  \"refund\": {\n    \"refundId\": \"{{refundId}}\",\n    \"orderId\": \"{{orderId}}\",\n    \"status\": \"succeeded\",\n    \"amount\": \"49.90\",\n    \"currency\": \"AZN\",\n    \"reason\": \"customer_return\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Receiver simulation. Real delivery uses the configured HMAC signature headers."
              },
              "response": []
            },
            {
              "name": "Sample Shipment Shipped Payload",
              "request": {
                "auth": {
                  "type": "noauth"
                },
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json",
                    "type": "text"
                  },
                  {
                    "key": "x-webhook-secret",
                    "value": "{{webhookSecret}}",
                    "type": "text"
                  }
                ],
                "url": "{{outboundWebhookReceiverUrl}}",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"shipment.shipped\",\n  \"direction\": \"outbound\",\n  \"source\": \"api\",\n  \"shipment\": {\n    \"shipmentId\": \"{{shipmentId}}\",\n    \"orderId\": \"{{orderId}}\",\n    \"status\": \"shipped\",\n    \"carrier\": \"Postman Cargo\",\n    \"trackingNumber\": \"{{trackingNumber}}\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Receiver simulation. Real delivery uses the configured HMAC signature headers."
              },
              "response": []
            }
          ]
        }
      ]
    },
    {
      "name": "03 REST Procurement API",
      "item": [
        {
          "name": "Stores",
          "item": [
            {
              "name": "List Procurement Stores",
              "request": {
                "method": "GET",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": "{{baseUrl}}/api/v1/procurement/stores"
              }
            }
          ]
        },
        {
          "name": "Suppliers",
          "item": [
            {
              "name": "List Suppliers",
              "request": {
                "method": "GET",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": "{{baseUrl}}/api/v1/procurement/suppliers?storeId={{storeId}}&limit=10"
              }
            },
            {
              "name": "Create Supplier",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": "{{baseUrl}}/api/v1/procurement/suppliers",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"storeId\": \"{{storeId}}\",\n  \"name\": \"Postman Supplier\",\n  \"domain\": \"supplier.example.com\",\n  \"logoUrl\": \"https://supplier.example.com/logo.png\",\n  \"websiteUrl\": \"https://supplier.example.com\",\n  \"externalId\": \"{{supplierExternalId}}\",\n  \"channel\": \"api\",\n  \"status\": \"connected\",\n  \"reliabilityScore\": 92,\n  \"leadTimeDays\": 7,\n  \"capabilities\": [\n    \"inventory_feed\",\n    \"quote_api\",\n    \"purchase_order_api\"\n  ],\n  \"contact\": {\n    \"email\": \"ops@supplier.example.com\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const json = pm.response.json();",
                      "if (json.data && json.data.id) pm.collectionVariables.set('supplierId', json.data && json.data.id);",
                      "if (json.data && json.data.supplier && json.data.supplier.id) pm.collectionVariables.set('supplierId', json.data && json.data.supplier && json.data.supplier.id);"
                    ]
                  }
                }
              ]
            }
          ]
        },
        {
          "name": "Inventory",
          "item": [
            {
              "name": "List Inventory",
              "request": {
                "method": "GET",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": "{{baseUrl}}/api/v1/procurement/inventory?storeId={{storeId}}&q={{procurementSku}}&limit=10"
              }
            },
            {
              "name": "Create Inventory Item",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": "{{baseUrl}}/api/v1/procurement/inventory",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"storeId\": \"{{storeId}}\",\n  \"preferredSupplierId\": \"{{supplierId}}\",\n  \"sku\": \"{{procurementSku}}\",\n  \"externalId\": \"postman_procurement_item_001\",\n  \"name\": \"Postman Shipping Box\",\n  \"description\": \"Procurement inventory input created from Postman.\",\n  \"imageUrl\": \"https://cdn.example.com/procurement/box.png\",\n  \"imageUrls\": [\"https://cdn.example.com/procurement/box.png\", \"https://cdn.example.com/procurement/box-side.png\"],\n  \"itemUrl\": \"https://supplier.example.com/items/box\",\n  \"category\": \"Packaging\",\n  \"targetProduct\": \"Apparel fulfillment\",\n  \"status\": \"healthy\",\n  \"quantityOnHand\": 1200,\n  \"reorderPoint\": 250,\n  \"leadTimeDays\": 5,\n  \"unitCost\": 0.42,\n  \"currency\": \"USD\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const json = pm.response.json();",
                      "if (json.data && json.data.id) pm.collectionVariables.set('inventoryItemId', json.data && json.data.id);",
                      "if (json.data && json.data.item && json.data.item.id) pm.collectionVariables.set('inventoryItemId', json.data && json.data.item && json.data.item.id);"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Update Inventory Quantity",
              "request": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": "{{baseUrl}}/api/v1/procurement/inventory/{{inventoryItemId}}",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"quantityOnHand\": 900,\n  \"status\": \"healthy\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Orders",
          "item": [
            {
              "name": "List Procurement Orders",
              "request": {
                "method": "GET",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": "{{baseUrl}}/api/v1/procurement/orders?storeId={{storeId}}&limit=10"
              }
            },
            {
              "name": "Create Procurement Order",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": "{{baseUrl}}/api/v1/procurement/orders",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"storeId\": \"{{storeId}}\",\n  \"supplierId\": \"{{supplierId}}\",\n  \"status\": \"requested\",\n  \"source\": \"api\",\n  \"reason\": \"Postman reorder request. Procurement-engine will email the supplier.\",\n  \"approvalRequired\": false,\n  \"currency\": \"USD\",\n  \"items\": [\n    {\n      \"inventoryItemId\": \"{{inventoryItemId}}\",\n      \"name\": \"Postman Shipping Box\",\n      \"quantity\": 1000,\n      \"unitCost\": 0.42,\n      \"currency\": \"USD\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const json = pm.response.json();",
                      "if (json.data && json.data.id) pm.collectionVariables.set('procurementOrderId', json.data.id);",
                      "if (json.data && json.data.orderId) pm.collectionVariables.set('procurementOrderPublicId', json.data.orderId);"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Update Procurement Order Status",
              "request": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": "{{baseUrl}}/api/v1/procurement/orders/{{procurementOrderId}}",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"approved\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Quotes",
          "item": [
            {
              "name": "Create Quote Order (Deprecated - Returns Error)",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": "{{baseUrl}}/api/v1/procurement/quotes",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"storeId\": \"{{storeId}}\",\n  \"supplierId\": \"{{supplierId}}\",\n  \"reason\": \"Deprecated. Supplier quotes are created from supplier email replies.\",\n  \"currency\": \"USD\",\n  \"items\": [\n    {\n      \"inventoryItemId\": \"{{inventoryItemId}}\",\n      \"name\": \"Postman Shipping Box\",\n      \"quantity\": 1000,\n      \"unitCost\": 0.42,\n      \"currency\": \"USD\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('Deprecated quote endpoint rejects manual quote creation', function () {",
                      "  pm.expect(pm.response.code).to.be.oneOf([400, 405]);",
                      "});"
                    ]
                  }
                }
              ]
            }
          ]
        }
      ],
      "description": "Supplier, procurement inventory, quote, and purchase order workflows."
    },
    {
      "name": "04 Procurement Webhooks",
      "item": [
        {
          "name": "Inbound Webhook",
          "item": [
            {
              "name": "Supplier Updated",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "X-Procurement-API-Key",
                    "value": "{{apiKey}}"
                  }
                ],
                "url": "{{webhookBaseUrl}}/webhooks/procurement",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"supplier.updated\",\n  \"source\": \"postman\",\n  \"supplier\": {\n    \"storeId\": \"{{storeId}}\",\n    \"name\": \"Postman Webhook Supplier\",\n    \"domain\": \"webhook-supplier.example.com\",\n    \"externalId\": \"webhook_supplier_001\",\n    \"channel\": \"webhook\",\n    \"status\": \"connected\",\n    \"reliabilityScore\": 88,\n    \"leadTimeDays\": 6,\n    \"capabilities\": [\n      \"webhook_events\"\n    ]\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const json = pm.response.json();",
                      "if (json.results && json.results[0] && json.results[0].data && json.results[0].data.id) pm.collectionVariables.set('supplierId', json.results && json.results[0] && json.results[0].data && json.results[0].data.id);"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Inventory Updated",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "X-Procurement-API-Key",
                    "value": "{{apiKey}}"
                  }
                ],
                "url": "{{webhookBaseUrl}}/webhooks/procurement",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"inventory.updated\",\n  \"source\": \"postman\",\n  \"inventoryItem\": {\n    \"storeId\": \"{{storeId}}\",\n    \"preferredSupplierId\": \"{{supplierId}}\",\n    \"sku\": \"{{procurementSku}}\",\n    \"externalId\": \"webhook_procurement_item_001\",\n    \"name\": \"Webhook Packaging Item\",\n    \"status\": \"low_stock\",\n    \"quantityOnHand\": 180,\n    \"reorderPoint\": 250,\n    \"unitCost\": 0.42,\n    \"currency\": \"USD\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const json = pm.response.json();",
                      "if (json.results && json.results[0] && json.results[0].data && json.results[0].data.id) pm.collectionVariables.set('inventoryItemId', json.results && json.results[0] && json.results[0].data && json.results[0].data.id);"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Order Requested",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "X-Procurement-API-Key",
                    "value": "{{apiKey}}"
                  }
                ],
                "url": "{{webhookBaseUrl}}/webhooks/procurement",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"procurement.order.requested\",\n  \"source\": \"postman\",\n  \"order\": {\n    \"storeId\": \"{{storeId}}\",\n    \"supplierId\": \"{{supplierId}}\",\n    \"status\": \"requested\",\n    \"reason\": \"Webhook order request. Procurement-engine will email the supplier.\",\n    \"currency\": \"USD\",\n    \"items\": [\n      {\n        \"inventoryItemId\": \"{{inventoryItemId}}\",\n        \"name\": \"Webhook Packaging Item\",\n        \"quantity\": 1000,\n        \"unitCost\": 0.42,\n        \"currency\": \"USD\"\n      }\n    ]\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const json = pm.response.json();",
                      "const first = json.results && json.results[0] && json.results[0].data;",
                      "if (first && first.id) pm.collectionVariables.set('procurementOrderId', first.id);",
                      "if (first && first.orderId) pm.collectionVariables.set('procurementOrderPublicId', first.orderId);"
                    ]
                  }
                }
              ]
            }
          ]
        },
        {
          "name": "Outbound Receiver Examples",
          "item": [
            {
              "name": "Sample Procurement Order Sent Payload",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "x-webhook-secret",
                    "value": "{{webhookSecret}}"
                  }
                ],
                "url": "{{outboundWebhookReceiverUrl}}",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"procurement.order.sent\",\n  \"direction\": \"outbound\",\n  \"source\": \"dashboard\",\n  \"order\": {\n    \"id\": \"{{procurementOrderId}}\",\n    \"orderId\": \"{{procurementOrderPublicId}}\",\n    \"storeId\": \"{{storeId}}\",\n    \"supplierId\": \"{{supplierId}}\",\n    \"status\": \"sent\",\n    \"totalQuantity\": 1000,\n    \"totalAmount\": \"420.00\",\n    \"currency\": \"USD\",\n    \"items\": [\n      {\n        \"name\": \"Postman Shipping Box\",\n        \"quantity\": 1000\n      }\n    ]\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Sample Inventory Reorder Payload",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "x-webhook-secret",
                    "value": "{{webhookSecret}}"
                  }
                ],
                "url": "{{outboundWebhookReceiverUrl}}",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event\": \"inventory.outbound.reorder.requested\",\n  \"direction\": \"outbound\",\n  \"source\": \"dashboard\",\n  \"inventoryItem\": {\n    \"id\": \"{{inventoryItemId}}\",\n    \"storeId\": \"{{storeId}}\",\n    \"sku\": \"{{procurementSku}}\",\n    \"name\": \"Postman Shipping Box\",\n    \"quantityOnHand\": 180,\n    \"reorderPoint\": 250\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        }
      ]
    },
    {
      "name": "05 UCP Catalog API",
      "description": "UCP-compatible catalog endpoints. They use the same authentication, scope, required fields, and optional fields as the REST Catalog API.",
      "item": [
        {
          "name": "UCP Products",
          "item": [
            {
              "name": "UCP List Products",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/protocols/ucp/catalog/products?storeId={{storeId}}&q={{searchQuery}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "protocols",
                    "ucp",
                    "catalog",
                    "products"
                  ],
                  "query": [
                    {
                      "key": "storeId",
                      "value": "{{storeId}}"
                    },
                    {
                      "key": "q",
                      "value": "{{searchQuery}}"
                    }
                  ]
                }
              },
              "description": "GET /api/protocols/ucp/catalog/products\n\nRequired: API key.\nOptional query: storeId, q.\nSame field and scope behavior as REST List Products."
            },
            {
              "name": "UCP Upsert Product",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"storeId\": \"{{storeId}}\",\n  \"sku\": \"UCP-{{sku}}\",\n  \"externalId\": \"ucp_{{externalId}}\",\n  \"name\": \"UCP Postman Product\",\n  \"price\": 59.9,\n  \"currency\": \"USD\",\n  \"status\": \"active\",\n  \"inStock\": true,\n  \"inventoryQuantity\": 7\n}"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/protocols/ucp/catalog/products",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "protocols",
                    "ucp",
                    "catalog",
                    "products"
                  ]
                }
              },
              "description": "POST /api/protocols/ucp/catalog/products\n\nRequired body: storeId, name, price.\nOptional body: sku, externalId, description, currency, status, inStock, inventoryQuantity, imageUrl, imageUrls, productUrl, metadata, otherDetails, variants.\nSame behavior as REST product upsert."
            },
            {
              "name": "UCP Get Product",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/protocols/ucp/catalog/products/{{productId}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "protocols",
                    "ucp",
                    "catalog",
                    "products",
                    "{{productId}}"
                  ]
                }
              },
              "description": "GET /api/protocols/ucp/catalog/products/{{productId}}\n\nRequired: API key and productId path variable.\nOptional: none."
            },
            {
              "name": "UCP Delete Product",
              "description": "DELETE /api/protocols/ucp/catalog/products/{{productId}}\n\nRequired: API key and productId path variable.\nOptional: none.\nDestructive: run intentionally.",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/protocols/ucp/catalog/products/{{productId}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "protocols",
                    "ucp",
                    "catalog",
                    "products",
                    "{{productId}}"
                  ]
                }
              }
            }
          ],
          "description": "UCP product routes mirror REST product routes."
        },
        {
          "name": "UCP Carts and Orders",
          "item": [
            {
              "name": "UCP Create Cart",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"storeId\": \"{{storeId}}\",\n  \"items\": [\n    {\n      \"catalogId\": \"{{catalogId}}\",\n      \"quantity\": 1\n    }\n  ],\n  \"otherDetails\": {\n    \"channel\": \"ucp-postman\"\n  }\n}"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/protocols/ucp/catalog/carts",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "protocols",
                    "ucp",
                    "catalog",
                    "carts"
                  ]
                }
              },
              "description": "POST /api/protocols/ucp/catalog/carts\n\nRequired body: storeId, items, item.catalogId, item.quantity.\nOptional body: metadata, otherDetails, item metadata/otherDetails.\nSame behavior as REST Create Cart."
            },
            {
              "name": "UCP Complete Order",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"checkoutId\": \"{{checkoutId}}\",\n  \"payment\": {\n    \"id\": \"{{paymentId}}\",\n    \"status\": \"paid\",\n    \"provider\": \"manual\"\n  },\n  \"customer\": {\n    \"name\": \"UCP Customer\",\n    \"email\": \"ucp@example.com\"\n  },\n  \"shippingAddress\": {\n    \"line1\": \"Example Street 1\",\n    \"city\": \"Example City\",\n    \"country\": \"US\",\n    \"postalCode\": \"10001\"\n  }\n}"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/protocols/ucp/catalog/orders",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "protocols",
                    "ucp",
                    "catalog",
                    "orders"
                  ]
                }
              },
              "description": "POST /api/protocols/ucp/catalog/orders\n\nRequired body: checkoutId, customer, shippingAddress.\nOptional body: payment.id/provider/status, billingAddress, metadata, otherDetails.\nSame behavior as REST Complete Order."
            }
          ],
          "description": "UCP cart/order routes mirror REST cart/order routes."
        }
      ]
    },
    {
      "name": "06 UCP Procurement API",
      "item": [
        {
          "name": "UCP Suppliers",
          "item": [
            {
              "name": "UCP List Suppliers",
              "request": {
                "method": "GET",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": "{{baseUrl}}/api/protocols/ucp/procurement/suppliers?storeId={{storeId}}"
              }
            },
            {
              "name": "UCP Create Supplier",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": "{{baseUrl}}/api/protocols/ucp/procurement/suppliers",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"storeId\": \"{{storeId}}\",\n  \"name\": \"UCP Postman Supplier\",\n  \"channel\": \"google_ucp\",\n  \"status\": \"connected\",\n  \"capabilities\": [\n    \"inventory_feed\",\n    \"quote_api\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "UCP Inventory",
          "item": [
            {
              "name": "UCP List Inventory",
              "request": {
                "method": "GET",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": "{{baseUrl}}/api/protocols/ucp/procurement/inventory?storeId={{storeId}}&q={{procurementSku}}"
              }
            },
            {
              "name": "UCP Create Inventory Item",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": "{{baseUrl}}/api/protocols/ucp/procurement/inventory",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"storeId\": \"{{storeId}}\",\n  \"sku\": \"UCP-{{procurementSku}}\",\n  \"name\": \"UCP Postman Packaging Item\",\n  \"status\": \"healthy\",\n  \"quantityOnHand\": 500,\n  \"reorderPoint\": 100,\n  \"unitCost\": 0.35,\n  \"currency\": \"USD\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "UCP Orders and Quotes",
          "item": [
            {
              "name": "UCP Create Order",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": "{{baseUrl}}/api/protocols/ucp/procurement/orders",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"storeId\": \"{{storeId}}\",\n  \"supplierId\": \"{{supplierId}}\",\n  \"status\": \"requested\",\n  \"source\": \"ucp\",\n  \"reason\": \"UCP procurement order request demo. Procurement-engine will email the supplier.\",\n  \"items\": [\n    {\n      \"name\": \"UCP Postman Packaging Item\",\n      \"quantity\": 400,\n      \"unitCost\": 0.35,\n      \"currency\": \"USD\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "UCP Create Quote Order (Deprecated)",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": "{{baseUrl}}/api/protocols/ucp/procurement/quotes",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"storeId\": \"{{storeId}}\",\n  \"supplierId\": \"{{supplierId}}\",\n  \"reason\": \"Deprecated. Supplier quotes are created from supplier email replies.\",\n  \"items\": [\n    {\n      \"name\": \"UCP Postman Packaging Item\",\n      \"quantity\": 400,\n      \"unitCost\": 0.35,\n      \"currency\": \"USD\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        }
      ]
    },
    {
      "name": "07 Merchant MCP",
      "description": "Remote MCP JSON-RPC endpoint. Catalog tools require API key auth. Use this folder for managed model, agent client, or custom MCP client debugging.",
      "item": [
        {
          "name": "Health Check",
          "description": "GET /mcp/health\n\nRequired: none.\nOptional: none.",
          "auth": {
            "type": "noauth"
          },
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/mcp/health",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "mcp",
                "health"
              ]
            }
          }
        },
        {
          "name": "Initialize",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"initialize\",\n  \"params\": {\n    \"protocolVersion\": \"2025-11-25\",\n    \"clientInfo\": {\n      \"name\": \"postman\",\n      \"version\": \"1.0.0\"\n    }\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/mcp",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "mcp"
              ]
            }
          },
          "description": "POST /mcp JSON-RPC initialize\n\nRequired body: jsonrpc, id, method=initialize, params.protocolVersion, params.clientInfo.name, params.clientInfo.version."
        },
        {
          "name": "List Tools",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 2,\n  \"method\": \"tools/list\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/mcp",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "mcp"
              ]
            }
          },
          "description": "POST /mcp JSON-RPC tools/list\n\nRequired body: jsonrpc, id, method=tools/list.\nRequires API key for authenticated MCP usage."
        },
        {
          "name": "catalog_list_stores",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 3,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"catalog_list_stores\",\n    \"arguments\": {}\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/mcp",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "mcp"
              ]
            }
          },
          "description": "MCP tools/call catalog_list_stores\n\nRequired wrapper: jsonrpc, id, method=tools/call, params.name, params.arguments.\nRequired arguments: none."
        },
        {
          "name": "catalog_search_products",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 4,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"catalog_search_products\",\n    \"arguments\": {\n      \"query\": \"{{searchQuery}}\",\n      \"storeId\": \"{{storeId}}\",\n      \"limit\": 5,\n      \"includeDraft\": false\n    }\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/mcp",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "mcp"
              ]
            }
          },
          "description": "MCP tools/call catalog_search_products\n\nRequired arguments: none.\nOptional arguments: query, storeId, limit, includeDraft."
        },
        {
          "name": "catalog_get_product_by_sku",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 5,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"catalog_get_product\",\n    \"arguments\": {\n      \"sku\": \"{{sku}}\",\n      \"storeId\": \"{{storeId}}\"\n    }\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/mcp",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "mcp"
              ]
            }
          },
          "description": "MCP tools/call catalog_get_product\n\nRequired arguments: one of productId, sku, or externalId.\nOptional: storeId when using sku or externalId."
        },
        {
          "name": "catalog_upsert_product",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 6,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"catalog_upsert_product\",\n    \"arguments\": {\n      \"storeId\": \"{{storeId}}\",\n      \"sku\": \"MCP-{{sku}}\",\n      \"externalId\": \"mcp_{{externalId}}\",\n      \"name\": \"MCP Postman Product\",\n      \"description\": \"Created through Merchant MCP in Postman.\",\n      \"price\": 49.9,\n      \"currency\": \"USD\",\n      \"status\": \"active\",\n      \"inStock\": true,\n      \"inventoryQuantity\": 5,\n      \"imageUrls\": [\"https://example.com/images/mcp-product.png\", \"https://example.com/images/mcp-product-back.png\"],\n      \"otherDetails\": {\n        \"brand\": \"Example Brand\",\n        \"category\": \"Apparel\",\n        \"tags\": [\"mcp\", \"postman\"]\n      }\n    }\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/mcp",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "mcp"
              ]
            }
          },
          "description": "MCP tools/call catalog_upsert_product\n\nRequired arguments: storeId, name, price.\nOptional: sku, externalId, description, currency, status, inStock, inventoryQuantity, imageUrl, imageUrls, productUrl, metadata, otherDetails, variants. Catalog MCP writes emit configured outbound webhooks with source=mcp."
        },
        {
          "name": "catalog_create_cart",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 7,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"catalog_create_cart\",\n    \"arguments\": {\n      \"storeId\": \"{{storeId}}\",\n      \"items\": [\n        {\n          \"catalogId\": \"{{catalogId}}\",\n          \"quantity\": 2\n        }\n      ],\n      \"otherDetails\": {\n        \"channel\": \"mcp-postman\"\n      }\n    }\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/mcp",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "mcp"
              ]
            }
          },
          "description": "MCP tools/call catalog_create_cart\n\nRequired arguments: storeId, items, item.catalogId, item.quantity.\nOptional: metadata, otherDetails, item metadata/otherDetails."
        },
        {
          "name": "catalog_complete_order",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 8,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"catalog_complete_order\",\n    \"arguments\": {\n      \"checkoutId\": \"{{checkoutId}}\",\n      \"payment\": {\n        \"id\": \"{{paymentId}}\",\n        \"status\": \"paid\",\n        \"provider\": \"manual\"\n      },\n      \"customer\": {\n        \"name\": \"MCP Customer\",\n        \"email\": \"mcp@example.com\"\n      },\n      \"shippingAddress\": {\n        \"line1\": \"Example Street 1\",\n        \"city\": \"Example City\",\n        \"country\": \"US\",\n        \"postalCode\": \"10001\"\n      }\n    }\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/mcp",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "mcp"
              ]
            }
          },
          "description": "MCP tools/call catalog_complete_order\n\nRequired arguments: checkoutId, customer, shippingAddress.\nOptional: payment.id/provider/status, billingAddress, metadata, otherDetails."
        },
        {
          "name": "procurement_list_inventory",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{baseUrl}}/mcp",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 20,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"procurement_list_inventory\",\n    \"arguments\": {\n      \"storeId\": \"{{storeId}}\",\n      \"query\": \"{{procurementSku}}\",\n      \"limit\": 10\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "procurement_create_supplier",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{baseUrl}}/mcp",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 21,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"procurement_create_supplier\",\n    \"arguments\": {\n      \"storeId\": \"{{storeId}}\",\n      \"name\": \"MCP Postman Supplier\",\n      \"channel\": \"api\",\n      \"status\": \"connected\",\n      \"capabilities\": [\n        \"inventory_feed\",\n        \"quote_api\"\n      ]\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "procurement_create_inventory_item",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{baseUrl}}/mcp",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 22,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"procurement_create_inventory_item\",\n    \"arguments\": {\n      \"storeId\": \"{{storeId}}\",\n      \"preferredSupplierId\": \"{{supplierId}}\",\n      \"sku\": \"MCP-{{procurementSku}}\",\n      \"name\": \"MCP Procurement Item\",\n      \"imageUrls\": [\"https://cdn.example.com/procurement/mcp-box.png\", \"https://cdn.example.com/procurement/mcp-box-side.png\"],\n      \"quantityOnHand\": 500,\n      \"reorderPoint\": 100,\n      \"unitCost\": 0.35,\n      \"currency\": \"USD\"\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "procurement_create_order",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{baseUrl}}/mcp",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 23,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"procurement_create_order\",\n    \"arguments\": {\n      \"storeId\": \"{{storeId}}\",\n      \"supplierId\": \"{{supplierId}}\",\n      \"status\": \"requested\",\n      \"reason\": \"MCP procurement order request demo. Procurement-engine will email the supplier.\",\n      \"items\": [\n        {\n          \"name\": \"MCP Procurement Item\",\n          \"quantity\": 400,\n          \"unitCost\": 0.35,\n          \"currency\": \"USD\"\n        }\n      ]\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "procurement_update_order_status",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{baseUrl}}/mcp",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 24,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"procurement_update_order_status\",\n    \"arguments\": {\n      \"orderId\": \"{{procurementOrderId}}\",\n      \"status\": \"approved\"\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "catalog_get_product_details - no Flow",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 6,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"catalog_get_product_details\",\n    \"arguments\": {\n      \"catalogId\": \"{{catalogId}}\"\n    }\n  }\n}"
            },
            "url": "{{baseUrl}}/mcp"
          },
          "description": "Direct read-only Merchant MCP detail lookup without a Flow. Prefer catalogId from catalog_search. The result includes complete product details, store, and the public merchant profile."
        },
        {
          "name": "catalog_mutate_cart_items - add bundle",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{baseUrl}}/mcp",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": \"{{$guid}}\",\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"catalog_mutate_cart_items\",\n    \"arguments\": {\n      \"operation\": \"add\",\n      \"cartId\": \"{{cartId}}\",\n      \"idempotencyKey\": \"{{$guid}}\",\n      \"items\": [\n        {\n          \"catalogId\": \"{{catalogId}}\",\n          \"quantity\": 1\n        },\n        {\n          \"catalogId\": \"{{catalogId2}}\",\n          \"quantity\": 2\n        }\n      ]\n    }\n  }\n}"
            }
          },
          "response": []
        },
        {
          "name": "catalog_archive_cart",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{baseUrl}}/mcp",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": \"{{$guid}}\",\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"catalog_archive_cart\",\n    \"arguments\": {\n      \"cartId\": \"{{cartId}}\"\n    }\n  }\n}"
            }
          },
          "response": []
        },
        {
          "name": "cart_add_bundle",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{baseUrl}}/mcp",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": \"{{$guid}}\",\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"cart_add_bundle\",\n    \"arguments\": {\n      \"cartId\": \"{{cartId}}\",\n      \"idempotencyKey\": \"{{$guid}}\",\n      \"items\": [\n        {\n          \"catalogId\": \"{{catalogId}}\",\n          \"quantity\": 1\n        },\n        {\n          \"catalogId\": \"{{catalogId2}}\",\n          \"quantity\": 2\n        }\n      ]\n    }\n  }\n}"
            }
          },
          "response": []
        },
        {
          "name": "cart_remove_bundle",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": "{{baseUrl}}/mcp",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": \"{{$guid}}\",\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"cart_remove_bundle\",\n    \"arguments\": {\n      \"cartId\": \"{{cartId}}\",\n      \"idempotencyKey\": \"{{$guid}}\",\n      \"items\": [\n        {\n          \"itemId\": \"{{cartItemId}}\"\n        },\n        {\n          \"catalogId\": \"{{catalogId2}}\"\n        }\n      ]\n    }\n  }\n}"
            }
          },
          "response": []
        },
        {
          "name": "refund_create",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{apiKey}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": "{{baseUrl}}/mcp",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": \"{{$guid}}\",\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"refund_create\",\n    \"arguments\": {\n      \"orderId\": \"{{orderId}}\",\n      \"amount\": \"49.90\",\n      \"currency\": \"AZN\",\n      \"reason\": \"customer_return\",\n      \"idempotencyKey\": \"{{$guid}}\"\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Creates a governed refund request."
          },
          "response": []
        },
        {
          "name": "refund_get",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{apiKey}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": "{{baseUrl}}/mcp",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": \"{{$guid}}\",\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"refund_get\",\n    \"arguments\": {\n      \"refundId\": \"{{refundId}}\"\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Reads one refund or lists by orderId."
          },
          "response": []
        },
        {
          "name": "refund_update",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{apiKey}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": "{{baseUrl}}/mcp",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": \"{{$guid}}\",\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"refund_update\",\n    \"arguments\": {\n      \"refundId\": \"{{refundId}}\",\n      \"status\": \"processing\",\n      \"provider\": \"postman-payment\",\n      \"providerRefundId\": \"provider-refund-postman\",\n      \"idempotencyKey\": \"{{$guid}}\"\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Records payment-owner progress/final status."
          },
          "response": []
        },
        {
          "name": "shipment_create",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{apiKey}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": "{{baseUrl}}/mcp",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": \"{{$guid}}\",\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"shipment_create\",\n    \"arguments\": {\n      \"orderId\": \"{{orderId}}\",\n      \"status\": \"pending\",\n      \"carrier\": \"Postman Cargo\",\n      \"idempotencyKey\": \"{{$guid}}\"\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Creates a shipment/tracking record."
          },
          "response": []
        },
        {
          "name": "shipment_get",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{apiKey}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": "{{baseUrl}}/mcp",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": \"{{$guid}}\",\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"shipment_get\",\n    \"arguments\": {\n      \"shipmentId\": \"{{shipmentId}}\"\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Reads by shipment/tracking reference or lists by orderId."
          },
          "response": []
        },
        {
          "name": "shipment_update",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{apiKey}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": "{{baseUrl}}/mcp",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": \"{{$guid}}\",\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"shipment_update\",\n    \"arguments\": {\n      \"shipmentId\": \"{{shipmentId}}\",\n      \"status\": \"shipped\",\n      \"carrier\": \"Postman Cargo\",\n      \"trackingNumber\": \"{{trackingNumber}}\",\n      \"trackingUrl\": \"https://cargo.example/track/{{trackingNumber}}\",\n      \"idempotencyKey\": \"{{$guid}}\"\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Updates shipment tracking/status."
          },
          "response": []
        }
      ]
    }
  ]
}
