{
  "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."
    }
  ],
  "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": "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"
                  ]
                }
              }
            }
          ],
          "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": "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": []
        }
      ]
    }
  ]
}
