{"openapi":"3.1.0","info":{"title":"Twingate (BYOK) API","version":"0.1.0","description":"Twingate (BYOK) lets an AI assistant read your own Twingate data through the Twingate API with a key you supply (Twingate API token (Read only level recommended)). Read-only: 8 tools (list_remote_networks, list_connectors, list_resources, list_groups, list_users, list_service_accounts, list_security_policies, list_dns_filtering_profiles). The BYOK key travels with each request, is used for that...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-twingate.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-twingate/docs"},"termsOfService":"https://connectorbay.com/byok-twingate/terms"},"servers":[{"url":"https://byok-twingate.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-twingate/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_remote_networks":{"post":{"operationId":"list_remote_networks","summary":"List remote networks (the private networks Twingate connects to) with ID, name, location and network type. Cursor pagina","description":"List remote networks (the private networks Twingate connects to) with ID, name, location and network type. Cursor paginated. Use for \"Which remote networks are set up in Twingate\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"network":{"description":"Your Twingate network subdomain: acme for acme.twingate.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Network","type":"string"},"first":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 50).","title":"First"},"after":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from pageInfo.endCursor of the previous page; leave empty for the first page.","title":"After"}},"required":["network"],"title":"list_remote_networksArguments","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_connectors":{"post":{"operationId":"list_connectors","summary":"List connectors with their remote network ID, state, version and hostname. Cursor paginated. Use for \"Are all my Twingat","description":"List connectors with their remote network ID, state, version and hostname. Cursor paginated. Use for \"Are all my Twingate connectors online\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"network":{"description":"Your Twingate network subdomain: acme for acme.twingate.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Network","type":"string"},"first":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 50).","title":"First"},"after":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from pageInfo.endCursor of the previous page; leave empty for the first page.","title":"After"}},"required":["network"],"title":"list_connectorsArguments","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_resources":{"post":{"operationId":"list_resources","summary":"List network resources (addresses users can reach) with address, alias, remote network ID, active and visible flags, rou","description":"List network resources (addresses users can reach) with address, alias, remote network ID, active and visible flags, routing mode and approval mode. Cursor paginated. Use for \"Which resources can be reached through Twingate\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"network":{"description":"Your Twingate network subdomain: acme for acme.twingate.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Network","type":"string"},"first":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 50).","title":"First"},"after":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from pageInfo.endCursor of the previous page; leave empty for the first page.","title":"After"}},"required":["network"],"title":"list_resourcesArguments","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_groups":{"post":{"operationId":"list_groups","summary":"List groups with name, type (manual, synced or system) and active flag. Cursor paginated. Use for \"What groups exist in ","description":"List groups with name, type (manual, synced or system) and active flag. Cursor paginated. Use for \"What groups exist in Twingate\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"network":{"description":"Your Twingate network subdomain: acme for acme.twingate.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Network","type":"string"},"first":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 50).","title":"First"},"after":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from pageInfo.endCursor of the previous page; leave empty for the first page.","title":"After"}},"required":["network"],"title":"list_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_users":{"post":{"operationId":"list_users","summary":"List users with first and last name, role, type and state; email addresses are not requested. Cursor paginated. Use for ","description":"List users with first and last name, role, type and state; email addresses are not requested. Cursor paginated. Use for \"How many Twingate users are pending or inactive\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"network":{"description":"Your Twingate network subdomain: acme for acme.twingate.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Network","type":"string"},"first":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 50).","title":"First"},"after":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from pageInfo.endCursor of the previous page; leave empty for the first page.","title":"After"}},"required":["network"],"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_service_accounts":{"post":{"operationId":"list_service_accounts","summary":"List service accounts (non-human identities) with ID and name. Keys are not returned. Cursor paginated. Use for \"Which s","description":"List service accounts (non-human identities) with ID and name. Keys are not returned. Cursor paginated. Use for \"Which service accounts does Twingate have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"network":{"description":"Your Twingate network subdomain: acme for acme.twingate.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Network","type":"string"},"first":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 50).","title":"First"},"after":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from pageInfo.endCursor of the previous page; leave empty for the first page.","title":"After"}},"required":["network"],"title":"list_service_accountsArguments","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_security_policies":{"post":{"operationId":"list_security_policies","summary":"List security policies with ID and name. Cursor paginated. Use for \"Which security policies are defined in Twingate\".","description":"List security policies with ID and name. Cursor paginated. Use for \"Which security policies are defined in Twingate\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"network":{"description":"Your Twingate network subdomain: acme for acme.twingate.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Network","type":"string"},"first":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 50).","title":"First"},"after":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from pageInfo.endCursor of the previous page; leave empty for the first page.","title":"After"}},"required":["network"],"title":"list_security_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_dns_filtering_profiles":{"post":{"operationId":"list_dns_filtering_profiles","summary":"List DNS filtering profiles with ID, name and priority (all profiles in one answer). Use for \"Which DNS filtering profil","description":"List DNS filtering profiles with ID, name and priority (all profiles in one answer). Use for \"Which DNS filtering profiles are configured in Twingate\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"network":{"description":"Your Twingate network subdomain: acme for acme.twingate.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Network","type":"string"}},"required":["network"],"title":"list_dns_filtering_profilesArguments","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}}}}