{
  "info": {
    "name": "MallPlus Open Platform",
    "description": "Hand-curated Postman v2.1 collection for the MallPlus Open Platform API. Covers the seller OAuth flow, credentials rotation, and the high-traffic catalog/orders/inventory/fulfillment endpoints. Pre-request script auto-computes the HMAC-SHA256 v3 signature so you only need to set the env vars and click Send.\n\n**Setup:**\n1. Import this collection into Postman.\n2. Open the collection's Variables tab and set:\n   - `baseUrl` — **must match your credential kind**: `https://sandbox.open.mallplus.ph` for test credentials (`mp_*`), `https://open.mallplus.ph` for live credentials (`mp_live_*`). The wrong pairing returns `401 INVALID_CREDENTIALS`.\n   - `clientId` (sandbox or live `mp_*` / `mp_live_*`)\n   - `clientSecret` (paired with clientId — only shown once at app create / rotate)\n3. **Required** for seller-scoped routes (`orders`, `inventory`, `returns`, `fulfillments`, product writes, `sellers/:id`): `accessToken` and `sellerId` from the OAuth flow. Calls without these return 401 SELLER_TOKEN_REQUIRED.\n4. Send any request. The pre-request script signs it with a fresh nonce.\n\n**Responses and webhook identifiers:**\n- `401 SELLER_TOKEN_REQUIRED` — route flagged `x-requires-seller-token` in OpenAPI; supply accessToken + sellerId.\n- `401 HMAC_VERSION_DEPRECATED` — this collection always signs v3 (Version + Nonce + query). After HMAC_V2_GRACE_UNTIL cutover, v2 is rejected.\n- `400 INVALID_JSON` — body parse failed; check JSON shape.\n- `413 PAYLOAD_TOO_LARGE` — body exceeded the 1 MB cap.\n- Webhook `event_id` / `X-MallPlus-Event-Id` is unique per subscriber delivery and stable across that delivery's retries. `X-MallPlus-Delivery-Id` identifies the same delivery row and is also stable across retries. Neither identifier is shared across fan-out to multiple subscriber apps.\n\n**Reference:** see `/docs` in the developer console + `/open/v1/openapi.json` for the full machine-readable spec.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "_postman_id": "mallplus-open-platform"
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://sandbox.open.mallplus.ph",
      "type": "string"
    },
    {
      "key": "clientId",
      "value": "mp_xxx",
      "type": "string"
    },
    {
      "key": "clientSecret",
      "value": "",
      "type": "string"
    },
    {
      "key": "redirectUri",
      "value": "https://yourapp.example.com/callback",
      "type": "string",
      "description": "Must match the registered redirect URL origin and path."
    },
    {
      "key": "accessToken",
      "value": "",
      "type": "string"
    },
    {
      "key": "sellerId",
      "value": "",
      "type": "string"
    },
    {
      "key": "sandboxShopId",
      "value": "SANDBOX_SHOP_ID",
      "type": "string"
    },
    {
      "key": "sandboxShopPassword",
      "value": "SANDBOX_SHOP_PASSWORD",
      "type": "string"
    },
    {
      "key": "orderId",
      "value": "ORDER_ID_FROM_SANDBOX",
      "type": "string"
    },
    {
      "key": "orderItemId",
      "value": "ORDER_ITEM_ID_FROM_SANDBOX",
      "type": "string"
    },
    {
      "key": "resourceId",
      "value": "RESOURCE_ID_FROM_PREVIOUS_RESPONSE",
      "type": "string"
    },
    {
      "key": "pickupAddressId",
      "value": "PICKUP_ADDRESS_ID_FROM_SHOP",
      "type": "string"
    },
    {
      "key": "sellerOtp",
      "value": "111111",
      "type": "string",
      "description": "Sandbox fixed OTP. No SMS is sent on sandbox; replace this value with the delivered OTP in production."
    }
  ],
  "auth": {
    "type": "noauth"
  },
  "event": [
    {
      "listen": "prerequest",
      "script": {
        "type": "text/javascript",
        "exec": [
          "// HMAC-v3 signing pre-request script.",
          "// base = timestamp:clientId:METHOD:path:queryCanonical:sha256(body):nonce",
          "// Shop mode uses the same base string; accessToken + sellerId are headers only.",
          "// Headers: X-MallPlus-Signature-Version: 3 + X-MallPlus-Nonce",
          "const cryptoJs = require('crypto-js')",
          "const ts = Math.floor(Date.now() / 1000).toString()",
          "const url = pm.variables.replaceIn(pm.request.url.toString())",
          "const u = new URL(url)",
          "const path = u.pathname",
          "const method = pm.request.method.toUpperCase()",
          "const body = pm.request.body && pm.request.body.raw ? pm.variables.replaceIn(pm.request.body.raw) : ''",
          "const bodyHash = cryptoJs.SHA256(body).toString(cryptoJs.enc.Hex)",
          "// Canonicalize query (sort keys, encodeURIComponent)",
          "function canonicalizeQuery(search) {",
          "  if (!search || search === '?') return ''",
          "  const raw = search.startsWith('?') ? search.slice(1) : search",
          "  if (!raw) return ''",
          "  const grouped = {}",
          "  raw.split('&').forEach(part => {",
          "    if (!part) return",
          "    const i = part.indexOf('=')",
          "    const rk = i === -1 ? part : part.slice(0, i)",
          "    const rv = i === -1 ? '' : part.slice(i + 1)",
          "    const k = decodeURIComponent(rk.replace(/\\+/g, ' '))",
          "    const v = decodeURIComponent(rv.replace(/\\+/g, ' '))",
          "    ;(grouped[k] = grouped[k] || []).push(v)",
          "  })",
          "  return Object.keys(grouped).sort().flatMap(k => grouped[k].sort().map(v => encodeURIComponent(k) + '=' + encodeURIComponent(v))).join('&')",
          "}",
          "const queryCanonical = canonicalizeQuery(u.search)",
          "const nonce = cryptoJs.lib.WordArray.random(16).toString(cryptoJs.enc.Hex)",
          "const accessToken = pm.variables.get('accessToken') || ''",
          "const sellerId = pm.variables.get('sellerId') || ''",
          "const baseString = `${ts}:${pm.variables.get('clientId')}:${method}:${path}:${queryCanonical}:${bodyHash}:${nonce}`",
          "const sig = cryptoJs.HmacSHA256(baseString, pm.variables.get('clientSecret')).toString(cryptoJs.enc.Hex)",
          "pm.request.headers.upsert({ key: 'X-MallPlus-Partner-Id', value: pm.variables.get('clientId') })",
          "pm.request.headers.upsert({ key: 'X-MallPlus-Timestamp', value: ts })",
          "pm.request.headers.upsert({ key: 'X-MallPlus-Signature-Version', value: '3' })",
          "pm.request.headers.upsert({ key: 'X-MallPlus-Nonce', value: nonce })",
          "pm.request.headers.upsert({ key: 'X-MallPlus-Signature', value: sig })",
          "if (accessToken) pm.request.headers.upsert({ key: 'X-MallPlus-Access-Token', value: accessToken })",
          "if (sellerId) pm.request.headers.upsert({ key: 'X-MallPlus-Seller-Id', value: sellerId })",
          "pm.request.headers.upsert({ key: 'Content-Type', value: 'application/json' })"
        ]
      }
    }
  ],
  "item": [
    {
      "name": "Auth (OAuth)",
      "item": [
        {
          "name": "Authorize (HMAC v3 — follow Location in browser)",
          "request": {
            "method": "GET",
            "protocolProfileBehavior": {
              "followRedirects": false
            },
            "url": {
              "raw": "{{baseUrl}}/open/v1/auth/authorize?client_id={{clientId}}&redirect_uri={{redirectUri}}",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "auth", "authorize"],
              "query": [
                {
                  "key": "client_id",
                  "value": "{{clientId}}"
                },
                {
                  "key": "redirect_uri",
                  "value": "{{redirectUri}}"
                }
              ]
            },
            "description": "Send this server-side HMAC v3 request with automatic redirect following disabled, then redirect the seller's browser to the returned Location. The seller approves on the consent page; on success they're redirected back with `?code=…`."
          }
        },
        {
          "name": "Exchange code for tokens",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/auth/token",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "auth", "token"]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"code\": \"AUTH_CODE_FROM_REDIRECT\",\n  \"client_id\": \"{{clientId}}\",\n  \"seller_id\": \"SELLER_ID_FROM_REDIRECT\"\n}"
            }
          }
        },
        {
          "name": "Refresh access token",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/auth/token/refresh",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "auth", "token", "refresh"]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"refresh_token\": \"YOUR_REFRESH_TOKEN\",\n  \"client_id\": \"{{clientId}}\",\n  \"seller_id\": \"{{sellerId}}\"\n}"
            }
          }
        },
        {
          "name": "List seller authorizations",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/authorizations?status=active",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "authorizations"],
              "query": [
                {
                  "key": "status",
                  "value": "active",
                  "description": "active (default) | revoked | expired | all"
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "1-based page",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "20",
                  "description": "page size",
                  "disabled": true
                }
              ]
            },
            "description": "Sellers who have authorized the calling app: seller_id, seller_name, scopes, status, granted_at, expires_at. HMAC-signed, no seller token. The seller_id values here feed seller-token calls and POST /auth/revoke."
          }
        },
        {
          "name": "Revoke authorization",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/auth/revoke",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "auth", "revoke"]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"client_id\": \"{{clientId}}\",\n  \"seller_id\": \"{{sellerId}}\"\n}"
            }
          },
          "response": [
            {
              "name": "200 Revoke authorization",
              "originalRequest": {
                "method": "POST",
                "url": {
                  "raw": "{{baseUrl}}/open/v1/auth/revoke",
                  "host": ["{{baseUrl}}"],
                  "path": ["open", "v1", "auth", "revoke"]
                }
              },
              "status": "OK",
              "code": 200,
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"revoked\": true\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Credentials",
      "item": [
        {
          "name": "Rotate sandbox secret",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/credentials/rotate-secret",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "credentials", "rotate-secret"]
            }
          }
        },
        {
          "name": "Rotate production secret (live apps only)",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/credentials/rotate-live-secret",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "credentials", "rotate-live-secret"]
            }
          }
        }
      ]
    },
    {
      "name": "Catalog",
      "item": [
        {
          "name": "List products",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/products?page=1&limit=20",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "products"],
              "query": [
                {
                  "key": "page",
                  "value": "1"
                },
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            }
          }
        },
        {
          "name": "Get product",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/products/PRODUCT_ID",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "products", "PRODUCT_ID"]
            }
          }
        },
        {
          "name": "Get product variant prices",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/products/{{productId}}/variant-prices",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "products", "{{productId}}", "variant-prices"]
            },
            "description": "Returns per-variant prices (original_price + sale_price where applicable) in PHP centavos. Requires seller token (X-MallPlus-Access-Token + X-MallPlus-Seller-Id)."
          }
        },
        {
          "name": "Create product",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/products",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "products"]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"title\": \"Example Product\",\n  \"description\": \"A sample product created via the Open API\",\n  \"category\": \"cat_food\",\n  \"images\": [\"https://cdn.example.com/sample.jpg\"],\n  \"variants\": [\n    { \"title\": \"Default\", \"sku\": \"EX-1\", \"price\": 1999, \"stock\": 25 }\n  ]\n}"
            }
          }
        },
        {
          "name": "Update product",
          "request": {
            "method": "PUT",
            "url": {
              "raw": "{{baseUrl}}/open/v1/products/PRODUCT_ID",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "products", "PRODUCT_ID"]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"title\": \"Updated product title\",\n  \"price\": 2499,\n  \"status\": \"published\"\n}"
            }
          }
        },
        {
          "name": "Update variant prices",
          "request": {
            "method": "PUT",
            "url": {
              "raw": "{{baseUrl}}/open/v1/products/{{productId}}/price",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "products", "{{productId}}", "price"]
            },
            "description": "Atomically update prices for one or more variants of a seller-owned product. All variant_id values must belong to the product; a single invalid id rejects the entire batch. Prices must be > 0 (PHP centavos). Requires seller token (X-MallPlus-Access-Token + X-MallPlus-Seller-Id).",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"updates\": [\n    {\n      \"variant_id\": \"VARIANT_ID_1\",\n      \"price\": 19900\n    },\n    {\n      \"variant_id\": \"VARIANT_ID_2\",\n      \"price\": 24900\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "GET /open/v1/attributes",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/attributes",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "attributes"],
              "query": [
                {
                  "key": "page",
                  "value": "1",
                  "description": "Page number",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "20",
                  "description": "Items per page",
                  "disabled": true
                }
              ]
            },
            "description": "List all product attribute definitions. Returns attribute_id, name, and type (ui_component) for each attribute."
          }
        }
      ]
    },
    {
      "name": "Orders",
      "item": [
        {
          "name": "List orders",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/orders?page=1&limit=20",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "orders"],
              "query": [
                {
                  "key": "page",
                  "value": "1"
                },
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            }
          }
        },
        {
          "name": "Get order",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/orders/ORDER_ID",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "orders", "ORDER_ID"]
            }
          }
        },
        {
          "name": "Ship order",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/orders/ORDER_ID/ship",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "orders", "ORDER_ID", "ship"]
            },
            "description": "Unavailable — publication hold for fulfillment item mapping. No executable request body is published until the blocker is resolved."
          }
        },
        {
          "name": "Cancel order",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/orders/ORDER_ID/cancel",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "orders", "ORDER_ID", "cancel"]
            },
            "description": "Limited — publication hold for order cancellation smoke validation. Full-order cancellation only; partial cancellation and reason persistence are unsupported. No executable request body is published until the contract is verified."
          }
        }
      ]
    },
    {
      "name": "Inventory",
      "item": [
        {
          "name": "List inventory",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/inventory?page=1&limit=50",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "inventory"],
              "query": [
                {
                  "key": "page",
                  "value": "1"
                },
                {
                  "key": "limit",
                  "value": "50"
                }
              ]
            }
          }
        },
        {
          "name": "Update inventory",
          "request": {
            "method": "PUT",
            "url": {
              "raw": "{{baseUrl}}/open/v1/inventory/ITEM_ID",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "inventory", "ITEM_ID"]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"quantity\": 42\n}"
            }
          }
        },
        {
          "name": "Bulk update inventory",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/inventory/bulk-update",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "inventory", "bulk-update"]
            },
            "description": "Unavailable — publication hold for inventory stock mutation. No executable request body is published until the blocker is resolved."
          }
        }
      ]
    },
    {
      "name": "Fulfillments",
      "item": [
        {
          "name": "List fulfillments",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/fulfillments?page=1&limit=20",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "fulfillments"],
              "query": [
                {
                  "key": "page",
                  "value": "1"
                },
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            }
          }
        },
        {
          "name": "Create fulfillment",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/fulfillments",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "fulfillments"]
            },
            "description": "Unavailable — publication hold for fulfillment item mapping. No executable request body is published until the blocker is resolved."
          }
        }
      ]
    },
    {
      "name": "Returns",
      "item": [
        {
          "name": "List returns",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/returns?page=1&limit=20",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "returns"],
              "query": [
                {
                  "key": "page",
                  "value": "1"
                },
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            }
          }
        },
        {
          "name": "Create return",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/returns",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "returns"]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              }
            ],
            "description": "Unavailable — publication hold for return creation. No executable request body is published until the blocker is resolved."
          }
        },
        {
          "name": "Approve return",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/returns/RETURN_ID/approve",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "returns", "RETURN_ID", "approve"]
            },
            "body": {
              "mode": "raw",
              "raw": ""
            }
          }
        },
        {
          "name": "Reject return",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/returns/RETURN_ID/reject",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "returns", "RETURN_ID", "reject"]
            },
            "description": "Limited — publication hold for return rejection reason persistence. No executable request body is published until the contract is verified."
          }
        }
      ]
    },
    {
      "name": "Webhooks",
      "item": [
        {
          "name": "List subscriptions",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/webhooks",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "webhooks"]
            }
          }
        },
        {
          "name": "Create subscription",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/webhooks",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "webhooks"]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"eventType\": \"order.created\",\n  \"callbackUrl\": \"https://your-domain.example/mallplus/webhook\"\n}"
            }
          }
        },
        {
          "name": "Delete subscription",
          "request": {
            "method": "DELETE",
            "url": {
              "raw": "{{baseUrl}}/open/v1/webhooks/SUBSCRIPTION_ID",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "webhooks", "SUBSCRIPTION_ID"]
            }
          }
        }
      ]
    },
    {
      "name": "Usage",
      "item": [
        {
          "name": "Get my API call stats (last 90d)",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/usage?from=&to=",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "usage"],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "description": "ISO-8601 datetime, optional"
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "ISO-8601 datetime, optional"
                }
              ]
            },
            "description": "Returns per-endpoint call counts + success rate scoped to the calling app. Window capped at 90 days."
          }
        }
      ]
    },
    {
      "name": "Payouts",
      "description": "Per-order settlement breakdown for the authenticated seller. Settled payouts only — pending / in-flight payouts are not exposed in V1.",
      "item": [
        {
          "name": "List payouts",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/payouts?page=1&limit=50",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "payouts"],
              "query": [
                {
                  "key": "page",
                  "value": "1"
                },
                {
                  "key": "limit",
                  "value": "50"
                },
                {
                  "key": "order_id",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "released_after",
                  "value": "2026-01-01T00:00:00Z",
                  "disabled": true
                },
                {
                  "key": "released_before",
                  "value": "2026-12-31T23:59:59Z",
                  "disabled": true
                }
              ]
            },
            "description": "Returns per-order settlement rows: { id, orderId, grossAmount, commissionAmount, netAmount, releasedAt, status: 'released' }. Money in centavos. Requires orders:read scope + seller token."
          }
        }
      ]
    },
    {
      "name": "Sandbox",
      "description": "Joshua decision Q1 (2026-05-21) — full simulation environment. Use the sandbox host with sandbox credentials; the dedicated sandbox host rejects live credential prefixes with 401 INVALID_CREDENTIALS. Create test sellers + buyers, place buyer-driven orders, mock-pay, mock-deliver. State machine: PENDING → PAID → READY_TO_SHIP → SHIPPED → DELIVERED.",
      "item": [
        {
          "name": "List sandbox sellers",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/sandbox/sellers",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "sandbox", "sellers"]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "url": {
                  "raw": "{{baseUrl}}/open/v1/sandbox/sellers",
                  "host": ["{{baseUrl}}"],
                  "path": ["open", "v1", "sandbox", "sellers"]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": \"sel_seeded_contract\",\n      \"name\": \"Sandbox Seller\",\n      \"email\": \"sandbox-seller@example.com\",\n      \"storeName\": \"Sandbox Default Store\",\n      \"status\": \"active\",\n      \"sandboxId\": \"sandbox_response_contract\",\n      \"oauthIdentifier\": \"sel_seeded_contract\",\n      \"createdAt\": \"2026-08-26T04:00:00.000Z\",\n      \"updatedAt\": \"2026-08-26T04:00:00.000Z\"\n    }\n  ],\n  \"meta\": {\n    \"totalCount\": 1\n  }\n}"
            }
          ]
        },
        {
          "name": "Create sandbox seller",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/sandbox/sellers",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "sandbox", "sellers"]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Test Seller\",\n  \"email\": \"seller@example.com\",\n  \"storeName\": \"Test Store\"\n}"
            }
          },
          "response": [
            {
              "name": "201 Created",
              "originalRequest": {
                "method": "POST",
                "url": {
                  "raw": "{{baseUrl}}/open/v1/sandbox/sellers",
                  "host": ["{{baseUrl}}"],
                  "path": ["open", "v1", "sandbox", "sellers"]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Test Seller\",\n  \"email\": \"seller@example.com\",\n  \"storeName\": \"Test Store\"\n}"
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"sel_test_contract\",\n    \"name\": \"Test Seller\",\n    \"email\": \"seller@example.com\",\n    \"storeName\": \"Test Store\",\n    \"status\": \"active\",\n    \"createdAt\": \"2026-08-26T04:00:00.000Z\",\n    \"updatedAt\": \"2026-08-26T04:00:00.000Z\"\n  }\n}"
            }
          ]
        },
        {
          "name": "List sandbox buyers",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/sandbox/buyers",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "sandbox", "buyers"]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "url": {
                  "raw": "{{baseUrl}}/open/v1/sandbox/buyers",
                  "host": ["{{baseUrl}}"],
                  "path": ["open", "v1", "sandbox", "buyers"]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": \"buy_test_contract\",\n      \"name\": \"Sandbox Buyer\",\n      \"email\": \"sandbox-buyer@example.com\",\n      \"phoneNumber\": \"+639001112233\",\n      \"shippingAddress\": {\n        \"line1\": \"1 Sandbox St\",\n        \"city\": \"Manila\",\n        \"region\": \"NCR\",\n        \"postalCode\": \"1000\",\n        \"country\": \"PH\"\n      },\n      \"createdAt\": \"2026-08-26T04:00:00.000Z\",\n      \"updatedAt\": \"2026-08-26T04:00:00.000Z\"\n    }\n  ],\n  \"meta\": {\n    \"totalCount\": 1\n  }\n}"
            }
          ]
        },
        {
          "name": "Create sandbox buyer",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/sandbox/buyers",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "sandbox", "buyers"]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Test Buyer\",\n  \"email\": \"buyer@example.com\",\n  \"phoneNumber\": \"+639001234567\",\n  \"shippingAddress\": {\n    \"line1\": \"123 Test St\",\n    \"city\": \"Manila\",\n    \"region\": \"NCR\",\n    \"postalCode\": \"1000\",\n    \"country\": \"PH\"\n  }\n}"
            }
          },
          "response": [
            {
              "name": "201 Created",
              "originalRequest": {
                "method": "POST",
                "url": {
                  "raw": "{{baseUrl}}/open/v1/sandbox/buyers",
                  "host": ["{{baseUrl}}"],
                  "path": ["open", "v1", "sandbox", "buyers"]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Test Buyer\",\n  \"email\": \"buyer@example.com\",\n  \"phoneNumber\": \"+639001234567\",\n  \"shippingAddress\": {\n    \"line1\": \"123 Test St\",\n    \"city\": \"Manila\",\n    \"region\": \"NCR\",\n    \"postalCode\": \"1000\",\n    \"country\": \"PH\"\n  }\n}"
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"buy_test_contract\",\n    \"name\": \"Test Buyer\",\n    \"email\": \"buyer@example.com\",\n    \"phoneNumber\": \"+639001234567\",\n    \"shippingAddress\": {\n      \"line1\": \"123 Test St\",\n      \"city\": \"Manila\",\n      \"region\": \"NCR\",\n      \"postalCode\": \"1000\",\n      \"country\": \"PH\"\n    },\n    \"createdAt\": \"2026-08-26T04:00:00.000Z\",\n    \"updatedAt\": \"2026-08-26T04:00:00.000Z\"\n  }\n}"
            }
          ]
        },
        {
          "name": "Place sandbox order (buyer-driven)",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/sandbox/orders",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "sandbox", "orders"]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sellerId\": \"SELLER_ID\",\n  \"buyerId\": \"BUYER_ID\",\n  \"items\": [{ \"title\": \"Sample SKU\", \"sku\": \"TST-1\", \"quantity\": 1, \"unitPrice\": 19900 }],\n  \"paymentMethod\": \"gcash\"\n}"
            }
          }
        },
        {
          "name": "List sandbox orders",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/sandbox/orders",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "sandbox", "orders"]
            }
          }
        },
        {
          "name": "Get sandbox order",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/sandbox/orders/{{orderId}}",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "sandbox", "orders", "{{orderId}}"]
            }
          }
        },
        {
          "name": "Mock-pay sandbox order",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/sandbox/orders/{{orderId}}/pay-mock",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "sandbox", "orders", "{{orderId}}", "pay-mock"]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              }
            ],
            "description": "Chained transition PENDING → PAID → READY_TO_SHIP. Sets paidAt timestamp."
          }
        },
        {
          "name": "Mock-ship sandbox order",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/sandbox/orders/{{orderId}}/ship-mock",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "sandbox", "orders", "{{orderId}}", "ship-mock"]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              }
            ],
            "description": "Mock ship — READY_TO_SHIP → SHIPPED."
          }
        },
        {
          "name": "Mock-deliver sandbox order",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/sandbox/orders/{{orderId}}/deliver-mock",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "sandbox", "orders", "{{orderId}}", "deliver-mock"]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              }
            ],
            "description": "Buyer-side mock delivery — SHIPPED → DELIVERED. Sets deliveredAt timestamp."
          }
        },
        {
          "name": "Re-seed sandbox fixtures",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/sandbox/seed",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "sandbox", "seed"]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": ""
            },
            "description": "G-4 (PREMORTEM_2) — re-seed default sandbox fixtures after a deploy wipes process-scoped state. Idempotent."
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "url": {
                  "raw": "{{baseUrl}}/open/v1/sandbox/seed",
                  "host": ["{{baseUrl}}"],
                  "path": ["open", "v1", "sandbox", "seed"]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": ""
                },
                "description": "G-4 (PREMORTEM_2) — re-seed default sandbox fixtures after a deploy wipes process-scoped state. Idempotent."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"seller\": {\n      \"id\": \"sel_seeded_contract\",\n      \"name\": \"Sandbox Seller\",\n      \"email\": \"sandbox-seller@example.com\",\n      \"storeName\": \"Sandbox Default Store\",\n      \"status\": \"active\",\n      \"sandboxId\": \"sandbox_response_contract\",\n      \"oauthIdentifier\": \"sel_seeded_contract\",\n      \"createdAt\": \"2026-08-26T04:00:00.000Z\",\n      \"updatedAt\": \"2026-08-26T04:00:00.000Z\"\n    },\n    \"buyer\": {\n      \"id\": \"buy_test_contract\",\n      \"name\": \"Sandbox Buyer\",\n      \"email\": \"sandbox-buyer@example.com\",\n      \"phoneNumber\": \"+639001112233\",\n      \"shippingAddress\": {\n        \"line1\": \"1 Sandbox St\",\n        \"city\": \"Manila\",\n        \"region\": \"NCR\",\n        \"postalCode\": \"1000\",\n        \"country\": \"PH\"\n      },\n      \"createdAt\": \"2026-08-26T04:00:00.000Z\",\n      \"updatedAt\": \"2026-08-26T04:00:00.000Z\"\n    },\n    \"productsCount\": 5\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Workflows",
      "item": [
        {
          "name": "POST /open/v1/auth/seller-verify",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/auth/seller-verify",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "auth", "seller-verify"]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"identifier\": \"{{sandboxShopId}}\",\n  \"password\": \"{{sandboxShopPassword}}\",\n  \"client_id\": \"{{clientId}}\",\n  \"redirect_uri\": \"https://your-app.example.com/oauth/callback\",\n  \"scopes\": [\n    \"catalog:read\",\n    \"orders:read\",\n    \"orders:write\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Validates the seller or sandbox shop credentials and starts an HttpOnly OTP authorization session. On sandbox, use the Shop ID and password from Tools > Test Account."
          },
          "response": [
            {
              "name": "200 Seller verify OTP challenge",
              "originalRequest": {
                "method": "POST",
                "url": {
                  "raw": "{{baseUrl}}/open/v1/auth/seller-verify",
                  "host": ["{{baseUrl}}"],
                  "path": ["open", "v1", "auth", "seller-verify"]
                }
              },
              "status": "OK",
              "code": 200,
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"phone_masked\": \"+63900****000\",\n    \"expires_in_seconds\": 600,\n    \"resend_after_seconds\": 60\n  }\n}"
            }
          ]
        },
        {
          "name": "POST /open/v1/auth/seller-verify-otp",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/auth/seller-verify-otp",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "auth", "seller-verify-otp"]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"otp\": \"{{sellerOtp}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Verifies the authorization-session OTP. Sandbox does not send an SMS: use the fixed test OTP 111111. Production requires the OTP delivered to the seller's registered phone."
          },
          "response": [
            {
              "name": "200 Seller OTP verified",
              "originalRequest": {
                "method": "POST",
                "url": {
                  "raw": "{{baseUrl}}/open/v1/auth/seller-verify-otp",
                  "host": ["{{baseUrl}}"],
                  "path": ["open", "v1", "auth", "seller-verify-otp"]
                }
              },
              "status": "OK",
              "code": 200,
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"seller_id\": \"seller_nike_ph\",\n    \"seller_name\": \"Nike Philippines\"\n  }\n}"
            }
          ]
        },
        {
          "name": "POST /open/v1/auth/seller-consent",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/auth/seller-consent",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "auth", "seller-consent"]
            },
            "description": "Records the verified seller's consent and creates the one-time authorization code. This request must reuse the authorization-session cookie from seller-verify and seller-verify-otp."
          },
          "response": [
            {
              "name": "200 Seller consent granted",
              "originalRequest": {
                "method": "POST",
                "url": {
                  "raw": "{{baseUrl}}/open/v1/auth/seller-consent",
                  "host": ["{{baseUrl}}"],
                  "path": ["open", "v1", "auth", "seller-consent"]
                }
              },
              "status": "OK",
              "code": 200,
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"code\": \"V1StGXR8_Z5jdHi6B-myT7zM0oLkN2pQ\",\n    \"seller_id\": \"seller_nike_ph\",\n    \"redirect_uri\": \"https://partner.example.com/callback\",\n    \"state\": \"partner-generated-csrf-state\"\n  }\n}"
            }
          ]
        },
        {
          "name": "POST /open/v1/products/bulk",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/products/bulk",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "products", "bulk"]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"products\": [\n    {\n      \"title\": \"Arabica Coffee\",\n      \"category\": \"cat_food\",\n      \"variants\": [\n        {\n          \"sku\": \"COFFEE-1KG\",\n          \"price\": 25000,\n          \"stock\": 12,\n          \"options\": {\n            \"Size\": \"1kg\"\n          }\n        }\n      ]\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "GET /open/v1/jobs/:jobId",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/jobs/{{jobId}}",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "jobs", "{{jobId}}"]
            },
            "description": "Poll async bulk-job status by job ID."
          }
        },
        {
          "name": "POST /open/v1/jobs/:jobId/cancel",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/jobs/{{jobId}}/cancel",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "jobs", "{{jobId}}", "cancel"]
            },
            "description": "Cancel an async bulk job by job ID."
          }
        },
        {
          "name": "POST /open/v1/orders/:id/ship",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/orders/{{resourceId}}/ship",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "orders", "{{resourceId}}", "ship"]
            },
            "description": "Unavailable — publication hold for fulfillment item mapping. No executable request body is published until the blocker is resolved."
          }
        },
        {
          "name": "POST /open/v1/orders/:id/cancel",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/orders/{{resourceId}}/cancel",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "orders", "{{resourceId}}", "cancel"]
            },
            "description": "Limited — publication hold for order cancellation smoke validation. Full-order cancellation only; partial cancellation and reason persistence are unsupported. No executable request body is published until the blocker is resolved."
          }
        },
        {
          "name": "POST /open/v1/orders/bulk-ship",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/orders/bulk-ship",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "orders", "bulk-ship"]
            },
            "description": "Unavailable — publication hold for bulk fulfillment item mapping. No executable request body is published until the blocker is resolved."
          },
          "response": [
            {
              "name": "Success",
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"shipped\": [\n      {\n        \"orderId\": \"5RR0SWUDOL4Z65\",\n        \"status\": \"shipped\"\n      }\n    ],\n    \"errors\": [],\n    \"summary\": {\n      \"total\": 1,\n      \"succeeded\": 1,\n      \"failed\": 0\n    }\n  }\n}"
            }
          ]
        },
        {
          "name": "POST /open/v1/orders/bulk-cancel",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/orders/bulk-cancel",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "orders", "bulk-cancel"]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"orders\": [\n    {\n      \"orderId\": \"{{orderId}}\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Success",
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"cancelled\": [\n      {\n        \"orderId\": \"QPS3OJQ6DF2QNL\",\n        \"status\": \"cancelled\"\n      }\n    ],\n    \"errors\": [],\n    \"summary\": {\n      \"total\": 1,\n      \"succeeded\": 1,\n      \"failed\": 0\n    }\n  }\n}"
            }
          ]
        },
        {
          "name": "POST /open/v1/returns/:id/approve",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/returns/{{resourceId}}/approve",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "returns", "{{resourceId}}", "approve"]
            }
          }
        },
        {
          "name": "POST /open/v1/returns/:id/reject",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/returns/{{resourceId}}/reject",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "returns", "{{resourceId}}", "reject"]
            },
            "description": "Limited — publication hold for return rejection reason persistence. No executable request body is published until the blocker is resolved."
          }
        },
        {
          "name": "POST /open/v1/auth/deny",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/auth/deny",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "auth", "deny"]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"client_id\": \"{{clientId}}\",\n  \"redirect_uri\": \"https://partner.example.com/oauth/callback\",\n  \"state\": \"partner-generated-csrf-state\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 Seller consent denied",
              "originalRequest": {
                "method": "POST",
                "url": {
                  "raw": "{{baseUrl}}/open/v1/auth/deny",
                  "host": ["{{baseUrl}}"],
                  "path": ["open", "v1", "auth", "deny"]
                }
              },
              "status": "OK",
              "code": 200,
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"redirect_uri\": \"https://partner.example.com/oauth/callback\",\n    \"state\": \"partner-generated-csrf-state\"\n  }\n}"
            }
          ]
        },
        {
          "name": "POST /open/v1/products/:id/status",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/products/{{resourceId}}/status",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "products", "{{resourceId}}", "status"]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"live\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "POST /open/v1/orders/:id/shipment",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/orders/{{resourceId}}/shipment",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "orders", "{{resourceId}}", "shipment"]
            },
            "description": "Unavailable — publication hold for shipment arrangement. No executable request body is published until the blocker is resolved."
          }
        },
        {
          "name": "POST /open/v1/returns/:id/approve-refund",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/returns/{{resourceId}}/approve-refund",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "returns", "{{resourceId}}", "approve-refund"]
            },
            "description": "Unavailable — publication hold for refund approval. No executable request body is published until the blocker is resolved."
          }
        },
        {
          "name": "POST /open/v1/returns/:id/dispute",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/returns/{{resourceId}}/dispute",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "returns", "{{resourceId}}", "dispute"]
            },
            "description": "Unavailable — publication hold for return dispute. No executable request body is published until the blocker is resolved."
          }
        },
        {
          "name": "POST /open/v1/sandbox/orders/:id/process-mock",
          "request": {
            "method": "POST",
            "url": {
              "raw": "{{baseUrl}}/open/v1/sandbox/orders/{{resourceId}}/process-mock",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "sandbox", "orders", "{{resourceId}}", "process-mock"]
            }
          }
        }
      ]
    },
    {
      "name": "Open API",
      "item": [
        {
          "name": "GET /open/v1/products/:id",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/products/{{resourceId}}",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "products", "{{resourceId}}"]
            }
          }
        },
        {
          "name": "GET /open/v1/products/:id/variants",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/products/{{resourceId}}/variants",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "products", "{{resourceId}}", "variants"]
            }
          }
        },
        {
          "name": "GET /open/v1/categories",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/categories",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "categories"]
            }
          }
        },
        {
          "name": "GET /open/v1/categories/:id/attributes",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/categories/{{categoryId}}/attributes",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "categories", "{{categoryId}}", "attributes"]
            }
          }
        },
        {
          "name": "PUT /open/v1/products/:id",
          "request": {
            "method": "PUT",
            "url": {
              "raw": "{{baseUrl}}/open/v1/products/{{resourceId}}",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "products", "{{resourceId}}"]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"title\": \"Updated product title\",\n  \"description\": \"Synced from the partner master catalog\",\n  \"price\": 2499,\n  \"status\": \"published\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "PUT /open/v1/products/:id/stock",
          "request": {
            "method": "PUT",
            "url": {
              "raw": "{{baseUrl}}/open/v1/products/{{resourceId}}/stock",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "products", "{{resourceId}}", "stock"]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"items\": [\n    { \"variant_id\": \"{{variantId}}\", \"stock_quantity\": 100 }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "DELETE /open/v1/products/:id",
          "request": {
            "method": "DELETE",
            "url": {
              "raw": "{{baseUrl}}/open/v1/products/{{resourceId}}",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "products", "{{resourceId}}"]
            }
          }
        },
        {
          "name": "GET /open/v1/orders/:id",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/orders/{{resourceId}}",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "orders", "{{resourceId}}"]
            }
          }
        },
        {
          "name": "GET /open/v1/orders/:id/items",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/orders/{{resourceId}}/items",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "orders", "{{resourceId}}", "items"]
            }
          },
          "response": [
            {
              "name": "Success",
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": \"item_CHMTF2ON9QK3VJ_0\",\n      \"orderId\": \"CHMTF2ON9QK3VJ\",\n      \"productId\": \"prod_048222330\",\n      \"title\": \"Bamboo Cutting Board Set\",\n      \"sku\": \"HOME-4001\",\n      \"quantity\": 2,\n      \"unitPrice\": 59900,\n      \"totalPrice\": 119800\n    },\n    {\n      \"id\": \"item_CHMTF2ON9QK3VJ_1\",\n      \"orderId\": \"CHMTF2ON9QK3VJ\",\n      \"productId\": \"prod_839692237\",\n      \"title\": \"Premium Leather Wallet\",\n      \"sku\": \"FASH-2001\",\n      \"quantity\": 4,\n      \"unitPrice\": 89900,\n      \"totalPrice\": 359600\n    },\n    {\n      \"id\": \"item_CHMTF2ON9QK3VJ_2\",\n      \"orderId\": \"CHMTF2ON9QK3VJ\",\n      \"productId\": \"prod_713430108\",\n      \"title\": \"Organic Matcha Powder\",\n      \"sku\": \"FOOD-3001\",\n      \"quantity\": 4,\n      \"unitPrice\": 34900,\n      \"totalPrice\": 139600\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "PUT /open/v1/inventory/:id",
          "request": {
            "method": "PUT",
            "url": {
              "raw": "{{baseUrl}}/open/v1/inventory/{{resourceId}}",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "inventory", "{{resourceId}}"]
            },
            "description": "Unavailable — publication hold for inventory stock mutation. No executable request body is published until the blocker is resolved."
          }
        },
        {
          "name": "GET /open/v1/fulfillments/:id",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/fulfillments/{{resourceId}}",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "fulfillments", "{{resourceId}}"]
            },
            "description": "Unavailable — publication hold for fulfillment retrieve. No executable request body is published until the blocker is resolved."
          }
        },
        {
          "name": "PUT /open/v1/fulfillments/:id",
          "request": {
            "method": "PUT",
            "url": {
              "raw": "{{baseUrl}}/open/v1/fulfillments/{{resourceId}}",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "fulfillments", "{{resourceId}}"]
            },
            "description": "Unavailable — publication hold for fulfillment update. No executable request body is published until the blocker is resolved."
          }
        },
        {
          "name": "GET /open/v1/sellers",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/sellers",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "sellers"]
            }
          }
        },
        {
          "name": "GET /open/v1/sellers/:id",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/sellers/{{resourceId}}",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "sellers", "{{resourceId}}"]
            }
          }
        },
        {
          "name": "GET /open/v1/seller/profile",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/seller/profile",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "seller", "profile"]
            }
          }
        },
        {
          "name": "GET /open/v1/shop",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/shop",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "shop"]
            }
          }
        },
        {
          "name": "GET /open/v1/shop/status",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/shop/status",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "shop", "status"]
            }
          }
        },
        {
          "name": "GET /open/v1/returns/:id",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/returns/{{resourceId}}",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "returns", "{{resourceId}}"]
            }
          }
        },
        {
          "name": "GET /open/v1/shipping/options",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/shipping/options",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "shipping", "options"]
            }
          }
        },
        {
          "name": "GET /open/v1/orders/:id/shipping-label",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/orders/{{resourceId}}/shipping-label",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "orders", "{{resourceId}}", "shipping-label"]
            }
          }
        },
        {
          "name": "GET /open/v1/orders/:id/shipment/eligible-dates",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/orders/{{resourceId}}/shipment/eligible-dates",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "orders", "{{resourceId}}", "shipment", "eligible-dates"]
            }
          }
        },
        {
          "name": "GET /open/v1/orders/:id/shipment/pickup-slots",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/orders/{{resourceId}}/shipment/pickup-slots",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "orders", "{{resourceId}}", "shipment", "pickup-slots"]
            }
          }
        },
        {
          "name": "GET /open/v1/orders/:id/tracking",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/orders/{{resourceId}}/tracking",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "orders", "{{resourceId}}", "tracking"]
            }
          }
        },
        {
          "name": "GET /open/v1/shop/shipping-channels",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/shop/shipping-channels",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "shop", "shipping-channels"]
            }
          }
        },
        {
          "name": "GET /open/v1/shipment/pickup-addresses",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/shipment/pickup-addresses",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "shipment", "pickup-addresses"]
            }
          }
        },
        {
          "name": "GET /open/v1/returns/dispute-reasons",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/returns/dispute-reasons",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "returns", "dispute-reasons"]
            }
          }
        },
        {
          "name": "GET /open/v1/logs",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/logs",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "logs"]
            }
          }
        },
        {
          "name": "GET /open/v1/sandbox/orders/:id/tracking",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{baseUrl}}/open/v1/sandbox/orders/{{resourceId}}/tracking",
              "host": ["{{baseUrl}}"],
              "path": ["open", "v1", "sandbox", "orders", "{{resourceId}}", "tracking"]
            }
          }
        }
      ]
    }
  ]
}
