View HTTP and HTTPS requests to your ngrok endpoints in Traffic Inspector, capture full request and response bodies, and replay requests to your upstream service.
The HTTP tab in Traffic Inspector lists the HTTP and HTTPS requests to your endpoints.
When you enable full capture mode, you can replay requests to your upstream directly from the browser, instead of the original source.
This can dramatically speed up development of webhooks or callbacks that are difficult to trigger repeatedly.To see the connection a request traveled over, open the request’s Connection tab.
See Connections and requests.
By default, the ngrok Traffic Inspector only stores the metadata about each request and response.
Full Capture mode is an opt-in setting on your ngrok account that stores the full request and response parameters, headers, and bodies for each traffic event that flows through your endpoints.
Account admins can enable it by visiting the Observability section in the ngrok Settings Page after logging in.
Storing the full request and response data may mean you and your team members have access to sensitive data flowing through your endpoints.
After you enable full capture mode, ngrok begins capturing and storing the full requests and responses up to a maximum of 10KB, after which ngrok truncates the data.
ngrok truncates each header value after 1KB.
Traffic Inspector indicates truncated data through the number of bytes captured as well as the number of headers.ngrok stores this data for your account’s retention period (24 hours for Free, 72 hours for Hobbyist and Pay-as-you-go) from the time it receives a request.
Replaying requests lets you re-send an HTTP request upstream without directly accessing the endpoint.
To use replay, you must activate Full Capture mode in your account.After you enable Full Capture, a replay button appears for fully captured requests in the traffic event details pane of the dashboard.
If this button is unavailable, it likely indicates that the request occurred before Full Capture was fully activated, or the request was too large and has been truncated.Replay works by resending your original unmodified request to your endpoint.
It’s subject to the policies of that endpoint at the time of replay (which could be different than the original request).When you replay a request to your service, ngrok makes minimal changes.
However, some alterations are inevitable.
Here’s a list of changes made to replayed requests:
The replayed request originates from a different IP address, so any IP restrictions may prevent the replay from reaching your upstream.
ngrok removes any Connection: Keep-Alive headers because replay doesn’t support them.
Some request bodies might not be captured, even if they were replayed successfully.
This is particularly true for traffic events with an error status code.
ngrok adds a custom header Ngrok-Replay-Original-Request-ID that contains the ID of the original request.
This lets you trace back to the original request if needed.
If the request has been truncated, you can’t replay it.
You can’t replay the request if the HTTP method is unknown or undefined.
ngrok substitutes the X-forwarded header values with accurate values for the replay, not the original request.
ngrok Traffic Inspector lets you edit the request before re-sending it to your backend.
You can access it from the same dropdown as Replay.
ngrok makes the same changes to the replayed requests as before, in addition to the following changes:
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"ngrok documentation","colors":{"primary":"#273FC3","light":"#699AFC","dark":"#699AFC"},"logo":{"light":"https://mintcdn.com/ngrok/uPrboN8usISU3fq0/logo/light.svg?fit=max\u0026auto=format\u0026n=uPrboN8usISU3fq0\u0026q=85\u0026s=6a4a2c8995f8731e1bac3f795a68130d","dark":"https://mintcdn.com/ngrok/uPrboN8usISU3fq0/logo/dark.svg?fit=max\u0026auto=format\u0026n=uPrboN8usISU3fq0\u0026q=85\u0026s=e363c8b6e09a92e726a981e0156ba233","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","mcp","add-mcp","claude","cursor","vscode","assistant","chatgpt","perplexity","grok","aistudio","devin","windsurf","devin-mcp","download-spec"],"display":"header"},"styling":{"latex":false},"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":"6adfeafc5ae0aaf790e63ac1","collectionId":"5c07b188-e653-4afb-bdfd-58cf51c391e8","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adfeafc5ae0aaf790e63ac1"},"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":"6adfeafc5ae0aaf790e63ac1","clientVersion":"0.0.3971","searchFilterCounts":[{"language":"default","tag":"Reference","count":266},{"language":"default","tag":"Gateway","count":242},{"language":"default","tag":"Platform API","count":239},{"language":"default","tag":"Integrations","count":150},{"language":"default","tag":"AI Gateway","count":119},{"language":"default","tag":"Connectivity","count":91},{"language":"default","tag":"Webhooks","count":65},{"language":"default","tag":"Kubernetes Operators","count":58},{"language":"default","tag":"Traffic Policy","count":58},{"language":"default","tag":"Examples","count":46}],"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":"editor-v7-file-tree","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":"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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"byok-sep-25","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":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"img{max-width:100%;height:auto}.tooltip{font-weight:700;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,.8)}.light .tooltip,:root .tooltip,[data-theme=light] .tooltip{color:rgba(0,0,0,.8)}.light .tooltip::after,:root .tooltip::after,[data-theme=light] .tooltip::after{border-bottom-color:rgba(0,0,0,.8)}.dark .tooltip,[data-theme=dark] .tooltip{color:rgba(255,255,255,.8)}.dark .tooltip::after,[data-theme=dark] .tooltip::after{border-bottom-color:rgba(255,255,255,.8)}@media (prefers-color-scheme:light){.tooltip{color:rgba(0,0,0,.8)}.tooltip::after{border-bottom-color:rgba(0,0,0,.8)}}@media (prefers-color-scheme:dark){.tooltip{color:rgba(255,255,255,.8)}.tooltip::after{border-bottom-color:rgba(255,255,255,.8)}}:root td .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 code,td pre{word-wrap:break-word;overflow-wrap:break-word;word-break:break-word}td pre{white-space:pre-wrap;min-width:200px}td:has(code),td:has(pre){min-width:240px;width:auto}td code{min-width:150px}@font-face{font-family:\"Roobert\";src:url(https://assets.ngrok.com/fonts/roobert/roobert-proportional-vf.woff2) format(\"woff2 supports variations\"),url(https://assets.ngrok.com/fonts/roobert/roobert-proportional-vf.woff2) 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) format(\"woff2 supports variations\"),url(https://assets.ngrok.com/fonts/jetbrains/jetbrainsmono-wght.woff2) 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) format(\"woff2 supports variations\"),url(https://assets.ngrok.com/fonts/jetbrains/jetbrainsmono-italic-wght.woff2) format(\"woff2-variations\");font-weight:100 800;font-display:swap;font-style:italic}.hljs,.token,code,pre,pre code{font-family:\"JetBrains Mono\",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,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,#topbar-cta-button svg{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,.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,.dark #topbar-cta-button svg,[data-theme=dark] #topbar-cta-button span.text-white,[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}.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(39 63 195 / 35%);--ngrok-consent-shadow: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(105 154 252 / 35%);--ngrok-consent-shadow: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:.75rem;width:fit-content;max-width:100%;padding:.5rem .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,.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:.875rem;line-height:1.25rem}.ngrok-consent-actions{display:flex;align-items:center;gap:.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:.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,.2,1)}.ngrok-consent-icon-button:hover{background-color:var(--ngrok-consent-action-bg-hover)}.ngrok-consent-icon-button:active{transform:scale(.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}"}],"page":{"pagePath":"obs/traffic-inspection/http-requests","slug":"/obs/traffic-inspection/http-requests","pageMetadata":{"title":"Traffic Inspector HTTP Requests","sidebarTitle":"HTTP Requests","description":"View HTTP and HTTPS requests to your ngrok endpoints in Traffic Inspector, capture full request and response bodies, and replay requests to your upstream service.","href":"/obs/traffic-inspection/http-requests"},"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: \"View HTTP and HTTPS requests to your ngrok endpoints in Traffic Inspector, capture full request and response bodies, and replay requests to your upstream service.\"\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`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`HTTP`}),` tab in `,_jsx(_components.a,{href:`/obs/traffic-inspection`,children:`Traffic Inspector`}),` lists the HTTP and HTTPS requests to your endpoints.\nWhen you enable full capture mode, you can replay requests to your upstream directly from the browser, instead of the original source.\nThis can dramatically speed up development of webhooks or callbacks that are difficult to trigger repeatedly.`]}),`\n`,_jsxs(_components.p,{children:[`To see the connection a request traveled over, open the request’s `,_jsx(_components.strong,{children:`Connection`}),` tab.\nSee `,_jsx(_components.a,{href:`/obs/traffic-inspection/tcp-connections#connections-and-requests`,children:`Connections and requests`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`full-capture-mode`,children:`Full capture mode`}),`\n`,_jsxs(_components.p,{children:[`By default, the ngrok Traffic Inspector only stores the metadata about each request and response.\nFull Capture mode is an opt-in setting on your ngrok account that stores the full request and response parameters, headers, and bodies for each traffic event that flows through your endpoints.\nAccount admins can enable it by visiting the `,_jsx(_components.strong,{children:`Observability`}),` section in the `,_jsx(_components.a,{href:`https://dashboard.ngrok.com/settings#observability`,children:`ngrok Settings Page`}),` after logging in.`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Storing the full request and response data may mean you and your team members have access to sensitive data flowing through your endpoints.`})}),`\n`,_jsx(_components.p,{children:`After you enable full capture mode, ngrok begins capturing and storing the full requests and responses up to a maximum of 10KB, after which ngrok truncates the data.\nngrok truncates each header value after 1KB.\nTraffic Inspector indicates truncated data through the number of bytes captured as well as the number of headers.`}),`\n`,_jsx(_components.p,{children:`ngrok stores this data for your account’s retention period (24 hours for Free, 72 hours for Hobbyist and Pay-as-you-go) from the time it receives a request.`}),`\n`,_jsx(Heading,{level:`2`,id:`replay`,children:`Replay`}),`\n`,_jsx(_components.p,{children:`Replaying requests lets you re-send an HTTP request upstream without directly accessing the endpoint.\nTo use replay, you must activate Full Capture mode in your account.`}),`\n`,_jsx(_components.p,{children:`After you enable Full Capture, a replay button appears for fully captured requests in the traffic event details pane of the dashboard.\nIf this button is unavailable, it likely indicates that the request occurred before Full Capture was fully activated, or the request was too large and has been truncated.`}),`\n`,_jsx(_components.p,{children:`Replay works by resending your original unmodified request to your endpoint.\nIt’s subject to the policies of that endpoint at the time of replay (which could be different than the original request).`}),`\n`,_jsx(_components.p,{children:`When you replay a request to your service, ngrok makes minimal changes.\nHowever, some alterations are inevitable.\nHere’s a list of changes made to replayed requests:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`The replayed request originates from a different IP address, so any IP restrictions may prevent the replay from reaching your upstream.`}),`\n`,_jsxs(_components.li,{children:[`ngrok removes any `,_jsx(_components.code,{children:`Connection: Keep-Alive`}),` headers because replay doesn’t support them.`]}),`\n`,_jsx(_components.li,{children:`Some request bodies might not be captured, even if they were replayed successfully.\nThis is particularly true for traffic events with an error status code.`}),`\n`,_jsxs(_components.li,{children:[`ngrok adds a custom header `,_jsx(_components.code,{children:`Ngrok-Replay-Original-Request-ID`}),` that contains the ID of the original request.\nThis lets you trace back to the original request if needed.`]}),`\n`,_jsx(_components.li,{children:`If the request has been truncated, you can’t replay it.`}),`\n`,_jsx(_components.li,{children:`You can’t replay the request if the HTTP method is unknown or undefined.`}),`\n`,_jsxs(_components.li,{children:[`ngrok substitutes the `,_jsx(_components.code,{children:`X-forwarded`}),` header values with accurate values for the replay, not the original request.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`replay-with-modifications`,children:`Replay with modifications`}),`\n`,_jsxs(_components.p,{children:[`ngrok Traffic Inspector lets you edit the request before re-sending it to your backend.\nYou can access it from the same dropdown as `,_jsx(_components.strong,{children:`Replay`}),`.\nngrok makes the same changes to the replayed requests as before, in addition to the following changes:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`You can’t modify any `,_jsx(_components.a,{href:`https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name`,children:`forbidden headers`}),` in the replayed request.`]}),`\n`,_jsx(_components.li,{children:`You can replay the request to the same endpoint as long as it’s in the same account.\nYou can’t replay to endpoints that are active in other accounts.`}),`\n`,_jsxs(_components.li,{children:[`ngrok doesn’t support modifying the trailer of the request.\nIf you need that capability, share feedback in the `,_jsx(_components.a,{href:`https://github.com/ngrok/ngrok`,children:`ngrok Community Repo`}),`.`]}),`\n`]})]})}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 Inspector HTTP Requests","sidebarTitle":"HTTP Requests","description":"View HTTP and HTTPS requests to your ngrok endpoints in Traffic Inspector, capture full request and response bodies, and replay requests to your upstream service.","href":"/obs/traffic-inspection/http-requests"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Full capture mode","slug":"full-capture-mode","depth":2,"children":[]},{"title":"Replay","slug":"replay","depth":2,"children":[]},{"title":"Replay with modifications","slug":"replay-with-modifications","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/09633916ed60fa29/definition-wrapper.js","/docs/_mintlify/custom/ngrok/6167f7a3c0c9913f/consent.js"],"subdomain":"ngrok","siteName":"ngrok documentation","title":"Traffic Inspector HTTP Requests - ngrok documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-26T20:40:03.075Z","originalFileLocation":"obs/traffic-inspection/http-requests.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=\"View HTTP and HTTPS requests to your ngrok endpoints in Traffic Inspector, capture full request and response bodies, and replay requests to your upstream service.\">\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 Inspector HTTP Requests - ngrok documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"View HTTP and HTTPS requests to your ngrok endpoints in Traffic Inspector, capture full request and response bodies, and replay requests to your upstream service.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ngrok documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://ngrok.com/docs/obs/traffic-inspection/http-requests\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://ngrok.mintlify.app/_mintlify/api/og/v2?division=Traffic+Inspector\u0026amp;title=Traffic+Inspector+HTTP+Requests\u0026amp;description=View+HTTP+and+HTTPS+requests+to+your+ngrok+endpoints+in+Traffic+Inspector%2C+capture+full+request+and+response+bodies%2C+and+replay+requests+to+your+upstream+servic\u0026amp;theme=dd59335b8ec10833612cbd2f\u0026amp;signature=8bb6c1b4de6b254ac7093803d537722db7a6a6a01c581ccce3f2533915ff3851\">\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 Inspector HTTP Requests - ngrok documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"View HTTP and HTTPS requests to your ngrok endpoints in Traffic Inspector, capture full request and response bodies, and replay requests to your upstream service.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ngrok.mintlify.app/_mintlify/api/og/v2?division=Traffic+Inspector\u0026amp;title=Traffic+Inspector+HTTP+Requests\u0026amp;description=View+HTTP+and+HTTPS+requests+to+your+ngrok+endpoints+in+Traffic+Inspector%2C+capture+full+request+and+response+bodies%2C+and+replay+requests+to+your+upstream+servic\u0026amp;theme=dd59335b8ec10833612cbd2f\u0026amp;signature=8bb6c1b4de6b254ac7093803d537722db7a6a6a01c581ccce3f2533915ff3851\">\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=\"#273FC3\">\u003clink data-mint-head rel=\"canonical\" href=\"https://ngrok.com/docs/obs/traffic-inspection/http-requests\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/obs/traffic-inspection/http-requests.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/uPrboN8usISU3fq0/logo/light.svg?fit=max\u0026auto=format\u0026n=uPrboN8usISU3fq0\u0026q=85\u0026s=6a4a2c8995f8731e1bac3f795a68130d\"}},{\"@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/obs/traffic-inspection/http-requests#webpage\",\"url\":\"https://ngrok.com/docs/obs/traffic-inspection/http-requests\",\"name\":\"Traffic Inspector HTTP Requests\",\"description\":\"View HTTP and HTTPS requests to your ngrok endpoints in Traffic Inspector, capture full request and response bodies, and replay requests to your upstream service.\",\"dateModified\":\"2026-10-26T20:40:03.075Z\",\"isPartOf\":{\"@id\":\"https://ngrok.com/docs#website\"},\"breadcrumb\":{\"@id\":\"https://ngrok.com/docs/obs/traffic-inspection/http-requests#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://ngrok.com/docs/obs/traffic-inspection/http-requests#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Observability\",\"item\":\"https://ngrok.com/docs/obs/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Traffic Inspector\",\"item\":\"https://ngrok.com/docs/obs/traffic-inspection\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Traffic Inspector HTTP Requests\",\"item\":\"https://ngrok.com/docs/obs/traffic-inspection/http-requests\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://ngrok.com/docs/obs/traffic-inspection/http-requests#article\",\"headline\":\"Traffic Inspector HTTP Requests\",\"name\":\"Traffic Inspector HTTP Requests\",\"description\":\"View HTTP and HTTPS requests to your ngrok endpoints in Traffic Inspector, capture full request and response bodies, and replay requests to your upstream service.\",\"url\":\"https://ngrok.com/docs/obs/traffic-inspection/http-requests\",\"mainEntityOfPage\":{\"@id\":\"https://ngrok.com/docs/obs/traffic-inspection/http-requests#webpage\"},\"dateModified\":\"2026-10-26T20:40:03.075Z\",\"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","pages":[{"group":"Getting Started","pages":[{"title":"Gateway Overview","sidebarTitle":"Overview","icon":"house","href":"/gateway/overview"},{"title":"Agent 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 Agent 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 Agent CLI and SDK Connectivity","sidebarTitle":"Connectivity","href":"/gateway/agent/connectivity"},{"group":"Agent CLI setup","pages":[{"title":"Install the ngrok Agent 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 Agent 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":"Agent CLI TLS Termination","sidebarTitle":"TLS Termination","href":"/gateway/agent/agent-tls-termination"},{"title":"ngrok Agent CLI Web Inspection Interface","sidebarTitle":"Web Inspection Interface","href":"/gateway/agent/web-inspection-interface"}]},{"group":"Configuration File","pages":[{"title":"ngrok Agent 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 Agent CLI API Commands","sidebarTitle":"CLI API Commands","href":"/gateway/agent/cli-api"},{"title":"ngrok Agent 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":"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","href":"/gateway/traffic-policy/concepts/actions"},{"title":"Traffic Identities","href":"/gateway/traffic-policy/identities"}]},{"group":"Actions","pages":[{"title":"Traffic Policy Actions","sidebarTitle":"Overview","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/oidc"},{"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":"Coming Soon","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","description":"Learn how ngrok's Traffic Inspector shows the HTTP requests and TCP connections to your endpoints, and how it compares to the agent's local 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","description":"View the TCP connections to your ngrok endpoints in Traffic Inspector, including client IPs, TLS handshake details, bytes transferred, and ngrok errors.","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":"Integrations","pages":[{"title":"Integrations","href":"/integrations"}]},{"tab":"Reference","menu":[{"item":"Platform API","pages":[{"title":"Platform API","href":"/api"}]},{"item":"Agent API","pages":[{"title":"Agent API","href":"/gateway/agent/api"}]},{"item":"Agent CLI","pages":[{"title":"Agent CLI","href":"/gateway/agent/cli"}]},{"item":"Agent Config File","pages":[{"title":"Agent Config File","href":"/gateway/agent/config"}]},{"item":"Agent SDKs","pages":[{"title":"Agent SDKs","href":"/agent-sdks"}]},{"item":"Errors","pages":[{"title":"Errors","href":"/errors"}]},{"item":"Changelogs","pages":[{"title":"Changelogs","href":"/gateway/agent/changelog"}]}],"pages":[{"title":"Reference","href":"/api"}]},{"tab":"Pricing","pages":[{"title":"Pricing","href":"/pricing-limits"}]},{"tab":"About","pages":[{"title":"About","href":"/about"}]}]},"title":"Traffic Inspector HTTP Requests - ngrok documentation","buildId":"dpl_GvhK4qVXq51DpfYJLCtPpYNN4YHN","deploymentId":"dpl_GvhK4qVXq51DpfYJLCtPpYNN4YHN","dynamics":[],"chunks":[]}