Validates CEL expression syntax, undefined variables, action format, and role/group format.
Returns 204 No Content if valid, or 422 with Pydantic validation errors if invalid.
A Barndoor API key, sent as Authorization: Bearer <key>. Keys are prefixed bdai_ and are opaque — do not attempt to decode one. Interchangeable with an OAuth 2.0 access token.
Body
application/json
A single rule: which principals may take which tool actions, optionally conditioned.
Tool actions this rule matches, in the wire format tools/call:<tool_name> — for example tools/call:create_issue. Use * to match every action on the server. Tool names are specific to the target MCP server: enumerate the server's real tools rather than guessing names. A trailing :approve selects the Needs-Approval variant of a tool (tools/call:create_issue:approve), which requires per-call human confirmation; the plain action is Always Allow. Do not grant both twins of the same tool in one rule.
Optional display name for the rule. Letters, digits, spaces, hyphens and underscores only — a colon or other punctuation is rejected with a 422, which is easy to hit because rule names tend to read like Security: view agents. Names must also be unique within the policy once punctuation is normalized, so My Rule and My-Rule collide.
Effect of the rule: True grants the listed actions, False denies them. Access is denied by default, so a tool that no rule grants is already blocked — an explicit False rule is only needed to carve an exception out of a broader allow. The effective model is tri-state rather than binary: Always Allow is True on the plain action, Needs Approval is True on the :approve twin (see actions), and Blocked is simply the absence of a grant.
Principals this rule applies to, as PREFIXED entries: role:<role_name> for an IdP/Keycloak role, group:<group_name> for a user group, or the literal * for all users (the default). A bare name with no role:/group: prefix matches NOTHING. Retrieve the organization's real role and group names from GET /api/identity/public/v1/users/roles-groups. A principal set should appear on at most ONE rule in a policy — collect all of its actions there instead of spreading them over several rules.
Optional CEL condition; the rule applies only when it evaluates true. Shape is {"match": <matcher>}. Omit entirely for an unconditional rule.
Show child attributes
Response
Successful Response
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Barndoor Documentation","colors":{"primary":"#224035","light":"#F4F2EC","dark":"#101816"},"logo":{"light":"https://mintcdn.com/barndoor/TT8uf6K7JlnIPxfG/logo/barndoor.svg?fit=max\u0026auto=format\u0026n=TT8uf6K7JlnIPxfG\u0026q=85\u0026s=1247b64e3629e515e9828d5531f3761c","dark":"https://mintcdn.com/barndoor/HeKK8u9zK_HvYFKu/logo/barndoor-dark.svg?fit=max\u0026auto=format\u0026n=HeKK8u9zK_HvYFKu\u0026q=85\u0026s=a2aa86f5bb53b210007dc60bbcfb2f62"},"favicon":"https://mintcdn.com/barndoor/HOu8QpGXIsQmTWzq/favicon.png?fit=max\u0026auto=format\u0026n=HOu8QpGXIsQmTWzq\u0026q=85\u0026s=6197d51e381fcf048831109479f61915","appearance":{"default":"light","strict":false},"navbar":{"links":[{"href":"mailto:[email protected]","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.barndoor.ai"}},"footer":{"socials":{"github":"https://github.com/barndoor-ai","linkedin":"https://www.linkedin.com/company/barndoor-ai","x":"https://x.com/BarndoorAI"}},"fonts":{"heading":{"family":"Inter","weight":600},"body":{"family":"Inter","weight":400}},"integrations":{"gtm":{"tagId":"GTM-M58KTGQK"},"hotjar":{"hjid":"6591743","hjsv":"6"}},"styling":{"latex":true},"navigation":{"global":{"anchors":[]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"barndoor","hasAudioNarration":false,"actualSubdomain":"barndoor","customDomains":["docs.barndoor.ai"],"gitSource":{"type":"github","owner":"barndoor-ai","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae224030785dfbc88128b9e","collectionId":"68b3ddd5-48ac-40ec-a50f-bb46dec59e3b","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae224030785dfbc88128b9e"},"entitlements":{},"buildId":"6ae22a3fff1eb82397c22763","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"default","tag":"API Reference","count":283},{"language":"default","tag":"LLM Gateway","count":94},{"language":"default","tag":"Data Control Center","count":42},{"language":"default","tag":"Guides","count":38},{"language":"default","tag":"Getting Started","count":38},{"language":"default","tag":"Policies","count":34},{"language":"default","tag":"MCP Gateway","count":29},{"language":"default","tag":"Log Exports","count":10},{"language":"default","tag":"Identity","count":9},{"language":"default","tag":"LLM Gateway: Model Pricing","count":8}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"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":"theme.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwhsk.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxTcwhsk.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxPcwhsk.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx_cwhsk.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwhsk.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwhsk.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxTcwhsk.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxPcwhsk.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx_cwhsk.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwhsk.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwhsk.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxTcwhsk.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxPcwhsk.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx_cwhsk.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwhsk.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'JetBrains Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n.markdown code,.markdown pre,.markdown pre code,code[class*=language-],pre[class*=language-]{font-family:\"JetBrains Mono\",ui-monospace,SFMono-Regular,\"SF Mono\",Menlo,Consolas,\"Liberation Mono\",monospace!important;font-feature-settings:\"calt\" 1,\"liga\" 0}:root{--bd-ink:#183129;--bd-ink-soft:#365247;--bd-brand:#224035;--bd-brand-strong:#173229;--bd-brand-accent:#356453;--bd-brand-tint:#e8f1ec;--bd-brand-surface:#f4f2ec;--bd-border:#d7ddd8;--bd-border-strong:#b8c4be;--bd-shadow-sm:0 10px 24px rgba(17, 29, 24, 0.05);--bd-shadow-md:0 16px 40px rgba(17, 29, 24, 0.08)}.dark{--bd-ink:#e8f1ec;--bd-ink-soft:#b8c4be;--bd-brand:#7fb5a0;--bd-brand-strong:#7fb5a0;--bd-brand-accent:#7fb5a0;--bd-brand-tint:#16211e;--bd-brand-surface:#141b19;--bd-border:#22302b;--bd-border-strong:#33443e;--bd-shadow-sm:0 10px 24px rgba(0, 0, 0, 0.3);--bd-shadow-md:0 16px 40px rgba(0, 0, 0, 0.4)}body{background:radial-gradient(circle at top left,rgba(53,100,83,.08),transparent 28%),linear-gradient(180deg,#faf9f5 0,#f4f2ec 100%)}.dark body{background:#101816}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{color:var(--bd-brand);letter-spacing:-.02em}.markdown h1{font-weight:700}.markdown li,.markdown p{color:var(--bd-ink-soft)}.markdown a{color:var(--bd-brand-accent);text-underline-offset:.16em}.markdown strong,.not-prose b,.not-prose strong{color:var(--bd-ink);font-weight:700!important}.card,[data-callout-type]{box-shadow:var(--bd-shadow-sm)}.card{border:1px solid rgba(34,64,53,.1);border-radius:18px;padding:1.75rem;background:linear-gradient(180deg,rgba(255,255,255,.96) 0,rgba(244,242,236,.95) 100%);transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}.dark .card{border-color:rgba(127,181,160,.15);background:linear-gradient(180deg,rgba(20,27,25,.96) 0,rgba(13,18,16,.95) 100%)}.card:hover{transform:translateY(-3px);border-color:rgba(53,100,83,.25);box-shadow:var(--bd-shadow-md)}.card img{width:48px!important;height:48px!important;border-radius:12px}.card h3{font-size:1.18rem!important;margin-top:0!important;color:var(--bd-ink)!important}.card p{font-size:.98rem!important;color:var(--bd-ink-soft)!important}[data-callout-type]{border-radius:16px!important;border-width:1px!important}[data-callout-type=note]{background:linear-gradient(180deg,#edf7f2 0,#e6f1ec 100%)!important;border-color:rgba(53,100,83,.28)!important}[data-callout-type=tip]{background:linear-gradient(180deg,#f2f8f5 0,#ebf3ee 100%)!important;border-color:rgba(34,64,53,.18)!important}[data-callout-type=info]{background:linear-gradient(180deg,#f8faf8 0,#f2f5f3 100%)!important;border-color:rgba(24,49,41,.14)!important}[data-callout-type=warning]{background:linear-gradient(180deg,#fff8ec 0,#fdf2dd 100%)!important;border-color:rgba(167,120,39,.28)!important}.dark [data-callout-type=note],.dark [data-callout-type=tip]{background:linear-gradient(180deg,#16211e 0,#141b19 100%)!important;border-color:rgba(127,181,160,.28)!important}.dark [data-callout-type=tip]{border-color:rgba(127,181,160,.2)!important}.dark [data-callout-type=info]{background:linear-gradient(180deg,#141b19 0,#101816 100%)!important;border-color:rgba(200,212,208,.14)!important}.dark [data-callout-type=warning]{background:linear-gradient(180deg,#2a2312 0,#221d0e 100%)!important;border-color:rgba(217,160,60,.3)!important}[data-callout-type] [data-component-part=callout-content],[data-callout-type] svg{color:var(--bd-ink)!important}.markdown pre{border:1px solid rgba(24,49,41,.08);border-radius:16px;box-shadow:inset 0 1px 0 rgba(255,255,255,.04),var(--bd-shadow-sm)}.markdown table{border-radius:14px;overflow:hidden}[data-table-wrapper=true] table{table-layout:auto!important}[data-table-wrapper=true] td,[data-table-wrapper=true] th{white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;min-width:120px!important}[data-table-wrapper=true] table tbody td:first-child,[data-table-wrapper=true] table thead th:first-child{min-width:160px!important}button[data-testid=try-it-button]{background:linear-gradient(135deg,var(--bd-brand-strong) 0%,var(--bd-brand-accent) 100%)!important;border:1px solid rgba(255,255,255,.08)!important;box-shadow:0 8px 18px rgba(23,50,41,.18)}button[data-testid=try-it-button]:hover{opacity:.95;transform:translateY(-1px)}.trial-cta-banner{background:linear-gradient(135deg,rgba(232,241,236,.96) 0,rgba(255,255,255,.96) 58%,rgba(244,242,236,.96) 100%);border:1px solid rgba(34,64,53,.12);border-radius:22px;padding:2.25rem;margin:3rem 0;display:flex;justify-content:space-between;align-items:center;gap:2rem;box-shadow:var(--bd-shadow-md)}.dark .trial-cta-banner{background:linear-gradient(135deg,rgba(22,33,30,.96) 0,rgba(16,24,22,.96) 58%,rgba(13,18,16,.96) 100%);border-color:rgba(127,181,160,.15)}.trial-content{display:flex;align-items:flex-start;gap:1.25rem;flex:1}.trial-text h3{margin:0 0 .6rem!important;font-size:1.7rem!important;color:var(--bd-brand)!important;font-weight:700!important;letter-spacing:-.03em}.trial-text p{margin:0!important;font-size:1rem!important;color:var(--bd-ink-soft)!important;line-height:1.65}.trial-text a{color:var(--bd-brand-accent);font-weight:600}.trial-button{background:linear-gradient(135deg,var(--bd-brand-strong) 0%,var(--bd-brand-accent) 100%);color:#fff;padding:.95rem 1.65rem;border-radius:14px;font-size:.98rem;font-weight:700;letter-spacing:.01em;text-decoration:none;white-space:nowrap;box-shadow:0 10px 22px rgba(23,50,41,.18);transition:transform .2s ease,box-shadow .2s ease,opacity .2s ease}.trial-button:hover{color:#fff;opacity:.96;transform:translateY(-2px);box-shadow:0 14px 26px rgba(23,50,41,.22)}.integration-layout{display:flex;flex-wrap:wrap;gap:2rem;margin-top:2rem}.integration-card,.integration-tools{border-radius:20px;border:1px solid rgba(34,64,53,.09);box-shadow:var(--bd-shadow-sm)}.integration-card{flex:1 1 35%;background:linear-gradient(180deg,rgba(244,242,236,.96) 0,rgba(255,255,255,.96) 100%);padding:1.85rem}.integration-tools{flex:1 1 60%;background:rgba(255,255,255,.96);padding:1.85rem}.dark .integration-card{background:linear-gradient(180deg,rgba(13,18,16,.96) 0,rgba(20,27,25,.96) 100%)}.dark .integration-tools{background:rgba(16,24,22,.96)}.integration-header{display:flex;align-items:center;gap:1rem;margin-bottom:1.25rem}.integration-logo{width:52px;height:52px;border-radius:12px}.integration-title{font-size:1.45rem;font-weight:700;margin:0;color:var(--bd-brand)}.integration-sub,.meta-item p{color:var(--bd-ink-soft)}.integration-meta,.tools-grid{display:grid;gap:1rem}.integration-meta{grid-template-columns:repeat(auto-fill,minmax(130px,1fr));margin-top:1.5rem}.tools-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));margin-top:1rem}.tool-item{border:1px solid rgba(34,64,53,.08);border-radius:14px;padding:1rem;background:linear-gradient(180deg,rgba(255,255,255,.95) 0,rgba(248,247,243,.95) 100%);transition:border-color .2s ease,transform .2s ease}.dark .tool-item{border-color:rgba(127,181,160,.12);background:linear-gradient(180deg,rgba(20,27,25,.95) 0,rgba(13,18,16,.95) 100%)}.tool-item:hover{transform:translateY(-2px);border-color:rgba(53,100,83,.2)}.trust-link{display:inline-block;margin-top:1.25rem;color:var(--bd-brand-accent);font-weight:700;text-decoration:none}.rounded-xl.bg-gray-50{background:linear-gradient(180deg,rgba(255,255,255,.98) 0,rgba(244,242,236,.96) 100%)!important;border:1px solid rgba(24,49,41,.08)!important;padding:1.4rem!important;box-shadow:var(--bd-shadow-sm);transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}.dark .rounded-xl.bg-gray-50{background:linear-gradient(180deg,rgba(20,27,25,.98) 0,rgba(13,18,16,.96) 100%)!important;border-color:rgba(127,181,160,.12)!important}.rounded-xl.bg-gray-50:hover{transform:translateY(-2px);border-color:rgba(53,100,83,.18)!important;box-shadow:var(--bd-shadow-md)}.rounded-xl.bg-gray-50 dt{font-size:.76rem!important;font-weight:700!important;color:var(--bd-ink-soft)!important;text-transform:uppercase;letter-spacing:.08em}.rounded-xl.bg-gray-50 dd.mt-2.text-3xl,.rounded-xl.bg-gray-50 dd.mt-2.text-lg{color:var(--bd-ink)!important;font-weight:700!important}html[data-current-path=\"/\"] #content-container{max-width:none!important}html[data-current-path=\"/\"] img[alt=\"Hero Dark\"],html[data-current-path=\"/\"] img[alt=\"Hero Light\"]{margin-top:0}html[data-current-path=\"/mcp-servers/servers\"] div[class*=scroll-mt][class*=peer]{max-width:1472px!important;margin-left:auto!important;margin-right:auto!important}.servers-layout{display:flex;gap:2rem;padding:0 2rem 2rem}.servers-layout-nav{position:fixed;top:112px;bottom:0;left:calc(max(0px,(100vw - 1472px)/2) + 32px);width:288px;overflow-y:auto;padding:32px 0 0;border-right:1px solid #e5e7eb;z-index:20}.dark .servers-layout-nav{border-right-color:#22302b}.servers-layout-nav h3{margin:0 0 .625rem;padding-left:1rem;font-size:14px;font-weight:600;line-height:24px;color:#171818}.dark .servers-layout-nav h3{color:#c8d4d0}.servers-layout-nav ul{list-style:none;padding:0 32px 0 0;margin:0}.servers-layout-nav li{margin-bottom:.25rem}.servers-layout-nav a{display:block;padding:6px 12px 6px 16px;border-radius:12px;text-decoration:none;font-size:14px;font-weight:400;line-height:24px;color:#3f4040;transition:background-color .15s ease,color .15s ease}.dark .servers-layout-nav a{color:#8a9691}.servers-layout-nav a:hover{background-color:rgba(81,81,81,.05);color:#171818}.dark .servers-layout-nav a:hover{background-color:rgba(127,181,160,.08);color:#c8d4d0}.servers-layout-main{flex:1;margin-left:320px;padding-top:30px}.servers-layout-main-intro{display:block;padding-bottom:20px}@media (max-width:768px){.trial-cta-banner{padding:1.5rem;align-items:stretch}.trial-content,.trial-cta-banner{flex-direction:column}.trial-button{width:100%;text-align:center}.integration-layout{gap:1.25rem}.card,.integration-card,.integration-tools{padding:1.35rem}}:root{--bd-deny-bg:#fbeceb;--bd-deny-ink:#9b2c24;--bd-ok-bg:#e3f1e9;--bd-ok-ink:#1d5a40;--bd-muted-bg:#f1efe9}.dark{--bd-deny-bg:#3a1d1b;--bd-deny-ink:#f2b3ad;--bd-ok-bg:#173228;--bd-ok-ink:#9fd6bd;--bd-muted-bg:#1a2320}.bd-arch-stages li,.bd-diagram{border:1px solid var(--bd-border);background:var(--bd-brand-surface)}.bd-diagram{margin:1.5rem 0 2rem;padding:1.25rem;border-radius:16px;color:var(--bd-ink);font-size:.875rem;line-height:1.4}.bd-diagram strong{font-weight:600;color:var(--bd-ink)}.bd-diagram code{font-size:.8em}.bd-diagram-label{margin-bottom:.5rem;font-size:.7rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--bd-ink-soft)}.bd-num,.bd-pill{flex:none;border-radius:999px;font-weight:600}.bd-num{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;background:var(--bd-brand);color:#fff;font-size:.75rem}.dark .bd-num{color:#101816}.bd-pill{padding:.15rem .55rem;font-size:.72rem;white-space:nowrap}.bd-pill-deny{background:var(--bd-deny-bg);color:var(--bd-deny-ink)}.bd-pill-ok{background:var(--bd-ok-bg);color:var(--bd-ok-ink)}.bd-pill-muted{background:var(--bd-muted-bg);color:var(--bd-ink-soft);border:1px solid var(--bd-border)}.bd-arch-row{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:center}.bd-chip{padding:.35rem .75rem;border:1px solid var(--bd-border-strong);border-radius:999px;background:var(--bd-brand-tint);font-weight:500}.bd-arch-tier{text-align:center}.bd-arch-link{position:relative;display:flex;justify-content:center;padding:1.1rem 0}.bd-arch-link::before{content:\"\";position:absolute;top:0;bottom:0;left:50%;border-left:2px dashed var(--bd-border-strong)}.bd-arch-link code{font-size:1em}.bd-arch-link span{position:relative;padding:.15rem .6rem;border-radius:6px;background:var(--bd-brand-surface);color:var(--bd-ink-soft);font-size:.75rem}.bd-arch-gateway{padding:1rem;border:2px solid var(--bd-brand);border-radius:14px;background:var(--bd-brand-tint);box-shadow:var(--bd-shadow-sm)}.bd-arch-title{margin-bottom:.75rem;text-align:center;font-weight:600;font-size:.95rem}.bd-arch-stages{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.5rem;margin:0;padding:0;list-style:none}.bd-arch-stages li{display:flex;flex-direction:column;gap:.25rem;margin:0;padding:.65rem;border-radius:10px}.bd-arch-stages li span:last-child{color:var(--bd-ink-soft);font-size:.78rem}.bd-arch-stages .bd-num{margin-bottom:.25rem}.bd-arch-foot{margin-top:.75rem;text-align:center;color:var(--bd-ink-soft);font-size:.78rem}@media (max-width:640px){.bd-diagram{padding:1rem}.bd-arch-stages{grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem}}.bd-fc{--bd-fc-out:8.5rem;display:grid;grid-template-columns:minmax(0,1fr) var(--bd-fc-out);align-items:center}.bd-fc-arrow,.bd-fc-legend,.bd-fc-term{grid-column:1/-1}.bd-fc-term{justify-self:start;margin-left:calc((100% - var(--bd-fc-out))/2);transform:translateX(-50%);padding:.4rem 1rem;border:1px solid var(--bd-border-strong);border-radius:999px;background:var(--bd-brand-surface);font-weight:600;white-space:nowrap}.bd-flow-body{flex:1;display:flex;flex-direction:column;gap:.1rem;min-width:0}.bd-flow-body span{color:var(--bd-ink-soft);font-size:.8rem}.bd-fc-arrow-label span,.bd-fc-node{z-index:1;border:1px solid var(--bd-border)}.bd-fc-node{grid-column:1;position:relative;display:flex;align-items:center;gap:.75rem;padding:.65rem .8rem;border-radius:12px;background:var(--bd-brand-tint);box-shadow:var(--bd-shadow-sm)}.bd-fc-end{border:1.5px solid var(--bd-brand)}.bd-fc-out{grid-column:2;display:flex;align-items:center;gap:.4rem}.bd-fc-out::before{content:\"\";flex:1;min-width:1rem;border-top:2px dashed var(--bd-border-strong)}.bd-fc-arrow{position:relative;height:1.6rem}.bd-fc-arrow::after,.bd-fc-arrow::before{content:\"\";position:absolute;left:calc((100% - var(--bd-fc-out))/2)}.bd-fc-arrow::before{top:0;bottom:5px;border-left:2px solid var(--bd-border-strong);transform:translateX(-1px)}.bd-fc-arrow::after{bottom:0;transform:translateX(-5px);border-left:5px solid transparent;border-right:5px solid transparent;border-top:6px solid var(--bd-border-strong)}.bd-fc-arrow-label{height:2.6rem}.bd-fc-arrow-label span{position:absolute;top:50%;left:calc((100% - var(--bd-fc-out))/2);transform:translate(-50%,-60%);padding:.1rem .6rem;border-radius:999px;background:var(--bd-brand-surface);color:var(--bd-ink-soft);font-size:.68rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap}.bd-fc-legend{display:flex;flex-wrap:wrap;gap:.4rem 1.25rem;margin-top:1rem;padding-top:.75rem;border-top:1px solid var(--bd-border);color:var(--bd-ink-soft);font-size:.78rem}.bd-fc-legend>span{display:inline-flex;align-items:center;gap:.4rem}@media (max-width:640px){.bd-fc{--bd-fc-out:5.5rem}.bd-fc .bd-pill{flex:0 1 auto;min-width:0;font-size:.66rem;padding:.1rem .4rem;white-space:normal;text-align:center}.bd-fc-node{gap:.5rem;padding:.55rem .6rem}}.bd-fc-end-deny{border:1.5px dashed var(--bd-deny-ink)}"}],"page":{"pagePath":"api-reference/policy/validate-rule","slug":"/api-reference/policy/validate-rule","pageMetadata":{"title":"Validate Rule","description":"Validate a single policy rule for correctness.\n\nValidates CEL expression syntax, undefined variables, action format, and role/group format.\nReturns 204 No Content if valid, or 422 with Pydantic validation errors if invalid.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/policy/v2/policies/rule/validate","href":"/api-reference/policy/validate-rule","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Validate a single policy rule for correctness.\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"Validates CEL expression syntax, undefined variables, action format, and role/group format.\\nReturns 204 No Content if valid, or 422 with Pydantic validation errors if invalid.\"\n })]\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":{"title":"Validate Rule","description":"Validate a single policy rule for correctness.\n\nValidates CEL expression syntax, undefined variables, action format, and role/group format.\nReturns 204 No Content if valid, or 422 with Pydantic validation errors if invalid.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/policy/v2/policies/rule/validate","href":"/api-reference/policy/validate-rule","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/barndoor/ac31067b4e59b7c2/plain-chat.js","/_mintlify/custom/barndoor/52b124584339e5a5/nav-logo.js"],"openApiReferenceData":{"operation":{"tags":["policy"],"summary":"Validate Rule","description":"Validate a single policy rule for correctness.\n\nValidates CEL expression syntax, undefined variables, action format, and role/group format.\nReturns 204 No Content if valid, or 422 with Pydantic validation errors if invalid.","operationId":"validate_policy_rule","requestBody":"5b6d7521-20ae-4805-8650-c55319563274","responses":{"204":"7ecbc1dd-c4d3-40c6-9e07-0d93281fb118","422":"f97e1444-ec19-45eb-a1bf-17cb52da5d3b"},"method":"post","type":"path","servers":["3d90fb7e-1b31-468b-9e48-a2cf56df4643"],"security":["42e76a07-d817-411c-98d1-10dd44f028dd","907e0374-7594-4e7c-bd30-5eb0d49015f8"],"path":"/api/policy/v2/policies/rule/validate","baseUrlOptions":["https://{host}"],"title":"Validate Rule","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"content":{"application/json":{"schema":{"properties":{"actions":{"items":{"type":"string","uniqueKey":"actions.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Actions","description":"Tool actions this rule matches, in the wire format `tools/call:\u003ctool_name>` — for example `tools/call:create_issue`. Use `*` to match every action on the server. Tool names are specific to the target MCP server: enumerate the server's real tools rather than guessing names. A trailing `:approve` selects the Needs-Approval variant of a tool (`tools/call:create_issue:approve`), which requires per-call human confirmation; the plain action is Always Allow. Do not grant both twins of the same tool in one rule.","examples":[["tools/call:create_issue"],["tools/call:delete_page:approve"],["*"]],"isRequired":true,"uniqueKey":"actions","typeLabel":"string[]"},"name":{"oneOf":[{"type":"string","title":"Name","description":"Optional display name for the rule. Letters, digits, spaces, hyphens and underscores only — a colon or other punctuation is rejected with a 422, which is easy to hit because rule names tend to read like `Security: view agents`. Names must also be unique within the policy once punctuation is normalized, so `My Rule` and `My-Rule` collide.","default":"","example":"Engineering read access","uniqueKey":"name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Name","description":"Optional display name for the rule. Letters, digits, spaces, hyphens and underscores only — a colon or other punctuation is rejected with a 422, which is easy to hit because rule names tend to read like `Security: view agents`. Names must also be unique within the policy once punctuation is normalized, so `My Rule` and `My-Rule` collide.","default":"","example":"Engineering read access","uniqueKey":"name.oneOf.1","typeLabel":"null"}],"uniqueKey":"name","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","title":"Description","description":"Optional human-readable description for the rule; has no effect on enforcement","uniqueKey":"description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","description":"Optional human-readable description for the rule; has no effect on enforcement","uniqueKey":"description.oneOf.1","typeLabel":"null"}],"uniqueKey":"description","typeLabel":"string | null"},"authorized":{"oneOf":[{"type":"boolean","title":"Authorized","description":"Effect of the rule: True grants the listed `actions`, False denies them. Access is denied by default, so a tool that no rule grants is already blocked — an explicit False rule is only needed to carve an exception out of a broader allow. The effective model is tri-state rather than binary: Always Allow is True on the plain action, Needs Approval is True on the `:approve` twin (see `actions`), and Blocked is simply the absence of a grant.","default":false,"uniqueKey":"authorized.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Authorized","description":"Effect of the rule: True grants the listed `actions`, False denies them. Access is denied by default, so a tool that no rule grants is already blocked — an explicit False rule is only needed to carve an exception out of a broader allow. The effective model is tri-state rather than binary: Always Allow is True on the plain action, Needs Approval is True on the `:approve` twin (see `actions`), and Blocked is simply the absence of a grant.","default":false,"uniqueKey":"authorized.oneOf.1","typeLabel":"null"}],"uniqueKey":"authorized","typeLabel":"boolean | null"},"active":{"type":"boolean","title":"Active","description":"Whether this rule is enforced. False keeps the rule on the policy but omits it from enforcement — use it to disable a rule without deleting it.","default":true,"uniqueKey":"active","typeLabel":"boolean"},"roles_groups":{"items":{"type":"string","uniqueKey":"roles_groups.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Roles Groups","description":"Principals this rule applies to, as PREFIXED entries: `role:\u003crole_name>` for an IdP/Keycloak role, `group:\u003cgroup_name>` for a user group, or the literal `*` for all users (the default). A bare name with no `role:`/`group:` prefix matches NOTHING. Retrieve the organization's real role and group names from `GET /api/identity/public/v1/users/roles-groups`. A principal set should appear on at most ONE rule in a policy — collect all of its actions there instead of spreading them over several rules.","examples":[["*"],["group:Engineering"],["role:admin","group:Platform"]],"uniqueKey":"roles_groups","typeLabel":"string[]"},"condition":{"oneOf":[{"type":"object","title":"PolicyRuleCondition","description":"Optional CEL condition; the rule applies only when it evaluates true. Shape is `{\"match\": \u003cmatcher>}`. Omit entirely for an unconditional rule.","required":["match"],"properties":{"match":{"oneOf":[{"type":"object","title":"Expression","description":"Matcher tree. Either a single expression `{\"expr\": \"...\"}` or a boolean combinator `{\"all\"|\"any\"|\"none\": {\"of\": [\u003cmatcher>, ...]}}`, which nest arbitrarily. The variant is selected by WHICH KEY IS PRESENT — there is no separate discriminator field. Example: {\"all\": {\"of\": [{\"expr\": \"P.attr.department == 'Engineering'\"}, {\"expr\": \"R.attr.env != 'prod'\"}]}}","required":["expr"],"properties":{"expr":{"type":"string","title":"Expr","description":"A single CEL expression that must evaluate to a boolean. Top-level variables: C, G, P, R, V, constants, globals, request, runtime, variables. `P` is the calling principal and `R` the resource (the tool call being authorized). Commonly used attributes: `P.attr.groups` and `P.attr.roles` hold the UNPREFIXED role and group names from the user's profile — note the contrast with a rule's `roles_groups`, whose entries are `role:`/`group:`-prefixed; other IdP profile fields such as `P.attr.department` are available; and `R.attr.\u003cargument>` exposes the tool call's own arguments. Expressions are compiled at write time and rejected if invalid or if they reference an unknown variable.","examples":["P.attr.department == 'Engineering'","R.attr.repository.startsWith('barndoor-ai/')"],"isRequired":true,"uniqueKey":"condition.oneOf.0.match.oneOf.0.expr","typeLabel":"string"}},"isRequired":true,"uniqueKey":"condition.oneOf.0.match.oneOf.0","typeLabel":"Expression · object"},{"type":"object","title":"OperatorAll","description":"Matcher tree. Either a single expression `{\"expr\": \"...\"}` or a boolean combinator `{\"all\"|\"any\"|\"none\": {\"of\": [\u003cmatcher>, ...]}}`, which nest arbitrarily. The variant is selected by WHICH KEY IS PRESENT — there is no separate discriminator field. Example: {\"all\": {\"of\": [{\"expr\": \"P.attr.department == 'Engineering'\"}, {\"expr\": \"R.attr.env != 'prod'\"}]}}","required":["all"],"properties":{"all":{"properties":{"of":{"items":{"oneOf":[{"type":"object","title":"Expression","required":["expr"],"properties":{"expr":{"type":"string","title":"Expr","description":"A single CEL expression that must evaluate to a boolean. Top-level variables: C, G, P, R, V, constants, globals, request, runtime, variables. `P` is the calling principal and `R` the resource (the tool call being authorized). Commonly used attributes: `P.attr.groups` and `P.attr.roles` hold the UNPREFIXED role and group names from the user's profile — note the contrast with a rule's `roles_groups`, whose entries are `role:`/`group:`-prefixed; other IdP profile fields such as `P.attr.department` are available; and `R.attr.\u003cargument>` exposes the tool call's own arguments. Expressions are compiled at write time and rejected if invalid or if they reference an unknown variable.","examples":["P.attr.department == 'Engineering'","R.attr.repository.startsWith('barndoor-ai/')"],"isRequired":true,"uniqueKey":"condition.oneOf.0.match.oneOf.1.all.of.items.[INDEX].oneOf.0.expr","typeLabel":"string"}},"uniqueKey":"condition.oneOf.0.match.oneOf.1.all.of.items.[INDEX].oneOf.0","typeLabel":"Expression · object"},{},{"type":"object","title":"OperatorAny","required":["any"],"properties":{"any":{"$circularRef":"e02982ad-a430-4034-9dbb-2340eda1d2c8","description":"Logical OR — at least one matcher in `of` must evaluate true.","isRequired":true,"uniqueKey":"condition.oneOf.0.match.oneOf.1.all.of.items.[INDEX].oneOf.2.any","typeLabel":"any"}},"uniqueKey":"condition.oneOf.0.match.oneOf.1.all.of.items.[INDEX].oneOf.2","typeLabel":"OperatorAny · object"},{"type":"object","title":"OperatorNone","required":["none"],"properties":{"none":{"$circularRef":"e02982ad-a430-4034-9dbb-2340eda1d2c8","description":"Logical NOR — the rule applies only if NO matcher in `of` evaluates true.","isRequired":true,"uniqueKey":"condition.oneOf.0.match.oneOf.1.all.of.items.[INDEX].oneOf.3.none","typeLabel":"any"}},"uniqueKey":"condition.oneOf.0.match.oneOf.1.all.of.items.[INDEX].oneOf.3","typeLabel":"OperatorNone · object"}],"uniqueKey":"condition.oneOf.0.match.oneOf.1.all.of.items.[INDEX]","typeLabel":"Expression · object | OperatorAny · object | OperatorNone · object"},"type":"array","title":"Of","description":"Operand list for the enclosing `all`/`any`/`none` combinator. Each operand is itself a matcher — either `{\"expr\": \"...\"}` or a further nested combinator.","isRequired":true,"uniqueKey":"condition.oneOf.0.match.oneOf.1.all.of","typeLabel":"(Expression · object | OperatorAny · object | OperatorNone · object)[]"}},"type":"object","required":["of"],"title":"ConditionOf","description":"Logical AND — every matcher in `of` must evaluate true.","isRequired":true,"uniqueKey":"condition.oneOf.0.match.oneOf.1.all","typeLabel":"ConditionOf · object"}},"isRequired":true,"uniqueKey":"condition.oneOf.0.match.oneOf.1","typeLabel":"OperatorAll · object"},{"type":"object","title":"OperatorAny","description":"Matcher tree. Either a single expression `{\"expr\": \"...\"}` or a boolean combinator `{\"all\"|\"any\"|\"none\": {\"of\": [\u003cmatcher>, ...]}}`, which nest arbitrarily. The variant is selected by WHICH KEY IS PRESENT — there is no separate discriminator field. Example: {\"all\": {\"of\": [{\"expr\": \"P.attr.department == 'Engineering'\"}, {\"expr\": \"R.attr.env != 'prod'\"}]}}","required":["any"],"properties":{"any":{"$circularRef":"e02982ad-a430-4034-9dbb-2340eda1d2c8","description":"Logical OR — at least one matcher in `of` must evaluate true.","isRequired":true,"uniqueKey":"condition.oneOf.0.match.oneOf.2.any","typeLabel":"any"}},"isRequired":true,"uniqueKey":"condition.oneOf.0.match.oneOf.2","typeLabel":"OperatorAny · object"},{"type":"object","title":"OperatorNone","description":"Matcher tree. Either a single expression `{\"expr\": \"...\"}` or a boolean combinator `{\"all\"|\"any\"|\"none\": {\"of\": [\u003cmatcher>, ...]}}`, which nest arbitrarily. The variant is selected by WHICH KEY IS PRESENT — there is no separate discriminator field. Example: {\"all\": {\"of\": [{\"expr\": \"P.attr.department == 'Engineering'\"}, {\"expr\": \"R.attr.env != 'prod'\"}]}}","required":["none"],"properties":{"none":{"$circularRef":"e02982ad-a430-4034-9dbb-2340eda1d2c8","description":"Logical NOR — the rule applies only if NO matcher in `of` evaluates true.","isRequired":true,"uniqueKey":"condition.oneOf.0.match.oneOf.3.none","typeLabel":"any"}},"isRequired":true,"uniqueKey":"condition.oneOf.0.match.oneOf.3","typeLabel":"OperatorNone · object"}],"isRequired":true,"uniqueKey":"condition.oneOf.0.match","typeLabel":"Expression · object | OperatorAll · object | OperatorAny · object | OperatorNone · object"}},"uniqueKey":"condition.oneOf.0","typeLabel":"PolicyRuleCondition · object"},{"type":"null","description":"Optional CEL condition; the rule applies only when it evaluates true. Shape is `{\"match\": \u003cmatcher>}`. Omit entirely for an unconditional rule.","uniqueKey":"condition.oneOf.1","typeLabel":"null"}],"uniqueKey":"condition","typeLabel":"PolicyRuleCondition · object | null"}},"type":"object","required":["actions"],"title":"PolicyRule","description":"A single rule: which principals may take which tool actions, optionally conditioned.","uniqueKey":"","typeLabel":"PolicyRule · object"},"examples":{"Example":{"title":"Example","value":{"actions":["tools/call:create_issue"],"name":"Engineering read access","description":"\u003cstring>","authorized":false,"active":true,"roles_groups":["*"],"condition":{"match":{"expr":"P.attr.department == 'Engineering'"}}}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"7ecbc1dd-c4d3-40c6-9e07-0d93281fb118":{"description":"Successful Response","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"f97e1444-ec19-45eb-a1bf-17cb52da5d3b":{"description":"Validation Error","content":{"application/json":{"schema":{"properties":{"detail":{"items":{"properties":{"loc":{"items":{"oneOf":[{"type":"string","uniqueKey":"detail.items.[INDEX].loc.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"detail.items.[INDEX].loc.items.[INDEX].oneOf.1","typeLabel":"integer"}],"uniqueKey":"detail.items.[INDEX].loc.items.[INDEX]","typeLabel":"string | integer"},"type":"array","title":"Location","isRequired":true,"uniqueKey":"detail.items.[INDEX].loc","typeLabel":"(string | integer)[]"},"msg":{"type":"string","title":"Message","isRequired":true,"uniqueKey":"detail.items.[INDEX].msg","typeLabel":"string"},"type":{"type":"string","title":"Error Type","isRequired":true,"uniqueKey":"detail.items.[INDEX].type","typeLabel":"string"},"input":{"oneOf":[{"title":"Input"}],"uniqueKey":"detail.items.[INDEX].input","typeLabel":"any"},"ctx":{"type":"object","title":"Context","uniqueKey":"detail.items.[INDEX].ctx","typeLabel":"Context · object"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError","uniqueKey":"detail.items.[INDEX]","typeLabel":"ValidationError · object"},"type":"array","title":"Detail","uniqueKey":"detail","typeLabel":"ValidationError · object[]"}},"type":"object","title":"HTTPValidationError","uniqueKey":"","typeLabel":"HTTPValidationError · object"},"examples":{"Example":{"title":"Example","value":{"detail":[{"loc":["\u003cstring>"],"msg":"\u003cstring>","type":"\u003cstring>","input":"\u003cunknown>","ctx":{}}]}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"42e76a07-d817-411c-98d1-10dd44f028dd":{"ApiKey":{"type":"http","scheme":"bearer","description":"A Barndoor API key, sent as `Authorization: Bearer \u003ckey>`. Keys are prefixed `bdai_` and are opaque — do not attempt to decode one. Interchangeable with an OAuth 2.0 access token.","scopes":[],"schemeName":"ApiKey"}},"907e0374-7594-4e7c-bd30-5eb0d49015f8":{"OAuth2":{"type":"oauth2","x-issuer":"https://auth.barndoor.ai/realms/barndoor","description":"An OAuth 2.0 access token from Barndoor's identity provider, sent as `Authorization: Bearer \u003ctoken>`. Public clients must use PKCE. Interchangeable with an API key.","flows":{"authorizationCode":{"authorizationUrl":"https://auth.barndoor.ai/realms/barndoor/protocol/openid-connect/auth","tokenUrl":"https://auth.barndoor.ai/realms/barndoor/protocol/openid-connect/token","scopes":{"openid":"Issue an OIDC ID token identifying the caller.","profile":"Read the caller's basic profile claims.","email":"Read the caller's email address.","offline_access":"Issue a refresh token. Optional — no operation requires it."}},"clientCredentials":{"tokenUrl":"https://auth.barndoor.ai/realms/barndoor/protocol/openid-connect/token","scopes":{"openid":"Issue an OIDC ID token identifying the caller.","profile":"Read the caller's basic profile claims.","email":"Read the caller's email address.","offline_access":"Issue a refresh token. Optional — no operation requires it."}}},"scopes":["openid","profile","email"],"schemeName":"OAuth2"}}},"servers":{"3d90fb7e-1b31-468b-9e48-a2cf56df4643":{"url":"https://{host}","description":"Barndoor public API","variables":{"host":{"default":"platform.barndoor.ai","description":"The host serving your Barndoor deployment. Defaults to production; override it for another environment or a dedicated deployment."}}}},"schemas":{"e02982ad-a430-4034-9dbb-2340eda1d2c8":{"properties":{"of":{"items":{"oneOf":[{"type":"object","title":"Expression","required":["expr"],"properties":{"expr":{"type":"string","title":"Expr","description":"A single CEL expression that must evaluate to a boolean. Top-level variables: C, G, P, R, V, constants, globals, request, runtime, variables. `P` is the calling principal and `R` the resource (the tool call being authorized). Commonly used attributes: `P.attr.groups` and `P.attr.roles` hold the UNPREFIXED role and group names from the user's profile — note the contrast with a rule's `roles_groups`, whose entries are `role:`/`group:`-prefixed; other IdP profile fields such as `P.attr.department` are available; and `R.attr.\u003cargument>` exposes the tool call's own arguments. Expressions are compiled at write time and rejected if invalid or if they reference an unknown variable.","examples":["P.attr.department == 'Engineering'","R.attr.repository.startsWith('barndoor-ai/')"],"isRequired":true}}},{"type":"object","title":"OperatorAll","required":["all"],"properties":{"all":{"$circularRef":"e02982ad-a430-4034-9dbb-2340eda1d2c8","description":"Logical AND — every matcher in `of` must evaluate true.","isRequired":true}}},{"type":"object","title":"OperatorAny","required":["any"],"properties":{"any":{"$circularRef":"e02982ad-a430-4034-9dbb-2340eda1d2c8","description":"Logical OR — at least one matcher in `of` must evaluate true.","isRequired":true}}},{"type":"object","title":"OperatorNone","required":["none"],"properties":{"none":{"$circularRef":"e02982ad-a430-4034-9dbb-2340eda1d2c8","description":"Logical NOR — the rule applies only if NO matcher in `of` evaluates true.","isRequired":true}}}]},"type":"array","title":"Of","description":"Operand list for the enclosing `all`/`any`/`none` combinator. Each operand is itself a matcher — either `{\"expr\": \"...\"}` or a further nested combinator.","isRequired":true}},"type":"object","required":["of"],"title":"ConditionOf"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"A Barndoor API key, sent as `Authorization: Bearer \u003ckey>`. Keys are prefixed `bdai_` and are opaque — do not attempt to decode one. Interchangeable with an OAuth 2.0 access token.","scopes":[],"schemeName":"ApiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"A Barndoor API key, sent as `Authorization: Bearer \u003ckey>`. Keys are prefixed `bdai_` and are opaque — do not attempt to decode one. Interchangeable with an OAuth 2.0 access token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"ApiKey","name":"Authorization"}],"title":"ApiKey"},{"schemes":[{"scheme":{"type":"oauth2","x-issuer":"https://auth.barndoor.ai/realms/barndoor","description":"An OAuth 2.0 access token from Barndoor's identity provider, sent as `Authorization: Bearer \u003ctoken>`. Public clients must use PKCE. Interchangeable with an API key.","flows":{"authorizationCode":{"authorizationUrl":"https://auth.barndoor.ai/realms/barndoor/protocol/openid-connect/auth","tokenUrl":"https://auth.barndoor.ai/realms/barndoor/protocol/openid-connect/token","scopes":{"openid":"Issue an OIDC ID token identifying the caller.","profile":"Read the caller's basic profile claims.","email":"Read the caller's email address.","offline_access":"Issue a refresh token. Optional — no operation requires it."}},"clientCredentials":{"tokenUrl":"https://auth.barndoor.ai/realms/barndoor/protocol/openid-connect/token","scopes":{"openid":"Issue an OIDC ID token identifying the caller.","profile":"Read the caller's basic profile claims.","email":"Read the caller's email address.","offline_access":"Issue a refresh token. Optional — no operation requires it."}}},"scopes":["openid","profile","email"],"schemeName":"OAuth2"},"schema":{"title":"OAuth2 Auth","type":"string","isRequired":true,"description":"An OAuth 2.0 access token from Barndoor's identity provider, sent as `Authorization: Bearer \u003ctoken>`. Public clients must use PKCE. Interchangeable with an API key.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"OAuth2","name":"Authorization"}],"title":"OAuth2"}]},"originalFileLocation":"api-reference/openapi.yaml"},"subdomain":"barndoor","siteName":"Barndoor Documentation","title":"Validate Rule - Barndoor Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-28T16:34:43.496Z","originalFileLocation":"api-reference/policy/validate-rule.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=\"light\"}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=\"Validate a single policy rule for correctness. Validates CEL expression syntax, undefined variables, action format, and role/group format. Returns 204 No Content if valid, or 422 with Pydantic validation errors if invalid.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Barndoor Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/barndoor/hLB36Y_YgNoeq_8e/_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=\"/mintlify-assets/_mintlify/favicons/barndoor/hLB36Y_YgNoeq_8e/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/barndoor/hLB36Y_YgNoeq_8e/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/barndoor/hLB36Y_YgNoeq_8e/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/barndoor/hLB36Y_YgNoeq_8e/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/barndoor/hLB36Y_YgNoeq_8e/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/barndoor/hLB36Y_YgNoeq_8e/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/barndoor/hLB36Y_YgNoeq_8e/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/barndoor/hLB36Y_YgNoeq_8e/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Validate Rule - Barndoor Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Validate a single policy rule for correctness. Validates CEL expression syntax, undefined variables, action format, and role/group format. Returns 204 No Content if valid, or 422 with Pydantic validation errors if invalid.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Barndoor Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.barndoor.ai/api-reference/policy/validate-rule\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://barndoor.mintlify.app/_mintlify/api/og/v2?division=Policies\u0026amp;title=Validate+Rule\u0026amp;description=Validate+a+single+policy+rule+for+correctness.%0A%0AValidates+CEL+expression+syntax%2C+undefined+variables%2C+action+format%2C+and+role%2Fgroup+format.%0AReturns+204+No+Conte\u0026amp;theme=bc5db53da504f4bb841cf86c\u0026amp;signature=0fe716bbb9dba1e27d0b63e366327ba10f0042d4059c7bbabbf9a9fa642a3b4b\">\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=\"Validate Rule - Barndoor Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Validate a single policy rule for correctness. Validates CEL expression syntax, undefined variables, action format, and role/group format. Returns 204 No Content if valid, or 422 with Pydantic validation errors if invalid.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://barndoor.mintlify.app/_mintlify/api/og/v2?division=Policies\u0026amp;title=Validate+Rule\u0026amp;description=Validate+a+single+policy+rule+for+correctness.%0A%0AValidates+CEL+expression+syntax%2C+undefined+variables%2C+action+format%2C+and+role%2Fgroup+format.%0AReturns+204+No+Conte\u0026amp;theme=bc5db53da504f4bb841cf86c\u0026amp;signature=0fe716bbb9dba1e27d0b63e366327ba10f0042d4059c7bbabbf9a9fa642a3b4b\">\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=\"/mintlify-assets/_mintlify/favicons/barndoor/hLB36Y_YgNoeq_8e/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Barndoor Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#224035\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.barndoor.ai/api-reference/policy/validate-rule\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/policy/validate-rule.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.barndoor.ai/#organization\",\"name\":\"Barndoor Documentation\",\"url\":\"https://docs.barndoor.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/barndoor/TT8uf6K7JlnIPxfG/logo/barndoor.svg?fit=max\u0026auto=format\u0026n=TT8uf6K7JlnIPxfG\u0026q=85\u0026s=1247b64e3629e515e9828d5531f3761c\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.barndoor.ai#website\",\"name\":\"Barndoor Documentation\",\"url\":\"https://docs.barndoor.ai\",\"publisher\":{\"@id\":\"https://docs.barndoor.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.barndoor.ai/api-reference/policy/validate-rule#webpage\",\"url\":\"https://docs.barndoor.ai/api-reference/policy/validate-rule\",\"name\":\"Validate Rule\",\"description\":\"Validate a single policy rule for correctness. Validates CEL expression syntax, undefined variables, action format, and role/group format. Returns 204 No Content if valid, or 422 with Pydantic validation errors if invalid.\",\"dateModified\":\"2026-10-28T16:34:43.496Z\",\"isPartOf\":{\"@id\":\"https://docs.barndoor.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.barndoor.ai/api-reference/policy/validate-rule#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.barndoor.ai/api-reference/policy/validate-rule#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Policies\",\"item\":\"https://docs.barndoor.ai/api-reference/policy/list-policies\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Validate Rule\",\"item\":\"https://docs.barndoor.ai/api-reference/policy/validate-rule\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.barndoor.ai/api-reference/policy/validate-rule#apireference\",\"headline\":\"Validate Rule\",\"name\":\"Validate Rule\",\"description\":\"Validate a single policy rule for correctness. Validates CEL expression syntax, undefined variables, action format, and role/group format. Returns 204 No Content if valid, or 422 with Pydantic validation errors if invalid.\",\"url\":\"https://docs.barndoor.ai/api-reference/policy/validate-rule\",\"mainEntityOfPage\":{\"@id\":\"https://docs.barndoor.ai/api-reference/policy/validate-rule#webpage\"},\"dateModified\":\"2026-10-28T16:34:43.496Z\",\"publisher\":{\"@id\":\"https://docs.barndoor.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.barndoor.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Barndoor Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Barndoor Documentation","nav":{"global":{"anchors":[]},"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"API Reference","groups":[{"group":"API Documentation","pages":[{"title":"Barndoor API Reference","href":"/api-reference/introduction"}]},{"group":"Servers","pages":[{"openapi":"get /api/servers","title":"List MCP servers","href":"/api-reference/servers/listServers"},{"title":"Create MCP Server","openapi":"POST /api/servers","href":"/api-reference/servers/createServer"},{"title":"Get Server by Id","openapi":"GET /api/servers/{server_id}","href":"/api-reference/servers/getServer"},{"title":"Delete Server by Id","openapi":"DELETE /api/servers/{server_id}","href":"/api-reference/servers/deleteServer"},{"title":"Update MCP Server","openapi":"PUT /api/servers/{server_id}","href":"/api-reference/servers/updateServer"}]},{"group":"Connections","pages":[{"title":"Get Connection Status","openapi":"GET /api/servers/{server_id}/connection","href":"/api-reference/connections/getConnectionStatus"},{"title":"Initiate OAuth connection","openapi":"POST /api/servers/{server_id}/connect","href":"/api-reference/connections/initiateConnection"},{"title":"Delete connection","openapi":"DELETE /api/servers/{server_id}/connection","href":"/api-reference/connections/deleteConnection"},{"title":"List Server Connections","openapi":"GET /api/registry/v1/servers/{server_id}/connections","href":"/api-reference/connections/listServerConnections"}]},{"group":"MCP","pages":[{"openapi":"get /mcp/{mcp_server_name}","title":"MCP server proxy endpoint","href":"/api-reference/mcp/proxyMcpRequest"}]},{"group":"SSE","pages":[{"openapi":"get /sse/{mcp_server_name}","title":"SSE server proxy endpoint","href":"/api-reference/sse/proxySSERequest"}]},{"group":"Policies","pages":[{"title":"List Policies","openapi":"GET /api/v2/policies","href":"/api-reference/policies/listPolicies"},{"title":"Create or Update Policy","openapi":"POST /api/policy","href":"/api-reference/policies/createPolicy"},{"title":"Validate Policy","openapi":"POST /api/v2/policies/validate","href":"/api-reference/policies/validatePolicy"},{"title":"Get Policy","openapi":"GET /api/v2/policies/{policy_id}","href":"/api-reference/policies/getPolicy"},{"title":"List Policy Revisions","openapi":"GET /api/v2/policies/{policy_id}/revisions","href":"/api-reference/policies/listPolicyRevisions"},{"title":"Update Policy","openapi":"PATCH /api/v2/policies/{policy_id}","href":"/api-reference/policies/updatePolicy"},{"title":"Clone Policy","openapi":"POST /api/v2/policies/{policy_id}/clone","href":"/api-reference/policies/clonePolicy"},{"title":"Enable Policy","openapi":"PUT /api/policy/enable","href":"/api-reference/policies/enablePolicy"},{"title":"Disable Policy","openapi":"PUT /api/policy/disable","href":"/api-reference/policies/disablePolicy"},{"title":"Enable Restriction","openapi":"PUT /api/policies/restrictions/enable/{restriction_name}","href":"/api-reference/policies/enableRestriction"},{"title":"Disable Restriction","openapi":"PUT /api/policies/restrictions/disable/{restriction_name}","href":"/api-reference/policies/disableRestriction"},{"title":"Get Filter Definitions","openapi":"GET /api/v2/policies/filter-definitions","href":"/api-reference/policies/getFilterDefinitions"},{"title":"Get Policies Summary","openapi":"GET /api/v2/policies/summary","href":"/api-reference/policies/getPoliciesSummary"},{"title":"Reload Policy Cache","openapi":"POST /api/reload-cache","href":"/api-reference/policies/reloadCache"}]},{"group":"Agents","pages":[{"title":"List Agents","openapi":"GET /api/agents","href":"/api-reference/agents/listAgents"},{"title":"GET Agent by Id","openapi":"GET /api/agents/{agent_id}","href":"/api-reference/agents/getAgent"},{"title":"Register Agent","openapi":"POST /api/agents","href":"/api-reference/agents/registerAgent"},{"title":"Delete Agent by Id","openapi":"DELETE /api/agents/{agent_id}","href":"/api-reference/agents/deleteAgent"},{"title":"Get Agent Counts","openapi":"GET /api/agents/counts","href":"/api-reference/agents/counts/getAgentCounts"}]},{"group":"LLM Gateway","pages":[{"title":"LLM Gateway API","href":"/api-reference/llm-gateway/introduction"}]},{"group":"LLM Gateway: Credentials","pages":[{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/connections","title":"List credentials","href":"/api-reference/llm-gateway/credentials/listCredentials"},{"title":"Create a Credential","openapi":"api-reference/llm-gateway-openapi.yml post /admin/connections","href":"/api-reference/llm-gateway/credentials/createCredential"},{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/connections/{id}","title":"Get a credential","href":"/api-reference/llm-gateway/credentials/getCredential"},{"openapi":"api-reference/llm-gateway-openapi.yml put /admin/connections/{id}","title":"Update a credential","href":"/api-reference/llm-gateway/credentials/updateCredential"},{"openapi":"api-reference/llm-gateway-openapi.yml delete /admin/connections/{id}","title":"Delete a credential","href":"/api-reference/llm-gateway/credentials/deleteCredential"},{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/connections/aws-role-config","title":"Get Barndoor's AWS principal","href":"/api-reference/llm-gateway/credentials/getAwsRoleConfig"},{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/connections/{id}/aws-trust-info","title":"Get AWS trust info","href":"/api-reference/llm-gateway/credentials/getAwsTrustInfo"}]},{"group":"LLM Gateway: Providers","pages":[{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/providers","title":"List providers","href":"/api-reference/llm-gateway/providers/listProviders"},{"title":"Create a Provider","openapi":"api-reference/llm-gateway-openapi.yml post /admin/providers","href":"/api-reference/llm-gateway/providers/createProvider"},{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/providers/{id}","title":"Get a provider","href":"/api-reference/llm-gateway/providers/getProvider"},{"openapi":"api-reference/llm-gateway-openapi.yml put /admin/providers/{id}","title":"Update a provider","href":"/api-reference/llm-gateway/providers/updateProvider"},{"openapi":"api-reference/llm-gateway-openapi.yml delete /admin/providers/{id}","title":"Delete a provider","href":"/api-reference/llm-gateway/providers/deleteProvider"}]},{"group":"LLM Gateway: Model Routes","pages":[{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/model-mappings","title":"List all model routes","href":"/api-reference/llm-gateway/model-routes/listAllRoutes"},{"title":"Create a Model Route","openapi":"api-reference/llm-gateway-openapi.yml post /admin/model-mappings","href":"/api-reference/llm-gateway/model-routes/createRoute"},{"openapi":"api-reference/llm-gateway-openapi.yml put /admin/model-mappings/reorder","title":"Reorder model routes","href":"/api-reference/llm-gateway/model-routes/reorderRoutes"},{"openapi":"api-reference/llm-gateway-openapi.yml put /admin/model-mappings/{id}","title":"Update a model route","href":"/api-reference/llm-gateway/model-routes/updateRoute"},{"openapi":"api-reference/llm-gateway-openapi.yml delete /admin/model-mappings/{id}","title":"Delete a model route","href":"/api-reference/llm-gateway/model-routes/deleteRoute"},{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/providers/{provider_id}/model-mappings","title":"List a provider's model routes","href":"/api-reference/llm-gateway/model-routes/listProviderRoutes"}]},{"group":"LLM Gateway: Route Groups","pages":[{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/model-route-groups","title":"List route groups","href":"/api-reference/llm-gateway/route-groups/listRouteGroups"},{"openapi":"api-reference/llm-gateway-openapi.yml post /admin/model-route-groups","title":"Create a route group","href":"/api-reference/llm-gateway/route-groups/createRouteGroup"},{"openapi":"api-reference/llm-gateway-openapi.yml put /admin/model-route-groups/{id}","title":"Update a route group","href":"/api-reference/llm-gateway/route-groups/updateRouteGroup"},{"openapi":"api-reference/llm-gateway-openapi.yml delete /admin/model-route-groups/{id}","title":"Delete a route group","href":"/api-reference/llm-gateway/route-groups/deleteRouteGroup"},{"openapi":"api-reference/llm-gateway-openapi.yml post /admin/model-route-groups/{id}/members","title":"Add routes to a route group","href":"/api-reference/llm-gateway/route-groups/addRouteGroupMembers"},{"openapi":"api-reference/llm-gateway-openapi.yml delete /admin/model-route-groups/{id}/members/{alias}","title":"Remove a route from a route group","href":"/api-reference/llm-gateway/route-groups/removeRouteGroupMember"}]},{"group":"LLM Gateway: Model Pricing","pages":[{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/model-pricing","title":"List pricing rules","href":"/api-reference/llm-gateway/model-pricing/listPricing"},{"title":"Create or Schedule Pricing","openapi":"api-reference/llm-gateway-openapi.yml post /admin/model-pricing","href":"/api-reference/llm-gateway/model-pricing/createPricing"},{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/model-pricing/history","title":"Get a pricing rule's history","href":"/api-reference/llm-gateway/model-pricing/getPricingHistory"},{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/model-pricing/archived","title":"List archived pricing rules","href":"/api-reference/llm-gateway/model-pricing/listArchivedPricing"},{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/model-pricing/version/{id}","title":"Get a pricing version","href":"/api-reference/llm-gateway/model-pricing/getPricingVersion"},{"openapi":"api-reference/llm-gateway-openapi.yml put /admin/model-pricing/{id}","title":"Edit a scheduled pricing version","href":"/api-reference/llm-gateway/model-pricing/updatePricing"},{"openapi":"api-reference/llm-gateway-openapi.yml delete /admin/model-pricing/{id}","title":"Archive or cancel a pricing version","href":"/api-reference/llm-gateway/model-pricing/archivePricing"},{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/model-pricing/defaults","title":"List Barndoor's default pricing","href":"/api-reference/llm-gateway/model-pricing/listPricingDefaults"}]},{"group":"LLM Gateway: Routing Policies","pages":[{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/routing-policies","title":"List routing policies","href":"/api-reference/llm-gateway/routing-policies/listRoutingPolicies"},{"openapi":"api-reference/llm-gateway-openapi.yml post /admin/routing-policies","title":"Create a routing policy","href":"/api-reference/llm-gateway/routing-policies/createRoutingPolicy"},{"openapi":"api-reference/llm-gateway-openapi.yml put /admin/routing-policies/{id}","title":"Update a routing policy","href":"/api-reference/llm-gateway/routing-policies/updateRoutingPolicy"},{"openapi":"api-reference/llm-gateway-openapi.yml delete /admin/routing-policies/{id}","title":"Delete a routing policy","href":"/api-reference/llm-gateway/routing-policies/deleteRoutingPolicy"}]},{"group":"LLM Gateway: Routing Rules","pages":[{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/routing-rules","title":"List a policy's routing rules","href":"/api-reference/llm-gateway/routing-rules/listRoutingRules"},{"openapi":"api-reference/llm-gateway-openapi.yml post /admin/routing-rules","title":"Create a routing rule","href":"/api-reference/llm-gateway/routing-rules/createRoutingRule"},{"openapi":"api-reference/llm-gateway-openapi.yml put /admin/routing-rules/{id}","title":"Replace a routing rule","href":"/api-reference/llm-gateway/routing-rules/updateRoutingRule"},{"openapi":"api-reference/llm-gateway-openapi.yml delete /admin/routing-rules/{id}","title":"Delete a routing rule","href":"/api-reference/llm-gateway/routing-rules/deleteRoutingRule"}]},{"group":"LLM Gateway: Launch Profiles","pages":[{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/agent-runtime-profiles","title":"List launch profiles","href":"/api-reference/llm-gateway/launch-profiles/listLaunchProfiles"},{"openapi":"api-reference/llm-gateway-openapi.yml post /admin/agent-runtime-profiles","title":"Create a launch profile","href":"/api-reference/llm-gateway/launch-profiles/createLaunchProfile"},{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/agent-runtime-profiles/{slug}","title":"Get a launch profile","href":"/api-reference/llm-gateway/launch-profiles/getLaunchProfile"},{"openapi":"api-reference/llm-gateway-openapi.yml put /admin/agent-runtime-profiles/{slug}","title":"Replace a launch profile's models and capabilities","href":"/api-reference/llm-gateway/launch-profiles/replaceLaunchProfileContract"},{"openapi":"api-reference/llm-gateway-openapi.yml patch /admin/agent-runtime-profiles/{slug}","title":"Rename or activate a launch profile","href":"/api-reference/llm-gateway/launch-profiles/updateLaunchProfileMetadata"},{"openapi":"api-reference/llm-gateway-openapi.yml delete /admin/agent-runtime-profiles/{slug}","title":"Delete a launch profile","href":"/api-reference/llm-gateway/launch-profiles/deleteLaunchProfile"},{"openapi":"api-reference/llm-gateway-openapi.yml post /admin/agent-runtime-profiles/{slug}/default","title":"Make a launch profile the default","href":"/api-reference/llm-gateway/launch-profiles/setDefaultLaunchProfile"}]},{"group":"LLM Gateway: Rate Limits","pages":[{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/rate-limits","title":"List rate limits","href":"/api-reference/llm-gateway/rate-limits/listRateLimits"},{"openapi":"api-reference/llm-gateway-openapi.yml post /admin/rate-limits","title":"Create a rate limit","href":"/api-reference/llm-gateway/rate-limits/createRateLimit"},{"openapi":"api-reference/llm-gateway-openapi.yml put /admin/rate-limits/{id}","title":"Update a rate limit","href":"/api-reference/llm-gateway/rate-limits/updateRateLimit"},{"openapi":"api-reference/llm-gateway-openapi.yml delete /admin/rate-limits/{id}","title":"Delete a rate limit","href":"/api-reference/llm-gateway/rate-limits/deleteRateLimit"}]},{"group":"LLM Gateway: Budgets","pages":[{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/budgets","title":"List budgets","href":"/api-reference/llm-gateway/token-budgets/listBudgets"},{"openapi":"api-reference/llm-gateway-openapi.yml post /admin/budgets","title":"Create a budget","href":"/api-reference/llm-gateway/token-budgets/createBudget"},{"openapi":"api-reference/llm-gateway-openapi.yml put /admin/budgets/{id}","title":"Update a budget","href":"/api-reference/llm-gateway/token-budgets/updateBudget"},{"openapi":"api-reference/llm-gateway-openapi.yml delete /admin/budgets/{id}","title":"Delete a budget","href":"/api-reference/llm-gateway/token-budgets/deleteBudget"}]},{"group":"LLM Gateway: Model Access","pages":[{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/model-access","title":"List model access policies","href":"/api-reference/llm-gateway/model-access/listModelAccess"},{"openapi":"api-reference/llm-gateway-openapi.yml post /admin/model-access","title":"Create a model access policy","href":"/api-reference/llm-gateway/model-access/createModelAccess"},{"openapi":"api-reference/llm-gateway-openapi.yml put /admin/model-access/{id}","title":"Update a model access policy","href":"/api-reference/llm-gateway/model-access/updateModelAccess"},{"openapi":"api-reference/llm-gateway-openapi.yml delete /admin/model-access/{id}","title":"Delete a model access policy","href":"/api-reference/llm-gateway/model-access/deleteModelAccess"}]},{"group":"LLM Gateway: Governance","pages":[{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/governance-config","title":"Get governance configuration","href":"/api-reference/llm-gateway/governance/getGovernanceConfig"},{"openapi":"api-reference/llm-gateway-openapi.yml put /admin/governance-config","title":"Update governance configuration","href":"/api-reference/llm-gateway/governance/updateGovernanceConfig"}]},{"group":"LLM Gateway: API Keys","pages":[{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/api-keys","title":"List API keys","href":"/api-reference/llm-gateway/api-keys/listApiKeys"},{"title":"Create an Org API Key","openapi":"api-reference/llm-gateway-openapi.yml post /admin/api-keys","href":"/api-reference/llm-gateway/api-keys/createApiKey"},{"openapi":"api-reference/llm-gateway-openapi.yml get /admin/api-keys/{id}","title":"Get an API key","href":"/api-reference/llm-gateway/api-keys/getApiKey"},{"openapi":"api-reference/llm-gateway-openapi.yml patch /admin/api-keys/{id}","title":"Disable or enable an API key","href":"/api-reference/llm-gateway/api-keys/setApiKeyDisabled"},{"openapi":"api-reference/llm-gateway-openapi.yml delete /admin/api-keys/{id}","title":"Revoke an API key","href":"/api-reference/llm-gateway/api-keys/revokeApiKey"}]},{"group":"Data Control Center","pages":[{"title":"List the organization's allow-list entries","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/dlp/admin/v1/allow-list","href":"/api-reference/dlp/list-the-organizations-allow-list-entries"},{"title":"Create an allow-list entry","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/dlp/admin/v1/allow-list","href":"/api-reference/dlp/create-an-allow-list-entry"},{"title":"Delete an allow-list entry","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/dlp/admin/v1/allow-list/{id}","href":"/api-reference/dlp/delete-an-allow-list-entry"},{"title":"Get the organization's DLP configuration","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/dlp/admin/v1/config","href":"/api-reference/dlp/get-the-organizations-dlp-configuration"},{"title":"Update the organization's DLP configuration","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/dlp/admin/v1/config","href":"/api-reference/dlp/update-the-organizations-dlp-configuration"},{"title":"List the organization's custom detection types","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/dlp/admin/v1/custom-detection-types","href":"/api-reference/dlp/list-the-organizations-custom-detection-types"},{"title":"Create a custom detection type","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/dlp/admin/v1/custom-detection-types","href":"/api-reference/dlp/create-a-custom-detection-type"},{"title":"Fetch one custom detection type","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/dlp/admin/v1/custom-detection-types/{id}","href":"/api-reference/dlp/fetch-one-custom-detection-type"},{"title":"Update a custom detection type","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/dlp/admin/v1/custom-detection-types/{id}","href":"/api-reference/dlp/update-a-custom-detection-type"},{"title":"Delete a custom detection type","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/dlp/admin/v1/custom-detection-types/{id}","href":"/api-reference/dlp/delete-a-custom-detection-type"},{"title":"List the organization's detection engines","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/dlp/admin/v1/detection-engines","href":"/api-reference/dlp/list-the-organizations-detection-engines"},{"title":"Create a detection engine","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/dlp/admin/v1/detection-engines","href":"/api-reference/dlp/create-a-detection-engine"},{"title":"Fetch one detection engine","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/dlp/admin/v1/detection-engines/{id}","href":"/api-reference/dlp/fetch-one-detection-engine"},{"title":"Update a detection engine","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/dlp/admin/v1/detection-engines/{id}","href":"/api-reference/dlp/update-a-detection-engine"},{"title":"Delete a detection engine","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/dlp/admin/v1/detection-engines/{id}","href":"/api-reference/dlp/delete-a-detection-engine"},{"title":"List every detection type available to the organization","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/dlp/admin/v1/detection-types","href":"/api-reference/dlp/list-every-detection-type-available-to-the-organization"},{"title":"List the organization's enforcement policies","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/dlp/admin/v1/enforcement-policies","href":"/api-reference/dlp/list-the-organizations-enforcement-policies"},{"title":"Create an enforcement policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/dlp/admin/v1/enforcement-policies","href":"/api-reference/dlp/create-an-enforcement-policy"},{"title":"Fetch one enforcement policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/dlp/admin/v1/enforcement-policies/{id}","href":"/api-reference/dlp/fetch-one-enforcement-policy"},{"title":"Update an enforcement policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/dlp/admin/v1/enforcement-policies/{id}","href":"/api-reference/dlp/update-an-enforcement-policy"},{"title":"Delete an enforcement policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/dlp/admin/v1/enforcement-policies/{id}","href":"/api-reference/dlp/delete-an-enforcement-policy"},{"title":"List the organization's field-control policies","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/dlp/admin/v1/field-control-policies","href":"/api-reference/dlp/list-the-organizations-field-control-policies"},{"title":"Create or replace the field-control policy for an MCP server","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/dlp/admin/v1/field-control-policies","href":"/api-reference/dlp/create-or-replace-the-field-control-policy-for-an-mcp-server"},{"title":"Fetch one field-control policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/dlp/admin/v1/field-control-policies/{id}","href":"/api-reference/dlp/fetch-one-field-control-policy"},{"title":"Update a field-control policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/dlp/admin/v1/field-control-policies/{id}","href":"/api-reference/dlp/update-a-field-control-policy"},{"title":"Delete a field-control policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/dlp/admin/v1/field-control-policies/{id}","href":"/api-reference/dlp/delete-a-field-control-policy"},{"title":"Set a field-control policy's unlisted-table override","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/dlp/admin/v1/field-control-policies/{id}/catalog-unlisted-table-action","href":"/api-reference/dlp/set-a-field-control-policys-unlisted-table-override"},{"title":"Resolve the effective protection rules for a scope","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/dlp/admin/v1/policies/resolved","href":"/api-reference/dlp/resolve-the-effective-protection-rules-for-a-scope"},{"title":"List the organization's provider connections","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/dlp/admin/v1/provider-connections","href":"/api-reference/dlp/list-the-organizations-provider-connections"},{"title":"Get Barndoor's AWS principal for role-assumption trust policies","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/dlp/admin/v1/provider-connections/aws-role-config","href":"/api-reference/dlp/get-barndoors-aws-principal-for-role-assumption-trust-policies"},{"title":"Probe an AWS role Barndoor is meant to assume","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/dlp/admin/v1/provider-connections/aws-role-validate","href":"/api-reference/dlp/probe-an-aws-role-barndoor-is-meant-to-assume"},{"title":"Fetch one provider connection","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/dlp/admin/v1/provider-connections/{name}","href":"/api-reference/dlp/fetch-one-provider-connection"},{"title":"Create or update a provider connection","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/dlp/admin/v1/provider-connections/{name}","href":"/api-reference/dlp/create-or-update-a-provider-connection"},{"title":"Delete a provider connection and its stored secrets","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/dlp/admin/v1/provider-connections/{name}","href":"/api-reference/dlp/delete-a-provider-connection-and-its-stored-secrets"},{"title":"Get the principal and external id for a connection's trust policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/dlp/admin/v1/provider-connections/{name}/aws-trust-info","href":"/api-reference/dlp/get-the-principal-and-external-id-for-a-connections-trust-policy"},{"title":"Run a sample through the organization's live DLP pipeline","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/dlp/admin/v1/test/process-text","href":"/api-reference/dlp/run-a-sample-through-the-organizations-live-dlp-pipeline"}]},{"group":"Identity","pages":[{"title":"Get Organization Roles Groups","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/identity/public/v1/users/roles-groups","href":"/api-reference/identity/get-organization-roles-groups"},{"title":"Get Idp Connection","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/identity/public/v1/idp/connection","href":"/api-reference/identity/get-idp-connection"},{"title":"Create Idp Connection","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/identity/public/v1/idp/connection","href":"/api-reference/identity/create-idp-connection"},{"title":"Update Idp Connection","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/identity/public/v1/idp/connection","href":"/api-reference/identity/update-idp-connection"},{"title":"Delete Idp Connection","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/identity/public/v1/idp/connection","href":"/api-reference/identity/delete-idp-connection"},{"title":"Get Idp Config","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/identity/public/v1/idp/config","href":"/api-reference/identity/get-idp-config"},{"title":"Update Idp Config","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/identity/public/v1/idp/config","href":"/api-reference/identity/update-idp-config"},{"title":"Get Idp Settings","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/identity/public/v1/idp/settings","href":"/api-reference/identity/get-idp-settings"},{"title":"Test Idp Connection","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/identity/public/v1/idp/test","href":"/api-reference/identity/test-idp-connection"}]},{"group":"LLM Gateway","pages":[{"title":"LLM Gateway API","href":"/api-reference/llm-gateway/introduction"},{"title":"List the organization's agent runtime profiles","deprecated":true,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/agent-runtime-profiles","href":"/api-reference/llm-gateway/list-the-organizations-agent-runtime-profiles"},{"title":"Create an agent runtime profile","deprecated":true,"version":null,"openapi":"/api-reference/openapi.yaml post /api/llm-gateway/admin/agent-runtime-profiles","href":"/api-reference/llm-gateway/create-an-agent-runtime-profile"},{"title":"Create the safe default Claude launch setup for a login provider","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/llm-gateway/admin/agent-runtime-profiles/default-setup","href":"/api-reference/llm-gateway/create-the-safe-default-claude-launch-setup-for-a-login-provider"},{"title":"Fetch one agent runtime profile","deprecated":true,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/agent-runtime-profiles/{slug}","href":"/api-reference/llm-gateway/fetch-one-agent-runtime-profile"},{"title":"Replace a profile's capability contract","deprecated":true,"version":null,"openapi":"/api-reference/openapi.yaml put /api/llm-gateway/admin/agent-runtime-profiles/{slug}","href":"/api-reference/llm-gateway/replace-a-profiles-capability-contract"},{"title":"Update a profile's display metadata","deprecated":true,"version":null,"openapi":"/api-reference/openapi.yaml patch /api/llm-gateway/admin/agent-runtime-profiles/{slug}","href":"/api-reference/llm-gateway/update-a-profiles-display-metadata"},{"title":"Delete an agent runtime profile","deprecated":true,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/llm-gateway/admin/agent-runtime-profiles/{slug}","href":"/api-reference/llm-gateway/delete-an-agent-runtime-profile"},{"title":"Make this the organization's settings for its client","deprecated":true,"version":null,"openapi":"/api-reference/openapi.yaml post /api/llm-gateway/admin/agent-runtime-profiles/{slug}/default","href":"/api-reference/llm-gateway/make-this-the-organizations-settings-for-its-client"},{"title":"Get the API key lifetime policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/api-key-lifetime-policies","href":"/api-reference/llm-gateway/get-the-api-key-lifetime-policy"},{"title":"Set the default API key lifetime policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/llm-gateway/admin/api-key-lifetime-policies/default","href":"/api-reference/llm-gateway/set-the-default-api-key-lifetime-policy"},{"title":"Create a group API key lifetime override","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/llm-gateway/admin/api-key-lifetime-policies/groups","href":"/api-reference/llm-gateway/create-a-group-api-key-lifetime-override"},{"title":"Update a group API key lifetime override","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/llm-gateway/admin/api-key-lifetime-policies/groups/{id}","href":"/api-reference/llm-gateway/update-a-group-api-key-lifetime-override"},{"title":"Delete a group API key lifetime override","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/llm-gateway/admin/api-key-lifetime-policies/groups/{id}","href":"/api-reference/llm-gateway/delete-a-group-api-key-lifetime-override"},{"title":"Create a user API key lifetime override","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/llm-gateway/admin/api-key-lifetime-policies/users","href":"/api-reference/llm-gateway/create-a-user-api-key-lifetime-override"},{"title":"Update a user API key lifetime override","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/llm-gateway/admin/api-key-lifetime-policies/users/{id}","href":"/api-reference/llm-gateway/update-a-user-api-key-lifetime-override"},{"title":"Delete a user API key lifetime override","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/llm-gateway/admin/api-key-lifetime-policies/users/{id}","href":"/api-reference/llm-gateway/delete-a-user-api-key-lifetime-override"},{"title":"List the organization's API keys","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/api-keys","href":"/api-reference/llm-gateway/list-the-organizations-api-keys"},{"title":"Create a API key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/llm-gateway/admin/api-keys","href":"/api-reference/llm-gateway/create-a-api-key"},{"title":"Fetch one API key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/api-keys/{id}","href":"/api-reference/llm-gateway/fetch-one-api-key"},{"title":"Update a API key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /api/llm-gateway/admin/api-keys/{id}","href":"/api-reference/llm-gateway/update-a-api-key"},{"title":"Delete a API key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/llm-gateway/admin/api-keys/{id}","href":"/api-reference/llm-gateway/delete-a-api-key"},{"title":"Change an API key's expiry","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/llm-gateway/admin/api-keys/{id}/expiry","href":"/api-reference/llm-gateway/change-an-api-keys-expiry"},{"title":"Rotate an API key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/llm-gateway/admin/api-keys/{id}/rotate","href":"/api-reference/llm-gateway/rotate-an-api-key"},{"title":"List the organization's token budgets","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/budgets","href":"/api-reference/llm-gateway/list-the-organizations-token-budgets"},{"title":"Create a token budget","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/llm-gateway/admin/budgets","href":"/api-reference/llm-gateway/create-a-token-budget"},{"title":"Update a token budget","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/llm-gateway/admin/budgets/{id}","href":"/api-reference/llm-gateway/update-a-token-budget"},{"title":"Delete a token budget","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/llm-gateway/admin/budgets/{id}","href":"/api-reference/llm-gateway/delete-a-token-budget"},{"title":"List the organization's client settings","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/client-settings","href":"/api-reference/llm-gateway/list-the-organizations-client-settings"},{"title":"Fetch one client's settings","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/client-settings/{client}","href":"/api-reference/llm-gateway/fetch-one-clients-settings"},{"title":"Save one client's settings","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/llm-gateway/admin/client-settings/{client}","href":"/api-reference/llm-gateway/save-one-clients-settings"},{"title":"List the organization's provider connections","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/connections","href":"/api-reference/llm-gateway/list-the-organizations-provider-connections"},{"title":"Create a provider connection","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/llm-gateway/admin/connections","href":"/api-reference/llm-gateway/create-a-provider-connection"},{"title":"Get Barndoor's AWS principal for role-assumption trust policies","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/connections/aws-role-config","href":"/api-reference/llm-gateway/get-barndoors-aws-principal-for-role-assumption-trust-policies"},{"title":"Fetch one provider connection","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/connections/{id}","href":"/api-reference/llm-gateway/fetch-one-provider-connection"},{"title":"Update a provider connection","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/llm-gateway/admin/connections/{id}","href":"/api-reference/llm-gateway/update-a-provider-connection"},{"title":"Delete a provider connection","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/llm-gateway/admin/connections/{id}","href":"/api-reference/llm-gateway/delete-a-provider-connection"},{"title":"Get the trust-policy principal and external id for a provider connection","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/connections/{id}/aws-trust-info","href":"/api-reference/llm-gateway/get-the-trust-policy-principal-and-external-id-for-a-provider-connection"},{"title":"List the organization's governance configurations","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/governance-config","href":"/api-reference/llm-gateway/list-the-organizations-governance-configurations"},{"title":"Update a governance configuration","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/llm-gateway/admin/governance-config","href":"/api-reference/llm-gateway/update-a-governance-configuration"},{"title":"List the organization's model-access policys","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/model-access","href":"/api-reference/llm-gateway/list-the-organizations-model-access-policys"},{"title":"Create a model-access policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/llm-gateway/admin/model-access","href":"/api-reference/llm-gateway/create-a-model-access-policy"},{"title":"Update a model-access policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/llm-gateway/admin/model-access/{id}","href":"/api-reference/llm-gateway/update-a-model-access-policy"},{"title":"Delete a model-access policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/llm-gateway/admin/model-access/{id}","href":"/api-reference/llm-gateway/delete-a-model-access-policy"},{"title":"List the organization's model mappings","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/model-mappings","href":"/api-reference/llm-gateway/list-the-organizations-model-mappings"},{"title":"Create a model mapping","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/llm-gateway/admin/model-mappings","href":"/api-reference/llm-gateway/create-a-model-mapping"},{"title":"Reorder the organization's model mappings","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/llm-gateway/admin/model-mappings/reorder","href":"/api-reference/llm-gateway/reorder-the-organizations-model-mappings"},{"title":"Update a model mapping","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/llm-gateway/admin/model-mappings/{id}","href":"/api-reference/llm-gateway/update-a-model-mapping"},{"title":"Delete a model mapping","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/llm-gateway/admin/model-mappings/{id}","href":"/api-reference/llm-gateway/delete-a-model-mapping"},{"title":"List the organization's model pricing rules","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/model-pricing","href":"/api-reference/llm-gateway/list-the-organizations-model-pricing-rules"},{"title":"Create a model pricing rule","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/llm-gateway/admin/model-pricing","href":"/api-reference/llm-gateway/create-a-model-pricing-rule"},{"title":"List the organization's archived pricing rules","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/model-pricing/archived","href":"/api-reference/llm-gateway/list-the-organizations-archived-pricing-rules"},{"title":"List the built-in default model pricing","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/model-pricing/defaults","href":"/api-reference/llm-gateway/list-the-built-in-default-model-pricing"},{"title":"List the change history for the organization's pricing rules","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/model-pricing/history","href":"/api-reference/llm-gateway/list-the-change-history-for-the-organizations-pricing-rules"},{"title":"Fetch one version of a pricing rule","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/model-pricing/version/{id}","href":"/api-reference/llm-gateway/fetch-one-version-of-a-pricing-rule"},{"title":"Update a model pricing rule","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/llm-gateway/admin/model-pricing/{id}","href":"/api-reference/llm-gateway/update-a-model-pricing-rule"},{"title":"Delete a model pricing rule","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/llm-gateway/admin/model-pricing/{id}","href":"/api-reference/llm-gateway/delete-a-model-pricing-rule"},{"title":"List the organization's model route groups","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/model-route-groups","href":"/api-reference/llm-gateway/list-the-organizations-model-route-groups"},{"title":"Create a model route group","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/llm-gateway/admin/model-route-groups","href":"/api-reference/llm-gateway/create-a-model-route-group"},{"title":"Update a model route group","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/llm-gateway/admin/model-route-groups/{id}","href":"/api-reference/llm-gateway/update-a-model-route-group"},{"title":"Delete a model route group","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/llm-gateway/admin/model-route-groups/{id}","href":"/api-reference/llm-gateway/delete-a-model-route-group"},{"title":"Add models to a route group","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/llm-gateway/admin/model-route-groups/{id}/members","href":"/api-reference/llm-gateway/add-models-to-a-route-group"},{"title":"Remove a model from a route group","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/llm-gateway/admin/model-route-groups/{id}/members/{alias}","href":"/api-reference/llm-gateway/remove-a-model-from-a-route-group"},{"title":"Rename a model route","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/llm-gateway/admin/model-routes/rename","href":"/api-reference/llm-gateway/rename-a-model-route"},{"title":"List the organization's providers","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/providers","href":"/api-reference/llm-gateway/list-the-organizations-providers"},{"title":"Create a provider","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/llm-gateway/admin/providers","href":"/api-reference/llm-gateway/create-a-provider"},{"title":"Fetch one provider","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/providers/{id}","href":"/api-reference/llm-gateway/fetch-one-provider"},{"title":"Update a provider","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/llm-gateway/admin/providers/{id}","href":"/api-reference/llm-gateway/update-a-provider"},{"title":"Delete a provider","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/llm-gateway/admin/providers/{id}","href":"/api-reference/llm-gateway/delete-a-provider"},{"title":"List the model mappings for one provider","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/providers/{provider_id}/model-mappings","href":"/api-reference/llm-gateway/list-the-model-mappings-for-one-provider"},{"title":"List the organization's rate-limit policys","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/rate-limits","href":"/api-reference/llm-gateway/list-the-organizations-rate-limit-policys"},{"title":"Create a rate-limit policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/llm-gateway/admin/rate-limits","href":"/api-reference/llm-gateway/create-a-rate-limit-policy"},{"title":"Update a rate-limit policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/llm-gateway/admin/rate-limits/{id}","href":"/api-reference/llm-gateway/update-a-rate-limit-policy"},{"title":"Delete a rate-limit policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/llm-gateway/admin/rate-limits/{id}","href":"/api-reference/llm-gateway/delete-a-rate-limit-policy"},{"title":"List the organization's routing policys","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/routing-policies","href":"/api-reference/llm-gateway/list-the-organizations-routing-policys"},{"title":"Create a routing policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/llm-gateway/admin/routing-policies","href":"/api-reference/llm-gateway/create-a-routing-policy"},{"title":"Update a routing policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/llm-gateway/admin/routing-policies/{id}","href":"/api-reference/llm-gateway/update-a-routing-policy"},{"title":"Delete a routing policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/llm-gateway/admin/routing-policies/{id}","href":"/api-reference/llm-gateway/delete-a-routing-policy"},{"title":"List the organization's routing rules","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/llm-gateway/admin/routing-rules","href":"/api-reference/llm-gateway/list-the-organizations-routing-rules"},{"title":"Create a routing rule","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/llm-gateway/admin/routing-rules","href":"/api-reference/llm-gateway/create-a-routing-rule"},{"title":"Update a routing rule","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/llm-gateway/admin/routing-rules/{id}","href":"/api-reference/llm-gateway/update-a-routing-rule"},{"title":"Delete a routing rule","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/llm-gateway/admin/routing-rules/{id}","href":"/api-reference/llm-gateway/delete-a-routing-rule"}]},{"group":"Notifications","pages":[{"title":"List the subscribable alert vocabulary","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/notification/public/v1/channels/options","href":"/api-reference/notification/list-the-subscribable-alert-vocabulary"},{"title":"List the organization's shared channels","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/notification/public/v1/channels","href":"/api-reference/notification/list-the-organizations-shared-channels"},{"title":"Create or update a notification channel","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/notification/public/v1/channels","href":"/api-reference/notification/create-or-update-a-notification-channel"},{"title":"List the caller's personal channels","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/notification/public/v1/channels/user","href":"/api-reference/notification/list-the-callers-personal-channels"},{"title":"Delete a channel","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/notification/public/v1/channels/{channel_id}","href":"/api-reference/notification/delete-a-channel"},{"title":"Rotate a webhook channel's signing secret","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/notification/public/v1/channels/{channel_id}/regenerate-secret","href":"/api-reference/notification/rotate-a-webhook-channels-signing-secret"},{"title":"Send a test message through a channel","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/notification/public/v1/channels/{channel_id}/test","href":"/api-reference/notification/send-a-test-message-through-a-channel"}]},{"group":"Policies","pages":[{"title":"List Policies","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policies","href":"/api-reference/policy/list-policies"},{"title":"Create Policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/policy/v2/policies","href":"/api-reference/policy/create-policy"},{"title":"Get Filter Definitions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policies/filter-definitions","href":"/api-reference/policy/get-filter-definitions"},{"title":"Get Policies Summary","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policies/summary","href":"/api-reference/policy/get-policies-summary"},{"title":"Get Policy Counts By Agent","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policies/counts-by-agent","href":"/api-reference/policy/get-policy-counts-by-agent"},{"title":"Validate Policy","description":"Validate a policy before creation or update.\nChecks for duplicate names and overlapping MCP server/agent combinations.\nWhen exclude_policy_id is provided (edit mode), that policy is excluded from validation.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/policy/v2/policies/validate","href":"/api-reference/policy/validate-policy"},{"title":"Validate Rule","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/policy/v2/policies/rule/validate","href":"/api-reference/policy/validate-rule"},{"title":"Get Affected Policies","description":"Preview policies that would be archived or revised by a cascade.\n\nBacks the AI agent / MCP server delete-confirmation modal so the user\nsees what's about to change before they confirm (BCP-1686 spec\n§ \"Policy-service endpoint\"). Exactly one of ``agent_id`` /\n``mcp_server_id`` must be supplied.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policies/affected-by","href":"/api-reference/policy/get-affected-policies"},{"title":"Get Policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policies/{policy_id}","href":"/api-reference/policy/get-policy"},{"title":"Update Policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /api/policy/v2/policies/{policy_id}","href":"/api-reference/policy/update-policy"},{"title":"Clone Policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/policy/v2/policies/{policy_id}/clone","href":"/api-reference/policy/clone-policy"},{"title":"List Policy Revisions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policies/{policy_id}/revisions","href":"/api-reference/policy/list-policy-revisions"},{"title":"Compare Policy Revisions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policies/{policy_id}/revisions/compare","href":"/api-reference/policy/compare-policy-revisions"},{"title":"Get Policy Revision","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policies/{policy_id}/revisions/{revision_id}","href":"/api-reference/policy/get-policy-revision"},{"title":"List Server Policy Revisions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policy-revisions","href":"/api-reference/policy/list-server-policy-revisions"},{"title":"List Policy Impacts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policy-impacts","href":"/api-reference/policy/list-policy-impacts"},{"title":"Get Policy Impacts Summary","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policy-impacts/summary","href":"/api-reference/policy/get-policy-impacts-summary"},{"title":"Get Policy Impacts Summary By Kind","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policy-impacts/summary/by-kind","href":"/api-reference/policy/get-policy-impacts-summary-by-kind"},{"title":"List Impacts For Policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policies/{policy_id}/impacts","href":"/api-reference/policy/list-impacts-for-policy"},{"title":"Acknowledge Policy Impact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/policy/v2/policies/{policy_id}/impacts/{impact_id}/acknowledge","href":"/api-reference/policy/acknowledge-policy-impact"}]},{"group":"MCP Gateway","pages":[{"title":"Get Mcp Servers","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/servers","href":"/api-reference/registry/get-mcp-servers"},{"title":"Get Active Server Ids","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/servers/active-ids","href":"/api-reference/registry/get-active-server-ids"},{"title":"Get Mcp Server","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/servers/{server_id}","href":"/api-reference/registry/get-mcp-server"},{"title":"Get Mcp Server By Slug","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/servers/by-slug/{slug}","href":"/api-reference/registry/get-mcp-server-by-slug"},{"title":"Publish Mcp Server","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/registry/v1/servers/{server_id}/publish","href":"/api-reference/registry/publish-mcp-server"},{"title":"Authenticate an already-registered server","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/registry/v1/servers/{server_id}/connect","href":"/api-reference/registry/authenticate-an-already-registered-server"},{"title":"Get Connection","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/servers/{server_id}/connection","href":"/api-reference/registry/get-connection"},{"title":"Delete Connection","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/registry/v1/servers/{server_id}/connection","href":"/api-reference/registry/delete-connection"},{"title":"Report Connection Auth Error","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/registry/v1/servers/{server_id}/connection/auth-error","href":"/api-reference/registry/report-connection-auth-error"},{"title":"List Applications","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/agents","href":"/api-reference/registry/list-applications"},{"title":"Register Application","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/registry/v1/agents","href":"/api-reference/registry/register-application"},{"title":"Get Application Counts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/agents/counts","href":"/api-reference/registry/get-application-counts"},{"title":"Get Active Application Ids","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/applications/active-ids","href":"/api-reference/registry/get-active-application-ids"},{"title":"Get Application","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/agents/{application_id}","href":"/api-reference/registry/get-application"},{"title":"Unregister Application","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/registry/v1/agents/{application_id}","href":"/api-reference/registry/unregister-application"},{"title":"Update Application Write Confirmations","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /api/registry/v1/agents/{application_id}/write-confirmations","href":"/api-reference/registry/update-application-write-confirmations"},{"title":"Update Application Llm Gateway","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /api/registry/v1/agents/{application_id}/llm-gateway","href":"/api-reference/registry/update-application-llm-gateway"},{"title":"List Server Directory","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/server-directory","href":"/api-reference/registry/list-server-directory"},{"title":"Get Active Server Directory Ids","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/server-directory/active-ids","href":"/api-reference/registry/get-active-server-directory-ids"},{"title":"Get Server Directory","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/server-directory/{server_directory_id}","href":"/api-reference/registry/get-server-directory"},{"title":"List Applications Directory","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/agent-directory","href":"/api-reference/registry/list-applications-directory"},{"title":"Get Application Directory","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/agent-directory/{application_directory_id}","href":"/api-reference/registry/get-application-directory"}]},{"group":"Log Exports","pages":[{"title":"List an organization's audit log exports","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/system-management/public/v1/exports/{orgId}","href":"/api-reference/system-management/list-an-organizations-audit-log-exports"},{"title":"Get one audit log export","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/system-management/public/v1/exports/{orgId}/{exportType}","href":"/api-reference/system-management/get-one-audit-log-export"},{"title":"Get an export's delivery destination","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/system-management/public/v1/exports/{orgId}/{exportType}/destination","href":"/api-reference/system-management/get-an-exports-delivery-destination"},{"title":"Configure an export's delivery destination","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/system-management/public/v1/exports/{orgId}/{exportType}/destination","href":"/api-reference/system-management/configure-an-exports-delivery-destination"},{"title":"Clear an export's delivery destination and its stored credentials","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/system-management/public/v1/exports/{orgId}/{exportType}/destination","href":"/api-reference/system-management/clear-an-exports-delivery-destination-and-its-stored-credentials"},{"title":"Get the AWS principal and external ID to trust for iam_role auth","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/system-management/public/v1/exports/{orgId}/{exportType}/destination/aws-trust-info","href":"/api-reference/system-management/get-the-aws-principal-and-external-id-to-trust-for-iam_role-auth"},{"title":"Probe an export's destination and persist the result","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/system-management/public/v1/exports/{orgId}/{exportType}/destination/health-check","href":"/api-reference/system-management/probe-an-exports-destination-and-persist-the-result"},{"title":"Disable an export and stop delivery","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/system-management/public/v1/exports/{orgId}/{exportType}/pause","href":"/api-reference/system-management/disable-an-export-and-stop-delivery"},{"title":"Update an export's delivery settings","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /api/system-management/public/v1/exports/{orgId}/{exportType}/settings","href":"/api-reference/system-management/update-an-exports-delivery-settings"},{"title":"Enable an export and resume delivery","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/system-management/public/v1/exports/{orgId}/{exportType}/start","href":"/api-reference/system-management/enable-an-export-and-resume-delivery"}]}]},{"tab":"Terraform","pages":[{"title":"Terraform","href":"/terraform"}]},{"tab":"SDKs","pages":[{"title":"SDKs","href":"/sdks/introduction"}]},{"tab":"MCP Servers","pages":[{"title":"MCP Servers","href":"/mcp-servers"}]}]},"title":"Validate Rule - Barndoor Documentation","buildId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","deploymentId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-WRhTSUDL.js","utils-ChMov4Kr.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-_REmC2bI.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bp6nVRCu.js","snippetPresets-DZadmXoU.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CY2WdoTl.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-DwYG-Q4l.js","shallow-BXQIGwv4.js","getApiPlaygroundDisplay-CK5nK5B9.js","CodeSnippet-TH4a2aGW.js","CodeSnippets-DwsQiOFS.js","Page-R3M_BF4L.js","getPastedJson-DD7kUzi_.js","icon-holE3QoJ.js","MethodPill-DUW0T8us.js","DuplicateIcon-CI_p4be-.js","createIcon-BdbRvavb.js","DynamicMarkdown-DN96a4Ur.js","SectionHeading-SCu36A9d.js","axios-vUo_bRtp.js","Markdown-CCeGv-zI.js","clsx-BGBGWFTt.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-Cv_O2fky.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-2C5OB2eV.js"]}