{"openapi":"3.1.0","info":{"title":"Ubiquiti Site Manager (BYOK) API","version":"0.1.0","description":"Ubiquiti Site Manager (BYOK) lets an AI assistant read your own Ubiquiti Site Manager data through the Ubiquiti Site Manager API with a key you supply (UniFi Site Manager API key). Read-only: 6 tools (list_hosts, get_host, list_sites, list_devices, get_isp_metrics, list_sd_wan_configs). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached;...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-unifi.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-unifi/docs"},"termsOfService":"https://connectorbay.com/byok-unifi/terms"},"servers":[{"url":"https://byok-unifi.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-unifi/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_hosts":{"post":{"operationId":"list_hosts","summary":"List the UniFi consoles and gateways (hosts) linked to the account with id, hardware id, type, IP address, ownership, bl","description":"List the UniFi consoles and gateways (hosts) linked to the account with id, hardware id, type, IP address, ownership, blocked flag and last connection change; token-paged. Use for \"Which UniFi consoles are registered to my account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_size":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many items to return per page.","title":"Page Size"},"next_token":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Token from nextToken of the previous answer to get the next page; leave out for the first page.","title":"Next Token"}},"title":"list_hostsArguments","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_host":{"post":{"operationId":"get_host","summary":"Get one UniFi host (console or gateway) by id: hardware id, type, IP address, ownership, registration time, last connect","description":"Get one UniFi host (console or gateway) by id: hardware id, type, IP address, ownership, registration time, last connection change and last backup time. Use for \"Show details of the UniFi host with id 900A6F00301100000000074A6BA90000000007A3387E0000000063EC9853:123456789\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Host id (the id field from list_hosts).","maxLength":120,"title":"Id","type":"string"}},"required":["id"],"title":"get_hostArguments","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_sites":{"post":{"operationId":"list_sites","summary":"List the UniFi sites with site id, host id, permission, ownership and site metadata; token-paged. Use for \"Which UniFi s","description":"List the UniFi sites with site id, host id, permission, ownership and site metadata; token-paged. Use for \"Which UniFi sites do I manage\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_size":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many items to return per page.","title":"Page Size"},"next_token":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Token from nextToken of the previous answer to get the next page; leave out for the first page.","title":"Next Token"}},"title":"list_sitesArguments","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_devices":{"post":{"operationId":"list_devices","summary":"List UniFi devices grouped by host with name, model, MAC, IP, product line, status, firmware version, update availabilit","description":"List UniFi devices grouped by host with name, model, MAC, IP, product line, status, firmware version, update availability and adoption time. Optionally limit to one host. Use for \"Which UniFi devices have a firmware update available\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"host_id":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Only devices of the host with this id (from list_hosts).","title":"Host Id"},"time":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only devices processed after this RFC 3339 time, for example 2026-10-01T00:00:00Z.","title":"Time"},"page_size":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many items to return per page.","title":"Page Size"},"next_token":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Token from nextToken of the previous answer to get the next page; leave out for the first page.","title":"Next Token"}},"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_isp_metrics":{"post":{"operationId":"get_isp_metrics","summary":"Get ISP performance metrics per site: average and maximum latency, packet loss, download and upload speed in kbps, uptim","description":"Get ISP performance metrics per site: average and maximum latency, packet loss, download and upload speed in kbps, uptime and downtime, at 5-minute or 1-hour intervals. Give either a begin and end time or a duration. Use for \"How has my UniFi internet connection performed over the last day\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"type":{"description":"Interval size of the metrics: 5m or 1h.","enum":["5m","1h"],"title":"Type","type":"string"},"begin_timestamp":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Earliest time to read, RFC 3339, for example 2026-10-15T00:00:00Z.","title":"Begin Timestamp"},"end_timestamp":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Latest time to read, RFC 3339.","title":"End Timestamp"},"duration":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Time range back from now instead of begin and end, for example 24h.","title":"Duration"}},"required":["type"],"title":"get_isp_metricsArguments","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_sd_wan_configs":{"post":{"operationId":"list_sd_wan_configs","summary":"List the SD-WAN configurations with id, name and type. Use for \"What SD-WAN configurations do I have in UniFi\".","description":"List the SD-WAN configurations with id, name and type. Use for \"What SD-WAN configurations do I have in UniFi\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_sd_wan_configsArguments","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}}}}