Every rule of the policy, of every tier, before and after the model. A policy holds up to 48.
A key enforces its account's all-keys policy and its configuration's policy together, so it
can enforce up to 96, and a request can add up to 48 of its own.
enforce blocks a tool call or request the policy's rules flag. audit lets it through and reports
the verdict. The mode applies to this policy's rules only: an audit policy only reports, even when
the account's all-keys policy or a request enforces. Defaults to enforce.
True when the policy is the account's baseline, set as firewallPolicyId on the gateway config. It applies to every key, under each configuration's own policy.
enforce blocks a tool call or request the policy's rules flag. audit lets it through and reports
the verdict. The mode applies to this policy's rules only: an audit policy only reports, even when
the account's all-keys policy or a request enforces. Defaults to enforce.
Every rule of the policy, of every tier, before and after the model. A policy holds up to 48.
A key enforces its account's all-keys policy and its configuration's policy together, so it
can enforce up to 96, and a request can add up to 48 of its own.
{"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":"ai-gateway/api-reference/firewall-policies/create","slug":"/ai-gateway/api-reference/firewall-policies/create","pageMetadata":{"openapi":"openapi/ai-gateway.yaml POST /firewall-policies","description":"Create an AI Gateway Firewall policy, a named set of rules that check requests and tool calls.","title":"Create an AI Gateway Firewall policy","href":"/ai-gateway/api-reference/firewall-policies/create"},"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: \"Create an AI Gateway Firewall policy, a named set of rules that check requests and tool calls.\"\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}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"openapi":"openapi/ai-gateway.yaml POST /firewall-policies","description":"Create an AI Gateway Firewall policy, a named set of rules that check requests and tool calls.","title":"Create an AI Gateway Firewall policy","href":"/ai-gateway/api-reference/firewall-policies/create"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"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"],"openApiReferenceData":{"operation":{"tags":["AI Gateway Firewall Policies"],"summary":"Create an AI Gateway Firewall policy","description":"Create an AI Gateway Firewall policy, a named set of rules that check requests and tool calls.","operationId":"CreateAIGatewayFirewallPolicy","requestBody":"3fca5916-ca34-4802-a5b7-5690a54c409f","responses":{"201":"fe7e666f-3dca-4ff8-b282-2ba8334d26fb","default":"a630af50-3050-45f7-9dd0-6008be4d8df3"},"method":"post","type":"path","servers":["51f08a62-4422-4035-90c3-766be946f8b6"],"security":["c0efe4d2-45a3-4280-b3de-e72a1e712920"],"path":"/firewall-policies","baseUrlOptions":["https://api.ngrok.ai"],"title":"Create an AI Gateway Firewall policy","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"A policy needs at least one rule.","required":["name","rules"],"properties":{"name":{"type":"string","maxLength":255,"description":"User-defined label for this policy.","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"rules":{"type":"array","minItems":1,"maxItems":48,"description":"Every rule of the policy, of every tier, before and after the model. A policy holds up to 48.\nA key enforces its account's all-keys policy and its configuration's policy together, so it\ncan enforce up to 96, and a request can add up to 48 of its own.\n","items":{"type":"object","additionalProperties":false,"required":["id","tier"],"properties":{"id":{"type":"string","maxLength":64,"description":"Rule ID. Lowercase letters, digits, `-`, and `_`. Unique across the policy's rules.","isRequired":true,"uniqueKey":"rules.items.[INDEX].id","typeLabel":"string"},"tier":{"type":"string","enum":["hardDeny","softDeny","allow"],"x-enum-varnames":["RuleTierHardDeny","RuleTierSoftDeny","RuleTierAllow"],"description":"`hardDeny` always blocks a match. `softDeny` blocks a match unless an `allow` rule of the same policy matches the same request or tool call. `allow` never blocks.","isRequired":true,"uniqueKey":"rules.items.[INDEX].tier","typeLabel":"enum\u003cstring>"},"name":{"type":"string","maxLength":120,"description":"Name shown as `[name]` when the rule matches. Defaults to the ID.","uniqueKey":"rules.items.[INDEX].name","typeLabel":"string"},"kind":{"type":"string","enum":["regex","decision","tool"],"x-enum-varnames":["RuleKindRegex","RuleKindDecision","RuleKindTool"],"description":"`regex` matches `pattern`, with no model call. `decision` has the decision model score `instructions`. `tool` matches the names in `tools`, with no model call. Defaults to `decision`.","uniqueKey":"rules.items.[INDEX].kind","typeLabel":"enum\u003cstring>"},"pattern":{"type":"string","maxLength":1000,"description":"RE2 pattern a `regex` rule matches. For a tool call, it matches the call's name and arguments.","uniqueKey":"rules.items.[INDEX].pattern","typeLabel":"string"},"instructions":{"type":"string","maxLength":8000,"description":"What a `decision` rule matches, in plain language. Required for a `decision` rule.","uniqueKey":"rules.items.[INDEX].instructions","typeLabel":"string"},"tools":{"type":"array","maxItems":64,"description":"Tool names a `tool` rule matches, whole. `*` matches any run of characters, so `mcp__github__*` matches every tool of one MCP server. A `tool` rule reads `tool_calls`, the name of each call the model returns, or `tool_definitions`, the tools a request offers. Required for a `tool` rule.\n","items":{"type":"string","maxLength":128,"uniqueKey":"rules.items.[INDEX].tools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"rules.items.[INDEX].tools","typeLabel":"string[]"},"threshold":{"type":"number","format":"double","minimum":0,"maximum":1,"description":"Match probability at which a `decision` rule fires. Defaults to 0.6 for a deny rule and 0.7 for an allow rule.","uniqueKey":"rules.items.[INDEX].threshold","typeLabel":"number\u003cdouble>"},"targets":{"type":"array","description":"What the rule reads, which also sets when it runs. `messages`, `tool_results`, and `tool_definitions` run before the request reaches the model. `tool_calls` runs on each tool call the model returns, and cannot be combined with the others. Defaults to `tool_calls`.\n","items":{"type":"string","enum":["messages","tool_results","tool_definitions","tool_calls"],"x-enum-varnames":["RuleTargetMessages","RuleTargetToolResults","RuleTargetToolDefinitions","RuleTargetToolCalls"],"uniqueKey":"rules.items.[INDEX].targets.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueKey":"rules.items.[INDEX].targets","typeLabel":"enum\u003cstring>[]"}},"uniqueKey":"rules.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"rules","typeLabel":"object[]"},"description":{"type":"string","maxLength":255,"description":"Human-readable description.","uniqueKey":"description","typeLabel":"string"},"metadata":{"type":"string","maxLength":4096,"description":"Arbitrary user-defined metadata.","uniqueKey":"metadata","typeLabel":"string"},"mode":{"type":"string","enum":["enforce","audit"],"description":"`enforce` blocks a tool call or request the policy's rules flag. `audit` lets it through and reports\nthe verdict. The mode applies to this policy's rules only: an `audit` policy only reports, even when\nthe account's all-keys policy or a request enforces. Defaults to `enforce`.\n","uniqueKey":"mode","typeLabel":"enum\u003cstring>"},"onError":{"type":"string","enum":["block","log"],"description":"What a tool call or request the decision model could not judge does. Defaults to `block`.","uniqueKey":"onError","typeLabel":"enum\u003cstring>"},"environment":{"type":"array","maxItems":32,"description":"Facts about the caller's setup that inform the decision model. They are not rules.","items":{"type":"string","maxLength":1000,"uniqueKey":"environment.items.[INDEX]","typeLabel":"string"},"uniqueKey":"environment","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"\u003cstring>","rules":[{"id":"\u003cstring>","name":"\u003cstring>","pattern":"\u003cstring>","instructions":"\u003cstring>","tools":["\u003cstring>"],"threshold":0.5,"targets":[]}],"description":"\u003cstring>","metadata":"\u003cstring>","environment":["\u003cstring>"]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"fe7e666f-3dca-4ff8-b282-2ba8334d26fb":{"description":"The created Firewall policy.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["id","uri","name","createdAt","updatedAt","createdBy","lastUpdatedBy","accessKeyConfigurationCount","appliesToAllKeys","mode","onError","environment","rules"],"properties":{"id":{"type":"string","description":"Unique identifier for this policy.","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"uri":{"type":"string","description":"URI of this AI Gateway Firewall policy API resource.","isRequired":true,"uniqueKey":"uri","typeLabel":"string"},"name":{"type":"string","description":"User-defined label for this policy.","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the policy was created.","isRequired":true,"uniqueKey":"createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when the policy was last updated.","isRequired":true,"uniqueKey":"updatedAt","typeLabel":"string\u003cdate-time>"},"createdBy":{"type":"object","additionalProperties":false,"required":["id","uri"],"properties":{"id":{"type":"string","description":"Resource identifier.","isRequired":true,"uniqueKey":"createdBy.id","typeLabel":"string"},"uri":{"type":"string","description":"URI for locating the resource.","isRequired":true,"uniqueKey":"createdBy.uri","typeLabel":"string"}},"isRequired":true,"uniqueKey":"createdBy","typeLabel":"object"},"lastUpdatedBy":{"type":"object","additionalProperties":false,"required":["id","uri"],"properties":{"id":{"type":"string","description":"Resource identifier.","isRequired":true,"uniqueKey":"lastUpdatedBy.id","typeLabel":"string"},"uri":{"type":"string","description":"URI for locating the resource.","isRequired":true,"uniqueKey":"lastUpdatedBy.uri","typeLabel":"string"}},"isRequired":true,"uniqueKey":"lastUpdatedBy","typeLabel":"object"},"accessKeyConfigurationCount":{"type":"integer","format":"int32","description":"Number of access key configurations that enforce this policy. 0 when unused.","isRequired":true,"uniqueKey":"accessKeyConfigurationCount","typeLabel":"integer\u003cint32>"},"appliesToAllKeys":{"type":"boolean","description":"True when the policy is the account's baseline, set as `firewallPolicyId` on the gateway config. It applies to every key, under each configuration's own policy.","isRequired":true,"uniqueKey":"appliesToAllKeys","typeLabel":"boolean"},"mode":{"type":"string","enum":["enforce","audit"],"description":"`enforce` blocks a tool call or request the policy's rules flag. `audit` lets it through and reports\nthe verdict. The mode applies to this policy's rules only: an `audit` policy only reports, even when\nthe account's all-keys policy or a request enforces. Defaults to `enforce`.\n","isRequired":true,"uniqueKey":"mode","typeLabel":"enum\u003cstring>"},"onError":{"type":"string","enum":["block","log"],"description":"What a tool call or request the decision model could not judge does. Defaults to `block`.","isRequired":true,"uniqueKey":"onError","typeLabel":"enum\u003cstring>"},"environment":{"type":"array","maxItems":32,"description":"Facts about the caller's setup that inform the decision model. They are not rules.","items":{"type":"string","maxLength":1000,"uniqueKey":"environment.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"environment","typeLabel":"string[]"},"rules":{"type":"array","maxItems":48,"description":"Every rule of the policy, of every tier, before and after the model. A policy holds up to 48.\nA key enforces its account's all-keys policy and its configuration's policy together, so it\ncan enforce up to 96, and a request can add up to 48 of its own.\n","items":{"type":"object","additionalProperties":false,"required":["id","tier"],"properties":{"id":{"type":"string","maxLength":64,"description":"Rule ID. Lowercase letters, digits, `-`, and `_`. Unique across the policy's rules.","isRequired":true,"uniqueKey":"rules.items.[INDEX].id","typeLabel":"string"},"tier":{"type":"string","enum":["hardDeny","softDeny","allow"],"x-enum-varnames":["RuleTierHardDeny","RuleTierSoftDeny","RuleTierAllow"],"description":"`hardDeny` always blocks a match. `softDeny` blocks a match unless an `allow` rule of the same policy matches the same request or tool call. `allow` never blocks.","isRequired":true,"uniqueKey":"rules.items.[INDEX].tier","typeLabel":"enum\u003cstring>"},"name":{"type":"string","maxLength":120,"description":"Name shown as `[name]` when the rule matches. Defaults to the ID.","uniqueKey":"rules.items.[INDEX].name","typeLabel":"string"},"kind":{"type":"string","enum":["regex","decision","tool"],"x-enum-varnames":["RuleKindRegex","RuleKindDecision","RuleKindTool"],"description":"`regex` matches `pattern`, with no model call. `decision` has the decision model score `instructions`. `tool` matches the names in `tools`, with no model call. Defaults to `decision`.","uniqueKey":"rules.items.[INDEX].kind","typeLabel":"enum\u003cstring>"},"pattern":{"type":"string","maxLength":1000,"description":"RE2 pattern a `regex` rule matches. For a tool call, it matches the call's name and arguments.","uniqueKey":"rules.items.[INDEX].pattern","typeLabel":"string"},"instructions":{"type":"string","maxLength":8000,"description":"What a `decision` rule matches, in plain language. Required for a `decision` rule.","uniqueKey":"rules.items.[INDEX].instructions","typeLabel":"string"},"tools":{"type":"array","maxItems":64,"description":"Tool names a `tool` rule matches, whole. `*` matches any run of characters, so `mcp__github__*` matches every tool of one MCP server. A `tool` rule reads `tool_calls`, the name of each call the model returns, or `tool_definitions`, the tools a request offers. Required for a `tool` rule.\n","items":{"type":"string","maxLength":128,"uniqueKey":"rules.items.[INDEX].tools.items.[INDEX]","typeLabel":"string"},"uniqueKey":"rules.items.[INDEX].tools","typeLabel":"string[]"},"threshold":{"type":"number","format":"double","minimum":0,"maximum":1,"description":"Match probability at which a `decision` rule fires. Defaults to 0.6 for a deny rule and 0.7 for an allow rule.","uniqueKey":"rules.items.[INDEX].threshold","typeLabel":"number\u003cdouble>"},"targets":{"type":"array","description":"What the rule reads, which also sets when it runs. `messages`, `tool_results`, and `tool_definitions` run before the request reaches the model. `tool_calls` runs on each tool call the model returns, and cannot be combined with the others. Defaults to `tool_calls`.\n","items":{"type":"string","enum":["messages","tool_results","tool_definitions","tool_calls"],"x-enum-varnames":["RuleTargetMessages","RuleTargetToolResults","RuleTargetToolDefinitions","RuleTargetToolCalls"],"uniqueKey":"rules.items.[INDEX].targets.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueKey":"rules.items.[INDEX].targets","typeLabel":"enum\u003cstring>[]"}},"uniqueKey":"rules.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"rules","typeLabel":"object[]"},"description":{"type":"string","description":"Human-readable description.","uniqueKey":"description","typeLabel":"string"},"metadata":{"type":"string","description":"Arbitrary user-defined metadata.","uniqueKey":"metadata","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"\u003cstring>","uri":"\u003cstring>","name":"\u003cstring>","createdAt":"2023-11-07T05:31:56Z","updatedAt":"2023-11-07T05:31:56Z","createdBy":{"id":"\u003cstring>","uri":"\u003cstring>"},"lastUpdatedBy":{"id":"\u003cstring>","uri":"\u003cstring>"},"accessKeyConfigurationCount":123,"appliesToAllKeys":true,"mode":"enforce","onError":"block","environment":["\u003cstring>"],"rules":[{"id":"\u003cstring>","tier":"hardDeny","name":"\u003cstring>","kind":"regex","pattern":"\u003cstring>","instructions":"\u003cstring>","tools":["\u003cstring>"],"threshold":0.5,"targets":["messages"]}],"description":"\u003cstring>","metadata":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"a630af50-3050-45f7-9dd0-6008be4d8df3":{"description":"API error response.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["statusCode","msg","details"],"properties":{"statusCode":{"type":"integer","format":"int32","description":"HTTP status code for this error.","isRequired":true,"uniqueKey":"statusCode","typeLabel":"integer\u003cint32>"},"msg":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"msg","typeLabel":"string"},"details":{"type":"object","description":"Structured error details.","additionalProperties":{"type":"string","uniqueKey":"details.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"details","typeLabel":"object"},"errorCode":{"type":"string","description":"Stable ngrok error code when available.","uniqueKey":"errorCode","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"statusCode":123,"msg":"\u003cstring>","details":{},"errorCode":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"c0efe4d2-45a3-4280-b3de-e72a1e712920":{"bearerAuth":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"51f08a62-4422-4035-90c3-766be946f8b6":{"url":"https://api.ngrok.ai"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi/ai-gateway.yaml"},"subdomain":"ngrok","siteName":"ngrok documentation","title":"Create an AI Gateway Firewall policy - ngrok documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-27T00:07:06.275Z","originalFileLocation":"ai-gateway/api-reference/firewall-policies/create.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=\"Create an AI Gateway Firewall policy, a named set of rules that check requests and tool calls.\">\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=\"Create an AI Gateway Firewall policy - ngrok documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create an AI Gateway Firewall policy, a named set of rules that check requests and tool calls.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ngrok documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://ngrok.com/docs/ai-gateway/api-reference/firewall-policies/create\">\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=Firewall+Policies\u0026amp;title=Create+an+AI+Gateway+Firewall+policy\u0026amp;description=Create+an+AI+Gateway+Firewall+policy%2C+a+named+set+of+rules+that+check+requests+and+tool+calls.\u0026amp;theme=dd59335b8ec10833612cbd2f\u0026amp;signature=2bfa854fef1eb2d389cb4db55f8fca95e6a9ff8b230b08df8f6b78e38a8032e7\">\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=\"Create an AI Gateway Firewall policy - ngrok documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create an AI Gateway Firewall policy, a named set of rules that check requests and tool calls.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ngrok.mintlify.app/_mintlify/api/og/v2?division=Firewall+Policies\u0026amp;title=Create+an+AI+Gateway+Firewall+policy\u0026amp;description=Create+an+AI+Gateway+Firewall+policy%2C+a+named+set+of+rules+that+check+requests+and+tool+calls.\u0026amp;theme=dd59335b8ec10833612cbd2f\u0026amp;signature=2bfa854fef1eb2d389cb4db55f8fca95e6a9ff8b230b08df8f6b78e38a8032e7\">\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/ai-gateway/api-reference/firewall-policies/create\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/ai-gateway/api-reference/firewall-policies/create.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/ai-gateway/api-reference/firewall-policies/create#webpage\",\"url\":\"https://ngrok.com/docs/ai-gateway/api-reference/firewall-policies/create\",\"name\":\"Create an AI Gateway Firewall policy\",\"description\":\"Create an AI Gateway Firewall policy, a named set of rules that check requests and tool calls.\",\"dateModified\":\"2026-10-27T00:07:06.275Z\",\"isPartOf\":{\"@id\":\"https://ngrok.com/docs#website\"},\"breadcrumb\":{\"@id\":\"https://ngrok.com/docs/ai-gateway/api-reference/firewall-policies/create#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://ngrok.com/docs/ai-gateway/api-reference/firewall-policies/create#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API Reference\",\"item\":\"https://ngrok.com/docs/ai-gateway/api-reference/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Firewall Policies\",\"item\":\"https://ngrok.com/docs/ai-gateway/api-reference/firewall-policies/list\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Create an AI Gateway Firewall policy\",\"item\":\"https://ngrok.com/docs/ai-gateway/api-reference/firewall-policies/create\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://ngrok.com/docs/ai-gateway/api-reference/firewall-policies/create#apireference\",\"headline\":\"Create an AI Gateway Firewall policy\",\"name\":\"Create an AI Gateway Firewall policy\",\"description\":\"Create an AI Gateway Firewall policy, a named set of rules that check requests and tool calls.\",\"url\":\"https://ngrok.com/docs/ai-gateway/api-reference/firewall-policies/create\",\"mainEntityOfPage\":{\"@id\":\"https://ngrok.com/docs/ai-gateway/api-reference/firewall-policies/create#webpage\"},\"dateModified\":\"2026-10-27T00:07:06.275Z\",\"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":[{"title":"Gateway","href":"/gateway/overview"}]},{"tab":"AI Gateway","pages":[{"title":"AI Gateway Overview","sidebarTitle":"Overview","icon":"house","href":"/ai-gateway/overview"},{"title":"Quickstart","icon":"rocket","href":"/ai-gateway/quickstart"},{"title":"How It Works","icon":"gears","href":"/ai-gateway/how-it-works"},{"title":"Model Catalog","icon":"book","href":"/ai-gateway/reference/model-catalog"},{"title":"Changelog","icon":"clock-rotate-left","href":"/ai-gateway/changelog"},{"title":"FAQ","icon":"circle-question","href":"/ai-gateway/faq"},{"group":"Concepts","pages":[{"title":"Access Keys","sidebarTitle":"Access Keys","href":"/ai-gateway/concepts/access-keys"},{"title":"Credits","href":"/ai-gateway/concepts/credits"},{"title":"Providers","href":"/ai-gateway/concepts/providers"},{"title":"Models","href":"/ai-gateway/concepts/models"},{"title":"Custom Providers","href":"/ai-gateway/concepts/custom-providers"},{"title":"Bring Your Own Keys","href":"/ai-gateway/concepts/bring-your-own-keys"},{"title":"Firewall","sidebarTitle":"Firewall","href":"/ai-gateway/concepts/firewall"}]},{"group":"Getting Started With","pages":[{"title":"OpenAI","href":"/ai-gateway/providers/openai"},{"title":"Anthropic","href":"/ai-gateway/providers/anthropic"},{"title":"OpenRouter","href":"/ai-gateway/providers/openrouter"},{"title":"Google","href":"/ai-gateway/providers/google"},{"title":"Groq","href":"/ai-gateway/providers/groq"},{"title":"DeepSeek","href":"/ai-gateway/providers/deepseek"},{"title":"xAI","href":"/ai-gateway/providers/xai"},{"title":"Mistral AI","href":"/ai-gateway/providers/mistral"},{"title":"Moonshot AI","href":"/ai-gateway/providers/moonshotai"},{"title":"Z.ai","href":"/ai-gateway/providers/z-ai"},{"title":"QwenCloud","href":"/ai-gateway/providers/qwencloud"},{"title":"MiniMax","href":"/ai-gateway/providers/minimax"},{"title":"Tencent TokenHub","href":"/ai-gateway/providers/tokenhub"},{"title":"Typesafe AI","href":"/ai-gateway/providers/typesafeai"},{"title":"Hyperbolic","href":"/ai-gateway/providers/hyperbolic"},{"title":"InceptionLabs","href":"/ai-gateway/providers/inceptionlabs"},{"title":"Inference.net","href":"/ai-gateway/providers/inference-net"},{"title":"Ollama","sidebarTitle":"Ollama","href":"/ai-gateway/custom-providers/ollama"},{"title":"LM Studio","sidebarTitle":"LM Studio","href":"/ai-gateway/custom-providers/lm-studio"},{"title":"vLLM","sidebarTitle":"vLLM","href":"/ai-gateway/custom-providers/vllm"},{"title":"Azure OpenAI","sidebarTitle":"Azure OpenAI","href":"/ai-gateway/custom-providers/azure-openai"}]},{"group":"SDKs","pages":[{"title":"SDK Integration","sidebarTitle":"Overview","href":"/ai-gateway/sdks/index"},{"title":"OpenAI SDK","sidebarTitle":"OpenAI SDK","href":"/ai-gateway/sdks/openai"},{"title":"Anthropic SDK","sidebarTitle":"Anthropic SDK","href":"/ai-gateway/sdks/anthropic"},{"title":"Google Gen AI SDK","sidebarTitle":"Google Gen AI SDK","href":"/ai-gateway/sdks/google"},{"title":"Vercel AI SDK","sidebarTitle":"Vercel AI SDK","href":"/ai-gateway/sdks/vercel-ai-sdk"},{"title":"TanStack AI","sidebarTitle":"TanStack AI","href":"/ai-gateway/sdks/tanstack-ai"},{"title":"LangChain","sidebarTitle":"LangChain","href":"/ai-gateway/sdks/langchain"},{"title":"Other SDKs","sidebarTitle":"Other SDKs","href":"/ai-gateway/sdks/other"}]},{"group":"Agents","pages":[{"title":"Agents","sidebarTitle":"Overview","href":"/ai-gateway/agents/index"},{"title":"Claude Code","sidebarTitle":"Claude Code","href":"/ai-gateway/agents/claude-code"},{"title":"Codex","sidebarTitle":"Codex","href":"/ai-gateway/agents/codex"},{"title":"Cursor","sidebarTitle":"Cursor","href":"/ai-gateway/agents/cursor"},{"title":"Hermes","sidebarTitle":"Hermes","href":"/ai-gateway/agents/hermes"},{"title":"OpenCode","sidebarTitle":"OpenCode","href":"/ai-gateway/agents/opencode"},{"title":"Pi","sidebarTitle":"Pi","href":"/ai-gateway/agents/pi"},{"title":"Zed","sidebarTitle":"Zed","href":"/ai-gateway/agents/zed"},{"title":"Other agents","sidebarTitle":"Other agents","href":"/ai-gateway/agents/other"}]},{"group":"Guides","pages":[{"title":"Choose how to reach providers","sidebarTitle":"Choose how to reach providers","href":"/ai-gateway/guides/configuring-providers"},{"title":"Pay with credits","sidebarTitle":"Pay with credits","href":"/ai-gateway/guides/pay-with-credits"},{"title":"Bring your own provider key","sidebarTitle":"Bring your own provider key","href":"/ai-gateway/guides/attaching-provider-keys"},{"title":"Use a model you run yourself","sidebarTitle":"Use a model you run yourself","href":"/ai-gateway/guides/use-a-model-you-run-yourself"},{"title":"Choose a model","sidebarTitle":"Choose a model","href":"/ai-gateway/guides/model-selection-strategies"},{"title":"Automatic model selection","sidebarTitle":"Automatic model selection","href":"/ai-gateway/guides/automatic-model-selection"},{"title":"Configure fallback models","sidebarTitle":"Configure fallback models","href":"/ai-gateway/guides/configure-fallback-models"},{"title":"Upload and use files","sidebarTitle":"Files","href":"/ai-gateway/guides/files"},{"title":"Typed-question APIs","sidebarTitle":"Decisions and System One","href":"/ai-gateway/guides/decisions-and-system-one"},{"title":"Restrict providers and models","sidebarTitle":"Restrict providers and models","href":"/ai-gateway/guides/restrict-providers-and-models"},{"title":"Set up an access key configuration","sidebarTitle":"Set up an access key configuration","href":"/ai-gateway/guides/access-key-configurations"},{"title":"Guard Agent Tool Calls with Firewall","sidebarTitle":"Guard agent tool calls","href":"/ai-gateway/guides/firewall-policies"},{"title":"Configure provider key failover","sidebarTitle":"Configure provider key failover","href":"/ai-gateway/guides/key-selection-failover"},{"title":"Secure your gateway","sidebarTitle":"Secure your gateway","href":"/ai-gateway/guides/securing-endpoints"},{"title":"Configure account settings","sidebarTitle":"Configure account settings","href":"/ai-gateway/guides/account-settings"},{"title":"Handle gateway errors","sidebarTitle":"Handle gateway errors","href":"/ai-gateway/guides/error-handling"},{"title":"Debug failed requests","sidebarTitle":"Debug failed requests","href":"/ai-gateway/guides/debugging"},{"title":"Find out why a request failed over","sidebarTitle":"Why a request failed over","href":"/ai-gateway/guides/why-a-request-failed-over"}]},{"group":"Observability","pages":[{"title":"Observability Overview","sidebarTitle":"Overview","href":"/ai-gateway/observability/index"}]},{"group":"Examples","pages":[{"title":"Multi-Provider Failover","href":"/ai-gateway/examples/multi-provider-failover"},{"title":"Multi-Key Failover","href":"/ai-gateway/examples/multi-key-failover"},{"title":"Restrict Models and Providers","href":"/ai-gateway/examples/model-filtering"},{"title":"Securely Put Your Self-Hosted n8n Workflows Online","sidebarTitle":"Grant Access to Your n8n Workflows","href":"/gateway/examples/n8n"}]},{"group":"Reference","pages":[{"title":"Error Codes Reference","href":"/ai-gateway/reference/error-codes"},{"title":"Firewall Reference","sidebarTitle":"Firewall","href":"/ai-gateway/reference/firewall"}]},{"group":"API Reference","pages":[{"title":"AI Gateway API","sidebarTitle":"Overview","href":"/ai-gateway/api-reference/overview"},{"group":"Access Keys","pages":[{"openapi":"openapi/ai-gateway.yaml GET /access-keys","title":"List AI Gateway access keys","href":"/ai-gateway/api-reference/access-keys/list"},{"openapi":"openapi/ai-gateway.yaml POST /access-keys","title":"Create an AI Gateway access key","href":"/ai-gateway/api-reference/access-keys/create"},{"openapi":"openapi/ai-gateway.yaml GET /access-keys/{id}","title":"Get an AI Gateway access key","href":"/ai-gateway/api-reference/access-keys/get"},{"openapi":"openapi/ai-gateway.yaml PATCH /access-keys/{id}","title":"Update an AI Gateway access key","href":"/ai-gateway/api-reference/access-keys/update"},{"openapi":"openapi/ai-gateway.yaml DELETE /access-keys/{id}","title":"Delete an AI Gateway access key","href":"/ai-gateway/api-reference/access-keys/delete"}]},{"group":"Access Key Configurations","pages":[{"openapi":"openapi/ai-gateway.yaml GET /access-key-configurations","title":"List AI Gateway access key configurations","href":"/ai-gateway/api-reference/access-key-configurations/list"},{"openapi":"openapi/ai-gateway.yaml POST /access-key-configurations","title":"Create an AI Gateway access key configuration","href":"/ai-gateway/api-reference/access-key-configurations/create"},{"openapi":"openapi/ai-gateway.yaml GET /access-key-configurations/{id}","title":"Get an AI Gateway access key configuration","href":"/ai-gateway/api-reference/access-key-configurations/get"},{"openapi":"openapi/ai-gateway.yaml PATCH /access-key-configurations/{id}","title":"Update an AI Gateway access key configuration","href":"/ai-gateway/api-reference/access-key-configurations/update"},{"openapi":"openapi/ai-gateway.yaml DELETE /access-key-configurations/{id}","title":"Delete an AI Gateway access key configuration","href":"/ai-gateway/api-reference/access-key-configurations/delete"}]},{"group":"Firewall Policies","pages":[{"openapi":"openapi/ai-gateway.yaml GET /firewall-policies","description":"List all AI Gateway Firewall policies owned by the authenticated account.","title":"List AI Gateway Firewall policies","href":"/ai-gateway/api-reference/firewall-policies/list"},{"openapi":"openapi/ai-gateway.yaml POST /firewall-policies","title":"Create an AI Gateway Firewall policy","href":"/ai-gateway/api-reference/firewall-policies/create"},{"openapi":"openapi/ai-gateway.yaml GET /firewall-policies/{id}","description":"Get a single AI Gateway Firewall policy by ID.","title":"Get an AI Gateway Firewall policy","href":"/ai-gateway/api-reference/firewall-policies/get"},{"openapi":"openapi/ai-gateway.yaml PATCH /firewall-policies/{id}","title":"Update an AI Gateway Firewall policy","href":"/ai-gateway/api-reference/firewall-policies/update"},{"openapi":"openapi/ai-gateway.yaml DELETE /firewall-policies/{id}","title":"Delete an AI Gateway Firewall policy","href":"/ai-gateway/api-reference/firewall-policies/delete"}]},{"group":"Provider Keys","pages":[{"openapi":"openapi/ai-gateway.yaml GET /provider-keys","title":"List AI Gateway provider keys","href":"/ai-gateway/api-reference/provider-keys/list"},{"openapi":"openapi/ai-gateway.yaml POST /provider-keys","title":"Create an AI Gateway provider key","href":"/ai-gateway/api-reference/provider-keys/create"},{"openapi":"openapi/ai-gateway.yaml GET /provider-keys/{id}","title":"Get an AI Gateway provider key","href":"/ai-gateway/api-reference/provider-keys/get"},{"openapi":"openapi/ai-gateway.yaml PATCH /provider-keys/{id}","title":"Update an AI Gateway provider key","href":"/ai-gateway/api-reference/provider-keys/update"},{"openapi":"openapi/ai-gateway.yaml DELETE /provider-keys/{id}","title":"Delete an AI Gateway provider key","href":"/ai-gateway/api-reference/provider-keys/delete"},{"openapi":"openapi/ai-gateway.yaml POST /provider-keys/{id}/rotate","title":"Rotate an AI Gateway provider key","href":"/ai-gateway/api-reference/provider-keys/rotate"}]},{"group":"Providers","pages":[{"openapi":"openapi/ai-gateway.yaml GET /providers","title":"List AI Gateway providers","href":"/ai-gateway/api-reference/providers/list"},{"openapi":"openapi/ai-gateway.yaml POST /providers","title":"Create an AI Gateway provider","href":"/ai-gateway/api-reference/providers/create"},{"openapi":"openapi/ai-gateway.yaml GET /providers/{id}","title":"Get an AI Gateway provider","href":"/ai-gateway/api-reference/providers/get"},{"openapi":"openapi/ai-gateway.yaml PATCH /providers/{id}","title":"Update an AI Gateway provider","href":"/ai-gateway/api-reference/providers/update"},{"openapi":"openapi/ai-gateway.yaml DELETE /providers/{id}","title":"Delete an AI Gateway provider","href":"/ai-gateway/api-reference/providers/delete"}]},{"group":"API Keys","pages":[{"openapi":"openapi/ai-gateway.yaml GET /api-keys","title":"List AI Gateway API keys","href":"/ai-gateway/api-reference/api-keys/list"},{"openapi":"openapi/ai-gateway.yaml POST /api-keys","title":"Create an AI Gateway API key","href":"/ai-gateway/api-reference/api-keys/create"},{"openapi":"openapi/ai-gateway.yaml GET /api-keys/{id}","title":"Get an AI Gateway API key","href":"/ai-gateway/api-reference/api-keys/get"},{"openapi":"openapi/ai-gateway.yaml PATCH /api-keys/{id}","title":"Update an AI Gateway API key","href":"/ai-gateway/api-reference/api-keys/update"},{"openapi":"openapi/ai-gateway.yaml DELETE /api-keys/{id}","title":"Delete an AI Gateway API key","href":"/ai-gateway/api-reference/api-keys/delete"}]},{"group":"Credits","pages":[{"openapi":"openapi/ai-gateway.yaml GET /credits/balance","title":"Get credit balance","href":"/ai-gateway/api-reference/credits/balance"},{"openapi":"openapi/ai-gateway.yaml GET /credits/transactions","title":"List credit transactions","href":"/ai-gateway/api-reference/credits/transactions"},{"openapi":"openapi/ai-gateway.yaml POST /credits/checkout-session","title":"Create a Stripe checkout session","href":"/ai-gateway/api-reference/credits/checkout-session"},{"openapi":"openapi/ai-gateway.yaml POST /credits/purchases","title":"Start a credit purchase","href":"/ai-gateway/api-reference/credits/purchase-create"},{"openapi":"openapi/ai-gateway.yaml GET /credits/purchases/{id}","title":"Get a credit purchase","href":"/ai-gateway/api-reference/credits/purchase-get"}]},{"group":"Models","pages":[{"openapi":"openapi/ai-gateway.yaml GET /v1/models","title":"List available AI Gateway models","href":"/ai-gateway/api-reference/models/list"}]},{"group":"Configuration","pages":[{"openapi":"openapi/ai-gateway.yaml GET /gateway-config","title":"Get AI Gateway configuration","href":"/ai-gateway/api-reference/gateway-config/get"},{"openapi":"openapi/ai-gateway.yaml PATCH /gateway-config","title":"Update AI Gateway configuration","href":"/ai-gateway/api-reference/gateway-config/update"}]},{"group":"Usage","pages":[{"openapi":"openapi/ai-gateway.yaml GET /usage","title":"List AI Gateway usage events","href":"/ai-gateway/api-reference/usage/list"},{"openapi":"openapi/ai-gateway.yaml GET /usage/overview","title":"AI Gateway usage overview","href":"/ai-gateway/api-reference/usage/overview"},{"openapi":"openapi/ai-gateway.yaml GET /usage/requests/{requestId}","title":"Get the upstream attempts of one AI Gateway request","href":"/ai-gateway/api-reference/usage/request-attempts"}]}]}]},{"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":"Create an AI Gateway Firewall policy - ngrok documentation","buildId":"dpl_GvhK4qVXq51DpfYJLCtPpYNN4YHN","deploymentId":"dpl_GvhK4qVXq51DpfYJLCtPpYNN4YHN","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-Bg4Z7D_G.js","utils-Biz734EK.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C6F9YHs6.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BoJjY_VP.js","snippetPresets-CnZ-mOFh.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-DC_SB2pp.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BYKtOiIP.js","shallow-COAac_UD.js","getApiPlaygroundDisplay-BV4Viqi2.js","CodeSnippet-DDgW-JXl.js","CodeSnippets-CP1LpNhG.js","Page-BeiUfucV.js","getPastedJson-Cvgvbfmv.js","icon-D-H368xH.js","MethodPill-CXSxH1VW.js","DuplicateIcon-JcbBzF1x.js","createIcon-BDt_aHZM.js","DynamicMarkdown-DO1Fz7ar.js","SectionHeading-mwKBArs3.js","axios-vUo_bRtp.js","Markdown-C3KUTGJN.js","clsx-C6CAjViH.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-C3vb5JQZ.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-C8Hisf3g.js"]}