{
  "info": {
    "name": "GroWrk v4 Client API",
    "description": "The GroWrk **v4 client API** — one shared tool core, reachable over REST, the CLI and MCP.\n\n## Authentication\n\nEvery request needs an `X-API-KEY` header carrying a `grk_sk_` key, set once at the\ncollection level (Authorization tab) from the `apiKey` variable.\n\n- Mint a key in the hub: **Developers → API Keys**, selecting the capabilities you need.\n- The raw key is shown **once** — only a hash is stored.\n- `Authorization: Bearer` is **not** accepted here. A Bearer token on a `/v4` route is\n  only ever a Firebase ID token.\n- Legacy `GW.` (v2) keys do **not** work on v4.\n\n## Scopes\n\nEach request lists its required scope. Scopes are **not hierarchical** —\n`mcp:orders:write` does not imply `mcp:orders:read`. Select both if you need to read\na resource back after writing it.\n\n## Conventions\n\n- Base path is `/v4/...` (not `/api/v4/...`).\n- List endpoints paginate: `page` (0-indexed) + `limit` (max 50).\n- Optional query params ship disabled; tick them to use them.\n- Write requests include only the required body fields; optional ones are listed in\n  each request's description.\n\n_Generated from the Link monorepo by `run/postman/generate-v4-collection.mjs` — 27 requests. Do not hand-edit; regenerate._",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "apikey",
    "apikey": [
      {
        "key": "key",
        "value": "X-API-KEY",
        "type": "string"
      },
      {
        "key": "value",
        "value": "{{apiKey}}",
        "type": "string"
      },
      {
        "key": "in",
        "value": "header",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://ai.growrk.com",
      "type": "string",
      "description": "prod https://ai.growrk.com · next https://growrk-next-io.web.app · local http://127.0.0.1:3001"
    },
    {
      "key": "apiKey",
      "value": "",
      "type": "string",
      "description": "Your grk_sk_ key. Shown once at mint time."
    }
  ],
  "item": [
    {
      "name": "Identity",
      "item": [
        {
          "name": "Who Am I",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v4/me",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "me"
              ]
            },
            "description": "Get information about the authenticated user and their access level.\n**Scope:** _none required_"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Orders",
      "item": [
        {
          "name": "Add Power Accessory",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v4/orders/:id/accessories",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "orders",
                ":id",
                "accessories"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "orderId — required"
                }
              ]
            },
            "description": "Request a replacement charger (power accessory) for a device on an EXISTING order — same flow as the hub dashboard. Only allowed within 24 hours of placing the order, while the order is still 'order placed', and for devices whose charger status is 'Damaged' or 'Not Included'. The per-country power-accessory fee is added to the order cost. Requires mcp:orders:write scope and explicit approval.\n**Scope:** `mcp:orders:write`\n\n**Write operation.** On MCP this is approval-gated.\n\n**Optional body fields**\n- `productId` — The inventory product (device) to request a replacement charger for. Provide this OR serialNumber. (optional, string)\n- `serialNumber` — The device's serial number — resolved to the product automatically. Provide this OR productId. (optional, string)\n- `companyId` — Company ID (optional for staff) (optional, string)",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Create Order",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v4/orders",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "orders"
              ]
            },
            "description": "Place an order (Deployment, Offboarding, Collection, Collect for Maintenance, device-only Maintenance, or Swap from Inventory) for a company's devices. Validates constraints first and refuses to place if invalid (call validate_order_constraints to preview). The destination/collection address is the employee's stored delivery address. Requires mcp:orders:write scope and explicit approval.\n**Scope:** `mcp:orders:write`\n\n**Write operation.** On MCP this is approval-gated.\n\n**Optional body fields**\n- `employeeId` — Employee the order acts on — required for every type except Maintenance (device-only). The destination/collection country and address are taken from the employee's stored delivery address. (optional, string)\n- `notes` — Optional order notes (optional, array)\n- `reason` — Collection / Collect for Maintenance / Maintenance / Swap: manager reason for the request (optional, string)\n- `replacementProductId` — Swap from Inventory: the replacement device from company inventory (must be Ready to Use, unassigned, same region and product type as the old device) (optional, string)\n- `shippingType` — Deployment / Swap from Inventory: shipping speed (default: standard) (optional, string, one of: standard | expedited | overnight)\n- `neededBy` — Deployment: desired arrival date (ISO 8601), stored as the order's desired time of arrival (optional, string)\n- `includeCharger` — Deployment / Swap from Inventory: purchase replacement chargers (per-country power-accessory fee applies). ONLY devices whose charger status is 'Damaged' or 'Not Included' are eligible — devices that already include a charger are skipped, and the result's `charger` field reports what was requested vs skipped (optional, boolean)\n- `termination` — Offboarding: termination type (required for Offboarding) (optional, string, one of: voluntary | involuntary)\n- `dispositions` — Offboarding: per-productId device disposition (required for every product on Offboarding orders) (optional, object)\n- `offboardingTime` — Offboarding: optional scheduled offboarding time (ISO 8601) (optional, string)\n- `scheduledTimeZone` — Offboarding: human-readable timezone label that offboardingTime was given in (e.g. \"America/Mexico_City\") (optional, string)\n- `legalHold` — Offboarding: per-productId legal hold request, with optional preservation instructions (e.g. {\"prod1\": {\"instructions\": \"Preserve mailbox\"}}) (optional, object)\n- `pickupWindow` — Offboarding: scheduled pickup window for device recovery (optional, object)\n- `companyId` — Company ID (optional for staff) (optional, string)",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"orderType\": \"Deployment\",\n  \"productIds\": [\n    \"<productId>\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Create Purchase Order",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v4/orders/purchase",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "orders",
                "purchase"
              ]
            },
            "description": "Purchase devices from the GroWrk catalog, either for an employee (shipped to their stored delivery address) or into the company inventory pool. Items are priced from their selected regional quote; configure/build-to-order devices cannot be purchased this way. Requires mcp:orders:write scope and explicit approval.\n**Scope:** `mcp:orders:write`\n\n**Write operation.** On MCP this is approval-gated.\n\n**Optional body fields**\n- `employeeId` — Employee to purchase for — required for \"Purchase for Employee\", ignored otherwise. (optional, string)\n- `shippingType` — Shipping speed (default: standard) (optional, string, one of: standard | expedited | overnight)\n- `notes` — Optional order notes (optional, array)\n- `companyId` — Company ID (optional for staff) (optional, string)",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"orderType\": \"Purchase for Employee\",\n  \"items\": [\n    {\n      \"itemId\": \"<itemId>\",\n      \"quantity\": 1,\n      \"country\": \"<country>\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Get Order",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v4/orders/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "orders",
                ":id"
              ],
              "query": [
                {
                  "key": "companyId",
                  "value": "",
                  "description": "Company ID (optional for staff) (optional, string)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "orderId — required"
                }
              ]
            },
            "description": "Retrieve a single order by ID with full hierarchy (parent + sub-orders, device requests, tracking). Staff may omit companyId — it is resolved from the order id. Requires mcp:orders:read scope.\n**Scope:** `mcp:orders:read`"
          },
          "response": []
        },
        {
          "name": "Get Order History",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v4/orders/:id/history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "orders",
                ":id",
                "history"
              ],
              "query": [
                {
                  "key": "companyId",
                  "value": "",
                  "description": "Company ID (optional for staff) (optional, string)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "orderId — required"
                }
              ]
            },
            "description": "Get an order's full event history: order logs (status updates, comments) plus a per-device timeline merging product logs and courier tracking events. Works for compound (parent) orders — child-order devices are included and labeled. Staff may omit companyId — it is resolved from the order id. Requires mcp:orders:read scope.\n**Scope:** `mcp:orders:read`"
          },
          "response": []
        },
        {
          "name": "Get Order SLA",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v4/orders/:id/sla",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "orders",
                ":id",
                "sla"
              ],
              "query": [
                {
                  "key": "companyId",
                  "value": "",
                  "description": "Company ID (optional for staff) (optional, string)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "orderId — required"
                }
              ]
            },
            "description": "Get the SLA / delay status for a single order: days elapsed vs the expected SLA days for its order type, whether it is delayed and by how much, the specific reasons for any delay (paused-SLA periods, blocking device statuses), and recent activity. Staff may omit companyId — it is resolved from the order id. Requires mcp:orders:read scope.\n**Scope:** `mcp:orders:read`"
          },
          "response": []
        },
        {
          "name": "List Orders",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v4/orders",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "orders"
              ],
              "query": [
                {
                  "key": "query",
                  "value": "",
                  "description": "Search query (employee email, product name, order ID, etc.) (optional, string)",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "Filter by order status. Accepts one or more values (e.g. [\"processing\"], [\"shipped\", \"delivered\"]). Valid values: \"order placed\", \"in progress\", \"processing\", \"shipped\", \"delivered\", \"on hold\", \"pending payment\", \"awaiting client\", \"awaiting recipient\", \"pending approval\", \"delayed\", \"closed\", \"cancelled\" (optional, array)",
                  "disabled": true
                },
                {
                  "key": "type",
                  "value": "",
                  "description": "Filter by order type. Accepts one or more values (e.g. [\"Offboarding\"], [\"Purchase for Employee\", \"Deployment\"]). Valid values: \"Purchase for Employee\", \"Deployment\", \"Offboarding\", \"Collection\", \"Maintenance\" (\"Assign to Employee\" is the legacy name for \"Deployment\" and may appear on older orders) (optional, array)",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "",
                  "description": "Page number for pagination (0-indexed) (optional, integer, default: 0)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "Maximum number of results per page (optional, integer, default: 20)",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "",
                  "description": "Field to sort by (e.g. \"createdAt\", \"status\", \"type\") (optional, string)",
                  "disabled": true
                },
                {
                  "key": "sortDirection",
                  "value": "",
                  "description": "Sort direction (default: \"desc\") (optional, string, one of: asc | desc)",
                  "disabled": true
                },
                {
                  "key": "companyId",
                  "value": "",
                  "description": "Company ID (optional for staff) (optional, string)",
                  "disabled": true
                }
              ]
            },
            "description": "Search and list orders for a company. Supports free-text search, status/type filtering, sorting, and pagination. Staff may omit companyId to search across all companies. Requires mcp:orders:read scope.\n**Scope:** `mcp:orders:read`"
          },
          "response": []
        },
        {
          "name": "Validate Order Constraints",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v4/orders/validate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "orders",
                "validate"
              ]
            },
            "description": "Check whether an order type (Deployment, Offboarding, Collection, Collect for Maintenance, Maintenance, Swap from Inventory) can be placed for an employee and their devices — validates region availability, delivery address, and device eligibility (Deployment also requires the device to be stocked in the employee's region). The order country is derived from the employee's stored delivery address (same as create_order). Read-only; run this before create_order. Requires mcp:orders:read scope.\n**Scope:** `mcp:orders:read`\n\n**Optional body fields**\n- `employeeId` — Employee whose devices the order acts on — required for every type except Maintenance (device-only) (optional, string)\n- `replacementProductId` — Swap from Inventory: the replacement device from company inventory (optional, string)\n- `country` — Optional cross-check country (ISO 3166-1 alpha-2, case-insensitive). The order country always comes from the employee's stored delivery address; providing a different country here fails validation. (optional, string)\n- `companyId` — Company ID (optional for staff) (optional, string)",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"orderType\": \"Deployment\",\n  \"productIds\": [\n    \"<productId>\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Employees",
      "item": [
        {
          "name": "Create Employee",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v4/employees",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "employees"
              ]
            },
            "description": "Create a new employee record. Requires name and email. Requires mcp:employees:write scope.\n**Scope:** `mcp:employees:write`\n\n**Write operation.** On MCP this is approval-gated.\n\n**Optional body fields**\n- `companyId` — Company ID (optional, string)\n- `teamName` — Team name the employee belongs to (optional, string)\n- `department` — Department the employee belongs to (optional, string)\n- `division` — Division the employee belongs to (optional, string)\n- `jobTitle` — Employee job title (optional, string)\n- `personalEmail` — Employee personal email address (optional, string)\n- `taxId` — Employee tax identification number (optional, string)\n- `address` — Street address (optional, string)\n- `city` — City (optional, string)\n- `state` — State or province (optional, string)\n- `zipCode` — ZIP or postal code (optional, string)\n- `country` — Country (optional, string)",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"displayName\": \"<displayName>\",\n  \"email\": \"<email>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Get Employee",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v4/employees/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "employees",
                ":id"
              ],
              "query": [
                {
                  "key": "companyId",
                  "value": "",
                  "description": "Company ID (optional for staff) (optional, string)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "employeeId — required"
                }
              ]
            },
            "description": "Retrieve a single employee by ID, including their stored delivery address (deliveryAddress — null when none is set; set it with update_employee). Requires mcp:employees:read scope.\n**Scope:** `mcp:employees:read`"
          },
          "response": []
        },
        {
          "name": "List Available Countries",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v4/employees/countries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "employees",
                "countries"
              ],
              "query": [
                {
                  "key": "companyId",
                  "value": "",
                  "description": "Company ID (optional for staff) (optional, string)",
                  "disabled": true
                }
              ]
            },
            "description": "List the countries the company already has employees in, derived from stored employee delivery addresses. Returns each region as { value, label }. Requires mcp:employees:read scope.\n**Scope:** `mcp:employees:read`"
          },
          "response": []
        },
        {
          "name": "List Employees",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v4/employees",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "employees"
              ],
              "query": [
                {
                  "key": "query",
                  "value": "",
                  "description": "Search query (name, email, department, etc.) (optional, string)",
                  "disabled": true
                },
                {
                  "key": "email",
                  "value": "",
                  "description": "Exact email address match (case-insensitive). Unlike `query`, this is an equality filter, not a free-text search — use it to resolve one known employee. (optional, string)",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "Filter by status (e.g. \"Active\", \"Offboarded\") (optional, string)",
                  "disabled": true
                },
                {
                  "key": "country",
                  "value": "",
                  "description": "Filter by country (ISO 3166-1 alpha-2, case-insensitive, e.g. \"US\", \"BR\", \"MX\") (optional, string)",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "",
                  "description": "Page number for pagination (0-indexed) (optional, integer, default: 0)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "Maximum number of results per page (optional, integer, default: 20)",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "",
                  "description": "Field to sort by (e.g. \"displayName\", \"createdAt\", \"startDate\", \"status\") (optional, string)",
                  "disabled": true
                },
                {
                  "key": "sortDirection",
                  "value": "",
                  "description": "Sort direction (default: \"asc\") (optional, string, one of: asc | desc)",
                  "disabled": true
                },
                {
                  "key": "companyId",
                  "value": "",
                  "description": "Company ID (optional for staff) (optional, string)",
                  "disabled": true
                }
              ]
            },
            "description": "Search and list employees for a company. Supports free-text search, status filtering, sorting, and pagination. Requires mcp:employees:read scope.\n**Scope:** `mcp:employees:read`"
          },
          "response": []
        },
        {
          "name": "Update Employee",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v4/employees/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "employees",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "employeeId — required"
                }
              ]
            },
            "description": "Update an existing employee's editable fields (name, email, department, division, job title, team, delivery address). Email changes are checked for uniqueness; address changes affect future orders only. Requires mcp:employees:write scope.\n**Scope:** `mcp:employees:write`\n\n**Write operation.** On MCP this is approval-gated.\n\n**Optional body fields**\n- `displayName` — New employee full name (optional, string)\n- `email` — New employee email address (must be unique within the company). Only allowed for employees WITHOUT an active login. (optional, string)\n- `personalEmail` — New personal / secondary email address (must be unique within the company). Pass null or \"\" to clear it. (optional)\n- `department` — New department (optional, string)\n- `division` — New division (optional, string)\n- `jobTitle` — New job title (optional, string)\n- `taxId` — New tax identification number (e.g. CPF — required for collections in Brazil) (optional, string)\n- `teamName` — Team name to move the employee to (created if it does not exist) (optional, string)\n- `address` — New street address (affects future orders only) (optional, string)\n- `addressTwo` — New address line two (optional, string)\n- `city` — New city (optional, string)\n- `state` — New state or province (optional, string)\n- `zipCode` — New ZIP or postal code (optional, string)\n- `country` — New country (ISO 3166-1 alpha-2, case-insensitive, e.g. \"US\", \"BR\") (optional, string)\n- `phone` — New contact phone for deliveries (optional, string)\n- `companyId` — Company ID (optional for staff) (optional, string)",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Teams",
      "item": [
        {
          "name": "Create Team",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v4/teams",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "teams"
              ]
            },
            "description": "Create a new team in the company. The name must be unique within the company, because the employee tools resolve teams by name. Requires mcp:teams:write scope.\n**Scope:** `mcp:teams:write`\n\n**Write operation.** On MCP this is approval-gated.\n\n**Optional body fields**\n- `companyId` — Company ID (optional for staff) (optional, string)",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"<name>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Get Team",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v4/teams/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "teams",
                ":id"
              ],
              "query": [
                {
                  "key": "companyId",
                  "value": "",
                  "description": "Company ID (optional for staff) (optional, string)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "teamId — required"
                }
              ]
            },
            "description": "Get a single team by ID, including its employee count. Requires mcp:teams:read scope.\n**Scope:** `mcp:teams:read`"
          },
          "response": []
        },
        {
          "name": "List Teams",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v4/teams",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "teams"
              ],
              "query": [
                {
                  "key": "companyId",
                  "value": "",
                  "description": "Company ID (optional for staff) (optional, string)",
                  "disabled": true
                }
              ]
            },
            "description": "List the company's teams. Managers see only the teams their role scopes them to. Requires mcp:teams:read scope.\n**Scope:** `mcp:teams:read`"
          },
          "response": []
        },
        {
          "name": "Update Team",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v4/teams/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "teams",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "teamId — required"
                }
              ]
            },
            "description": "Rename an existing team. The new name must be unique within the company. Requires mcp:teams:write scope.\n**Scope:** `mcp:teams:write`\n\n**Write operation.** On MCP this is approval-gated.\n\n**Optional body fields**\n- `companyId` — Company ID (optional for staff) (optional, string)",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"<name>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Inventory",
      "item": [
        {
          "name": "Get Assigned Devices",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v4/employees/:id/devices",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "employees",
                ":id",
                "devices"
              ],
              "query": [
                {
                  "key": "companyId",
                  "value": "",
                  "description": "Company ID (optional for staff) (optional, string)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "employeeId — required"
                }
              ]
            },
            "description": "List the devices currently assigned to an employee. Requires mcp:inventory:read scope.\n**Scope:** `mcp:inventory:read`"
          },
          "response": []
        },
        {
          "name": "Get Device Options",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v4/devices/options",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "devices",
                "options"
              ],
              "query": [
                {
                  "key": "productType",
                  "value": "",
                  "description": "Desired product type / category. Known values: accessories, adapters, cables, desktops, headsets, keyboards, laptops, mice, mobile, monitors, network gear a, network gear b, power protection, tablet, vr headsets, webcams, wifi. Matched case- and plural-insensitively (optional, string)",
                  "disabled": true
                },
                {
                  "key": "location",
                  "value": "",
                  "description": "Location to filter by (e.g. \"GroWrk Warehouse\", \"Employee Address\", \"Client Location\", \"In transit\") (optional, string)",
                  "disabled": true
                },
                {
                  "key": "specs",
                  "value": "",
                  "description": "Free-text desired specs (e.g. \"16GB 512GB M3\") (optional, string)",
                  "disabled": true
                },
                {
                  "key": "companyId",
                  "value": "",
                  "description": "Company ID (optional for staff) (optional, string)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "Maximum options (optional, integer, default: 10)",
                  "disabled": true
                }
              ]
            },
            "description": "List available device options (anonymized model + availability), ranked by spec proximity and availability — use this both for initial device choices and for suggesting alternatives. Requires mcp:inventory:read scope.\n**Scope:** `mcp:inventory:read`"
          },
          "response": []
        },
        {
          "name": "Search Inventory",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v4/inventory",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "inventory"
              ],
              "query": [
                {
                  "key": "query",
                  "value": "",
                  "description": "Free-text search (model, serial, etc.) (optional, string)",
                  "disabled": true
                },
                {
                  "key": "category",
                  "value": "",
                  "description": "Product type / category filter. Known values: Accessories, Adapters, Cables, Desktops, Headsets, Keyboards, Laptops, Mice, Mobile, Monitors, Network Gear A, Network Gear B, Power Protection, Tablet, VR Headsets, Webcams, Wifi (optional, string)",
                  "disabled": true
                },
                {
                  "key": "inStock",
                  "value": "",
                  "description": "Only return available (in-stock) devices (optional, boolean)",
                  "disabled": true
                },
                {
                  "key": "country",
                  "value": "",
                  "description": "Filter by country (ISO 3166-1 alpha-2, case-insensitive, e.g. \"US\", \"BR\") (optional, string)",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "Filter by inventory status (optional, string)",
                  "disabled": true
                },
                {
                  "key": "companyId",
                  "value": "",
                  "description": "Company ID (optional for staff) (optional, string)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "Maximum results (optional, integer, default: 20)",
                  "disabled": true
                }
              ]
            },
            "description": "Search a company's device inventory with optional filters (category, country, status, in-stock). Requires mcp:inventory:read scope.\n**Scope:** `mcp:inventory:read`"
          },
          "response": []
        },
        {
          "name": "Suggest Alternative Device",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v4/devices/suggestions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "devices",
                "suggestions"
              ],
              "query": [
                {
                  "key": "country",
                  "value": "<country>",
                  "description": "Destination country (ISO 3166-1 alpha-2, case-insensitive, e.g. \"US\") — catalog availability is per region (required, string)",
                  "disabled": false
                },
                {
                  "key": "productType",
                  "value": "",
                  "description": "Product type / category. Known values: accessories, adapters, cables, desktops, headsets, keyboards, laptops, mice, mobile, monitors, network gear a, network gear b, power protection, tablet, vr headsets, webcams, wifi. Matched case- and plural-insensitively; an unknown value returns an error listing the region's valid options (optional, string)",
                  "disabled": true
                },
                {
                  "key": "manufacturer",
                  "value": "",
                  "description": "Preferred manufacturer (e.g. \"Apple\", \"Lenovo\", \"Dell\") — matched against the catalog's manufacturers; an unknown value returns an error listing the valid options (optional, string)",
                  "disabled": true
                },
                {
                  "key": "specs",
                  "value": "",
                  "description": "Free-text desired specs (e.g. \"16GB 512GB M3\") (optional, string)",
                  "disabled": true
                },
                {
                  "key": "targetPrice",
                  "value": "",
                  "description": "Rank alternatives by proximity to this price (USD) (optional, number)",
                  "disabled": true
                },
                {
                  "key": "excludeItemId",
                  "value": "",
                  "description": "Catalog item ID to exclude (the device being replaced) (optional, string)",
                  "disabled": true
                },
                {
                  "key": "companyId",
                  "value": "",
                  "description": "Company ID (optional for staff) (optional, string)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "Maximum suggestions (optional, integer, default: 5)",
                  "disabled": true
                }
              ]
            },
            "description": "Suggest alternative PURCHASABLE devices from the GroWrk master catalog for a destination country, ranked by manufacturer/spec/price proximity. Use when a desired device is unavailable and a purchase is being considered (vs get_device_options, which lists existing warehouse stock for redeployment). Requires mcp:inventory:read scope.\n**Scope:** `mcp:inventory:read`"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Products",
      "item": [
        {
          "name": "Add Product PIN Code",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v4/products/pin-code",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "products",
                "pin-code"
              ]
            },
            "description": "Store the unlock PIN code for a device, identified by productId or serialNumber. Only available for device types that support a PIN (Desktops, Laptops, Mobile, Tablet). Requires mcp:inventory:write scope.\n**Scope:** `mcp:inventory:write`\n\n**Write operation.** On MCP this is approval-gated.\n\n**Optional body fields**\n- `productId` — The inventory product to set the PIN on. Provide this OR serialNumber. (optional, string)\n- `serialNumber` — The device's serial number — resolved to the product automatically. Provide this OR productId. (optional, string)\n- `companyId` — Company ID (optional for staff) (optional, string)",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"pinCode\": \"<pinCode>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Get Product",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v4/products/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "products",
                ":id"
              ],
              "query": [
                {
                  "key": "companyId",
                  "value": "",
                  "description": "Company ID (optional for staff) (optional, string)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "productId — required"
                }
              ]
            },
            "description": "Get a single inventory product (device) by ID, including its assignment, condition, location and serial number. Employees may only read their own devices. Requires mcp:inventory:read scope.\n**Scope:** `mcp:inventory:read`"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Company",
      "item": [
        {
          "name": "Create Company Address",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v4/company/addresses",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "company",
                "addresses"
              ]
            },
            "description": "Save a new office / warehouse address for the company. The country must exist in the GroWrk regional catalog. Requires mcp:company:write scope.\n**Scope:** `mcp:company:write`\n\n**Write operation.** On MCP this is approval-gated.\n\n**Optional body fields**\n- `addressTwo` — Address line two (optional, string)\n- `state` — State or province (optional, string)\n- `companyId` — Company ID (optional for staff) (optional, string)",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"alias\": \"<alias>\",\n  \"address\": \"<address>\",\n  \"city\": \"<city>\",\n  \"zipCode\": \"<zipCode>\",\n  \"country\": \"<country>\",\n  \"contactName\": \"<contactName>\",\n  \"contactEmail\": \"<contactEmail>\",\n  \"phone\": \"<phone>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "List Company Addresses",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v4/company/addresses",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "company",
                "addresses"
              ],
              "query": [
                {
                  "key": "companyId",
                  "value": "",
                  "description": "Company ID (optional for staff) (optional, string)",
                  "disabled": true
                }
              ]
            },
            "description": "List the company's saved office / warehouse addresses — the locations devices can be shipped to or collected from. Requires mcp:company:read scope.\n**Scope:** `mcp:company:read`"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Tracking",
      "item": [
        {
          "name": "Get Tracking",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v4/orders/:id/tracking",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v4",
                "orders",
                ":id",
                "tracking"
              ],
              "query": [
                {
                  "key": "trackingNumber",
                  "value": "",
                  "description": "A specific tracking number to look up (optional, string)",
                  "disabled": true
                },
                {
                  "key": "companyId",
                  "value": "",
                  "description": "Company ID (optional for staff) (optional, string)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "orderId — required"
                }
              ]
            },
            "description": "Get shipment tracking for an order, merging GroWrk records with live TrackingMore courier data. Works for compound (parent) orders too — child-order shipments are included and labeled. Provide orderId (optionally with trackingNumber to filter to one shipment). Bare trackingNumber lookups are staff-only. Requires mcp:orders:read scope.\n**Scope:** `mcp:orders:read`"
          },
          "response": []
        }
      ]
    }
  ]
}
