A glossary of technical terms used in ngrok’s documentation.
The following definitions help you better understand the technical concepts related to using ngrok.
Agent Endpoint
An Agent Endpoint is an ngrok endpoint created by an ngrok agent (or SDK) that connects to an upstream service.
The agent establishes a secure tunnel to the ngrok cloud, which forwards traffic to your local or remote service.Learn More
AI Gateway
An AI Gateway is a proxy layer that sits between applications and one or more AI model providers, giving a single integration point to route, secure, and observe inference traffic across hosted or self-hosted models.Learn More
ALPN
ALPN (Application-Layer Protocol Negotiation) allows a client and server to negotiate which application protocol (like HTTP/2 or HTTP/1.1) to use over a secure connection during the TLS handshake.Learn More
API Gateway
An API Gateway is a single entry point that sits in front of one or more backend services, handling routing, authentication, rate limiting, and traffic transformation before requests reach the upstream application.Learn More
BYOC
BYOC (Bring Your Own Cloud) is a deployment model where a vendor’s software runs inside the customer’s own cloud account or infrastructure instead of the vendor’s, so data and compute stay under the customer’s control while the vendor still operates the service.Learn More
CEL
CEL (Common Expression Language) is a fast, safe, and portable expression language developed by Google for evaluating expressions in configuration, policy, and runtime environments.Learn More
circuit breaker
A circuit breaker is a resilience pattern that monitors for failures and temporarily stops forwarding requests to an unhealthy upstream service, allowing it time to recover.Learn More
Cloud Endpoint
A Cloud Endpoint is a persistent ngrok endpoint that runs in ngrok’s cloud service.
Configured entirely in the ngrok dashboard or API, Cloud Endpoints can route traffic to upstream URLs and other endpoints, send custom responses, and more using Traffic Policy.Learn More
CORS
CORS (Cross-Origin Resource Sharing) is a browser security mechanism that controls which web domains are allowed to make requests to a different domain, preventing unauthorized cross-site interactions.Learn More
CRD
CustomResourceDefinitions allow users to extend the Kubernetes API by defining their own resource types.Learn More
Device Gateway
A Device Gateway is a managed connectivity layer for reaching a fleet of remote devices—kiosks, IoT hardware, edge servers—without opening inbound ports or managing a VPN per device.
ngrok’s Device Gateway gives each device a secure outbound tunnel and a stable way to reach it.Learn More
Endpoint Pooling
When you create two ngrok endpoints with the same URL (and binding), those endpoints automatically form a “pool” and share incoming traffic.Learn More
Gateway API CRD
Gateway API CRDs (Custom Resource Definitions) are a set of standardized, extensible resources that manage networking configurations like routing, gateways, and Traffic Policies.Learn More
gRPC
gRPC is a high-performance, open-source remote procedure call (RPC) framework developed by Google that uses HTTP/2 for transport and Protocol Buffers for serialization.Learn More
Helm
Helm is a package manager for Kubernetes that simplifies the deployment and management of applications on Kubernetes clusters.Learn More
HMAC
HMAC (Hash-based Message Authentication Code) is a cryptographic technique that uses a secret key and a hash function to verify both the integrity and authenticity of a message.Learn More
Hybrid Cloud Connectivity
Hybrid cloud connectivity is networking between infrastructure that spans more than one environment—public cloud, private data center, or on-prem—so services in one location can securely reach services in another.Learn More
IdP
An IdP (Identity Provider) is a service that stores and manages digital identities, authenticating users and providing identity information to other applications via protocols like SAML or OIDC.Learn More
Ingress
An ingress is an entry point into a network for traffic from outside of the network.
Internal Endpoint
Internal Endpoints are only accessible to traffic from your other ngrok endpoints, enabling service-to-service communication without exposing traffic to the public internet.
Internal Endpoints use the .internal top-level domain.Learn More
CIDR
Classless Inter-Domain Routing is a method used to allocate IP addresses more efficiently and route IP packets more flexibly than older class-based systems.Learn More
JIT provisioning
Just-in-time (JIT) single sign-on provisioning is a user account provisioning method that automatically creates (or updates) user accounts at the time of login through single sign-on, rather than pre-creating all user accounts in advance.Learn More
JWT
A JWT (JSON Web Token) is a compact, URL-safe token format used to securely transmit information between parties as a JSON object, commonly used for authentication and authorization.Learn More
K8s
K8s is an industry-standard abbreviation for Kubernetes.Learn More
Kubernetes Ingress
A Kubernetes Ingress is an API object that manages external HTTP(S) access to services running inside a Kubernetes cluster, typically handling routing, TLS termination, and load balancing at the cluster edge.Learn More
Kubernetes Operator
A Kubernetes Operator is a controller that extends the Kubernetes API to automate the deployment and lifecycle of an application through custom resources.
The ngrok Kubernetes Operator manages ngrok endpoints, domains, and Traffic Policy as native Kubernetes resources.Learn More
Let’s Encrypt
A free, automated, and open certificate authority (CA) that provides digital certificates to enable HTTPS (SSL/TLS) for websites.Learn More
LLM Gateway
An LLM Gateway is another term for an AI Gateway: a single proxy endpoint that routes requests to one or more large language model providers, centralizing authentication, rate limiting, and failover.Learn More
LLM Proxy
An LLM Proxy is a lightweight intermediary placed in front of a large language model API that forwards requests while adding logging, rate limiting, or credential management, without changing how the application calls the model.Learn More
LLM Router
An LLM Router is the decision layer inside an AI Gateway that picks which model or provider handles a given request—for example based on cost, latency, capability, or a failover rule when a provider is down.Learn More
MCP
MCP (Model Context Protocol) is an open standard that allows AI models to access external data, tools, and services, and potentially use them to automate workflows.Learn More
mTLS
mTLS (Mutual TLS) is a security protocol where both the client and server authenticate each other using TLS certificates, ensuring both parties are who they claim to be.Learn More
ngrok Agent
The ngrok agent is a lightweight command-line application that you install on your machine or server.
It establishes secure, outbound-only connections to the ngrok cloud to create endpoints for your upstream services.Learn More
OAuth
OAuth is an open standard for authorization that allows users to grant third-party applications limited access to their resources without sharing their credentials.Learn More
OIDC
OpenID Connect (OIDC) is an authentication protocol that enables third-party applications to confirm a user’s identity and access basic profile details through a single sign-on (SSO) process.Learn More
OWASP
The Open Web Application Security Project is a non-profit organization dedicated to improving software security through providing resources, tools, and community support.Learn More
Point of Presence
A Point of Presence (PoP) is a physical location in ngrok’s global network where traffic enters the ngrok cloud.
ngrok operates PoPs around the world to minimize latency for end users.Learn More
RBAC
RBAC (Role-Based Access Control) is a method of restricting system access based on the roles assigned to individual users within an organization.Learn More
Reverse Proxy
Reverse proxies are an extra security layer between public traffic and your internal services.
They live on servers or cloud services, and they intercept and forward traffic to upstream services.Learn More
Reverse Tunnel
A reverse tunnel is a connection initiated outbound from a private network to a public relay, which then forwards inbound traffic back through that same connection.
It lets a service behind a firewall or NAT become reachable without opening inbound ports—the mechanism the ngrok agent uses to expose local services.Learn More
Service User
A Service User (previously called a Bot User) is a service account that owns a set of credentials (authtokens, API keys, and SSH keys) independently of a person.
This is useful for automated systems that programmatically interact with your ngrok accounts.Learn More
SAML
SAML (Security Assertion Markup Language) is an open standard for exchanging authentication and authorization data between an identity provider and a service provider, commonly used for enterprise single sign-on.Learn More
SCIM
SCIM (System for Cross-domain Identity Management) is an open standard for automating the exchange of user identity information between identity domains or IT systems.Learn More
Shadow IT
Shadow IT refers to IT systems, software, and cloud services used by individuals within an organization without the IT department’s knowledge or approval.Learn More
Site-to-Site VPN
A site-to-site VPN is an encrypted tunnel connecting two private networks—for example, a company’s data center and a customer’s on-prem network—so devices on either side can reach each other as if on the same LAN.
It typically requires matching VPN appliances and firewall changes on both ends; ngrok’s site-to-site connectivity reaches the same outcome without inbound firewall rules on either side.Learn More
SSO
SSO (single sign-on) is an authentication method that allows users to log in once and gain access to multiple related applications or systems without re-entering credentials.Learn More
SNI
SNI (Server Name Indication) is a TLS extension that allows a client to specify the hostname it is trying to connect to during the TLS handshake, enabling servers to present the correct SSL/TLS certificate for that hostname.Learn More
TCP-KeepAlive
TCP KeepAlive enables TCP connections to remain active even when no data is exchanged between the connected endpoints.Learn More
TLS Certificate
A TLS certificate (or SSL certificate) is a digital certificate that ensures your connection to a website or server is securely encrypted.Learn More
TLS Termination
TLS (Transport Layer Security) termination is the process of decrypting incoming TLS traffic at a server or load balancer before passing the unencrypted traffic to internal systems.Learn More
Traffic Policy
Traffic Policy is a configuration language that enables you to filter, match, manage, and orchestrate traffic to your endpoints.
For example, you can add authentication, send custom responses, rate limit traffic, and more.Learn More
upstream
An upstream is the service, server, or URL that ngrok forwards incoming traffic to.
When you create an ngrok endpoint, the upstream is the destination that ultimately handles the request.
v2
v2 is shorthand for the second major version of the ngrok Agent.Learn More
v3
v3 is shorthand for the third major version of the ngrok Agent.Learn More
WAF
A web application firewall (WAF) is an intermediary service in the cloud or on a server that protects web services by filtering and monitoring HTTP traffic.Learn More
Webhook Gateway
A Webhook Gateway is a managed entry point for receiving webhooks from third-party services and routing them to internal or on-prem systems, typically adding verification, retries, and observability in front of the receiving application.Learn More
WebSocket
WebSocket is a communication protocol that provides full-duplex (two-way) communication channels over a single TCP connection, enabling real-time data exchange between a client and server.Learn More
ZTNA
ZTNA (Zero Trust Network Access) is a security model that grants access to specific applications or resources based on verified identity and policy for each request, rather than placing a user on a network and trusting everything reachable from it.Learn More
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"ngrok documentation","colors":{"primary":"#0078C4","light":"#00BCFF","dark":"#0078C4"},"logo":{"light":"https://mintcdn.com/ngrok/_7R3hf69rnKiCshG/logo/compact-light.svg?fit=max\u0026auto=format\u0026n=_7R3hf69rnKiCshG\u0026q=85\u0026s=d79c7eb9cf2273745608b35a1b312b05","dark":"https://mintcdn.com/ngrok/_7R3hf69rnKiCshG/logo/compact-dark.svg?fit=max\u0026auto=format\u0026n=_7R3hf69rnKiCshG\u0026q=85\u0026s=fcc0cf30ebbc762df394756f6754d3bd","href":"https://ngrok.com/docs"},"favicon":"https://mintcdn.com/ngrok/BQQt-CHCs_8OwVmS/favicon.ico?fit=max\u0026auto=format\u0026n=BQQt-CHCs_8OwVmS\u0026q=85\u0026s=294907ab135b589ed607e4888e1a10a4","background":{"color":{"dark":"#121212"}},"navbar":{"links":[{"href":"https://ngrok.com/","label":"Homepage"},{"href":"https://dashboard.ngrok.com/","label":"Dashboard"},{"href":"https://ngrok.com/changelog","label":"Changelog"}],"primary":{"type":"button","label":"Sign up","href":"https://dashboard.ngrok.com/signup"}},"footer":{"socials":{"x":"https://x.com/ngrokhq","github":"https://github.com/ngrok","linkedin":"https://linkedin.com/company/ngrok","youtube":"https://www.youtube.com/@ngrokHQ"},"links":[{"header":"Product","items":[{"label":"Gateway","href":"https://ngrok.com/docs/gateway/overview"},{"label":"AI Gateway","href":"https://ngrok.ai"},{"label":"Traffic Policy","href":"https://ngrok.com/docs/traffic-policy"},{"label":"Secure Tunnels","href":"https://ngrok.com/docs/agent/overview"},{"label":"Traffic Observability","href":"https://ngrok.com/docs/obs"},{"label":"Kubernetes Operator","href":"https://ngrok.com/docs/k8s"}]},{"header":"Problems we solve","items":[{"label":"API gateway","href":"https://ngrok.com/docs/guides/api-gateway/get-started"},{"label":"AI gateway","href":"https://ngrok.ai/"},{"label":"Webhook gateway","href":"https://ngrok.com/docs/gateway/examples/webhook-gateway"},{"label":"Ephemeral workloads","href":"https://ngrok.com/docs/gateway/examples/ephemeral-workloads"},{"label":"Customer connectivity","href":"https://ngrok.com/use-cases/saas-customer-connectivity"},{"label":"Device gateway","href":"https://ngrok.com/docs/guides/device-gateway/overview"},{"label":"Remote access","href":"https://ngrok.com/docs/guides/ssh-rdp"},{"label":"Share localhost","href":"https://ngrok.com/use-cases/share-localhost"},{"label":"Connect MCPs to AI providers","href":"https://ngrok.com/docs/gateway/api-gateway/mcp-gateway"},{"label":"Test webhooks","href":"https://ngrok.com/docs/share-localhost/webhooks"},{"label":"Access remote K8s clusters","href":"https://ngrok.com/docs/k8s/guides/local-projection"},{"label":"Minecraft","href":"https://ngrok.com/docs/gateway/examples/minecraft"}]},{"header":"Resources","items":[{"label":"Docs","href":"https://ngrok.com/docs/start"},{"label":"Guides","href":"https://ngrok.com/docs/guides"},{"label":"Pricing","href":"https://ngrok.com/pricing"},{"label":"Download","href":"https://ngrok.com/download"},{"label":"Security","href":"https://ngrok.com/security"},{"label":"Trust","href":"https://trust.ngrok.com/"},{"label":"Case studies","href":"https://ngrok.com/customers"},{"label":"Integrations","href":"https://ngrok.com/docs/integrations"},{"label":"Support","href":"https://ngrok.com/support"},{"label":"Abuse","href":"https://ngrok.com/abuse"},{"label":"Status","href":"https://status.ngrok.com/"}]},{"header":"Company","items":[{"label":"About","href":"https://ngrok.com/about"},{"label":"Contact","href":"https://ngrok.com/contact"},{"label":"Blog","href":"https://ngrok.com/blog"},{"label":"Newsletter","href":"https://ngrok.com/newsletter"},{"label":"Press","href":"https://ngrok.com/press"},{"label":"Brand","href":"https://ngrok.com/brand"},{"label":"Careers","href":"https://ngrok.com/careers"}]}]},"seo":{"metatags":{"canonical":"https://ngrok.com/docs"},"indexing":"navigable"},"fonts":{"heading":{"family":"Roobert","weight":600,"source":"https://assets.ngrok.com/fonts/roobert/roobert-proportional-vf.woff2","format":"woff2"},"body":{"family":"Roobert","weight":400,"source":"https://assets.ngrok.com/fonts/roobert/roobert-proportional-vf.woff2","format":"woff2"}},"styling":{"codeblocks":{"theme":{"light":"css-variables","dark":"css-variables"}},"latex":true},"integrations":{"posthog":{"apiKey":"phc_mUGMN4JlTzthGcz0XNK0z6NKUqdeQMn7rPRAM3mifjQ","apiHost":"https://e.ngrok.com"}},"contextual":{"options":["copy","view",{"title":"Connect the ngrok MCP server","description":"Let your AI agent manage your ngrok account","icon":"plug","href":"https://ngrok.com/docs/mcp-server"},"claude",{"title":"Connect to Cursor","description":"Install the ngrok MCP server in Cursor","icon":"/img/icons/cursor.svg","href":{"base":"cursor://anysphere.cursor-deeplink/mcp/install","query":[{"key":"name","value":"ngrok"},{"key":"config","value":"eyJ1cmwiOiJodHRwczovL21jcC5uZ3Jvay5jb20vbWNwIiwiYXV0aCI6eyJDTElFTlRfSUQiOiJpYW1jbGlfM0tlSzhkOHNPNGQ5UkFyQVJ4N1JGemNUVnRPIn19"}]}},{"title":"Connect to VS Code","description":"Install the ngrok MCP server in VS Code","icon":"/img/icons/vscode.svg","href":"vscode:mcp/install?%7B%22name%22%3A%22ngrok%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.ngrok.com%2Fmcp%22%7D"},"assistant","chatgpt","perplexity","grok","aistudio","devin","download-spec"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"ngrok","hasAudioNarration":false,"actualSubdomain":"ngrok","customDomains":["ngrok.com"],"gitSource":{"type":"github","owner":"ngrok","repo":"ngrok-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":true,"issues":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6af76b7a51f1e564984574a7","clientVersion":"0.0.4131","searchFilterCounts":[{"language":"default","tag":"Reference","count":4349},{"language":"default","tag":"Errors","count":1906},{"language":"default","tag":"Error codes","count":1904},{"language":"default","tag":"Gateway","count":485},{"language":"default","tag":"Named error codes","count":362},{"language":"default","tag":"ERR_NGROK_0-999","count":304},{"language":"default","tag":"Integrations","count":300},{"language":"default","tag":"ERR_NGROK_1000-1999","count":271},{"language":"default","tag":"AI Gateway","count":258},{"language":"default","tag":"ERR_NGROK_10000 and above","count":257}],"searchSettings":{"isFiltersEnabled":false}},"assistantConfig":{"enableAskAiButton":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"support@ngrok.com","showHelpButton":true}},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"img{max-width:100%;height:auto}.tooltip{font-weight:bold;text-decoration:none!important;position:relative}.tooltip::after{content:\"\";position:absolute;bottom:0;left:0;width:100%;height:1px;border-bottom:1px dotted rgba(0, 0, 0, 0.8)}:root .tooltip,[data-theme=\"light\"] .tooltip,.light .tooltip{color:rgba(0, 0, 0, 0.8)}:root .tooltip::after,[data-theme=\"light\"] .tooltip::after,.light .tooltip::after{border-bottom-color:rgba(0, 0, 0, 0.8)}[data-theme=\"dark\"] .tooltip,.dark .tooltip{color:rgba(255, 255, 255, 0.8)}[data-theme=\"dark\"] .tooltip::after,.dark .tooltip::after{border-bottom-color:rgba(255, 255, 255, 0.8)}@media (prefers-color-scheme: light){.tooltip{color:rgba(0, 0, 0, 0.8)}.tooltip::after{border-bottom-color:rgba(0, 0, 0, 0.8)}}@media (prefers-color-scheme: dark){.tooltip{color:rgba(255, 255, 255, 0.8)}.tooltip::after{border-bottom-color:rgba(255, 255, 255, 0.8)}}:root td .tooltip{font-weight:inherit;color:inherit}:root .mcp-examples .tooltip{font-weight:inherit;color:inherit}td button[data-state]{text-align:start}td button[data-state] code{white-space:nowrap;word-break:normal;overflow-wrap:normal}td:first-child:has(>button[data-state] code){width:100%}table:has(td:first-child>button[data-state] code) td,table:has(td:first-child>button[data-state] code) th{min-width:0;white-space:nowrap}td .icon{mask-size:contain;-webkit-mask-size:contain}td .tooltip:has(>.icon){text-decoration:none}td .tooltip:has(>.icon)::after{display:none}td pre,td code{word-wrap:break-word;overflow-wrap:break-word;word-break:break-word}td pre{white-space:pre-wrap}td:has(pre),td:has(code){min-width:240px;width:auto}td pre{min-width:200px}td code{min-width:150px}@font-face{font-family:\"Roobert\";src:url(\"https://assets.ngrok.com/fonts/roobert/roobert-proportional-vf.woff2\")\n format(\"woff2 supports variations\"),\n url(\"https://assets.ngrok.com/fonts/roobert/roobert-proportional-vf.woff2\")\n format(\"woff2-variations\");font-weight:300 900;font-display:swap;font-style:normal}@font-face{font-family:\"JetBrains Mono\";src:url(\"https://assets.ngrok.com/fonts/jetbrains/jetbrainsmono-wght.woff2\")\n format(\"woff2 supports variations\"),\n url(\"https://assets.ngrok.com/fonts/jetbrains/jetbrainsmono-wght.woff2\")\n format(\"woff2-variations\");font-weight:100 800;font-display:swap;font-style:normal}@font-face{font-family:\"JetBrains Mono\";src:url(\"https://assets.ngrok.com/fonts/jetbrains/jetbrainsmono-italic-wght.woff2\")\n format(\"woff2 supports variations\"),\n url(\"https://assets.ngrok.com/fonts/jetbrains/jetbrainsmono-italic-wght.woff2\")\n format(\"woff2-variations\");font-weight:100 800;font-display:swap;font-style:italic}code,pre,pre code,.hljs,.token{font-family:\"JetBrains Mono\",\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n Liberation Mono,\n Courier New,\n monospace!important}#topbar-cta-button span.bg-primary-dark{background-color:#121212!important;transition:background-color!important}#topbar-cta-button a:hover span.bg-primary-dark{background-color:#171717!important}#topbar-cta-button span.text-white{color:#fff!important}.dark #topbar-cta-button span.bg-primary-dark,[data-theme=\"dark\"] #topbar-cta-button span.bg-primary-dark{background-color:rgba(255, 255, 255, 0.85)!important;transition:background-color!important}.dark #topbar-cta-button a:hover span.bg-primary-dark,[data-theme=\"dark\"] #topbar-cta-button a:hover span.bg-primary-dark{background-color:#fff!important}.dark #topbar-cta-button span.text-white,[data-theme=\"dark\"] #topbar-cta-button span.text-white{color:#000!important}#topbar-cta-button svg{color:#fff!important}.dark #topbar-cta-button svg,[data-theme=\"dark\"] #topbar-cta-button svg{color:#000!important}footer#footer a{overflow:visible;text-overflow:clip;white-space:nowrap}@media (min-width: 768px) and (max-width: 880px){footer#footer a{white-space:normal}}.card :is([data-component-part=\"card-title\"],[data-component-part=\"card-content\"]){text-wrap:pretty}.nav-tabs-item>div.absolute.bottom-0{height:2px!important}.docs-home-updates a{display:block;padding-block:1.25rem;border-bottom:1px solid #d4d4d4;text-decoration:none}.docs-home-updates .docs-home-date{display:block;color:#666;font-size:0.8125rem;margin-bottom:0.375rem}.docs-home-updates .docs-home-title{color:#121212;font-weight:600}.docs-home-updates a:focus-visible{outline:2px solid rgb(var(--primary));outline-offset:4px}.docs-home-updates a:hover .docs-home-title{text-decoration:underline}.docs-home-updates p{margin:0.375rem 0 0;color:#525252;font-size:0.875rem;line-height:1.5}.dark .docs-home-updates .docs-home-title{color:#f5f5f5}.dark .docs-home-updates a{border-color:#404040}.dark .docs-home-updates a:focus-visible{outline-color:rgb(var(--primary-light))}.dark .docs-home-updates .docs-home-date,.dark .docs-home-updates p{color:#a3a3a3}.nav-anchor div:has(>img[src$=\"/img/icons/gateway.svg\"]){background:rgb(16 185 129 / 0.2)!important}.nav-anchor div:has(>img[src$=\"/img/icons/ai-gateway.svg\"]){background:rgb(245 158 11 / 0.2)!important}.nav-anchor div:has(>img[src$=\"/img/icons/share-localhost.svg\"]){background:rgb(168 85 247 / 0.2)!important}.nav-anchor img[src*=\"/img/icons/\"]{opacity:1;background:transparent!important}html:has(.nav-tabs-item[data-active=\"true\"]:is([href^=\"/gateway/\"],[href^=\"/docs/gateway/\"])),.product-gateway{--primary: 4 120 87;--primary-light: 52 211 153;--primary-dark: 4 120 87}html:has(.nav-tabs-item[data-active=\"true\"]:is([href^=\"/ai-gateway/\"],[href^=\"/docs/ai-gateway/\"])),.product-ai-gateway{--primary: 180 83 9;--primary-light: 251 191 36;--primary-dark: 180 83 9}html:has(.nav-tabs-item[data-active=\"true\"]:is([href^=\"/share-localhost/\"],[href^=\"/docs/share-localhost/\"])),.product-share-localhost{--primary: 147 51 234;--primary-light: 192 132 252;--primary-dark: 147 51 234}#navbar>.max-w-8xl{max-width:none}#navbar .h-16{padding-inline:0.5rem}@media (min-width: 64rem){#navbar a:has(>.nav-logo){margin-left:1.5rem}}@media (min-width: 64rem){#navbar div:has(>.nav-tabs){padding-inline:2rem 1rem}#navbar .nav-tabs{flex:1}#navbar .nav-tabs-item:is([href^=\"/for-agents\"],[href^=\"/docs/for-agents\"]){margin-left:auto}}#navbar .nav-tabs-item:focus-visible{outline:none}#navbar .nav-tabs-item:focus-visible::before{content:\"\";position:absolute;inset:0.625rem -0.5rem;border-radius:0.375rem;box-shadow:0 0 0 4px rgb(var(--primary) / 0.3);pointer-events:none}:is(html.dark,html[data-theme=\"dark\"]) #navbar .nav-tabs-item:focus-visible::before{box-shadow:0 0 0 4px rgb(var(--primary-light) / 0.35)}@media (min-width: 64rem) and (max-width: 80rem){#navbar .nav-tabs{column-gap:1rem}}@media (min-width: 100rem){:root{--topbar-tabs-height: 0rem !important;--experiment-search-width: 9rem;--experiment-actions-width: 27rem}#navbar>.max-w-8xl{position:relative}#navbar div:has(>.nav-tabs){position:absolute;top:0;left:10rem;right:calc(0.5rem + var(--experiment-actions-width) + var(--experiment-search-width) + 2.5rem);height:4rem;padding-inline:0;z-index:30}#navbar .nav-tabs{white-space:nowrap}#navbar .h-16>div>div:has(>a>.nav-logo){flex:1 1 auto}#navbar .h-16>div>div:has(>#search-bar-entry){flex:0 0 var(--experiment-search-width)}#navbar .h-16>div>div:has(>nav){flex:0 0 var(--experiment-actions-width)}#navbar .h-16>div{border-bottom:0}}@media (min-width: 106rem){:root{--experiment-search-width: 12rem}}@media (min-width: 64rem){#navbar.is-not-custom.is-not-center~div:has(>#sidebar){--experiment-sidebar-width: 18rem;--experiment-article-width: 52rem;--experiment-content-width: 74rem;max-width:none;padding-inline:1rem}#navbar.is-not-custom.is-not-center~div>#sidebar{width:var(--experiment-sidebar-width)}#navbar.is-not-custom.is-wide~div:has(>#sidebar)>#content-container{flex:none;width:min(\n var(--experiment-article-width),\n calc(100% - var(--experiment-sidebar-width) - 2rem)\n );margin-left:clamp(\n 2rem,\n calc((100% - var(--experiment-article-width)) / 2 - var(--experiment-sidebar-width)),\n max(2rem, calc(100% - var(--experiment-sidebar-width) - var(--experiment-content-width)))\n );margin-right:auto}#navbar.is-not-custom.is-not-center.is-not-wide~div:has(>#sidebar)>#content-container{flex:none;width:min(\n var(--experiment-content-width),\n calc(100% - var(--experiment-sidebar-width) - 2rem)\n );margin-left:clamp(\n 2rem,\n calc((100% - var(--experiment-article-width)) / 2 - var(--experiment-sidebar-width)),\n max(2rem, calc(100% - var(--experiment-sidebar-width) - var(--experiment-content-width)))\n );margin-right:auto}#navbar.is-not-custom.is-not-center~div #content-area{flex:1;min-width:0;width:auto;margin-inline:0;padding-inline:0}#navbar.is-not-custom.is-not-center.is-not-wide~div #content-side-layout{flex:none;width:19rem}}.ngrok-consent{--ngrok-consent-surface: #ffffff;--ngrok-consent-border: #d4d4d4;--ngrok-consent-text: #121212;--ngrok-consent-action-bg-hover: rgb(115 115 115 / 10%);--ngrok-consent-focus-ring: rgb(0 120 196 / 35%);--ngrok-consent-shadow:\n 0 1px 13px 0 rgb(0 0 0 / 5%),\n 0 4px 6px -4px rgb(0 0 0 / 10%),\n 0 10px 15px -3px rgb(0 0 0 / 10%);position:fixed;inset-inline:0;bottom:1rem;z-index:2147483000;display:flex;justify-content:center;padding-inline:1rem;pointer-events:none}:is(html.dark,html[data-theme=\"dark\"]) .ngrok-consent{--ngrok-consent-surface: #171717;--ngrok-consent-border: #404040;--ngrok-consent-text: #ffffff;--ngrok-consent-focus-ring: rgb(0 188 255 / 35%);--ngrok-consent-shadow:\n 0 1px 13px 0 rgb(0 0 0 / 15%),\n 0 4px 6px -4px rgb(0 0 0 / 30%),\n 0 10px 15px -3px rgb(0 0 0 / 30%)}@media (min-width: 640px){.ngrok-consent{bottom:2.5rem}}.ngrok-consent-panel{pointer-events:auto;display:flex;align-items:center;gap:0.75rem;width:fit-content;max-width:100%;padding:0.5rem 0.75rem;border:1px solid var(--ngrok-consent-border);border-radius:1rem;background-color:var(--ngrok-consent-surface);color:var(--ngrok-consent-text);box-shadow:var(--ngrok-consent-shadow);transition-property:opacity, translate;transition-timing-function:cubic-bezier(0, 0, 0.2, 1);transition-duration:400ms}.ngrok-consent-panel[hidden]{display:none}.ngrok-consent-panel[data-state=\"closed\"]{pointer-events:none;opacity:0;transition-duration:200ms}@media (prefers-reduced-motion: no-preference){.ngrok-consent-panel[data-state=\"closed\"]{translate:0 calc(100% + 2.5rem)}}.ngrok-consent-message{margin:0;font-size:0.875rem;line-height:1.25rem}.ngrok-consent-actions{display:flex;align-items:center;gap:0.375rem}.ngrok-consent-icon-button{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;padding:0;border:1px solid transparent;border-radius:0.375rem;background-color:transparent;color:var(--ngrok-consent-text);cursor:pointer;outline:2px solid transparent;outline-offset:2px;text-decoration:none;transition:transform 150ms cubic-bezier(0, 0, 0.2, 1)}.ngrok-consent-icon-button:hover{background-color:var(--ngrok-consent-action-bg-hover)}.ngrok-consent-icon-button:active{transform:scale(0.97)}.ngrok-consent-icon-button:focus-visible{box-shadow:0 0 0 4px var(--ngrok-consent-focus-ring)}.ngrok-consent-icon-button svg{width:1.25rem;height:1.25rem;flex-shrink:0}img[src$=\"/img/icons/cursor.svg\"],img[src$=\"/img/icons/vscode.svg\"]{opacity:0.5}.dark img[src$=\"/img/icons/cursor.svg\"],.dark img[src$=\"/img/icons/vscode.svg\"]{filter:invert(1)}:root{--mint-foreground: oklch(18.2% 0 0);--mint-token-comment: oklch(18.2% 0 0 / 60%);--mint-token-constant: oklch(55.5% 0.163 48.998);--mint-token-string: oklch(50.8% 0.118 165.612);--mint-token-string-expression: oklch(50.8% 0.118 165.612);--mint-token-keyword: oklch(49.6% 0.265 301.924);--mint-token-function: oklch(50% 0.134 242.749);--mint-token-parameter: oklch(51.4% 0.222 16.935);--mint-token-punctuation: oklch(50% 0.134 242.749);--mint-token-link: oklch(50% 0.134 242.749);--mantle-code-bg: oklch(98.5% 0 0);--mantle-code-border: oklch(87% 0 0);--mantle-code-header-text: oklch(37.1% 0 0);--mantle-code-active-tab-bg: oklch(55.6% 0 0 / 15%)}:is(html.dark,html[data-theme=\"dark\"]){--mint-foreground: #fff;--mint-token-comment: rgb(255 255 255 / 50%);--mint-token-constant: oklch(87.9% 0.169 91.605);--mint-token-string: oklch(84.5% 0.143 164.978);--mint-token-string-expression: oklch(84.5% 0.143 164.978);--mint-token-keyword: oklch(82.7% 0.119 306.383);--mint-token-function: oklch(82.8% 0.111 230.318);--mint-token-parameter: oklch(81% 0.117 11.638);--mint-token-punctuation: oklch(82.8% 0.111 230.318);--mint-token-link: oklch(82.8% 0.111 230.318);--mantle-code-bg: oklch(18.2% 0 0);--mantle-code-border: oklch(37.1% 0 0);--mantle-code-header-text: oklch(87% 0 0)}.callout:is([data-callout-type=\"note\"],[data-callout-type=\"info\"]){--mantle-intent-500: oklch(68.5% 0.169 237.323);--mantle-intent-700: oklch(50% 0.134 242.749);--mantle-intent-900: oklch(39.1% 0.09 240.876)}.callout:is([data-callout-type=\"tip\"],[data-callout-type=\"check\"]){--mantle-intent-500: oklch(69.6% 0.17 162.48);--mantle-intent-700: oklch(50.8% 0.118 165.612);--mantle-intent-900: oklch(37.8% 0.077 168.94)}.callout[data-callout-type=\"warning\"]{--mantle-intent-500: oklch(76.9% 0.188 70.08);--mantle-intent-700: oklch(55.5% 0.163 48.998);--mantle-intent-900: oklch(41.4% 0.112 45.904)}.callout[data-callout-type=\"danger\"]{--mantle-intent-500: oklch(64.5% 0.246 16.439);--mantle-intent-700: oklch(51.4% 0.222 16.935);--mantle-intent-900: oklch(41% 0.159 10.272)}:is(html.dark,html[data-theme=\"dark\"]) .callout:is([data-callout-type=\"note\"],[data-callout-type=\"info\"]){--mantle-intent-700: oklch(82.8% 0.111 230.318);--mantle-intent-900: oklch(95.1% 0.026 236.824)}:is(html.dark,html[data-theme=\"dark\"]) .callout:is([data-callout-type=\"tip\"],[data-callout-type=\"check\"]){--mantle-intent-700: oklch(84.5% 0.143 164.978);--mantle-intent-900: oklch(95% 0.052 163.051)}:is(html.dark,html[data-theme=\"dark\"]) .callout[data-callout-type=\"warning\"]{--mantle-intent-700: oklch(87.9% 0.169 91.605);--mantle-intent-900: oklch(96.2% 0.059 95.617)}:is(html.dark,html[data-theme=\"dark\"]) .callout[data-callout-type=\"danger\"]{--mantle-intent-700: oklch(81% 0.117 11.638);--mantle-intent-900: oklch(94.1% 0.03 12.58)}.callout:is([data-callout-type=\"note\"],[data-callout-type=\"info\"],[data-callout-type=\"tip\"],[data-callout-type=\"check\"],[data-callout-type=\"warning\"],[data-callout-type=\"danger\"]){gap:0.75rem;padding:0.875rem 1rem;border-radius:0.375rem;border-color:color-mix(in oklab, var(--mantle-intent-500) 50%, transparent);background-color:color-mix(in oklab, var(--mantle-intent-500) 10%, transparent)}.callout:is([data-callout-type=\"note\"],[data-callout-type=\"info\"],[data-callout-type=\"tip\"],[data-callout-type=\"check\"],[data-callout-type=\"warning\"],[data-callout-type=\"danger\"]) :is([data-component-part=\"callout-icon\"] svg,[data-component-part=\"callout-content\"]){color:var(--mantle-intent-700)}.callout:is([data-callout-type=\"note\"],[data-callout-type=\"info\"],[data-callout-type=\"tip\"],[data-callout-type=\"check\"],[data-callout-type=\"warning\"],[data-callout-type=\"danger\"]) [data-component-part=\"callout-icon\"]{width:1.25rem;margin-top:0.25rem}.callout:is([data-callout-type=\"note\"],[data-callout-type=\"info\"],[data-callout-type=\"tip\"],[data-callout-type=\"check\"],[data-callout-type=\"warning\"],[data-callout-type=\"danger\"]) [data-component-part=\"callout-icon\"] svg{width:1.25rem;height:1.25rem}.callout:is([data-callout-type=\"note\"],[data-callout-type=\"info\"],[data-callout-type=\"tip\"],[data-callout-type=\"check\"],[data-callout-type=\"warning\"],[data-callout-type=\"danger\"]) [data-component-part=\"callout-content\"]{font-size:1rem;line-height:1.75rem}.callout:is([data-callout-type=\"note\"],[data-callout-type=\"info\"],[data-callout-type=\"tip\"],[data-callout-type=\"check\"],[data-callout-type=\"warning\"],[data-callout-type=\"danger\"]) [data-component-part=\"callout-content\"] ul>li::before{background-color:var(--mantle-intent-700)}.callout:is([data-callout-type=\"note\"],[data-callout-type=\"info\"],[data-callout-type=\"tip\"],[data-callout-type=\"check\"],[data-callout-type=\"warning\"],[data-callout-type=\"danger\"]) [data-component-part=\"callout-content\"] code{color:var(--mantle-intent-900)!important;background-color:color-mix(in oklab, var(--mantle-intent-500) 10%, transparent);border:1px solid color-mix(in oklab, var(--mantle-intent-500) 20%, transparent)}:root :is(.code-block,.code-group){--mint-background: var(--mantle-code-bg);padding:0;border:1px solid var(--mantle-code-border);border-radius:0.375rem;background-color:var(--mantle-code-bg)}:root .code-group .code-block{border:0;border-radius:0 0 0.375rem 0.375rem}.code-block [data-component-part=\"code-block-root\"]{border-radius:inherit}.code-block [data-component-part=\"code-block-root\"]{font-size:0.8125rem}:root .code-block pre{line-height:1.25rem}.code-block [data-component-part=\"scroll-area-viewport\"]{padding:1rem}.code-block [data-component-part=\"code-block-header\"],.code-group [data-component-part=\"code-group-tab-bar\"]{border-bottom:1px solid var(--mantle-code-border);border-radius:0.375rem 0.375rem 0 0}.code-block [data-component-part=\"code-block-header\"]{padding-block:0.5rem;padding-inline:1rem 0.625rem}.code-block [data-component-part=\"code-block-header-filename\"]{color:var(--mantle-code-header-text)}.code-group [data-component-part=\"code-group-tab-bar\"] [role=\"tab\"]{margin-block:0.5rem;color:var(--mantle-code-header-text)}.code-group [data-component-part=\"code-group-tab-bar\"] [role=\"tab\"][aria-selected=\"true\"]{color:var(--mint-foreground)}.code-group [data-component-part=\"code-group-tab-bar\"] [role=\"tab\"]>div:first-child{padding-block:0.125rem;border-radius:0.25rem}.code-group [data-component-part=\"code-group-tab-bar\"] [role=\"tab\"][aria-selected=\"true\"]>div:first-child{background-color:var(--mantle-code-active-tab-bg)}:root .code-group [data-component-part=\"code-group-tab-bar\"] [role=\"tab\"]:hover>div:first-child{color:var(--mint-foreground)}:root .code-group [data-component-part=\"code-group-tab-bar\"] [role=\"tab\"][aria-selected=\"false\"]:hover>div:first-child{background-color:oklch(55.6% 0 0 / 10%)}.code-group [data-component-part=\"code-group-tab-bar\"] [role=\"tab\"]>div:not(:first-child){display:none}.code-block-copy-button button{background-color:var(--mantle-code-bg)!important}.code-block-copy-button button:hover{background-color:var(--mantle-code-active-tab-bg)!important}:root .code-block-copy-button svg{color:var(--mint-token-comment)}:root{--mantle-card-border: oklch(87% 0 0);--mantle-card-bg: #fff;--mantle-card-border-muted: oklch(92.2% 0 0);--mantle-base-bg: oklch(98.5% 0 0);--mantle-separator: oklch(55.6% 0 0 / 20%);--mantle-text-body: oklch(18.2% 0 0 / 75%);--mantle-text-muted: oklch(18.2% 0 0 / 60%);--mantle-text-gray-600: oklch(43.9% 0 0)}:is(html.dark,html[data-theme=\"dark\"]){--mantle-card-border: oklch(37.1% 0 0);--mantle-card-bg: oklch(20.5% 0 0);--mantle-card-border-muted: oklch(26.9% 0 0);--mantle-base-bg: oklch(18.2% 0 0);--mantle-separator: oklch(70.8% 0 0 / 20%);--mantle-text-body: rgb(255 255 255 / 70%);--mantle-text-muted: rgb(255 255 255 / 50%);--mantle-text-gray-600: oklch(70.8% 0 0)}:root .prose :not(pre)>code{padding:0 0.25rem;border:1px solid oklch(55.6% 0 0 / 15%);border-radius:0.375rem;background-color:oklch(55.6% 0 0 / 5%);color:var(--mint-foreground);font-size:0.8em}:root .prose a>code{color:inherit}:root [data-component-part=\"tabs-list\"]{border-color:var(--mantle-separator)}:root [data-component-part=\"tab-button\"]{padding-block:0.75rem calc(0.75rem - 2px);border-bottom-width:3px;color:var(--mantle-text-gray-600);font-weight:500;line-height:1.25rem}:root [data-component-part=\"tab-button\"]:hover{border-color:transparent;color:var(--mint-foreground)}:root [data-component-part=\"tab-button\"][data-active=\"true\"]{border-color:var(--mint-foreground);color:var(--mint-foreground)}:root .tab-container>div>.prose>:last-child{margin-bottom:0}:root .prose table{border:1px solid var(--mantle-card-border);border-collapse:separate;border-spacing:0;border-radius:0.5rem;background-color:var(--mantle-card-bg)}:root .prose table th{height:2.75rem;padding:0 0.75rem;border-bottom:1px solid var(--mantle-card-border-muted);background-color:var(--mantle-base-bg);color:var(--mantle-text-muted);font-size:1rem;font-weight:500;line-height:1.75rem;vertical-align:middle}:root .prose table th:first-child{border-top-left-radius:calc(0.5rem - 1px)}:root .prose table th:last-child{border-top-right-radius:calc(0.5rem - 1px)}:root .prose table td{padding:0.75rem;border-bottom:0;color:var(--mantle-text-body);font-size:1rem;line-height:1.75rem}:root .prose table tbody tr{border-bottom:0}:root .prose table tbody tr+tr>td{border-top:1px solid var(--mantle-card-border-muted)}:root .card{border-color:var(--mantle-card-border);border-radius:0.375rem;background-color:var(--mantle-card-bg)}:root .card [data-component-part=\"card-content-container\"]{padding:1.5rem}:root .card [data-component-part=\"card-title\"]{font-weight:500}:root .accordion-group{border-width:1px 0;border-color:var(--mantle-separator);border-radius:0}:root details.accordion{border-width:0;border-radius:0;background-color:transparent}:root details.accordion:not(.accordion-group>details){border-block:1px solid var(--mantle-separator)}:root .accordion [data-component-part=\"accordion-button\"]{padding:1rem 0;gap:1rem;background-color:transparent}:root .accordion [data-component-part=\"accordion-title\"]{color:var(--mint-foreground)}:root .accordion [data-component-part=\"accordion-caret-right\"]{order:1;background-color:var(--mantle-text-muted);mask:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256'%3E%3Cpath d='M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z'/%3E%3C/svg%3E\") center / contain no-repeat;transition:transform 200ms ease-out}:root .accordion [data-component-part=\"accordion-caret-right\"] svg{display:none}:root details.accordion[open]>summary [data-component-part=\"accordion-caret-right\"]{transform:rotate(180deg)}:root .accordion [data-component-part=\"accordion-content\"]{padding:0 0 1rem}:root #sidebar li>a{border-radius:0.375rem}"}],"page":{"pagePath":"glossary","slug":"/glossary","pageMetadata":{"title":"Glossary of Terms","sidebarTitle":"Glossary","description":"A glossary of technical terms used in ngrok's documentation.","href":"/glossary"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"A glossary of technical terms used in ngrok’s documentation.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,p:`p`,..._provideComponents(),...props.components},{Heading}=_components;if(!Heading)_missingMdxReference(`Heading`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`The following definitions help you better understand the technical concepts related to using ngrok.`}),`\n`,_jsx(Heading,{level:`2`,id:`agent-endpoint`,children:`Agent Endpoint`}),`\n`,_jsx(_components.p,{children:`An Agent Endpoint is an ngrok endpoint created by an ngrok agent (or SDK) that connects to an upstream service.\nThe agent establishes a secure tunnel to the ngrok cloud, which forwards traffic to your local or remote service.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`/endpoints/agent-endpoints/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`ai-gateway`,children:`AI Gateway`}),`\n`,_jsx(_components.p,{children:`An AI Gateway is a proxy layer that sits between applications and one or more AI model providers, giving a single integration point to route, secure, and observe inference traffic across hosted or self-hosted models.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://ngrok.ai/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`alpn`,children:`ALPN`}),`\n`,_jsx(_components.p,{children:`ALPN (Application-Layer Protocol Negotiation) allows a client and server to negotiate which application protocol (like HTTP/2 or HTTP/1.1) to use over a secure connection during the TLS handshake.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`api-gateway`,children:`API Gateway`}),`\n`,_jsx(_components.p,{children:`An API Gateway is a single entry point that sits in front of one or more backend services, handling routing, authentication, rate limiting, and traffic transformation before requests reach the upstream application.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`/gateway/api-gateway/get-started/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`byoc`,children:`BYOC`}),`\n`,_jsx(_components.p,{children:`BYOC (Bring Your Own Cloud) is a deployment model where a vendor’s software runs inside the customer’s own cloud account or infrastructure instead of the vendor’s, so data and compute stay under the customer’s control while the vendor still operates the service.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://ngrok.com/security`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`cel`,children:`CEL`}),`\n`,_jsx(_components.p,{children:`CEL (Common Expression Language) is a fast, safe, and portable expression language developed by Google for evaluating expressions in configuration, policy, and runtime environments.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://github.com/google/cel-spec/tree/master?tab=readme-ov-file#common-expression-language`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`circuit-breaker`,children:`circuit breaker`}),`\n`,_jsx(_components.p,{children:`A circuit breaker is a resilience pattern that monitors for failures and temporarily stops forwarding requests to an unhealthy upstream service, allowing it time to recover.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/Circuit_breaker_design_pattern`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`cloud-endpoint`,children:`Cloud Endpoint`}),`\n`,_jsx(_components.p,{children:`A Cloud Endpoint is a persistent ngrok endpoint that runs in ngrok’s cloud service.\nConfigured entirely in the ngrok dashboard or API, Cloud Endpoints can route traffic to upstream URLs and other endpoints, send custom responses, and more using Traffic Policy.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`/endpoints/cloud-endpoints/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`cors`,children:`CORS`}),`\n`,_jsx(_components.p,{children:`CORS (Cross-Origin Resource Sharing) is a browser security mechanism that controls which web domains are allowed to make requests to a different domain, preventing unauthorized cross-site interactions.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/Cross-origin_resource_sharing`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`crd`,children:`CRD`}),`\n`,_jsx(_components.p,{children:`CustomResourceDefinitions allow users to extend the Kubernetes API by defining their own resource types.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://kubernetes.io//tasks/extend-kubernetes/custom-resources/custom-resource-definitions/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`device-gateway`,children:`Device Gateway`}),`\n`,_jsx(_components.p,{children:`A Device Gateway is a managed connectivity layer for reaching a fleet of remote devices—kiosks, IoT hardware, edge servers—without opening inbound ports or managing a VPN per device.\nngrok’s Device Gateway gives each device a secure outbound tunnel and a stable way to reach it.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`/gateway/device-gateway/overview/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`endpoint-pooling`,children:`Endpoint Pooling`}),`\n`,_jsx(_components.p,{children:`When you create two ngrok endpoints with the same URL (and binding), those endpoints automatically form a “pool” and share incoming traffic.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`/endpoints/endpoint-pooling/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`gateway-api-crd`,children:`Gateway API CRD`}),`\n`,_jsx(_components.p,{children:`Gateway API CRDs (Custom Resource Definitions) are a set of standardized, extensible resources that manage networking configurations like routing, gateways, and Traffic Policies.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://gateway-api.sigs.k8s.io/guides/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`grpc`,children:`gRPC`}),`\n`,_jsx(_components.p,{children:`gRPC is a high-performance, open-source remote procedure call (RPC) framework developed by Google that uses HTTP/2 for transport and Protocol Buffers for serialization.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://grpc.io/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`helm`,children:`Helm`}),`\n`,_jsx(_components.p,{children:`Helm is a package manager for Kubernetes that simplifies the deployment and management of applications on Kubernetes clusters.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://helm.sh/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`hmac`,children:`HMAC`}),`\n`,_jsx(_components.p,{children:`HMAC (Hash-based Message Authentication Code) is a cryptographic technique that uses a secret key and a hash function to verify both the integrity and authenticity of a message.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/HMAC`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`hybrid-cloud-connectivity`,children:`Hybrid Cloud Connectivity`}),`\n`,_jsx(_components.p,{children:`Hybrid cloud connectivity is networking between infrastructure that spans more than one environment—public cloud, private data center, or on-prem—so services in one location can securely reach services in another.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://ngrok.com/use-cases/saas-customer-connectivity`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`idp`,children:`IdP`}),`\n`,_jsx(_components.p,{children:`An IdP (Identity Provider) is a service that stores and manages digital identities, authenticating users and providing identity information to other applications via protocols like SAML or OIDC.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/Identity_provider`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`ingress`,children:`Ingress`}),`\n`,_jsx(_components.p,{children:`An ingress is an entry point into a network for traffic from outside of the network.`}),`\n`,_jsx(Heading,{level:`2`,id:`internal-endpoint`,children:`Internal Endpoint`}),`\n`,_jsx(_components.p,{children:`Internal Endpoints are only accessible to traffic from your other ngrok endpoints, enabling service-to-service communication without exposing traffic to the public internet.\nInternal Endpoints use the .internal top-level domain.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`/endpoints/internal-endpoints/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`cidr`,children:`CIDR`}),`\n`,_jsx(_components.p,{children:`Classless Inter-Domain Routing is a method used to allocate IP addresses more efficiently and route IP packets more flexibly than older class-based systems.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`jit-provisioning`,children:`JIT provisioning`}),`\n`,_jsx(_components.p,{children:`Just-in-time (JIT) single sign-on provisioning is a user account provisioning method that automatically creates (or updates) user accounts at the time of login through single sign-on, rather than pre-creating all user accounts in advance.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/System_for_Cross-domain_Identity_Management`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`jwt`,children:`JWT`}),`\n`,_jsx(_components.p,{children:`A JWT (JSON Web Token) is a compact, URL-safe token format used to securely transmit information between parties as a JSON object, commonly used for authentication and authorization.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/JSON_Web_Token`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`k8s`,children:`K8s`}),`\n`,_jsx(_components.p,{children:`K8s is an industry-standard abbreviation for Kubernetes.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://kubernetes.io/docs/concepts/overview/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`kubernetes-ingress`,children:`Kubernetes Ingress`}),`\n`,_jsx(_components.p,{children:`A Kubernetes Ingress is an API object that manages external HTTP(S) access to services running inside a Kubernetes cluster, typically handling routing, TLS termination, and load balancing at the cluster edge.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`/integrations/kubernetes-ingress/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`kubernetes-operator`,children:`Kubernetes Operator`}),`\n`,_jsx(_components.p,{children:`A Kubernetes Operator is a controller that extends the Kubernetes API to automate the deployment and lifecycle of an application through custom resources.\nThe ngrok Kubernetes Operator manages ngrok endpoints, domains, and Traffic Policy as native Kubernetes resources.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`/gateway/k8s/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`let’s-encrypt`,children:`Let’s Encrypt`}),`\n`,_jsx(_components.p,{children:`A free, automated, and open certificate authority (CA) that provides digital certificates to enable HTTPS (SSL/TLS) for websites.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://letsencrypt.org/about/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`llm-gateway`,children:`LLM Gateway`}),`\n`,_jsx(_components.p,{children:`An LLM Gateway is another term for an AI Gateway: a single proxy endpoint that routes requests to one or more large language model providers, centralizing authentication, rate limiting, and failover.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://ngrok.ai/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`llm-proxy`,children:`LLM Proxy`}),`\n`,_jsx(_components.p,{children:`An LLM Proxy is a lightweight intermediary placed in front of a large language model API that forwards requests while adding logging, rate limiting, or credential management, without changing how the application calls the model.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`/ai-gateway/overview/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`llm-router`,children:`LLM Router`}),`\n`,_jsx(_components.p,{children:`An LLM Router is the decision layer inside an AI Gateway that picks which model or provider handles a given request—for example based on cost, latency, capability, or a failover rule when a provider is down.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`/ai-gateway/overview/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`mcp`,children:`MCP`}),`\n`,_jsx(_components.p,{children:`MCP (Model Context Protocol) is an open standard that allows AI models to access external data, tools, and services, and potentially use them to automate workflows.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/Model_Context_Protocol`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`mtls`,children:`mTLS`}),`\n`,_jsx(_components.p,{children:`mTLS (Mutual TLS) is a security protocol where both the client and server authenticate each other using TLS certificates, ensuring both parties are who they claim to be.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/Mutual_authentication`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`ngrok-agent`,children:`ngrok Agent`}),`\n`,_jsx(_components.p,{children:`The ngrok agent is a lightweight command-line application that you install on your machine or server.\nIt establishes secure, outbound-only connections to the ngrok cloud to create endpoints for your upstream services.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`/agent/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`oauth`,children:`OAuth`}),`\n`,_jsx(_components.p,{children:`OAuth is an open standard for authorization that allows users to grant third-party applications limited access to their resources without sharing their credentials.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/OAuth`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`oidc`,children:`OIDC`}),`\n`,_jsx(_components.p,{children:`OpenID Connect (OIDC) is an authentication protocol that enables third-party applications to confirm a user’s identity and access basic profile details through a single sign-on (SSO) process.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/OpenID`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`owasp`,children:`OWASP`}),`\n`,_jsx(_components.p,{children:`The Open Web Application Security Project is a non-profit organization dedicated to improving software security through providing resources, tools, and community support.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://owasp.org/about/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`point-of-presence`,children:`Point of Presence`}),`\n`,_jsx(_components.p,{children:`A Point of Presence (PoP) is a physical location in ngrok’s global network where traffic enters the ngrok cloud.\nngrok operates PoPs around the world to minimize latency for end users.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`/gateway/points-of-presence/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`rbac`,children:`RBAC`}),`\n`,_jsx(_components.p,{children:`RBAC (Role-Based Access Control) is a method of restricting system access based on the roles assigned to individual users within an organization.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/Role-based_access_control`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`reverse-proxy`,children:`Reverse Proxy`}),`\n`,_jsx(_components.p,{children:`Reverse proxies are an extra security layer between public traffic and your internal services.\nThey live on servers or cloud services, and they intercept and forward traffic to upstream services.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/Reverse_proxy`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`reverse-tunnel`,children:`Reverse Tunnel`}),`\n`,_jsx(_components.p,{children:`A reverse tunnel is a connection initiated outbound from a private network to a public relay, which then forwards inbound traffic back through that same connection.\nIt lets a service behind a firewall or NAT become reachable without opening inbound ports—the mechanism the ngrok agent uses to expose local services.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/Tunneling_protocol`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`service-user`,children:`Service User`}),`\n`,_jsx(_components.p,{children:`A Service User (previously called a Bot User) is a service account that owns a set of credentials (authtokens, API keys, and SSH keys) independently of a person.\nThis is useful for automated systems that programmatically interact with your ngrok accounts.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`/iam/service-users/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`saml`,children:`SAML`}),`\n`,_jsx(_components.p,{children:`SAML (Security Assertion Markup Language) is an open standard for exchanging authentication and authorization data between an identity provider and a service provider, commonly used for enterprise single sign-on.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/Security_Assertion_Markup_Language`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`scim`,children:`SCIM`}),`\n`,_jsx(_components.p,{children:`SCIM (System for Cross-domain Identity Management) is an open standard for automating the exchange of user identity information between identity domains or IT systems.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/System_for_Cross-domain_Identity_Management`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`shadow-it`,children:`Shadow IT`}),`\n`,_jsx(_components.p,{children:`Shadow IT refers to IT systems, software, and cloud services used by individuals within an organization without the IT department’s knowledge or approval.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/Shadow_IT`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`site-to-site-vpn`,children:`Site-to-Site VPN`}),`\n`,_jsx(_components.p,{children:`A site-to-site VPN is an encrypted tunnel connecting two private networks—for example, a company’s data center and a customer’s on-prem network—so devices on either side can reach each other as if on the same LAN.\nIt typically requires matching VPN appliances and firewall changes on both ends; ngrok’s site-to-site connectivity reaches the same outcome without inbound firewall rules on either side.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`/gateway/site-to-site-connectivity/overview/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`sso`,children:`SSO`}),`\n`,_jsx(_components.p,{children:`SSO (single sign-on) is an authentication method that allows users to log in once and gain access to multiple related applications or systems without re-entering credentials.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/Single_sign-on`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`sni`,children:`SNI`}),`\n`,_jsx(_components.p,{children:`SNI (Server Name Indication) is a TLS extension that allows a client to specify the hostname it is trying to connect to during the TLS handshake, enabling servers to present the correct SSL/TLS certificate for that hostname.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/Server_Name_Indication`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`tcp-keepalive`,children:`TCP-KeepAlive`}),`\n`,_jsx(_components.p,{children:`TCP KeepAlive enables TCP connections to remain active even when no data is exchanged between the connected endpoints.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/Keepalive`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`tls-certificate`,children:`TLS Certificate`}),`\n`,_jsx(_components.p,{children:`A TLS certificate (or SSL certificate) is a digital certificate that ensures your connection to a website or server is securely encrypted.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/Transport_Layer_Security`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`tls-termination`,children:`TLS Termination`}),`\n`,_jsx(_components.p,{children:`TLS (Transport Layer Security) termination is the process of decrypting incoming TLS traffic at a server or load balancer before passing the unencrypted traffic to internal systems.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`/domains/tls-termination/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`traffic-policy`,children:`Traffic Policy`}),`\n`,_jsx(_components.p,{children:`Traffic Policy is a configuration language that enables you to filter, match, manage, and orchestrate traffic to your endpoints.\nFor example, you can add authentication, send custom responses, rate limit traffic, and more.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`/traffic-policy/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`upstream`,children:`upstream`}),`\n`,_jsx(_components.p,{children:`An upstream is the service, server, or URL that ngrok forwards incoming traffic to.\nWhen you create an ngrok endpoint, the upstream is the destination that ultimately handles the request.`}),`\n`,_jsx(Heading,{level:`2`,id:`v2`,children:`v2`}),`\n`,_jsx(_components.p,{children:`v2 is shorthand for the second major version of the ngrok Agent.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`/agent/config/v2`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`v3`,children:`v3`}),`\n`,_jsx(_components.p,{children:`v3 is shorthand for the third major version of the ngrok Agent.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`/agent/config/v3`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`waf`,children:`WAF`}),`\n`,_jsx(_components.p,{children:`A web application firewall (WAF) is an intermediary service in the cloud or on a server that protects web services by filtering and monitoring HTTP traffic.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/Web_application_firewall`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`webhook-gateway`,children:`Webhook Gateway`}),`\n`,_jsx(_components.p,{children:`A Webhook Gateway is a managed entry point for receiving webhooks from third-party services and routing them to internal or on-prem systems, typically adding verification, retries, and observability in front of the receiving application.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`/gateway/webhooks-to-on-prem/overview/`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`websocket`,children:`WebSocket`}),`\n`,_jsx(_components.p,{children:`WebSocket is a communication protocol that provides full-duplex (two-way) communication channels over a single TCP connection, enabling real-time data exchange between a client and server.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://en.wikipedia.org/wiki/WebSocket`,children:`Learn More`})}),`\n`,_jsx(Heading,{level:`2`,id:`ztna`,children:`ZTNA`}),`\n`,_jsx(_components.p,{children:`ZTNA (Zero Trust Network Access) is a security model that grants access to specific applications or resources based on verified identity and policy for each request, rather than placing a user on a network and trusting everything reachable from it.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://ngrok.com/use-cases/saas-customer-connectivity`,children:`Learn More`})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{"theme":{"light":"css-variables","dark":"css-variables"}},"config":{},"pageMetadata":{"title":"Glossary of Terms","sidebarTitle":"Glossary","description":"A glossary of technical terms used in ngrok's documentation.","href":"/glossary"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Agent Endpoint","slug":"agent-endpoint","depth":2,"children":[]},{"title":"AI Gateway","slug":"ai-gateway","depth":2,"children":[]},{"title":"ALPN","slug":"alpn","depth":2,"children":[]},{"title":"API Gateway","slug":"api-gateway","depth":2,"children":[]},{"title":"BYOC","slug":"byoc","depth":2,"children":[]},{"title":"CEL","slug":"cel","depth":2,"children":[]},{"title":"circuit breaker","slug":"circuit-breaker","depth":2,"children":[]},{"title":"Cloud Endpoint","slug":"cloud-endpoint","depth":2,"children":[]},{"title":"CORS","slug":"cors","depth":2,"children":[]},{"title":"CRD","slug":"crd","depth":2,"children":[]},{"title":"Device Gateway","slug":"device-gateway","depth":2,"children":[]},{"title":"Endpoint Pooling","slug":"endpoint-pooling","depth":2,"children":[]},{"title":"Gateway API CRD","slug":"gateway-api-crd","depth":2,"children":[]},{"title":"gRPC","slug":"grpc","depth":2,"children":[]},{"title":"Helm","slug":"helm","depth":2,"children":[]},{"title":"HMAC","slug":"hmac","depth":2,"children":[]},{"title":"Hybrid Cloud Connectivity","slug":"hybrid-cloud-connectivity","depth":2,"children":[]},{"title":"IdP","slug":"idp","depth":2,"children":[]},{"title":"Ingress","slug":"ingress","depth":2,"children":[]},{"title":"Internal Endpoint","slug":"internal-endpoint","depth":2,"children":[]},{"title":"CIDR","slug":"cidr","depth":2,"children":[]},{"title":"JIT provisioning","slug":"jit-provisioning","depth":2,"children":[]},{"title":"JWT","slug":"jwt","depth":2,"children":[]},{"title":"K8s","slug":"k8s","depth":2,"children":[]},{"title":"Kubernetes Ingress","slug":"kubernetes-ingress","depth":2,"children":[]},{"title":"Kubernetes Operator","slug":"kubernetes-operator","depth":2,"children":[]},{"title":"Let’s Encrypt","slug":"let’s-encrypt","depth":2,"children":[]},{"title":"LLM Gateway","slug":"llm-gateway","depth":2,"children":[]},{"title":"LLM Proxy","slug":"llm-proxy","depth":2,"children":[]},{"title":"LLM Router","slug":"llm-router","depth":2,"children":[]},{"title":"MCP","slug":"mcp","depth":2,"children":[]},{"title":"mTLS","slug":"mtls","depth":2,"children":[]},{"title":"ngrok Agent","slug":"ngrok-agent","depth":2,"children":[]},{"title":"OAuth","slug":"oauth","depth":2,"children":[]},{"title":"OIDC","slug":"oidc","depth":2,"children":[]},{"title":"OWASP","slug":"owasp","depth":2,"children":[]},{"title":"Point of Presence","slug":"point-of-presence","depth":2,"children":[]},{"title":"RBAC","slug":"rbac","depth":2,"children":[]},{"title":"Reverse Proxy","slug":"reverse-proxy","depth":2,"children":[]},{"title":"Reverse Tunnel","slug":"reverse-tunnel","depth":2,"children":[]},{"title":"Service User","slug":"service-user","depth":2,"children":[]},{"title":"SAML","slug":"saml","depth":2,"children":[]},{"title":"SCIM","slug":"scim","depth":2,"children":[]},{"title":"Shadow IT","slug":"shadow-it","depth":2,"children":[]},{"title":"Site-to-Site VPN","slug":"site-to-site-vpn","depth":2,"children":[]},{"title":"SSO","slug":"sso","depth":2,"children":[]},{"title":"SNI","slug":"sni","depth":2,"children":[]},{"title":"TCP-KeepAlive","slug":"tcp-keepalive","depth":2,"children":[]},{"title":"TLS Certificate","slug":"tls-certificate","depth":2,"children":[]},{"title":"TLS Termination","slug":"tls-termination","depth":2,"children":[]},{"title":"Traffic Policy","slug":"traffic-policy","depth":2,"children":[]},{"title":"upstream","slug":"upstream","depth":2,"children":[]},{"title":"v2","slug":"v2","depth":2,"children":[]},{"title":"v3","slug":"v3","depth":2,"children":[]},{"title":"WAF","slug":"waf","depth":2,"children":[]},{"title":"Webhook Gateway","slug":"webhook-gateway","depth":2,"children":[]},{"title":"WebSocket","slug":"websocket","depth":2,"children":[]},{"title":"ZTNA","slug":"ztna","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/ngrok/05d9da4b27f4fed8/redirect-to-ngrok.js","/docs/_mintlify/custom/ngrok/cabe0d94bdb3d370/persist-query-params.js","/docs/_mintlify/custom/ngrok/52bc6b535db9c274/definition-wrapper.js","/docs/_mintlify/custom/ngrok/6167f7a3c0c9913f/consent.js"],"subdomain":"ngrok","siteName":"ngrok documentation","title":"Glossary of Terms - ngrok documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-05T16:33:53.491Z","originalFileLocation":"glossary.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"A glossary of technical terms used in ngrok\u0026#x27;s documentation.\">\u003cmeta data-mint-head name=\"application-name\" content=\"ngrok documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/ngrok/EDFj7szN2_Vn64sM/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/ngrok/EDFj7szN2_Vn64sM/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/ngrok/EDFj7szN2_Vn64sM/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/ngrok/EDFj7szN2_Vn64sM/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/ngrok/EDFj7szN2_Vn64sM/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/ngrok/EDFj7szN2_Vn64sM/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/ngrok/EDFj7szN2_Vn64sM/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/ngrok/EDFj7szN2_Vn64sM/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/ngrok/EDFj7szN2_Vn64sM/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Glossary of Terms - ngrok documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"A glossary of technical terms used in ngrok\u0026#x27;s documentation.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ngrok documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://ngrok.com/docs/glossary\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://ngrok.mintlify.site/docs/_mintlify/api/og/v2?division=Help\u0026amp;title=Glossary+of+Terms\u0026amp;description=A+glossary+of+technical+terms+used+in+ngrok%27s+documentation.\u0026amp;theme=7e270833a601ca6e053d019e\u0026amp;signature=60c24d3e2fc003935d2dbd33428edb77845a0d5c96e2df71e552d425a0936c43\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Glossary of Terms - ngrok documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"A glossary of technical terms used in ngrok\u0026#x27;s documentation.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ngrok.mintlify.site/docs/_mintlify/api/og/v2?division=Help\u0026amp;title=Glossary+of+Terms\u0026amp;description=A+glossary+of+technical+terms+used+in+ngrok%27s+documentation.\u0026amp;theme=7e270833a601ca6e053d019e\u0026amp;signature=60c24d3e2fc003935d2dbd33428edb77845a0d5c96e2df71e552d425a0936c43\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/ngrok/EDFj7szN2_Vn64sM/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"ngrok documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0078C4\">\u003clink data-mint-head rel=\"canonical\" href=\"https://ngrok.com/docs/glossary\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/glossary.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://ngrok.com/#organization\",\"name\":\"ngrok documentation\",\"url\":\"https://ngrok.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/ngrok/_7R3hf69rnKiCshG/logo/compact-light.svg?fit=max\u0026auto=format\u0026n=_7R3hf69rnKiCshG\u0026q=85\u0026s=d79c7eb9cf2273745608b35a1b312b05\"}},{\"@type\":\"WebSite\",\"@id\":\"https://ngrok.com/docs#website\",\"name\":\"ngrok documentation\",\"url\":\"https://ngrok.com/docs\",\"publisher\":{\"@id\":\"https://ngrok.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://ngrok.com/docs/glossary#webpage\",\"url\":\"https://ngrok.com/docs/glossary\",\"name\":\"Glossary of Terms\",\"description\":\"A glossary of technical terms used in ngrok's documentation.\",\"dateModified\":\"2026-11-05T16:33:53.491Z\",\"isPartOf\":{\"@id\":\"https://ngrok.com/docs#website\"},\"breadcrumb\":{\"@id\":\"https://ngrok.com/docs/glossary#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://ngrok.com/docs/glossary#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Help\",\"item\":\"https://ngrok.com/docs/faq\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Glossary of Terms\",\"item\":\"https://ngrok.com/docs/glossary\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://ngrok.com/docs/glossary#article\",\"headline\":\"Glossary of Terms\",\"name\":\"Glossary of Terms\",\"description\":\"A glossary of technical terms used in ngrok's documentation.\",\"url\":\"https://ngrok.com/docs/glossary\",\"mainEntityOfPage\":{\"@id\":\"https://ngrok.com/docs/glossary#webpage\"},\"dateModified\":\"2026-11-05T16:33:53.491Z\",\"publisher\":{\"@id\":\"https://ngrok.com/#organization\"},\"isPartOf\":{\"@id\":\"https://ngrok.com/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"ngrok documentation\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"ngrok documentation\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/docs/glossary.md","siteName":"ngrok documentation","nav":{"global":null,"tabs":[{"tab":"Start","anchors":[{"anchor":"Start","icon":"house","pages":[{"group":"Start Here","pages":[{"title":"Get Started with ngrok","mode":"wide","href":"/start"},{"title":"What is ngrok?","href":"/about/index"}]},{"group":"Help","pages":[{"title":"FAQ","description":"Frequently asked questions about ngrok including status page, payment methods, security, and platform features.","href":"/faq/index"},{"title":"Glossary of Terms","sidebarTitle":"Glossary","href":"/glossary"}]}]},{"anchor":"Gateway","icon":"https://mintlify.s3.us-west-1.amazonaws.com/ngrok/img/icons/gateway.svg","href":"/gateway/overview"},{"anchor":"AI Gateway","icon":"https://mintlify.s3.us-west-1.amazonaws.com/ngrok/img/icons/ai-gateway.svg","href":"/ai-gateway/overview"},{"anchor":"Share Localhost","icon":"https://mintlify.s3.us-west-1.amazonaws.com/ngrok/img/icons/share-localhost.svg","href":"/share-localhost/overview"}]},{"tab":"Gateway","pages":[{"title":"Gateway","href":"/gateway/overview"}]},{"tab":"AI Gateway","pages":[{"title":"AI Gateway","href":"/ai-gateway/overview"}]},{"tab":"Share Localhost","pages":[{"title":"Share Localhost","href":"/share-localhost/overview"}]},{"tab":"For AI Agents","pages":[{"title":"For AI Agents","href":"/for-agents"}]},{"tab":"Integrations","pages":[{"title":"Integrations","href":"/integrations"}]},{"tab":"Reference","menu":[{"item":"Platform API","anchors":[{"anchor":"Reference","icon":"book-open","pages":[{"title":"Reference","href":"/api"}],"groups":[{"group":"Reference","pages":[{"title":"Reference","href":"/api-reference/abusereports/create"}]}]}]},{"item":"Agent API","anchors":[{"anchor":"Reference","icon":"book-open","pages":[{"title":"Reference","href":"/gateway/agent/api"}]}]},{"item":"CLI","anchors":[{"anchor":"Reference","icon":"book-open","pages":[{"title":"Reference","href":"/gateway/agent/cli"}]}]},{"item":"Agent Config File","anchors":[{"anchor":"Reference","icon":"book-open","pages":[{"title":"Reference","href":"/gateway/agent/config"}]}]},{"item":"SDKs","anchors":[{"anchor":"Reference","icon":"book-open","pages":[{"title":"Reference","href":"/agent-sdks"}]}]},{"item":"Errors","anchors":[{"anchor":"Reference","icon":"book-open","pages":[{"title":"Reference","href":"/errors"}]}]},{"item":"Changelogs","anchors":[{"anchor":"Reference","icon":"book-open","pages":[{"title":"Reference","href":"/gateway/agent/changelog"}]}]}],"pages":[{"title":"Reference","href":"/api"}]},{"tab":"Pricing","pages":[{"title":"Pricing","href":"/pricing-limits"}]}]},"basePath":"","title":"Glossary of Terms - ngrok documentation","buildId":"dpl_Eok1jboeiLTUE4ccnKdogAktkDhH","deploymentId":"dpl_Eok1jboeiLTUE4ccnKdogAktkDhH","dynamics":[],"chunks":[]}