Identities and Sessions give you live visibility of users who have authenticated to Endpoints via the OAuth, OpenID Connect, and SAML (early access) Traffic Policy actions.
They enable you to:
Examine active user sessions to your authenticated endpoints including details like device, identity provider, IP address, and network
Revoke sessions to forcibly log users out via the dashboard or API
You can manage Identities and Sessions on your ngrok dashboard or via the ngrok API.Traffic Identities were previously called ‘App Users’.
You may find references with the old name while they’re being transitioned.
ngrok displays the table with the user identity overview, including the provider who authenticated your user, basic information about the user, and the identity provider used for login
ngrok also displays a list of endpoints the user has accessed.
Click on an endpoint that the user has accessed.ngrok displays session information captured while the user was accessing the endpoint. That includes the user device, IP, browser, agent, country, and geo coordinates based on IP
Pasting the coordinates into your favorite mapping service will give you more detailed information about the IP geolocation.
Click the trash can next to the user and then confirm the deletion.The user is deleted and all sessions are invalidated immediately.
Users can reinitiate sessions by logging in again via their Authentication provider.
You can also programmatically investigate and revoke user sessions using the Identities and App Sessions APIs. APIs are the recommended approach when you want to drive session monitoring and deletion from third-party apps such as security management solutions and identity workflows.Examples:
{"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"}],"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"}},"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"},"styling":{"latex":true},"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":""},"chroma":{"liveDeploymentHistoryId":"6aecb8db001d7bfa483962ab","collectionId":"168c55f8-51d1-488b-ad7b-4f43fa25d087","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aecb8db001d7bfa483962ab"},"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":"6aee02cfb24ea02bf4ec94f9","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"Reference","count":541},{"language":"default","tag":"Gateway","count":485},{"language":"default","tag":"Integrations","count":300},{"language":"default","tag":"AI Gateway","count":253},{"language":"default","tag":"Platform API","count":244},{"language":"default","tag":"Connectivity","count":92},{"language":"default","tag":"Webhooks","count":65},{"language":"default","tag":"Kubernetes Operators","count":59},{"language":"default","tag":"Traffic Policy","count":58},{"language":"default","tag":"API Reference","count":48}],"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":"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":"llms-txt-v2","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":"vite-origin","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":"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":"comment-mode","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}.mcp-examples [data-component-part=\"accordion-content\"]{padding-left:3rem}: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}}.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/\"])){--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/\"])){--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/\"])){--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: 96rem){:root{--topbar-tabs-height: 0rem !important;--experiment-search-width: 9rem;--experiment-actions-width: 21rem}#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.is-not-wide~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.is-not-wide~div>#sidebar{width:var(--experiment-sidebar-width)}#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.is-not-wide~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)}"}],"page":{"pagePath":"gateway/traffic-policy/identities","slug":"/gateway/traffic-policy/identities","pageMetadata":{"title":"Traffic Identities","description":"Learn about Traffic Identities and Sessions for managing authenticated users via OAuth, OIDC, and SAML Traffic Policy actions.","href":"/gateway/traffic-policy/identities"},"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: \"Learn about Traffic Identities and Sessions for managing authenticated users via OAuth, OIDC, and SAML Traffic Policy actions.\"\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`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,OptimizedImage,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsxs(_components.p,{children:[`Identities and Sessions give you live visibility of users who have authenticated to Endpoints via the `,_jsx(_components.a,{href:`/gateway/traffic-policy/actions/oauth/`,children:`OAuth`}),`, `,_jsx(_components.a,{href:`/gateway/traffic-policy/actions/openid-connect/`,children:`OpenID Connect`}),`, and `,_jsx(_components.a,{href:`/gateway/traffic-policy/actions/saml/`,children:`SAML`}),` (early access) Traffic Policy actions.\nThey enable you to:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Examine active user sessions to your authenticated endpoints including details like device, identity provider, IP address, and network`}),`\n`,_jsx(_components.li,{children:`Revoke sessions to forcibly log users out via the dashboard or API`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`You can manage Identities and Sessions on your `,_jsx(_components.a,{href:`https://dashboard.ngrok.com/traffic-identities`,children:`ngrok dashboard`}),` or via the `,_jsx(_components.a,{href:`#api`,children:`ngrok API`}),`.`]}),`\n`,_jsx(_components.p,{children:`Traffic Identities were previously called ‘App Users’.\nYou may find references with the old name while they’re being transitioned.`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/ngrok/v8P7gS4URgFQZWGA/img/docs/identities-app-user-session-diagram.png?fit=max\u0026auto=format\u0026n=v8P7gS4URgFQZWGA\u0026q=85\u0026s=bbd3e4b08f8a24246ae525718963f759`,alt:`Diagram showing users authenticating via OAuth, OpenID Connect, or SAML through ngrok to reach apps, with app and user session data providing identity context`,width:`1600`,height:`830`,\"data-og-width\":`1600`,\"data-og-height\":`830`,\"data-path\":`img/docs/identities-app-user-session-diagram.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/ngrok/v8P7gS4URgFQZWGA/img/docs/identities-app-user-session-diagram.png?w=280\u0026fit=max\u0026auto=format\u0026n=v8P7gS4URgFQZWGA\u0026q=85\u0026s=cbdddc6ddee46d4fa21787605389de67 280w, https://mintcdn.com/ngrok/v8P7gS4URgFQZWGA/img/docs/identities-app-user-session-diagram.png?w=560\u0026fit=max\u0026auto=format\u0026n=v8P7gS4URgFQZWGA\u0026q=85\u0026s=d3346176b05b1c0a78e014717a8b6050 560w, https://mintcdn.com/ngrok/v8P7gS4URgFQZWGA/img/docs/identities-app-user-session-diagram.png?w=840\u0026fit=max\u0026auto=format\u0026n=v8P7gS4URgFQZWGA\u0026q=85\u0026s=ea86105b24ace7d8276bef5cbeabd01a 840w, https://mintcdn.com/ngrok/v8P7gS4URgFQZWGA/img/docs/identities-app-user-session-diagram.png?w=1100\u0026fit=max\u0026auto=format\u0026n=v8P7gS4URgFQZWGA\u0026q=85\u0026s=75342e5df9fc0724e44b10bc96493154 1100w, https://mintcdn.com/ngrok/v8P7gS4URgFQZWGA/img/docs/identities-app-user-session-diagram.png?w=1650\u0026fit=max\u0026auto=format\u0026n=v8P7gS4URgFQZWGA\u0026q=85\u0026s=a582a4a4b270b6b903088da8a1d0c0b4 1650w, https://mintcdn.com/ngrok/v8P7gS4URgFQZWGA/img/docs/identities-app-user-session-diagram.png?w=2500\u0026fit=max\u0026auto=format\u0026n=v8P7gS4URgFQZWGA\u0026q=85\u0026s=ea15622b75c915a77f8024af2423e772 2500w`}),`\n`,_jsx(Heading,{level:`2`,id:`managing-sessions-from-the-dashboard`,children:`Managing sessions from the dashboard`}),`\n`,_jsx(Heading,{level:`3`,id:`view-sessions`,children:`View sessions`}),`\n`,_jsx(_components.p,{children:`To view Traffic Identities and sessions:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`In the `,_jsx(_components.a,{href:`https://dashboard.ngrok.com`,children:`ngrok dashboard`}),`, navigate to `,_jsx(_components.strong,{children:`Traffic Policy`}),` > `,_jsx(_components.strong,{children:`Identities`}),` (or access the `,_jsx(_components.a,{href:`https://dashboard.ngrok.com/traffic-identities`,children:`Identities`}),` page directly)`]}),`\n`,_jsx(_components.p,{children:`The users are displayed in the table.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Alternatively, use the search bar to filter users by identity provider, User, and ID.`}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`view-session-details`,children:`View session details`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Access the `,_jsx(_components.a,{href:`https://dashboard.ngrok.com/traffic-identities`,children:`Identities`}),` page.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`On the Identities table, select a user:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`ngrok displays the table with the user identity overview, including the provider who authenticated your user, basic information about the user, and the identity provider used for login`}),`\n`,_jsx(_components.li,{children:`ngrok also displays a list of endpoints the user has accessed.`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Click on an endpoint that the user has accessed.`}),`\n`,_jsx(_components.p,{children:`ngrok displays session information captured while the user was accessing the endpoint. That includes the user device, IP, browser, agent, country, and geo coordinates based on IP`}),`\n`]}),`\n`]}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`Pasting the coordinates into your favorite mapping service will give you more detailed information about the IP geolocation.`})}),`\n`,_jsx(Heading,{level:`3`,id:`revoke-sessions`,children:`Revoke sessions`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Access the `,_jsx(_components.a,{href:`https://dashboard.ngrok.com/traffic-identities`,children:`Identities`}),` page and locate your user.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Click the trash can next to the user and then confirm the deletion.`}),`\n`,_jsx(_components.p,{children:`The user is deleted and all sessions are invalidated immediately.\nUsers can reinitiate sessions by logging in again via their Authentication provider.`}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`managing-sessions-from-the-api`,children:`Managing sessions from the API`}),`\n`,_jsxs(_components.p,{children:[`You can also programmatically investigate and revoke user sessions using the `,_jsx(_components.a,{href:`/api-reference/applicationusers/list`,children:`Identities`}),` and `,_jsx(_components.a,{href:`/api-reference/applicationsessions/list`,children:`App Sessions`}),` APIs. APIs are the recommended approach when you want to drive session monitoring and deletion from third-party apps such as security management solutions and identity workflows.`]}),`\n`,_jsx(_components.p,{children:`Examples:`}),`\n`,_jsx(Heading,{level:`3`,id:`to-list-user-sessions`,children:`To list user sessions`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --location`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --request`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`GET `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'https://api.ngrok.com/app/users'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--header `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Ngrok-Version: 2'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--header `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Authorization: Bearer {ngrok api token}'`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`to-get-session-details`,children:`To get session details`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --location`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --request`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`GET `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'https://api.ngrok.com/app/users/{session-id}'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--header `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Ngrok-Version: 2'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--header `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Authorization: Bearer {ngrok api token}'`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`to-revoke-a-session`,children:`To revoke a session`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --location`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --request`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`DELETE `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'https://api.ngrok.com/app/users/{session-id}'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--header `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Ngrok-Version: 2'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`--header `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Authorization: Bearer {ngrok api token}'`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`api`,children:`API`}),`\n`,_jsx(_components.p,{children:`Identities and Sessions are managed programmatically via:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/api-reference/applicationusers/list`,children:`/app/users API Resource`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/api-reference/applicationsessions/list`,children:`/app/sessions API Resource`})}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`traffic-policy-identities-pricing`,children:`Traffic Policy identities pricing`}),`\n`,_jsx(_components.p,{children:`Identities and Session are available on all plans.`})]})}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":{"config":{},"pageMetadata":{"title":"Traffic Identities","description":"Learn about Traffic Identities and Sessions for managing authenticated users via OAuth, OIDC, and SAML Traffic Policy actions.","href":"/gateway/traffic-policy/identities"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Managing sessions from the dashboard","slug":"managing-sessions-from-the-dashboard","depth":2,"children":[{"title":"View sessions","slug":"view-sessions","depth":3,"children":[]},{"title":"View session details","slug":"view-session-details","depth":3,"children":[]},{"title":"Revoke sessions","slug":"revoke-sessions","depth":3,"children":[]}]},{"title":"Managing sessions from the API","slug":"managing-sessions-from-the-api","depth":2,"children":[{"title":"To list user sessions","slug":"to-list-user-sessions","depth":3,"children":[]},{"title":"To get session details","slug":"to-get-session-details","depth":3,"children":[]},{"title":"To revoke a session","slug":"to-revoke-a-session","depth":3,"children":[]}]},{"title":"API","slug":"api","depth":2,"children":[]},{"title":"Traffic Policy identities pricing","slug":"traffic-policy-identities-pricing","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/bd21a8e6e31069d0/definition-wrapper.js","/docs/_mintlify/custom/ngrok/6167f7a3c0c9913f/consent.js"],"subdomain":"ngrok","siteName":"ngrok documentation","title":"Traffic Identities - ngrok documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-05T19:22:13.078Z","originalFileLocation":"gateway/traffic-policy/identities.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=\"Learn about Traffic Identities and Sessions for managing authenticated users via OAuth, OIDC, and SAML Traffic Policy actions.\">\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=\"Traffic Identities - ngrok documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Learn about Traffic Identities and Sessions for managing authenticated users via OAuth, OIDC, and SAML Traffic Policy actions.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ngrok documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://ngrok.com/docs/gateway/traffic-policy/identities\">\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=Concepts\u0026amp;title=Traffic+Identities\u0026amp;description=Learn+about+Traffic+Identities+and+Sessions+for+managing+authenticated+users+via+OAuth%2C+OIDC%2C+and+SAML+Traffic+Policy+actions.\u0026amp;theme=2d279b478d2364e61899f5e9\u0026amp;signature=c0109bd844f0090d76f037caa9496f106ce1d0cfaab55e32e24ea4af4e4d20b6\">\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=\"Traffic Identities - ngrok documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Learn about Traffic Identities and Sessions for managing authenticated users via OAuth, OIDC, and SAML Traffic Policy actions.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ngrok.mintlify.site/docs/_mintlify/api/og/v2?division=Concepts\u0026amp;title=Traffic+Identities\u0026amp;description=Learn+about+Traffic+Identities+and+Sessions+for+managing+authenticated+users+via+OAuth%2C+OIDC%2C+and+SAML+Traffic+Policy+actions.\u0026amp;theme=2d279b478d2364e61899f5e9\u0026amp;signature=c0109bd844f0090d76f037caa9496f106ce1d0cfaab55e32e24ea4af4e4d20b6\">\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/gateway/traffic-policy/identities\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/gateway/traffic-policy/identities.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/gateway/traffic-policy/identities#webpage\",\"url\":\"https://ngrok.com/docs/gateway/traffic-policy/identities\",\"name\":\"Traffic Identities\",\"description\":\"Learn about Traffic Identities and Sessions for managing authenticated users via OAuth, OIDC, and SAML Traffic Policy actions.\",\"dateModified\":\"2026-11-05T19:22:13.078Z\",\"isPartOf\":{\"@id\":\"https://ngrok.com/docs#website\"},\"breadcrumb\":{\"@id\":\"https://ngrok.com/docs/gateway/traffic-policy/identities#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://ngrok.com/docs/gateway/traffic-policy/identities#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Traffic Policy\",\"item\":\"https://ngrok.com/docs/gateway/traffic-policy/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Concepts\",\"item\":\"https://ngrok.com/docs/gateway/traffic-policy/concepts/expressions\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Traffic Identities\",\"item\":\"https://ngrok.com/docs/gateway/traffic-policy/identities\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://ngrok.com/docs/gateway/traffic-policy/identities#article\",\"headline\":\"Traffic Identities\",\"name\":\"Traffic Identities\",\"description\":\"Learn about Traffic Identities and Sessions for managing authenticated users via OAuth, OIDC, and SAML Traffic Policy actions.\",\"url\":\"https://ngrok.com/docs/gateway/traffic-policy/identities\",\"mainEntityOfPage\":{\"@id\":\"https://ngrok.com/docs/gateway/traffic-policy/identities#webpage\"},\"dateModified\":\"2026-11-05T19:22:13.078Z\",\"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\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"ngrok documentation","nav":{"global":null,"tabs":[{"tab":"Start","pages":[{"title":"Start","href":"/start"}]},{"tab":"Gateway","anchors":[{"anchor":"Gateway","icon":"https://mintlify.s3.us-west-1.amazonaws.com/ngrok/img/icons/gateway.svg","pages":[{"group":"Getting Started","pages":[{"title":"Gateway Overview","sidebarTitle":"Overview","icon":"house","href":"/gateway/overview"},{"title":"CLI Quickstart","sidebarTitle":"Quickstart","icon":"rocket","href":"/gateway/endpoints/agent-cli-quickstart"},{"title":"How Does ngrok's Gateway Work?","sidebarTitle":"How It Works","icon":"gears","href":"/gateway/how-it-works"},{"title":"Points of Presence","icon":"globe","href":"/gateway/points-of-presence"}]},{"group":"Use Cases","pages":[{"group":"API Gateway","pages":[{"title":"Get Started with ngrok's API Gateway","sidebarTitle":"Get Started","href":"/gateway/api-gateway/get-started"},{"title":"Expose an MCP Server to ChatGPT, Claude, Grok, and Cursor","sidebarTitle":"Use ngrok as an MCP Gateway","href":"/gateway/api-gateway/mcp-gateway"},{"title":"Deploy a Multicloud API Gateway","href":"/gateway/api-gateway/multicloud"},{"title":"Using Datadog","href":"/gateway/api-gateway/monitor-ngrok"}]},{"group":"Device Gateway","pages":[{"title":"Device Gateway Overview","sidebarTitle":"Overview","href":"/gateway/device-gateway/overview"},{"title":"Device Gateway Quickstart","sidebarTitle":"Quickstart","href":"/gateway/device-gateway/quickstart"},{"title":"Device Gateway FAQ","sidebarTitle":"FAQ","href":"/gateway/device-gateway/faq"},{"title":"Configure Secure Access to Remote IoT Devices","sidebarTitle":"Using Remote IoT Devices","href":"/gateway/device-gateway/agent"},{"group":"Guides","pages":[{"title":"Configure Remote Connectivity to Your IoT Devices in the Field","sidebarTitle":"Cloud-to-Device","href":"/gateway/device-gateway/cloud-to-device"},{"title":"Secure Remote Access with ngrok for SSH and RDP","sidebarTitle":"Secure Remote Access","href":"/gateway/device-gateway/remote-access"},{"title":"Private Connectivity to Remote IoT Devices with ngrokd","sidebarTitle":"Private Connectivity","href":"/gateway/device-gateway/private-connectivity"},{"title":"Fleet Management","sidebarTitle":"Fleet Management","href":"/gateway/device-gateway/fleet-management"},{"title":"Connect to Devices Using the Python SDK","sidebarTitle":"Connect via SDKs","href":"/gateway/device-gateway/sdk"}]},{"group":"Concepts","pages":[{"title":"Device Security","href":"/gateway/device-gateway/security"},{"title":"Secure Tunnels for Devices","sidebarTitle":"Secure Tunnels","href":"/gateway/device-gateway/tunnels"},{"title":"Traffic Policy for Devices","sidebarTitle":"Traffic Policy","href":"/gateway/device-gateway/traffic-policy"}]},{"group":"Installation Guides","pages":[{"title":"Install ngrok on Linux","sidebarTitle":"Linux","href":"/gateway/device-gateway/linux"},{"title":"Install ngrok on Linux (ARM64)","sidebarTitle":"Linux (ARM64)","href":"/gateway/device-gateway/arm64"},{"title":"Install ngrok on Raspberry Pi","sidebarTitle":"Raspberry Pi","href":"/gateway/device-gateway/raspberry-pi"},{"title":"Install ngrok on Raspberry Pi OS (Formerly Raspbian)","sidebarTitle":"Raspberry Pi OS (Raspbian)","href":"/gateway/device-gateway/raspbian"},{"title":"Install ngrok on a Remote Windows Device","sidebarTitle":"Windows","href":"/gateway/device-gateway/windows"}]}]},{"group":"Site-to-Site Connectivity","pages":[{"title":"Site-to-Site Connectivity Overview","sidebarTitle":"Overview","href":"/gateway/site-to-site-connectivity/overview"},{"title":"Site-to-Site Connectivity Quickstart","sidebarTitle":"Quickstart","href":"/gateway/site-to-site-connectivity/quickstart"},{"title":"Connect to Your Customer's Network","sidebarTitle":"Tutorial","href":"/gateway/site-to-site-connectivity/index"},{"title":"Site-to-Site Connectivity FAQ","sidebarTitle":"FAQ","href":"/gateway/site-to-site-connectivity/faq"},{"title":"Why Your Vendor Uses ngrok","sidebarTitle":"Why Your Vendor Uses ngrok","href":"/gateway/site-to-site-connectivity/end-customers"},{"group":"Security","pages":[{"title":"Agent TLS Termination","sidebarTitle":"End-to-End Encryption","href":"/gateway/site-to-site-connectivity/agent-tls-termination"},{"title":"Region and IP Resolution","sidebarTitle":"Pin Traffic to Regions","href":"/gateway/site-to-site-connectivity/region-ip-resolution"},{"title":"Authtoken ACLs","sidebarTitle":"Restrict Agent Permissions","href":"/gateway/site-to-site-connectivity/authtoken-acls"}]},{"group":"Reliability","pages":[{"title":"Install ngrok as a Background Service","sidebarTitle":"Run ngrok in the Background","href":"/gateway/site-to-site-connectivity/background-service"},{"title":"Configure Active-Active Agent Redundancy","sidebarTitle":"Eliminate Single Points of Failure","href":"/gateway/site-to-site-connectivity/redundant-agents"},{"title":"Traffic Events and Log Export","sidebarTitle":"Monitor Agent Traffic","href":"/gateway/site-to-site-connectivity/traffic-events"},{"title":"Multi-Region Failover","sidebarTitle":"Automatic Failover","href":"/gateway/site-to-site-connectivity/multi-region-failover"}]},{"group":"Private Addressability","pages":[{"title":"Securely connect to remote customer networks from your K8s cluster","sidebarTitle":"Connect From Kubernetes","href":"/gateway/site-to-site-connectivity/customer-networks"},{"title":"Private Connectivity to Remote Customer Networks with ngrokd","sidebarTitle":"Connect from your non-k8s Environment","href":"/gateway/site-to-site-connectivity/non-k8s-environment"}]},{"group":"Production Ready","pages":[{"title":"Set Up a Custom Connect URL","sidebarTitle":"White-Label Agent Connections","href":"/gateway/site-to-site-connectivity/custom-connect-url"},{"sidebarTitle":"Use the Agent in Your Apps","title":"Create Site-to-Site Connectivity Using SDKs","href":"/gateway/site-to-site-connectivity/agent-sdks"},{"sidebarTitle":"Manage With APIs \u0026 Terraform","title":"Manage ngrok Programmatically With Terraform and API Client Libraries","href":"/gateway/site-to-site-connectivity/apis-terraform"},{"sidebarTitle":"Agent Packaging \u0026 Distribution","title":"Agent Packaging and Distribution","href":"/gateway/site-to-site-connectivity/agent-packaging"}]}]},{"group":"Webhooks to On-Prem","pages":[{"title":"Webhooks to On-Prem","sidebarTitle":"Overview","href":"/gateway/webhooks-to-on-prem/overview"},{"title":"Webhooks to On-Prem Quickstart","sidebarTitle":"Quickstart","href":"/gateway/webhooks-to-on-prem/quickstart"},{"title":"Webhooks to On-Prem Full Tutorial","sidebarTitle":"Tutorial","href":"/gateway/webhooks-to-on-prem/tutorial"},{"title":"Send GitHub Webhooks to On-Prem Jenkins Securely","sidebarTitle":"GitHub to Jenkins","href":"/gateway/webhooks-to-on-prem/github-to-jenkins"},{"title":"Send GitHub Webhooks to On-Prem Argo CD Securely","sidebarTitle":"GitHub to Argo CD","href":"/gateway/webhooks-to-on-prem/github-to-argo-cd"}]},{"group":"Security Best Practices","pages":[{"title":"Best Security Practices for Developer Productivity","sidebarTitle":"Get Started","href":"/gateway/security-dev-productivity/index"},{"title":"Security Quick Wins","href":"/gateway/security-dev-productivity/securing-your-tunnels"},{"title":"Setting up HIPAA-compliant ngrok services","sidebarTitle":"HIPAA Compliance","href":"/gateway/security-dev-productivity/hipaa-compliance"},{"title":"Secure your applications with OAuth 2.0","sidebarTitle":"Adding OAuth 2.0 to Endpoints","href":"/gateway/identity-aware-proxy/securing-with-oauth"},{"title":"Secure Remote Access with ngrok for SSH and RDP","sidebarTitle":"SSH \u0026 RDP Remote Access","href":"/gateway/ssh-rdp/index"},{"title":"Running ngrok Behind a Corporate Firewall","sidebarTitle":"Corporate Firewalls","href":"/gateway/running-behind-firewalls"}]}]},{"group":"Examples","pages":[{"title":"Gateway Examples","sidebarTitle":"Overview","href":"/gateway/examples"},{"group":"Secure and Control Access","expanded":false,"pages":[{"title":"Support Multiple Authentication Methods with Traffic Policy","sidebarTitle":"IP Restrictions or Basic Auth","href":"/gateway/examples/ip-restrictions-basic-auth"},{"title":"Secure Admin Dashboards","sidebarTitle":"Lock Down Your Admin Dashboards","href":"/gateway/examples/lock-admin-dashboards"},{"title":"Create Secure Public Developer Environments","sidebarTitle":"Secure Developer Environments","href":"/gateway/examples/secure-developer-environments"},{"title":"Validate Requests Against Identity Service","sidebarTitle":"Validate Against Identity Service","href":"/gateway/examples/validate-requests-identity"}]},{"group":"Route and Shape Traffic","expanded":false,"pages":[{"title":"Implement the 'Front Door' Pattern","sidebarTitle":"The Front Door Pattern","href":"/gateway/examples/front-door-pattern"},{"title":"Multiplex to Internal Services from a Single Domain","sidebarTitle":"Multiplex to Internal Services","href":"/gateway/examples/multiplex"},{"title":"Microservices API Gateway","href":"/gateway/examples/microservices-gateway"},{"title":"Deploy Custom Error Pages","sidebarTitle":"Custom Error Pages","href":"/gateway/examples/custom-error-pages"},{"title":"Intercept and Rewrite Headers in HTTP Redirect Responses","sidebarTitle":"Intercept and Rewrite Headers","href":"/gateway/examples/rewrite-headers-redirects"},{"title":"Route API and App Traffic by User Agent","sidebarTitle":"Route by User Agent","href":"/gateway/examples/route-api-app-traffic-user-agent"},{"title":"Route to Endpoints by Geography","href":"/gateway/examples/route-by-geography"},{"title":"Route to Services Based on OIDC Authentication","sidebarTitle":"Route by OIDC","href":"/gateway/examples/route-by-oidc"},{"title":"Offload Analytics to a Self-Hosted Service","sidebarTitle":"Offload Analytics","href":"/gateway/examples/offload-analytics"},{"title":"Pre-Tier Requests by IP Address","sidebarTitle":"Pre-Tier Requests","href":"/gateway/examples/pre-tier-requests"}]},{"group":"Connect Apps and Services","expanded":false,"pages":[{"title":"Database Gateway","href":"/gateway/examples/database-gateway"},{"title":"Webhook Gateway","href":"/gateway/examples/webhook-gateway"},{"title":"Self-Hosted PaaS Alternative Gateway","href":"/gateway/examples/paas-alternative-gateway"},{"title":"Agent-Assisted Gateway","href":"/gateway/examples/agent-assisted-gateway"},{"title":"Use a Local LLM in Cursor with Ollama","sidebarTitle":"Local LLM in Cursor","href":"/gateway/examples/cursor-local-llm"},{"title":"Secure Your Public Minecraft Server","sidebarTitle":"Secure Minecraft Server","href":"/gateway/examples/minecraft"},{"title":"Securely Put Your Self-Hosted n8n Workflows Online","sidebarTitle":"Grant Access to Your n8n Workflows","href":"/gateway/examples/n8n"},{"title":"Expose and Secure Your Self-Hosted Odoo Instance","href":"/gateway/examples/odoo"},{"title":"Ollama Remote Access: Expose and Secure Your Ollama API","sidebarTitle":"Expose Ollama API","href":"/gateway/examples/ollama"},{"title":"Accelerate and Secure Your WordPress Installation","sidebarTitle":"Secure Wordpress Installations","href":"/gateway/examples/wordpress"}]},{"group":"Ship Changes Safely","expanded":false,"pages":[{"title":"Switch Traffic Between Blue-Green Deployments","sidebarTitle":"Blue-Green Deployments","href":"/gateway/examples/blue-green-deployments"},{"title":"Distribute Traffic Between Canary Deployments","sidebarTitle":"Canary Deployments","href":"/gateway/examples/canary-deployments"},{"title":"Access CI/CD Deploy Previews on Secure URLs","sidebarTitle":"Ephemeral Workloads","href":"/gateway/examples/ephemeral-workloads"},{"title":"Deploy a Consistent Maintenance Message with Traffic Policy","sidebarTitle":"Maintenance Mode","href":"/gateway/examples/maintenance-mode"}]}]},{"group":"Connectivity","pages":[{"group":"Endpoints","pages":[{"title":"Endpoints Overview","sidebarTitle":"Overview","href":"/gateway/endpoints/index"},{"group":"Agent Endpoints","pages":[{"title":"Agent Endpoints","sidebarTitle":"Overview","href":"/gateway/endpoints/agent-endpoints"},{"title":"Agent Endpoint Protocols","sidebarTitle":"Protocols","href":"/gateway/endpoints/protocols"},{"title":"HTTP/S Agent Endpoints","sidebarTitle":"HTTP/S Endpoints","href":"/gateway/endpoints/http"},{"title":"TLS Agent Endpoints","sidebarTitle":"TLS Endpoints","href":"/gateway/endpoints/tls"},{"title":"TCP Agent Endpoints","sidebarTitle":"TCP Endpoints","href":"/gateway/endpoints/tcp"},{"title":"Endpoint Bindings","sidebarTitle":"Bindings","href":"/gateway/endpoints/bindings"},{"title":"Public Agent Endpoints","sidebarTitle":"Public Endpoints","href":"/gateway/endpoints/public-endpoints"},{"title":"Internal Agent Endpoints","sidebarTitle":"Internal Endpoints","href":"/gateway/endpoints/internal-endpoints"},{"sidebarTitle":"Kubernetes Endpoints","title":"Kubernetes Agent Endpoints","href":"/gateway/endpoints/kubernetes-endpoints"}]},{"group":"Cloud Endpoints","pages":[{"title":"Cloud Endpoints","sidebarTitle":"Overview","href":"/gateway/endpoints/cloud-endpoints/index"},{"title":"Cloud Endpoints Quickstart","sidebarTitle":"Quickstart","href":"/getting-started/cloud-endpoints-quickstart"},{"title":"Cloud Endpoint Protocols","sidebarTitle":"Protocols","href":"/gateway/endpoints/cloud-endpoints/protocols"},{"title":"HTTP/S Cloud Endpoints","sidebarTitle":"HTTP/S Endpoints","href":"/gateway/endpoints/cloud-endpoints/http"},{"title":"TLS Cloud Endpoints","sidebarTitle":"TLS Endpoints","href":"/gateway/endpoints/cloud-endpoints/tls"},{"title":"TCP Cloud Endpoints","sidebarTitle":"TCP Endpoints","href":"/gateway/endpoints/cloud-endpoints/tcp"},{"title":"Endpoint Bindings","sidebarTitle":"Bindings","href":"/gateway/endpoints/cloud-endpoints/bindings"},{"title":"Public Cloud Endpoints","sidebarTitle":"Public Endpoints","href":"/gateway/endpoints/cloud-endpoints/public-endpoints"},{"sidebarTitle":"Internal Endpoints","title":"Internal Cloud Endpoints","href":"/gateway/endpoints/cloud-endpoints/internal-endpoints"},{"sidebarTitle":"Kubernetes Endpoints","title":"Kubernetes Cloud Endpoints","href":"/gateway/endpoints/cloud-endpoints/kubernetes-endpoints"},{"title":"How to Change a Cloud Endpoint Domain","href":"/gateway/endpoints/cloud-endpoints/change-domain-endpoint"},{"title":"Forwarding Traffic to and Load Balancing Internal Endpoints with Cloud Endpoints","sidebarTitle":"Forwarding Traffic and Load Balancing","href":"/gateway/endpoints/cloud-endpoints/forwarding-and-load-balancing"},{"title":"Path-Based Routing and Policy Decentralization with Cloud Endpoints","sidebarTitle":"Path-based Routing","href":"/gateway/endpoints/cloud-endpoints/routing-and-policy-decentralization"}]},{"group":"Pooling \u0026 Load Balancing","pages":[{"title":"Endpoint Pooling","sidebarTitle":"Overview","href":"/gateway/endpoints/endpoint-pooling"},{"title":"Load Balancing Between Multiple Clouds","href":"/gateway/endpoints/load-balancing-multiple-clouds"}]}]},{"group":"Agents","root":{"title":"ngrok Agents Overview","sidebarTitle":"Overview","href":"/gateway/agent/index"},"pages":[{"title":"ngrok Agents Overview","sidebarTitle":"Overview","href":"/gateway/agent/index"},{"title":"How ngrok Agents Work","sidebarTitle":"How It Works","href":"/gateway/agent/how-it-works"},{"title":"ngrok CLI and SDK Connectivity","sidebarTitle":"Connectivity","href":"/gateway/agent/connectivity"},{"group":"CLI setup","pages":[{"title":"Install the ngrok CLI","sidebarTitle":"Install","href":"/gateway/agent/install"},{"title":"Agent Authtokens","sidebarTitle":"Authtokens","href":"/gateway/agent/authtokens"}]},{"group":"Guides","pages":[{"title":"Expose a Service with the ngrok Agent","sidebarTitle":"Expose a Service","href":"/gateway/agent/expose-a-service"},{"title":"Run the ngrok CLI as a Service","sidebarTitle":"Run as a Service","href":"/gateway/agent/service"},{"title":"SSH Reverse Tunnel","sidebarTitle":"Reverse SSH Agent","href":"/gateway/agent/ssh-reverse-tunnel-agent"},{"title":"CLI TLS Termination","sidebarTitle":"TLS Termination","href":"/gateway/agent/agent-tls-termination"},{"title":"ngrok CLI Web Inspection Interface","sidebarTitle":"Web Inspection Interface","href":"/gateway/agent/web-inspection-interface"}]},{"group":"Configuration File","pages":[{"title":"ngrok CLI Configuration File","sidebarTitle":"Overview","href":"/gateway/agent/config/index"},{"title":"Agent Config Version 3","sidebarTitle":"Version 3","href":"/gateway/agent/config/v3"},{"title":"Agent Config Version 2","sidebarTitle":"Version 2","href":"/gateway/agent/config/v2"}]},{"group":"Account and network controls","pages":[{"title":"Agent API Keys","sidebarTitle":"API Keys","href":"/gateway/agent/api-keys"},{"title":"Restrict Where Agents Connect From","sidebarTitle":"IP Restrictions","href":"/gateway/agent/ip-restrictions"},{"title":"Agent Connect URLs","sidebarTitle":"Connect URLs","href":"/gateway/agent/connect-url"}]},{"group":"Reference","pages":[{"title":"ngrok Agent Command Line Interface (CLI)","sidebarTitle":"CLI","href":"/gateway/agent/cli"},{"title":"ngrok CLI API Commands","sidebarTitle":"CLI API Commands","href":"/gateway/agent/cli-api"},{"title":"ngrok CLI API","sidebarTitle":"API","href":"/gateway/agent/api"},{"title":"ngrok Agent Changelog","sidebarTitle":"Changelog","href":"/gateway/agent/changelog"}]},{"group":"Versions","pages":[{"title":"Upgrade to ngrok Agent v3","sidebarTitle":"Upgrade to v3","href":"/gateway/agent/upgrade-v2-v3"},{"title":"ngrok Agent Version Support Policy","sidebarTitle":"Version Support Policy","href":"/gateway/agent/version-support-policy"},{"title":"Agent Version Deprecation Notices","sidebarTitle":"Deprecation Notices","href":"/gateway/agent/deprecation-notices"}]}]},{"group":"Kubernetes Operators","pages":[{"title":"Kubernetes Operator","sidebarTitle":"Overview","href":"/gateway/k8s/index"},{"title":"How the ngrok Kubernetes Operator Works","sidebarTitle":"How It Works","href":"/gateway/k8s/how-it-works"},{"title":"Kubernetes Operator Architecture","sidebarTitle":"Architecture","href":"/gateway/k8s/installation/architecture"},{"title":"Kubernetes Operator Release Process","sidebarTitle":"Releasing","href":"/gateway/k8s/releasing"},{"group":"Quickstarts","pages":[{"title":"Kubernetes Ingress Quickstart","sidebarTitle":"Ingress","href":"/getting-started/kubernetes/ingress"},{"title":"Kubernetes Custom Resources Quickstart","sidebarTitle":"Custom Resources","href":"/getting-started/kubernetes/crds"},{"title":"Kubernetes Gateway API Quickstart","sidebarTitle":"Gateway API","href":"/getting-started/kubernetes/gateway-api"},{"title":"Kubernetes Endpoints Quickstart","sidebarTitle":"Endpoints","href":"/getting-started/kubernetes/endpoints"}]},{"group":"Installation","pages":[{"title":"ngrok Kubernetes Operator Network Egress Requirements","sidebarTitle":"Network Egress","href":"/gateway/k8s/installation/network-egress"},{"title":"How to Update the ngrok Kubernetes Operator","sidebarTitle":"Updates \u0026 Upgrades","href":"/gateway/k8s/installation/update"},{"title":"Kubernetes Operator Helm Configuration","sidebarTitle":"Helm Configuration","href":"/gateway/k8s/installation/helm"},{"title":"Monitoring the Kubernetes Operator","sidebarTitle":"Observability","href":"/gateway/k8s/installation/observability"},{"title":"Uninstalling the ngrok Kubernetes Operator","sidebarTitle":"Uninstall","href":"/gateway/k8s/installation/uninstall"}]},{"group":"Load Balancing","pages":[{"title":"Load Balancing for Kubernetes Services","sidebarTitle":"For Kubernetes Services","href":"/gateway/k8s/load-balancing/load-balancing-kubernetes"},{"title":"Load Balancing Between Multiple Kubernetes Clusters","sidebarTitle":"For Kubernetes Clusters","href":"/gateway/k8s/load-balancing/load-balancing-kubernetes-clusters"}]},{"group":"How-to","pages":[{"title":"Controlling Traffic Flow with Request Routing","sidebarTitle":"Request Routing","href":"/gateway/k8s/guides/how-to/request-routing"},{"title":"TLS Routing","href":"/gateway/k8s/guides/how-to/tls-routing"},{"title":"TCP Routing","href":"/gateway/k8s/guides/how-to/tcp-routing"},{"title":"Customizing Requests with Header Manipulation","sidebarTitle":"Manipulate Headers","href":"/gateway/k8s/guides/how-to/manipulate-headers"},{"title":"Managing Traffic with Redirects","sidebarTitle":"Redirects","href":"/gateway/k8s/guides/how-to/redirects"},{"title":"Customizing Request Routing with URL Rewriting","sidebarTitle":"Rewrite URL","href":"/gateway/k8s/guides/how-to/rewrite-url"},{"title":"Serving Static Responses with Custom Response Policies","sidebarTitle":"Custom/Static Response","href":"/gateway/k8s/guides/how-to/static-response"},{"title":"Managing TLS Termination for Secure Connections","sidebarTitle":"Terminate TLS","href":"/gateway/k8s/guides/how-to/terminate-tls"},{"title":"Securing Upstream Connections with TLS \u0026 Mutual TLS (mTLS)","sidebarTitle":"Upstream TLS","href":"/gateway/k8s/guides/how-to/upstream-tls"},{"title":"Protecting Services with Rate Limiting","sidebarTitle":"Rate Limiting","href":"/gateway/k8s/guides/how-to/rate-limiting"},{"title":"Protecting Your Endpoints by Denying Unwanted Traffic","sidebarTitle":"Deny Requests","href":"/gateway/k8s/guides/how-to/deny-requests"},{"title":"Securing Endpoints with Basic Authentication","sidebarTitle":"Basic Auth","href":"/gateway/k8s/guides/how-to/basic-auth"},{"title":"Securing Your Endpoints with OAuth Authentication","sidebarTitle":"OAuth","href":"/gateway/k8s/guides/how-to/oauth"},{"title":"Authenticating Users with OpenID Connect (OIDC)","sidebarTitle":"OpenID Connect (OIDC)","href":"/gateway/k8s/guides/how-to/oidc"},{"title":"Securing Your Endpoints with JWT Validation","sidebarTitle":"JWT Validation","href":"/gateway/k8s/guides/how-to/jwt-validation"},{"title":"Controlling Access with IP Restrictions","sidebarTitle":"Restrict IPs","href":"/gateway/k8s/guides/how-to/restrict-ips"},{"title":"Restricting Access by Kubernetes Pod Identity","sidebarTitle":"Pod Identity Variables","href":"/gateway/k8s/guides/how-to/pod-identity"},{"title":"Circuit Breaking for System Reliability","sidebarTitle":"Circuit Breaking","href":"/gateway/k8s/guides/how-to/circuit-breaking"},{"title":"Improving Performance with Response Compression","sidebarTitle":"Compress Responses","href":"/gateway/k8s/guides/how-to/compress-response"}]},{"group":"Custom Resources","pages":[{"title":"Kubernetes Operator Custom Resources (CRDs)","href":"/gateway/k8s/crds/index"},{"title":"AgentEndpoint","href":"/gateway/k8s/crds/agentendpoint"},{"title":"CloudEndpoint","href":"/gateway/k8s/crds/cloudendpoint"},{"title":"NgrokTrafficPolicy","href":"/gateway/k8s/crds/ngroktrafficpolicy"},{"title":"BoundEndpoint","href":"/gateway/k8s/crds/boundendpoint"},{"title":"Domain","href":"/gateway/k8s/crds/domain"},{"title":"KubernetesOperator","href":"/gateway/k8s/crds/kubernetesoperator"},{"title":"IPPolicy","href":"/gateway/k8s/crds/ippolicy"}]},{"group":"Guides","pages":[{"title":"Running Multiple ngrok Operator Installations","sidebarTitle":"Multiple Installations","href":"/gateway/k8s/guides/multiple-installs"},{"title":"Running a Local Kubernetes Cluster","sidebarTitle":"Local Cluster Options","href":"/gateway/k8s/guides/local-cluster"},{"title":"Using ngrok Custom Resources","sidebarTitle":"Using CRDs","href":"/gateway/k8s/guides/using-crds"},{"title":"How to create endpoints in the ngrok Kubernetes Operator","sidebarTitle":"Endpoint Types","href":"/gateway/k8s/guides/endpoint-types"},{"title":"Binding Endpoints in the ngrok Kubernetes Operator","sidebarTitle":"Bindings","href":"/gateway/k8s/guides/bindings"},{"title":"Pooling Endpoints in the ngrok Kubernetes Operator","sidebarTitle":"Pooling","href":"/gateway/k8s/guides/pooling"},{"title":"Kubernetes Custom White-Label Domains","sidebarTitle":"Custom Domains","href":"/gateway/k8s/guides/custom-domain"},{"title":"Connecting to Customer Networks","href":"/gateway/k8s/guides/customer-networks"},{"title":"Projecting Local Services into Remote Clusters","sidebarTitle":"Local Projection","href":"/gateway/k8s/guides/local-projection"},{"title":"Gateway API with the ngrok Kubernetes Operator","sidebarTitle":"Using Gateway API","href":"/gateway/k8s/guides/using-gwapi"},{"title":"How the ngrok Operator Uses Ingresses","sidebarTitle":"Using Ingresses","href":"/gateway/k8s/guides/using-ingresses"},{"title":"Migrate from ingress-nginx to the ngrok Kubernetes Operator","sidebarTitle":"Migrate from ingress-nginx","href":"/gateway/k8s/guides/migrate-from-ingress-nginx"},{"title":"Custom ngrok Annotations","sidebarTitle":"Custom Annotations","href":"/gateway/k8s/guides/annotations"},{"title":"ngrok Kubernetes Operator Managed Resources","sidebarTitle":"Managed Resources","href":"/gateway/k8s/guides/managed-resources"},{"title":"Finalizers Created by the ngrok Kubernetes Operator","sidebarTitle":"Finalizers","href":"/gateway/k8s/guides/finalizers"},{"title":"Troubleshooting the ngrok Kubernetes Operator","sidebarTitle":"Troubleshooting","href":"/gateway/k8s/guides/troubleshooting"},{"title":"Exposing the Kubernetes API Server with the ngrok Operator","sidebarTitle":"Expose Kubernetes API","href":"/gateway/k8s/guides/expose-kubernetes-api"},{"title":"How the ngrok Operator Uses LoadBalancer Services","sidebarTitle":"Using LoadBalancer Services","href":"/gateway/k8s/guides/using-loadbalancers"}]}]}]},{"group":"Traffic Policy","pages":[{"title":"Traffic Policy Overview","sidebarTitle":"Overview","href":"/gateway/traffic-policy/index"},{"group":"Quickstarts","pages":[{"title":"Agent Endpoints with Traffic Policy Quickstart","sidebarTitle":"Agent Endpoints","href":"/gateway/traffic-policy/getting-started/agent-endpoints"},{"title":"Cloud Endpoints with Traffic Policy Quickstart","sidebarTitle":"Cloud Endpoints","href":"/gateway/traffic-policy/getting-started/cloud-endpoints"}]},{"title":"How Traffic Policy Works","sidebarTitle":"How It Works","href":"/gateway/traffic-policy/how-it-works"},{"group":"Concepts","pages":[{"title":"Expression Examples","sidebarTitle":"CEL Expression Examples","href":"/gateway/traffic-policy/concepts/expressions"},{"title":"Actions","sidebarTitle":"Terminating Actions","description":"Learn about Traffic Policy Actions that define what happens when rules are matched, including traffic manipulation and routing Actions.","href":"/gateway/traffic-policy/concepts/actions"},{"title":"Traffic Identities","href":"/gateway/traffic-policy/identities"}]},{"group":"Actions","pages":[{"title":"Traffic Policy Actions","sidebarTitle":"Overview","description":"Learn how to use Traffic Policy Actions to manage traffic to your endpoints.","href":"/gateway/traffic-policy/actions/index"},{"title":"Add Headers Action","sidebarTitle":"Add Headers","href":"/gateway/traffic-policy/actions/add-headers"},{"title":"Basic Auth Action","sidebarTitle":"Basic Auth","href":"/gateway/traffic-policy/actions/basic-auth"},{"title":"Circuit Breaker Action","sidebarTitle":"Circuit Breaker","href":"/gateway/traffic-policy/actions/circuit-breaker"},{"title":"Close Connection Action","sidebarTitle":"Close Connection","href":"/gateway/traffic-policy/actions/close-connection"},{"title":"Compress Response Action","sidebarTitle":"Compress Response","href":"/gateway/traffic-policy/actions/compress-response"},{"title":"Custom Response Action","sidebarTitle":"Custom Response","href":"/gateway/traffic-policy/actions/custom-response"},{"title":"Deny Action","sidebarTitle":"Deny","href":"/gateway/traffic-policy/actions/deny"},{"title":"Forward Internal Action","sidebarTitle":"Forward Internal","href":"/gateway/traffic-policy/actions/forward-internal"},{"title":"HTTP Request Action","sidebarTitle":"HTTP Request","href":"/gateway/traffic-policy/actions/http-request"},{"title":"JWT Validation Action","sidebarTitle":"JWT Validation","href":"/gateway/traffic-policy/actions/jwt-validation"},{"title":"Log Action","sidebarTitle":"Log","href":"/gateway/traffic-policy/actions/log"},{"title":"OAuth Action","sidebarTitle":"OAuth","href":"/gateway/traffic-policy/actions/oauth"},{"title":"OpenID Connect Action","sidebarTitle":"OpenID Connect (OIDC)","href":"/gateway/traffic-policy/actions/openid-connect"},{"title":"OWASP CRS Request Action","sidebarTitle":"OWASP CRS Request","href":"/gateway/traffic-policy/actions/owasp-crs-request"},{"title":"OWASP CRS Response Action","sidebarTitle":"OWASP CRS Response","href":"/gateway/traffic-policy/actions/owasp-crs-response"},{"title":"Rate Limit Action","sidebarTitle":"Rate Limit","href":"/gateway/traffic-policy/actions/rate-limit"},{"title":"Redirect Action","sidebarTitle":"Redirect","href":"/gateway/traffic-policy/actions/redirect"},{"title":"Remove Headers Action","sidebarTitle":"Remove Headers","href":"/gateway/traffic-policy/actions/remove-headers"},{"title":"Request Body Find \u0026 Replace Action","sidebarTitle":"Request Body Find \u0026 Replace","href":"/gateway/traffic-policy/actions/request-body-find-replace"},{"title":"Response Body Find \u0026 Replace Action","sidebarTitle":"Response Body Find \u0026 Replace","href":"/gateway/traffic-policy/actions/response-body-find-replace"},{"title":"Restrict IPs Action","sidebarTitle":"Restrict IPs","href":"/gateway/traffic-policy/actions/restrict-ips"},{"title":"SAML Action","sidebarTitle":"SAML","tag":"Early Access","href":"/gateway/traffic-policy/actions/saml"},{"title":"Set Vars Action","sidebarTitle":"Set Vars","href":"/gateway/traffic-policy/actions/set-vars"},{"title":"SSE Find \u0026 Replace Action","sidebarTitle":"SSE Find \u0026 Replace","href":"/gateway/traffic-policy/actions/sse-find-replace"},{"title":"Terminate TLS Action","sidebarTitle":"Terminate TLS","href":"/gateway/traffic-policy/actions/terminate-tls"},{"title":"URL Rewrite Action","sidebarTitle":"URL Rewrite","href":"/gateway/traffic-policy/actions/url-rewrite"},{"title":"Verify Webhook Action","sidebarTitle":"Verify Webhook","href":"/gateway/traffic-policy/actions/verify-webhook"}]},{"group":"Examples","pages":[{"title":"Traffic Policy Examples","sidebarTitle":"Overview","mode":"wide","href":"/gateway/traffic-policy/examples/index"},{"title":"How to run an A/B test","sidebarTitle":"A/B Tests","href":"/gateway/traffic-policy/examples/a-b-tests"},{"title":"Add and Remove Headers","href":"/gateway/traffic-policy/examples/add-and-remove-headers"},{"title":"Add Authentication","href":"/gateway/traffic-policy/examples/add-authentication"},{"title":"Block Unwanted Requests","href":"/gateway/traffic-policy/examples/block-unwanted-requests"},{"title":"Filter Traffic by IP Category","href":"/gateway/traffic-policy/examples/filter-by-ip-category"},{"title":"Compress JSON Responses Example","sidebarTitle":"Compress JSON Responses","href":"/gateway/traffic-policy/examples/compress-json-responses"},{"title":"Enforce TLS Example","sidebarTitle":"Enforce TLS","href":"/gateway/traffic-policy/examples/enforce-tls"},{"title":"Event Logging Example","sidebarTitle":"Event Logging","href":"/gateway/traffic-policy/examples/event-logging"},{"title":"Using OAuth Traffic Policy on Endpoints","sidebarTitle":"OAuth Protection","href":"/gateway/traffic-policy/examples/oauth-protection"},{"title":"How to Rate Limit Traffic","sidebarTitle":"Rate Limit Requests","href":"/gateway/traffic-policy/examples/rate-limit-requests"},{"title":"Route Requests","href":"/gateway/traffic-policy/examples/route-requests"},{"title":"URL Rewrites Examples","sidebarTitle":"URL Rewrites","href":"/gateway/traffic-policy/examples/url-rewrites"},{"title":"User Agent Filtering Example","sidebarTitle":"User Agent Filtering","href":"/gateway/traffic-policy/examples/user-agent-filtering"}]},{"group":"Reference","pages":[{"title":"Traffic Policy Macros Reference","sidebarTitle":"Macros","href":"/gateway/traffic-policy/macros/index"},{"group":"Variables","pages":[{"title":"Variables","sidebarTitle":"Overview","href":"/gateway/traffic-policy/variables/index"},{"title":"Action Variables","href":"/gateway/traffic-policy/variables/action"},{"title":"Connection Variables","href":"/gateway/traffic-policy/variables/connection"},{"title":"Endpoint Variables","href":"/gateway/traffic-policy/variables/endpoint"},{"title":"IP Intelligence","href":"/gateway/traffic-policy/variables/ip-intel"},{"title":"HTTP Request Variables","href":"/gateway/traffic-policy/variables/req"},{"title":"HTTP Response Variables","href":"/gateway/traffic-policy/variables/res"},{"title":"Time Variables","href":"/gateway/traffic-policy/variables/time"}]}]}]},{"group":"Observability","pages":[{"title":"Traffic Observability Overview","sidebarTitle":"Overview","href":"/obs/index"},{"group":"Traffic Inspector","root":{"title":"Traffic Inspector","sidebarTitle":"Overview","href":"/obs/traffic-inspection"},"pages":[{"title":"Traffic Inspector HTTP Requests","sidebarTitle":"HTTP Requests","href":"/obs/traffic-inspection/http-requests"},{"title":"Traffic Inspector TCP Connections","sidebarTitle":"TCP Connections","href":"/obs/traffic-inspection/tcp-connections"}]},{"group":"Log Exporting","pages":[{"title":"Events","sidebarTitle":"Overview","href":"/obs/events/index"},{"title":"Event Source Reference","href":"/obs/events/reference"}]}]},{"group":"Network","pages":[{"group":"Domains","pages":[{"title":"Domains","sidebarTitle":"Overview","href":"/gateway/domains/index"},{"title":"How to Use A Custom Domain","sidebarTitle":"Using Custom Domains","href":"/gateway/domains/custom-domains"},{"title":"Region \u0026 IP Resolution","sidebarTitle":"Region \u0026 IP Resolution","href":"/gateway/domains/region-pinning"},{"title":"TLS Termination","href":"/gateway/domains/tls-termination"},{"title":"mTLS Termination at the ngrok Edge","href":"/gateway/domains/mtls-termination"},{"title":"DDoS Protection","href":"/gateway/domains/ddos-protection"},{"title":"Global Load Balancer","href":"/gateway/domains/global-load-balancer"}]},{"group":"TCP Addresses","pages":[{"title":"IP Addresses","href":"/gateway/domains/ip-addresses"},{"title":"Dedicated IPs","tag":"Coming Soon","href":"/gateway/domains/dedicated-ips"},{"title":"TCP Addresses","href":"/gateway/domains/tcp-addresses"}]}]},{"group":"Resources","pages":[{"title":"IP Policies","sidebarTitle":"IP Policies","href":"/gateway/traffic-policy/concepts/ip-policies"},{"title":"Using Vaults \u0026 Secrets with Traffic Policy","sidebarTitle":"Vaults \u0026 Secrets","href":"/gateway/traffic-policy/secrets"},{"title":"TLS Certificates","href":"/gateway/domains/tls-certificates"}]},{"group":"Identity \u0026 Access","pages":[{"title":"Identity and Access Management Overview","sidebarTitle":"Overview","href":"/iam/index"},{"group":"Principals","pages":[{"title":"Users","href":"/iam/users"},{"title":"Service Users","href":"/iam/service-users"}]},{"group":"Account Governance","pages":[{"title":"Single Sign-On and Provisioning to the ngrok Dashboard","sidebarTitle":"Dashboard Single Sign-On","href":"/iam/sso"},{"title":"Role-Based Access Control","sidebarTitle":"RBAC","href":"/iam/rbac"},{"title":"Account Domain Controls","href":"/iam/domain-controls"}]}]}]}]},{"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"}]},{"tab":"About","pages":[{"title":"About","href":"/about"}]}]},"basePath":"","title":"Traffic Identities - ngrok documentation","buildId":"dpl_CEsowfH15TDzsBT2BFbX312Be4Ct","deploymentId":"dpl_CEsowfH15TDzsBT2BFbX312Be4Ct","dynamics":["a74be98ba7"],"chunks":["zoom-image-lightbox-OBZHPeVn.js","lightbox-handle-r17bVUz3.js"]}