{"openapi":"3.1.0","info":{"title":"Hexnode UEM (BYOK) API","version":"0.1.0","description":"Hexnode UEM (BYOK) lets an AI assistant read your own Hexnode UEM data through the Hexnode UEM API with a key you supply (API key (Admin, API, enable API access)). Read-only: 9 tools (list_devices, get_device, list_device_policies, list_users, list_device_groups, list_user_groups, list_policies, list_apps, list_organizational_units). The BYOK key travels with each request, is used for that one...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-hexnode.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-hexnode/docs"},"termsOfService":"https://connectorbay.com/byok-hexnode/terms"},"servers":[{"url":"https://byok-hexnode.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-hexnode/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_devices":{"post":{"operationId":"list_devices","summary":"List enrolled devices with name, model, OS, enrollment status, compliance, serial number, last report time and owner nam","description":"List enrolled devices with name, model, OS, enrollment status, compliance, serial number, last report time and owner name. Filter by platform, activity or device type. Use for \"Which Hexnode devices are not compliant\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"portal":{"description":"Your Hexnode portal name: the part before .hexnodemdm.com in your console address.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Portal","type":"string"},"order_by":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: asc or desc.","title":"Order By"},"platform":{"anyOf":[{"enum":["ios","android","windows"],"type":"string"},{"type":"null"}],"default":null,"description":"Only devices of this OS.","title":"Platform"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for active devices only, false for inactive only.","title":"Is Active"},"device_type":{"anyOf":[{"enum":["smartphone","tablet"],"type":"string"},{"type":"null"}],"default":null,"description":"Only this device type.","title":"Device Type"},"per_page":{"anyOf":[{"maximum":250,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Rows per page (1 to 250, default 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["portal"],"title":"list_devicesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_device":{"post":{"operationId":"get_device","summary":"Get one device's details: platform, enrollment status, last report and scan times, lost mode, hardware model, OS version","description":"Get one device's details: platform, enrollment status, last report and scan times, lost mode, hardware model, OS version, storage and battery. Location, phone numbers and IMEI are not returned. Use for \"What are the details of Hexnode device 5\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"portal":{"description":"Your Hexnode portal name: the part before .hexnodemdm.com in your console address.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Portal","type":"string"},"device_id":{"description":"Device ID from list_devices.","title":"Device Id","type":"integer"}},"required":["portal","device_id"],"title":"get_deviceArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_device_policies":{"post":{"operationId":"list_device_policies","summary":"List the policies associated with one device, with policy ID, name and version. Use for \"Which policies apply to Hexnode","description":"List the policies associated with one device, with policy ID, name and version. Use for \"Which policies apply to Hexnode device 5\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"portal":{"description":"Your Hexnode portal name: the part before .hexnodemdm.com in your console address.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Portal","type":"string"},"device_id":{"description":"Device ID from list_devices.","title":"Device Id","type":"integer"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Rows per page (default 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["portal","device_id"],"title":"list_device_policiesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_users":{"post":{"operationId":"list_users","summary":"List enrolled users with name, device count and directory domain. Email and phone number are not returned. Use for \"How ","description":"List enrolled users with name, device count and directory domain. Email and phone number are not returned. Use for \"How many devices does each Hexnode user have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"portal":{"description":"Your Hexnode portal name: the part before .hexnodemdm.com in your console address.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Portal","type":"string"},"order_by":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: asc or desc.","title":"Order By"},"user_type":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only users of this type: local or active directory.","title":"User Type"},"enrollment_status":{"anyOf":[{"enum":["enrolled","unenrolled"],"type":"string"},{"type":"null"}],"default":null,"description":"Only users with this status.","title":"Enrollment Status"},"per_page":{"anyOf":[{"maximum":250,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Rows per page (1 to 250, default 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["portal"],"title":"list_usersArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_device_groups":{"post":{"operationId":"list_device_groups","summary":"List device groups with name, description, type (custom or dynamic), device count and last modification. Use for \"Which ","description":"List device groups with name, description, type (custom or dynamic), device count and last modification. Use for \"Which device groups exist in Hexnode\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"portal":{"description":"Your Hexnode portal name: the part before .hexnodemdm.com in your console address.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Portal","type":"string"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Rows per page (default 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["portal"],"title":"list_device_groupsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_user_groups":{"post":{"operationId":"list_user_groups","summary":"List user groups with name, description, user count and last modification. Use for \"Which user groups exist in Hexnode\".","description":"List user groups with name, description, user count and last modification. Use for \"Which user groups exist in Hexnode\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"portal":{"description":"Your Hexnode portal name: the part before .hexnodemdm.com in your console address.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Portal","type":"string"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Rows per page (default 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["portal"],"title":"list_user_groupsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_policies":{"post":{"operationId":"list_policies","summary":"List policies with description, version, archived flag, which platforms they are configured for, device count and timest","description":"List policies with description, version, archived flag, which platforms they are configured for, device count and timestamps. Use for \"Which Hexnode policies are configured for Android\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"portal":{"description":"Your Hexnode portal name: the part before .hexnodemdm.com in your console address.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Portal","type":"string"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Rows per page (default 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["portal"],"title":"list_policiesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_apps":{"post":{"operationId":"list_apps","summary":"List the applications in the Hexnode app inventory with name, identifier, platform, version, vendor, type, license and c","description":"List the applications in the Hexnode app inventory with name, identifier, platform, version, vendor, type, license and category. Use for \"Which store apps are in my Hexnode app list\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"portal":{"description":"Your Hexnode portal name: the part before .hexnodemdm.com in your console address.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Portal","type":"string"},"order_by":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: asc or desc.","title":"Order By"},"app_type":{"anyOf":[{"enum":["store","web","enterprise"],"type":"string"},{"type":"null"}],"default":null,"description":"Only apps of this type.","title":"App Type"},"platform":{"anyOf":[{"enum":["ios","android"],"type":"string"},{"type":"null"}],"default":null,"description":"Only apps of this platform.","title":"Platform"},"per_page":{"anyOf":[{"maximum":250,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Rows per page (1 to 250, default 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["portal"],"title":"list_appsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_organizational_units":{"post":{"operationId":"list_organizational_units","summary":"List the organizational units of a directory domain with name, parent, description and status. Use for \"Which organizati","description":"List the organizational units of a directory domain with name, parent, description and status. Use for \"Which organizational units does Hexnode have for domain 1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"portal":{"description":"Your Hexnode portal name: the part before .hexnodemdm.com in your console address.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Portal","type":"string"},"domain_id":{"description":"ID of the directory domain whose OUs to list.","minimum":1,"title":"Domain Id","type":"integer"}},"required":["portal","domain_id"],"title":"list_organizational_unitsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}