{"openapi":"3.1.0","info":{"title":"ngrok (BYOK) API","version":"0.1.0","description":"ngrok (BYOK) lets an AI assistant read your own ngrok data through the ngrok API with a key you supply (API key). Read-only: 10 tools (list_endpoints, get_endpoint, list_tunnels, list_tunnel_sessions, list_reserved_domains, list_reserved_addrs, list_https_edges, list_ip_policies, list_agent_ingresses, list_api_keys). The BYOK key travels with each request, is used for that one call only and is...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-ngrok.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-ngrok/docs"},"termsOfService":"https://connectorbay.com/byok-ngrok/terms"},"servers":[{"url":"https://byok-ngrok.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-ngrok/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_endpoints":{"post":{"operationId":"list_endpoints","summary":"List the active ngrok endpoints with public URL, type, region, upstream URL, description and creation time. Newest first","description":"List the active ngrok endpoints with public URL, type, region, upstream URL, description and creation time. Newest first, up to 100 per page. Use for \"Which ngrok endpoints are online right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many items to return (1 to 100, default 100).","title":"Limit"},"before_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Paging: return items created before this id (the last id of the previous page). Leave out for the first page.","title":"Before Id"},"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Optional CEL filter expression, for example \"obj.region == 'us'\". See the ngrok API filtering guide.","title":"Filter"}},"title":"list_endpointsArguments","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_endpoint":{"post":{"operationId":"get_endpoint","summary":"Get one ngrok endpoint by id: public URL, type, region, upstream, traffic policy and the ids of its domain, tunnel and e","description":"Get one ngrok endpoint by id: public URL, type, region, upstream, traffic policy and the ids of its domain, tunnel and edge. Use for \"Show details of this ngrok endpoint\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Endpoint id (starts with ep_), as returned by list_endpoints.","maxLength":80,"title":"Id","type":"string"}},"required":["id"],"title":"get_endpointArguments","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_tunnels":{"post":{"operationId":"list_tunnels","summary":"List the ngrok tunnels that are currently online with public URL, protocol, region and what they forward to. Use for \"Wh","description":"List the ngrok tunnels that are currently online with public URL, protocol, region and what they forward to. Use for \"Which ngrok tunnels are running\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many items to return (1 to 100, default 100).","title":"Limit"},"before_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Paging: return items created before this id (the last id of the previous page). Leave out for the first page.","title":"Before Id"}},"title":"list_tunnelsArguments","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_tunnel_sessions":{"post":{"operationId":"list_tunnel_sessions","summary":"List the ngrok agent sessions currently connected: agent version, operating system, region, IP address and start time. U","description":"List the ngrok agent sessions currently connected: agent version, operating system, region, IP address and start time. Use for \"Which ngrok agents are connected and from where\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many items to return (1 to 100, default 100).","title":"Limit"},"before_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Paging: return items created before this id (the last id of the previous page). Leave out for the first page.","title":"Before Id"},"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Optional CEL filter expression, for example \"obj.region == 'us'\". See the ngrok API filtering guide.","title":"Filter"}},"title":"list_tunnel_sessionsArguments","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_reserved_domains":{"post":{"operationId":"list_reserved_domains","summary":"List reserved ngrok domains with region, CNAME target, description and creation time. Use for \"Which domains have I rese","description":"List reserved ngrok domains with region, CNAME target, description and creation time. Use for \"Which domains have I reserved in ngrok\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many items to return (1 to 100, default 100).","title":"Limit"},"before_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Paging: return items created before this id (the last id of the previous page). Leave out for the first page.","title":"Before Id"},"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Optional CEL filter expression, for example \"obj.region == 'us'\". See the ngrok API filtering guide.","title":"Filter"}},"title":"list_reserved_domainsArguments","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_reserved_addrs":{"post":{"operationId":"list_reserved_addrs","summary":"List reserved ngrok TCP addresses with region, description and creation time. Use for \"Which TCP addresses have I reserv","description":"List reserved ngrok TCP addresses with region, description and creation time. Use for \"Which TCP addresses have I reserved in ngrok\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many items to return (1 to 100, default 100).","title":"Limit"},"before_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Paging: return items created before this id (the last id of the previous page). Leave out for the first page.","title":"Before Id"},"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Optional CEL filter expression, for example \"obj.region == 'us'\". See the ngrok API filtering guide.","title":"Filter"}},"title":"list_reserved_addrsArguments","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_https_edges":{"post":{"operationId":"list_https_edges","summary":"List ngrok HTTPS edges with their host and ports, description and creation time. Route details are not returned. Use for","description":"List ngrok HTTPS edges with their host and ports, description and creation time. Route details are not returned. Use for \"What HTTPS edges are configured in my ngrok account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many items to return (1 to 100, default 100).","title":"Limit"},"before_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Paging: return items created before this id (the last id of the previous page). Leave out for the first page.","title":"Before Id"}},"title":"list_https_edgesArguments","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_ip_policies":{"post":{"operationId":"list_ip_policies","summary":"List ngrok IP policies (allow and deny lists) with description and creation time. Use for \"Which IP policies exist in my","description":"List ngrok IP policies (allow and deny lists) with description and creation time. Use for \"Which IP policies exist in my ngrok account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many items to return (1 to 100, default 100).","title":"Limit"},"before_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Paging: return items created before this id (the last id of the previous page). Leave out for the first page.","title":"Before Id"},"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Optional CEL filter expression, for example \"obj.region == 'us'\". See the ngrok API filtering guide.","title":"Filter"}},"title":"list_ip_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_agent_ingresses":{"post":{"operationId":"list_agent_ingresses","summary":"List ngrok agent ingresses (custom domains agents connect to) with domain, region domains and creation time. Use for \"Wh","description":"List ngrok agent ingresses (custom domains agents connect to) with domain, region domains and creation time. Use for \"What agent ingresses does my ngrok account have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many items to return (1 to 100, default 100).","title":"Limit"},"before_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Paging: return items created before this id (the last id of the previous page). Leave out for the first page.","title":"Before Id"},"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Optional CEL filter expression, for example \"obj.region == 'us'\". See the ngrok API filtering guide.","title":"Filter"}},"title":"list_agent_ingressesArguments","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_api_keys":{"post":{"operationId":"list_api_keys","summary":"List the ngrok API keys of the account with id, description, owner and creation time. The key values are not returned. U","description":"List the ngrok API keys of the account with id, description, owner and creation time. The key values are not returned. Use for \"Which API keys exist in my ngrok account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many items to return (1 to 100, default 100).","title":"Limit"},"before_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Paging: return items created before this id (the last id of the previous page). Leave out for the first page.","title":"Before Id"},"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Optional CEL filter expression, for example \"obj.region == 'us'\". See the ngrok API filtering guide.","title":"Filter"}},"title":"list_api_keysArguments","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}}}}