Update a policy. Sending rules REPLACES the entire rule list.
There is no “add a rule” operation. To add one, read the policy first and send
every existing rule back alongside the new one — sending only the new rule
deletes the others, and the call still returns 200 with a policy that looks
perfectly healthy. Omit rules entirely to change only metadata.
Verify afterwards rather than assuming: GET /v2/policies/{policy_id}/revisions
lists what each change actually did, and compare_policy_revisions diffs two of
them. A revision summarising removals you did not intend is how you catch a
partial send — and it is also how you recover, since the diff records what was
taken out.
Other fields are a partial update: omitted ones are left alone. mcp_server_id
is immutable — rules reference server-specific tool actions, so retargeting is a
new policy, not an edit.
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.
AI agents this policy applies to, as application UUIDs. An empty or omitted list means the policy applies to ALL agents — it must never contain an empty string. Retrieve real ids from GET /api/registry/v1/agents.
Full set of rules that govern the policy. This REPLACES the existing rule list on update — send the complete set, not a delta. Anything no rule grants is denied. Write ONE rule per distinct roles_groups set: put every action for a principal on a single rule and let the :approve suffix carry allow-vs-confirm, rather than splitting reads and writes across two rules naming the same principal.
Detailed representation of a policy including rules.
Show child attributes
{"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/update-policy","slug":"/api-reference/policy/update-policy","pageMetadata":{"title":"Update Policy","description":"Update a policy. Sending `rules` REPLACES the entire rule list.\n\nThere is no \"add a rule\" operation. To add one, read the policy first and send\nevery existing rule back alongside the new one — sending only the new rule\ndeletes the others, and the call still returns 200 with a policy that looks\nperfectly healthy. Omit `rules` entirely to change only metadata.\n\nVerify afterwards rather than assuming: `GET /v2/policies/{policy_id}/revisions`\nlists what each change actually did, and `compare_policy_revisions` diffs two of\nthem. A revision summarising removals you did not intend is how you catch a\npartial send — and it is also how you recover, since the diff records what was\ntaken out.\n\nOther fields are a partial update: omitted ones are left alone. `mcp_server_id`\nis immutable — rules reference server-specific tool actions, so retargeting is a\nnew policy, not an edit.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /api/policy/v2/policies/{policy_id}","href":"/api-reference/policy/update-policy","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 code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Update a policy. Sending \", _jsx(_components.code, {\n children: \"rules\"\n }), \" REPLACES the entire rule list.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"There is no “add a rule” operation. To add one, read the policy first and send\\nevery existing rule back alongside the new one — sending only the new rule\\ndeletes the others, and the call still returns 200 with a policy that looks\\nperfectly healthy. Omit \", _jsx(_components.code, {\n children: \"rules\"\n }), \" entirely to change only metadata.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Verify afterwards rather than assuming: \", _jsx(_components.code, {\n children: \"GET /v2/policies/{policy_id}/revisions\"\n }), \"\\nlists what each change actually did, and \", _jsx(_components.code, {\n children: \"compare_policy_revisions\"\n }), \" diffs two of\\nthem. A revision summarising removals you did not intend is how you catch a\\npartial send — and it is also how you recover, since the diff records what was\\ntaken out.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Other fields are a partial update: omitted ones are left alone. \", _jsx(_components.code, {\n children: \"mcp_server_id\"\n }), \"\\nis immutable — rules reference server-specific tool actions, so retargeting is a\\nnew policy, not an edit.\"]\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":"Update Policy","description":"Update a policy. Sending `rules` REPLACES the entire rule list.\n\nThere is no \"add a rule\" operation. To add one, read the policy first and send\nevery existing rule back alongside the new one — sending only the new rule\ndeletes the others, and the call still returns 200 with a policy that looks\nperfectly healthy. Omit `rules` entirely to change only metadata.\n\nVerify afterwards rather than assuming: `GET /v2/policies/{policy_id}/revisions`\nlists what each change actually did, and `compare_policy_revisions` diffs two of\nthem. A revision summarising removals you did not intend is how you catch a\npartial send — and it is also how you recover, since the diff records what was\ntaken out.\n\nOther fields are a partial update: omitted ones are left alone. `mcp_server_id`\nis immutable — rules reference server-specific tool actions, so retargeting is a\nnew policy, not an edit.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /api/policy/v2/policies/{policy_id}","href":"/api-reference/policy/update-policy","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":"Update Policy","description":"Update a policy. Sending `rules` REPLACES the entire rule list.\n\nThere is no \"add a rule\" operation. To add one, read the policy first and send\nevery existing rule back alongside the new one — sending only the new rule\ndeletes the others, and the call still returns 200 with a policy that looks\nperfectly healthy. Omit `rules` entirely to change only metadata.\n\nVerify afterwards rather than assuming: `GET /v2/policies/{policy_id}/revisions`\nlists what each change actually did, and `compare_policy_revisions` diffs two of\nthem. A revision summarising removals you did not intend is how you catch a\npartial send — and it is also how you recover, since the diff records what was\ntaken out.\n\nOther fields are a partial update: omitted ones are left alone. `mcp_server_id`\nis immutable — rules reference server-specific tool actions, so retargeting is a\nnew policy, not an edit.","operationId":"update_policy","parameters":["1c4d11d7-d1a3-48d4-b31b-bbd87c9d796d"],"requestBody":"db70a0a3-5f6b-4234-856e-d02e66568098","responses":{"200":"4625aa65-1615-49f6-8ccf-b75da6234132","422":"e9a84531-063b-4172-af97-978597d9b2f5"},"method":"patch","type":"path","servers":["3d90fb7e-1b31-468b-9e48-a2cf56df4643"],"security":["42e76a07-d817-411c-98d1-10dd44f028dd","907e0374-7594-4e7c-bd30-5eb0d49015f8"],"path":"/api/policy/v2/policies/{policy_id}","baseUrlOptions":["https://{host}"],"title":"Update Policy","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"1c4d11d7-d1a3-48d4-b31b-bbd87c9d796d":{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id","isRequired":true,"uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"oneOf":[{"type":"string","title":"Name","description":"Human-friendly policy name, unique within an organization","uniqueKey":"name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Name","description":"Human-friendly policy name, unique within an organization","uniqueKey":"name.oneOf.1","typeLabel":"null"}],"uniqueKey":"name","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","title":"Description","description":"Longer description of the policy.","uniqueKey":"description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","description":"Longer description of the policy.","uniqueKey":"description.oneOf.1","typeLabel":"null"}],"uniqueKey":"description","typeLabel":"string | null"},"support_contact":{"oneOf":[{"type":"string","title":"Support Contact","description":"Primary point of contact associated with the policy.","uniqueKey":"support_contact.oneOf.0","typeLabel":"string"},{"type":"null","title":"Support Contact","description":"Primary point of contact associated with the policy.","uniqueKey":"support_contact.oneOf.1","typeLabel":"null"}],"uniqueKey":"support_contact","typeLabel":"string | null"},"tags":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"tags.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Tags","description":"Tags for categorizing the policy.","uniqueKey":"tags.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Tags","description":"Tags for categorizing the policy.","uniqueKey":"tags.oneOf.1","typeLabel":"null"}],"uniqueKey":"tags","typeLabel":"string[] | null"},"status":{"oneOf":[{"type":"string","title":"PolicyStatus","description":"The current lifecycle status of the policy.","enum":["DRAFT","ACTIVE","INACTIVE","ARCHIVED"],"uniqueKey":"status.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The current lifecycle status of the policy.","uniqueKey":"status.oneOf.1","typeLabel":"null"}],"uniqueKey":"status","typeLabel":"enum\u003cstring> | null"},"application_ids":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"application_ids.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Application Ids","description":"AI agents this policy applies to, as application UUIDs. An empty or omitted list means the policy applies to ALL agents — it must never contain an empty string. Retrieve real ids from `GET /api/registry/v1/agents`.","uniqueKey":"application_ids.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Application Ids","description":"AI agents this policy applies to, as application UUIDs. An empty or omitted list means the policy applies to ALL agents — it must never contain an empty string. Retrieve real ids from `GET /api/registry/v1/agents`.","uniqueKey":"application_ids.oneOf.1","typeLabel":"null"}],"uniqueKey":"application_ids","typeLabel":"string[] | null"},"rules":{"oneOf":[{"type":"array","items":{"properties":{"actions":{"items":{"type":"string","uniqueKey":"rules.oneOf.0.items.[INDEX].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":"rules.oneOf.0.items.[INDEX].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":"rules.oneOf.0.items.[INDEX].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":"rules.oneOf.0.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"rules.oneOf.0.items.[INDEX].name","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","title":"Description","description":"Optional human-readable description for the rule; has no effect on enforcement","uniqueKey":"rules.oneOf.0.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","description":"Optional human-readable description for the rule; has no effect on enforcement","uniqueKey":"rules.oneOf.0.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"rules.oneOf.0.items.[INDEX].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":"rules.oneOf.0.items.[INDEX].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":"rules.oneOf.0.items.[INDEX].authorized.oneOf.1","typeLabel":"null"}],"uniqueKey":"rules.oneOf.0.items.[INDEX].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":"rules.oneOf.0.items.[INDEX].active","typeLabel":"boolean"},"roles_groups":{"items":{"type":"string","uniqueKey":"rules.oneOf.0.items.[INDEX].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":"rules.oneOf.0.items.[INDEX].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":"rules.oneOf.0.items.[INDEX].condition.oneOf.0.match.oneOf.0.expr","typeLabel":"string"}},"isRequired":true,"uniqueKey":"rules.oneOf.0.items.[INDEX].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":"rules.oneOf.0.items.[INDEX].condition.oneOf.0.match.oneOf.1.all.of.items.[INDEX].oneOf.0.expr","typeLabel":"string"}},"uniqueKey":"rules.oneOf.0.items.[INDEX].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":"rules.oneOf.0.items.[INDEX].condition.oneOf.0.match.oneOf.1.all.of.items.[INDEX].oneOf.2.any","typeLabel":"any"}},"uniqueKey":"rules.oneOf.0.items.[INDEX].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":"rules.oneOf.0.items.[INDEX].condition.oneOf.0.match.oneOf.1.all.of.items.[INDEX].oneOf.3.none","typeLabel":"any"}},"uniqueKey":"rules.oneOf.0.items.[INDEX].condition.oneOf.0.match.oneOf.1.all.of.items.[INDEX].oneOf.3","typeLabel":"OperatorNone · object"}],"uniqueKey":"rules.oneOf.0.items.[INDEX].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":"rules.oneOf.0.items.[INDEX].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":"rules.oneOf.0.items.[INDEX].condition.oneOf.0.match.oneOf.1.all","typeLabel":"ConditionOf · object"}},"isRequired":true,"uniqueKey":"rules.oneOf.0.items.[INDEX].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":"rules.oneOf.0.items.[INDEX].condition.oneOf.0.match.oneOf.2.any","typeLabel":"any"}},"isRequired":true,"uniqueKey":"rules.oneOf.0.items.[INDEX].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":"rules.oneOf.0.items.[INDEX].condition.oneOf.0.match.oneOf.3.none","typeLabel":"any"}},"isRequired":true,"uniqueKey":"rules.oneOf.0.items.[INDEX].condition.oneOf.0.match.oneOf.3","typeLabel":"OperatorNone · object"}],"isRequired":true,"uniqueKey":"rules.oneOf.0.items.[INDEX].condition.oneOf.0.match","typeLabel":"Expression · object | OperatorAll · object | OperatorAny · object | OperatorNone · object"}},"uniqueKey":"rules.oneOf.0.items.[INDEX].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":"rules.oneOf.0.items.[INDEX].condition.oneOf.1","typeLabel":"null"}],"uniqueKey":"rules.oneOf.0.items.[INDEX].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":"rules.oneOf.0.items.[INDEX]","typeLabel":"PolicyRule · object"},"title":"Rules","description":"Full set of rules that govern the policy. This REPLACES the existing rule list on update — send the complete set, not a delta. Anything no rule grants is denied. Write ONE rule per distinct `roles_groups` set: put every action for a principal on a single rule and let the `:approve` suffix carry allow-vs-confirm, rather than splitting reads and writes across two rules naming the same principal.","uniqueKey":"rules.oneOf.0","typeLabel":"PolicyRule · object[]"},{"type":"null","title":"Rules","description":"Full set of rules that govern the policy. This REPLACES the existing rule list on update — send the complete set, not a delta. Anything no rule grants is denied. Write ONE rule per distinct `roles_groups` set: put every action for a principal on a single rule and let the `:approve` suffix carry allow-vs-confirm, rather than splitting reads and writes across two rules naming the same principal.","uniqueKey":"rules.oneOf.1","typeLabel":"null"}],"uniqueKey":"rules","typeLabel":"PolicyRule · object[] | null"}},"type":"object","title":"UpdatePolicy","description":"Request body for partial updates to an existing policy.","uniqueKey":"","typeLabel":"UpdatePolicy · object"},"examples":{"Example":{"title":"Example","value":{"name":"\u003cstring>","description":"\u003cstring>","support_contact":"\u003cstring>","tags":["\u003cstring>"],"application_ids":["\u003cstring>"],"rules":[{"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"}},"exampleType":"generated"},"responses":{"4625aa65-1615-49f6-8ccf-b75da6234132":{"description":"Successful Response","content":{"application/json":{"schema":{"properties":{"policy":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","isRequired":true,"uniqueKey":"policy.id","typeLabel":"string\u003cuuid>"},"organization_id":{"type":"string","title":"Organization Id","isRequired":true,"uniqueKey":"policy.organization_id","typeLabel":"string"},"name":{"type":"string","title":"Name","isRequired":true,"uniqueKey":"policy.name","typeLabel":"string"},"status":{"type":"string","title":"Status","isRequired":true,"uniqueKey":"policy.status","typeLabel":"string"},"mcp_server_id":{"type":"string","title":"Mcp Server Id","isRequired":true,"uniqueKey":"policy.mcp_server_id","typeLabel":"string"},"created_at":{"type":"string","format":"date-time","title":"Created At","isRequired":true,"uniqueKey":"policy.created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","isRequired":true,"uniqueKey":"policy.updated_at","typeLabel":"string\u003cdate-time>"},"created_by_user_id":{"type":"string","title":"Created By User Id","isRequired":true,"uniqueKey":"policy.created_by_user_id","typeLabel":"string"},"updated_by_user_id":{"type":"string","title":"Updated By User Id","isRequired":true,"uniqueKey":"policy.updated_by_user_id","typeLabel":"string"},"support_contact":{"oneOf":[{"type":"string","title":"Support Contact","uniqueKey":"policy.support_contact.oneOf.0","typeLabel":"string"},{"type":"null","title":"Support Contact","uniqueKey":"policy.support_contact.oneOf.1","typeLabel":"null"}],"uniqueKey":"policy.support_contact","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","title":"Description","uniqueKey":"policy.description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","uniqueKey":"policy.description.oneOf.1","typeLabel":"null"}],"uniqueKey":"policy.description","typeLabel":"string | null"},"application_ids":{"items":{"type":"string","uniqueKey":"policy.application_ids.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Application Ids","uniqueKey":"policy.application_ids","typeLabel":"string[]"},"tags":{"items":{"type":"string","uniqueKey":"policy.tags.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Tags","uniqueKey":"policy.tags","typeLabel":"string[]"},"rules":{"items":{"properties":{"actions":{"items":{"type":"string","uniqueKey":"policy.rules.items.[INDEX].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":"policy.rules.items.[INDEX].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":"policy.rules.items.[INDEX].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":"policy.rules.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"policy.rules.items.[INDEX].name","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","title":"Description","description":"Optional human-readable description for the rule; has no effect on enforcement","uniqueKey":"policy.rules.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","description":"Optional human-readable description for the rule; has no effect on enforcement","uniqueKey":"policy.rules.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"policy.rules.items.[INDEX].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":"policy.rules.items.[INDEX].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":"policy.rules.items.[INDEX].authorized.oneOf.1","typeLabel":"null"}],"uniqueKey":"policy.rules.items.[INDEX].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":"policy.rules.items.[INDEX].active","typeLabel":"boolean"},"roles_groups":{"items":{"type":"string","uniqueKey":"policy.rules.items.[INDEX].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":"policy.rules.items.[INDEX].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":"policy.rules.items.[INDEX].condition.oneOf.0.match.oneOf.0.expr","typeLabel":"string"}},"isRequired":true,"uniqueKey":"policy.rules.items.[INDEX].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":"policy.rules.items.[INDEX].condition.oneOf.0.match.oneOf.1.all.of.items.[INDEX].oneOf.0.expr","typeLabel":"string"}},"uniqueKey":"policy.rules.items.[INDEX].condition.oneOf.0.match.oneOf.1.all.of.items.[INDEX].oneOf.0","typeLabel":"Expression · object"},{},{"type":"object","title":"OperatorAny","required":["any"],"properties":{"any":{"$circularRef":"a28f94c4-ced6-4681-b7ae-7c34b7facc5a","description":"Logical OR — at least one matcher in `of` must evaluate true.","isRequired":true,"uniqueKey":"policy.rules.items.[INDEX].condition.oneOf.0.match.oneOf.1.all.of.items.[INDEX].oneOf.2.any","typeLabel":"any"}},"uniqueKey":"policy.rules.items.[INDEX].condition.oneOf.0.match.oneOf.1.all.of.items.[INDEX].oneOf.2","typeLabel":"OperatorAny · object"},{"type":"object","title":"OperatorNone","required":["none"],"properties":{"none":{"$circularRef":"a28f94c4-ced6-4681-b7ae-7c34b7facc5a","description":"Logical NOR — the rule applies only if NO matcher in `of` evaluates true.","isRequired":true,"uniqueKey":"policy.rules.items.[INDEX].condition.oneOf.0.match.oneOf.1.all.of.items.[INDEX].oneOf.3.none","typeLabel":"any"}},"uniqueKey":"policy.rules.items.[INDEX].condition.oneOf.0.match.oneOf.1.all.of.items.[INDEX].oneOf.3","typeLabel":"OperatorNone · object"}],"uniqueKey":"policy.rules.items.[INDEX].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":"policy.rules.items.[INDEX].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":"policy.rules.items.[INDEX].condition.oneOf.0.match.oneOf.1.all","typeLabel":"ConditionOf · object"}},"isRequired":true,"uniqueKey":"policy.rules.items.[INDEX].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":"a28f94c4-ced6-4681-b7ae-7c34b7facc5a","description":"Logical OR — at least one matcher in `of` must evaluate true.","isRequired":true,"uniqueKey":"policy.rules.items.[INDEX].condition.oneOf.0.match.oneOf.2.any","typeLabel":"any"}},"isRequired":true,"uniqueKey":"policy.rules.items.[INDEX].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":"a28f94c4-ced6-4681-b7ae-7c34b7facc5a","description":"Logical NOR — the rule applies only if NO matcher in `of` evaluates true.","isRequired":true,"uniqueKey":"policy.rules.items.[INDEX].condition.oneOf.0.match.oneOf.3.none","typeLabel":"any"}},"isRequired":true,"uniqueKey":"policy.rules.items.[INDEX].condition.oneOf.0.match.oneOf.3","typeLabel":"OperatorNone · object"}],"isRequired":true,"uniqueKey":"policy.rules.items.[INDEX].condition.oneOf.0.match","typeLabel":"Expression · object | OperatorAll · object | OperatorAny · object | OperatorNone · object"}},"uniqueKey":"policy.rules.items.[INDEX].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":"policy.rules.items.[INDEX].condition.oneOf.1","typeLabel":"null"}],"uniqueKey":"policy.rules.items.[INDEX].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":"policy.rules.items.[INDEX]","typeLabel":"PolicyRule · object"},"type":"array","title":"Rules","uniqueKey":"policy.rules","typeLabel":"PolicyRule · object[]"}},"type":"object","required":["id","organization_id","name","status","mcp_server_id","created_at","updated_at","created_by_user_id","updated_by_user_id"],"title":"PolicyDetail","description":"Detailed representation of a policy including rules.","isRequired":true,"uniqueKey":"policy","typeLabel":"PolicyDetail · object"}},"type":"object","required":["policy"],"title":"PolicyDetailResponse","description":"Envelope for detail responses.","uniqueKey":"","typeLabel":"PolicyDetailResponse · object"},"examples":{"Example":{"title":"Example","value":{"policy":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","organization_id":"\u003cstring>","name":"\u003cstring>","status":"\u003cstring>","mcp_server_id":"\u003cstring>","created_at":"2023-11-07T05:31:56Z","updated_at":"2023-11-07T05:31:56Z","created_by_user_id":"\u003cstring>","updated_by_user_id":"\u003cstring>","support_contact":"\u003cstring>","description":"\u003cstring>","application_ids":["\u003cstring>"],"tags":["\u003cstring>"],"rules":[{"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"}},"exampleType":"generated"},"e9a84531-063b-4172-af97-978597d9b2f5":{"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"},"a28f94c4-ced6-4681-b7ae-7c34b7facc5a":{"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":"a28f94c4-ced6-4681-b7ae-7c34b7facc5a","description":"Logical AND — every matcher in `of` must evaluate true.","isRequired":true}}},{"type":"object","title":"OperatorAny","required":["any"],"properties":{"any":{"$circularRef":"a28f94c4-ced6-4681-b7ae-7c34b7facc5a","description":"Logical OR — at least one matcher in `of` must evaluate true.","isRequired":true}}},{"type":"object","title":"OperatorNone","required":["none"],"properties":{"none":{"$circularRef":"a28f94c4-ced6-4681-b7ae-7c34b7facc5a","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":"Update Policy - Barndoor Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-28T16:34:43.528Z","originalFileLocation":"api-reference/policy/update-policy.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=\"Update a policy. Sending rules REPLACES the entire rule list. There is no \u0026quot;add a rule\u0026quot; operation. To add one, read the policy first and send every existing rule back alongside the new one — sending only the new rule deletes the others, and the call still returns 200 with a policy that looks perfectly healthy. Omit rules entirely to change only metadata. Verify afterwards rather than assuming: GET /v2/policies/{policy_id}/revisions lists what each change actually did, and compare_policy_revisions diffs two of them. A revision summarising removals you did not intend is how you catch a partial send — and it is also how you recover, since the diff records what was taken out. Other fields are a partial update: omitted ones are left alone. mcp_server_id is immutable — rules reference server-specific tool actions, so retargeting is a new policy, not an edit.\">\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=\"Update Policy - Barndoor Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Update a policy. Sending rules REPLACES the entire rule list. There is no \u0026quot;add a rule\u0026quot; operation. To add one, read the policy first and send every existing rule back alongside the new one — sending only the new rule deletes the others, and the call still returns 200 with a policy that looks perfectly healthy. Omit rules entirely to change only metadata. Verify afterwards rather than assuming: GET /v2/policies/{policy_id}/revisions lists what each change actually did, and compare_policy_revisions diffs two of them. A revision summarising removals you did not intend is how you catch a partial send — and it is also how you recover, since the diff records what was taken out. Other fields are a partial update: omitted ones are left alone. mcp_server_id is immutable — rules reference server-specific tool actions, so retargeting is a new policy, not an edit.\">\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/update-policy\">\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=Update+Policy\u0026amp;description=Update+a+policy.+Sending+%60rules%60+REPLACES+the+entire+rule+list.%0A%0AThere+is+no+%22add+a+rule%22+operation.+To+add+one%2C+read+the+policy+first+and+send%0Aevery+existing+r\u0026amp;theme=bc5db53da504f4bb841cf86c\u0026amp;signature=62fe5e58a60b42b45940f24b5ac6c72f34d229c49fbfe5476d5c0fba8bd1c871\">\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=\"Update Policy - Barndoor Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Update a policy. Sending rules REPLACES the entire rule list. There is no \u0026quot;add a rule\u0026quot; operation. To add one, read the policy first and send every existing rule back alongside the new one — sending only the new rule deletes the others, and the call still returns 200 with a policy that looks perfectly healthy. Omit rules entirely to change only metadata. Verify afterwards rather than assuming: GET /v2/policies/{policy_id}/revisions lists what each change actually did, and compare_policy_revisions diffs two of them. A revision summarising removals you did not intend is how you catch a partial send — and it is also how you recover, since the diff records what was taken out. Other fields are a partial update: omitted ones are left alone. mcp_server_id is immutable — rules reference server-specific tool actions, so retargeting is a new policy, not an edit.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://barndoor.mintlify.app/_mintlify/api/og/v2?division=Policies\u0026amp;title=Update+Policy\u0026amp;description=Update+a+policy.+Sending+%60rules%60+REPLACES+the+entire+rule+list.%0A%0AThere+is+no+%22add+a+rule%22+operation.+To+add+one%2C+read+the+policy+first+and+send%0Aevery+existing+r\u0026amp;theme=bc5db53da504f4bb841cf86c\u0026amp;signature=62fe5e58a60b42b45940f24b5ac6c72f34d229c49fbfe5476d5c0fba8bd1c871\">\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/update-policy\">\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/update-policy.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/update-policy#webpage\",\"url\":\"https://docs.barndoor.ai/api-reference/policy/update-policy\",\"name\":\"Update Policy\",\"description\":\"Update a policy. Sending rules REPLACES the entire rule list. There is no \\\"add a rule\\\" operation. To add one, read the policy first and send every existing rule back alongside the new one — sending only the new rule deletes the others, and the call still returns 200 with a policy that looks perfectly healthy. Omit rules entirely to change only metadata. Verify afterwards rather than assuming: GET /v2/policies/{policy_id}/revisions lists what each change actually did, and compare_policy_revisions diffs two of them. A revision summarising removals you did not intend is how you catch a partial send — and it is also how you recover, since the diff records what was taken out. Other fields are a partial update: omitted ones are left alone. mcp_server_id is immutable — rules reference server-specific tool actions, so retargeting is a new policy, not an edit.\",\"dateModified\":\"2026-10-28T16:34:43.528Z\",\"isPartOf\":{\"@id\":\"https://docs.barndoor.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.barndoor.ai/api-reference/policy/update-policy#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.barndoor.ai/api-reference/policy/update-policy#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Policies\",\"item\":\"https://docs.barndoor.ai/api-reference/policy/list-policies\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Update Policy\",\"item\":\"https://docs.barndoor.ai/api-reference/policy/update-policy\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.barndoor.ai/api-reference/policy/update-policy#apireference\",\"headline\":\"Update Policy\",\"name\":\"Update Policy\",\"description\":\"Update a policy. Sending rules REPLACES the entire rule list. There is no \\\"add a rule\\\" operation. To add one, read the policy first and send every existing rule back alongside the new one — sending only the new rule deletes the others, and the call still returns 200 with a policy that looks perfectly healthy. Omit rules entirely to change only metadata. Verify afterwards rather than assuming: GET /v2/policies/{policy_id}/revisions lists what each change actually did, and compare_policy_revisions diffs two of them. A revision summarising removals you did not intend is how you catch a partial send — and it is also how you recover, since the diff records what was taken out. Other fields are a partial update: omitted ones are left alone. mcp_server_id is immutable — rules reference server-specific tool actions, so retargeting is a new policy, not an edit.\",\"url\":\"https://docs.barndoor.ai/api-reference/policy/update-policy\",\"mainEntityOfPage\":{\"@id\":\"https://docs.barndoor.ai/api-reference/policy/update-policy#webpage\"},\"dateModified\":\"2026-10-28T16:34:43.528Z\",\"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","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","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","description":null,"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","description":"Clone an existing policy, creating a new policy with the same configuration\nbut with a modified name (appending \" Copy\") and DRAFT status.","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":"Update Policy - 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"]}