Upserts one channel and replaces its subscription set.
Without id, the channel is keyed on its type’s natural identity, so an identical call is idempotent rather than duplicating: email by address, webhook by URL, slack by channel id, personal types by (organization, type, caller). With id it is an authoritative edit of that row — the only way to update a teams channel, whose natural identity is a secret URL.
subscriptions is replaced wholesale, not merged: send the complete desired set, and expect an omitted list to unsubscribe the channel from everything.
Creating a webhook channel reveals its signing secret in signing_secret ONCE; it is not readable afterwards. The secret is only generated when the row is new, so a retried create that lands after the first succeeded returns signing_secret: null. If you need a secret and got null, call POST /channels/{channel_id}/regenerate-secret.
A Barndoor API key, sent as Authorization: Bearer <key>. Keys are prefixed bdai_ and are opaque — do not attempt to decode one. Interchangeable with an OAuth 2.0 access token.
Body
application/json
Create or update one notification channel and replace its subscription set.
This is a full upsert, not a patch: subscriptions is replaced by what you send, so
omitting it removes every subscription the channel had. Send the complete desired set on
every call — which is what makes the endpoint safe to drive from a declarative tool.
Which fields are permitted depends on type; sending one that does not belong to the
type is a 422, not a silently ignored field. See ChannelType for the full matrix.
Identity. Without id the channel is keyed on its type's natural identity, so
repeating the same call is idempotent rather than creating duplicates: personal types by
(organization, type, caller), email by (organization, email_address), webhook by
(organization, url), slack by (organization, slack_channel_id). With id it is
an authoritative edit of that row — the only way to change a teams channel, whose
natural identity is a secret URL you never hold back.
The kind of destination, and the discriminator for every other field. Immutable in practice: an edit-by-id that changes type is rejected, and an upsert without id and a different type addresses a different natural identity, so it creates a separate channel.
Existing channel to edit authoritatively. Omit to create-or-dedup on the type's natural identity (see the model description). When supplied and unknown — or owned by another organization — the request is a 404, never a create.
Whether the channel delivers. false suspends delivery while keeping the channel and its subscriptions intact — the reversible alternative to deleting it.
Destination address for type: email. Any deliverable address — a team alias or a ticketing inbox, not necessarily a platform user. Validated and normalized; also the channel's natural identity, so reusing an address updates that channel. Forbidden on every other type.
Destination endpoint for type: webhook. Must be https and must resolve to a public address — private, loopback, link-local, and cloud-metadata targets are rejected with a 422 naming the reason. Also the channel's natural identity. Forbidden on every other type.
Human-readable name, shown wherever the channel is listed. Required for slack and teams (for teams it is the only non-secret identifier you get back). Forbidden on the other types.
Slack channel id (not its name) for type: slack; the organization's Slack app must already be installed. Also the channel's natural identity. Forbidden on every other type.
Microsoft Teams Workflows incoming-webhook URL for type: teams. Write-only: it is stored as a secret and never returned by any endpoint — reads expose only has_workflow_url. Required on create, optional on edit-by-id (omit to keep the stored URL). Must be https, resolve to a public address, and sit on the Power Automate host allowlist. Forbidden on every other type.
The complete set of alert types to deliver to this channel. Replaces the channel's existing set — an omitted or empty list unsubscribes it from everything. At most one entry per alert type; duplicates are a 422.
Show child attributes
Response
Successful Response
A channel and its subscriptions. Secrets (webhook signing secret, slack bot token) live
in OpenBao and are never surfaced here except as a one-time reveal via signing_secret,
populated only on the response to the request that just generated it (webhook create or
regenerate); slack channels expose only the non-secret label + slack_channel_id.
Whether a webhook channel has a stored signing secret — always true for a webhook channel, false otherwise. The secret itself is never readable back; use POST /channels/{channel_id}/regenerate-secret to obtain a fresh one.
Whether a teams channel has a stored Workflows URL. The URL is a secret and is never returned; this flag is the only readable signal that one is configured.
One-time reveal of a newly generated webhook signing secret. Present only on the response to the request that created it — the PUT that first creates a webhook channel — and null on every list or subsequent read. Store it when you receive it; the only way to recover from losing it is to rotate.
{"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/notification/create-or-update-a-notification-channel","slug":"/api-reference/notification/create-or-update-a-notification-channel","pageMetadata":{"title":"Create or update a notification channel","description":"Upserts one channel and **replaces** its subscription set.\n\nWithout `id`, the channel is keyed on its type's natural identity, so an identical call is idempotent rather than duplicating: `email` by address, `webhook` by URL, `slack` by channel id, personal types by (organization, type, caller). With `id` it is an authoritative edit of that row — the only way to update a `teams` channel, whose natural identity is a secret URL.\n\n`subscriptions` is replaced wholesale, not merged: send the complete desired set, and expect an omitted list to unsubscribe the channel from everything.\n\nCreating a `webhook` channel reveals its signing secret in `signing_secret` ONCE; it is not readable afterwards. The secret is only generated when the row is new, so a retried create that lands after the first succeeded returns `signing_secret: null`. If you need a secret and got `null`, call `POST /channels/{channel_id}/regenerate-secret`.","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","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 strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Upserts one channel and \", _jsx(_components.strong, {\n children: \"replaces\"\n }), \" its subscription set.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Without \", _jsx(_components.code, {\n children: \"id\"\n }), \", the channel is keyed on its type’s natural identity, so an identical call is idempotent rather than duplicating: \", _jsx(_components.code, {\n children: \"email\"\n }), \" by address, \", _jsx(_components.code, {\n children: \"webhook\"\n }), \" by URL, \", _jsx(_components.code, {\n children: \"slack\"\n }), \" by channel id, personal types by (organization, type, caller). With \", _jsx(_components.code, {\n children: \"id\"\n }), \" it is an authoritative edit of that row — the only way to update a \", _jsx(_components.code, {\n children: \"teams\"\n }), \" channel, whose natural identity is a secret URL.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"subscriptions\"\n }), \" is replaced wholesale, not merged: send the complete desired set, and expect an omitted list to unsubscribe the channel from everything.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Creating a \", _jsx(_components.code, {\n children: \"webhook\"\n }), \" channel reveals its signing secret in \", _jsx(_components.code, {\n children: \"signing_secret\"\n }), \" ONCE; it is not readable afterwards. The secret is only generated when the row is new, so a retried create that lands after the first succeeded returns \", _jsx(_components.code, {\n children: \"signing_secret: null\"\n }), \". If you need a secret and got \", _jsx(_components.code, {\n children: \"null\"\n }), \", call \", _jsx(_components.code, {\n children: \"POST /channels/{channel_id}/regenerate-secret\"\n }), \".\"]\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":"Create or update a notification channel","description":"Upserts one channel and **replaces** its subscription set.\n\nWithout `id`, the channel is keyed on its type's natural identity, so an identical call is idempotent rather than duplicating: `email` by address, `webhook` by URL, `slack` by channel id, personal types by (organization, type, caller). With `id` it is an authoritative edit of that row — the only way to update a `teams` channel, whose natural identity is a secret URL.\n\n`subscriptions` is replaced wholesale, not merged: send the complete desired set, and expect an omitted list to unsubscribe the channel from everything.\n\nCreating a `webhook` channel reveals its signing secret in `signing_secret` ONCE; it is not readable afterwards. The secret is only generated when the row is new, so a retried create that lands after the first succeeded returns `signing_secret: null`. If you need a secret and got `null`, call `POST /channels/{channel_id}/regenerate-secret`.","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","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":["notification"],"summary":"Create or update a notification channel","description":"Upserts one channel and **replaces** its subscription set.\n\nWithout `id`, the channel is keyed on its type's natural identity, so an identical call is idempotent rather than duplicating: `email` by address, `webhook` by URL, `slack` by channel id, personal types by (organization, type, caller). With `id` it is an authoritative edit of that row — the only way to update a `teams` channel, whose natural identity is a secret URL.\n\n`subscriptions` is replaced wholesale, not merged: send the complete desired set, and expect an omitted list to unsubscribe the channel from everything.\n\nCreating a `webhook` channel reveals its signing secret in `signing_secret` ONCE; it is not readable afterwards. The secret is only generated when the row is new, so a retried create that lands after the first succeeded returns `signing_secret: null`. If you need a secret and got `null`, call `POST /channels/{channel_id}/regenerate-secret`.","operationId":"upsert_alert_channel","requestBody":"cfc673d6-78b0-42d9-aeb5-c690a40ce564","responses":{"200":"6d5fd579-4dd4-4822-995b-6ed6a96bb5b4","401":"edc16bf9-2c80-4514-8aab-0ff9cb72ac6a","403":"0d83e879-955d-433b-baf5-b14af9e8e785","404":"3637a17b-9887-4b99-bc5f-e26351fba735","422":"26e61901-679a-46b6-a09f-fa72fcb9f118"},"method":"put","type":"path","servers":["3d90fb7e-1b31-468b-9e48-a2cf56df4643"],"security":["42e76a07-d817-411c-98d1-10dd44f028dd","907e0374-7594-4e7c-bd30-5eb0d49015f8"],"path":"/api/notification/public/v1/channels","baseUrlOptions":["https://{host}"],"title":"Create or update a notification channel","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"content":{"application/json":{"schema":{"properties":{"type":{"type":"string","enum":["in_app","user_email","email","webhook","slack","teams"],"title":"ChannelType","description":"The kind of destination, and the discriminator for every other field. Immutable in practice: an edit-by-id that changes `type` is rejected, and an upsert without `id` and a different `type` addresses a different natural identity, so it creates a separate channel.","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"id":{"oneOf":[{"type":"string","title":"Id","description":"Existing channel to edit authoritatively. Omit to create-or-dedup on the type's natural identity (see the model description). When supplied and unknown — or owned by another organization — the request is a `404`, never a create.","format":"uuid","uniqueKey":"id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"Id","description":"Existing channel to edit authoritatively. Omit to create-or-dedup on the type's natural identity (see the model description). When supplied and unknown — or owned by another organization — the request is a `404`, never a create.","uniqueKey":"id.oneOf.1","typeLabel":"null"}],"uniqueKey":"id","typeLabel":"string\u003cuuid> | null"},"enabled":{"type":"boolean","title":"Enabled","description":"Whether the channel delivers. `false` suspends delivery while keeping the channel and its subscriptions intact — the reversible alternative to deleting it.","default":true,"uniqueKey":"enabled","typeLabel":"boolean"},"email_address":{"oneOf":[{"type":"string","title":"Email Address","description":"Destination address for `type: email`. Any deliverable address — a team alias or a ticketing inbox, not necessarily a platform user. Validated and normalized; also the channel's natural identity, so reusing an address updates that channel. Forbidden on every other type.","example":"[email protected]","uniqueKey":"email_address.oneOf.0","typeLabel":"string"},{"type":"null","title":"Email Address","description":"Destination address for `type: email`. Any deliverable address — a team alias or a ticketing inbox, not necessarily a platform user. Validated and normalized; also the channel's natural identity, so reusing an address updates that channel. Forbidden on every other type.","example":"[email protected]","uniqueKey":"email_address.oneOf.1","typeLabel":"null"}],"uniqueKey":"email_address","typeLabel":"string | null"},"url":{"oneOf":[{"type":"string","title":"Url","description":"Destination endpoint for `type: webhook`. Must be `https` and must resolve to a public address — private, loopback, link-local, and cloud-metadata targets are rejected with a `422` naming the reason. Also the channel's natural identity. Forbidden on every other type.","example":"https://hooks.example.com/barndoor","uniqueKey":"url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Url","description":"Destination endpoint for `type: webhook`. Must be `https` and must resolve to a public address — private, loopback, link-local, and cloud-metadata targets are rejected with a `422` naming the reason. Also the channel's natural identity. Forbidden on every other type.","example":"https://hooks.example.com/barndoor","uniqueKey":"url.oneOf.1","typeLabel":"null"}],"uniqueKey":"url","typeLabel":"string | null"},"label":{"oneOf":[{"type":"string","title":"Label","description":"Human-readable name, shown wherever the channel is listed. Required for `slack` and `teams` (for `teams` it is the only non-secret identifier you get back). Forbidden on the other types.","example":"#security-alerts","uniqueKey":"label.oneOf.0","typeLabel":"string"},{"type":"null","title":"Label","description":"Human-readable name, shown wherever the channel is listed. Required for `slack` and `teams` (for `teams` it is the only non-secret identifier you get back). Forbidden on the other types.","example":"#security-alerts","uniqueKey":"label.oneOf.1","typeLabel":"null"}],"uniqueKey":"label","typeLabel":"string | null"},"slack_channel_id":{"oneOf":[{"type":"string","title":"Slack Channel Id","description":"Slack channel id (not its name) for `type: slack`; the organization's Slack app must already be installed. Also the channel's natural identity. Forbidden on every other type.","example":"C0123456789","uniqueKey":"slack_channel_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Slack Channel Id","description":"Slack channel id (not its name) for `type: slack`; the organization's Slack app must already be installed. Also the channel's natural identity. Forbidden on every other type.","example":"C0123456789","uniqueKey":"slack_channel_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"slack_channel_id","typeLabel":"string | null"},"teams_workflow_url":{"oneOf":[{"type":"string","title":"Teams Workflow Url","description":"Microsoft Teams Workflows incoming-webhook URL for `type: teams`. Write-only: it is stored as a secret and never returned by any endpoint — reads expose only `has_workflow_url`. Required on create, optional on edit-by-id (omit to keep the stored URL). Must be `https`, resolve to a public address, and sit on the Power Automate host allowlist. Forbidden on every other type.","uniqueKey":"teams_workflow_url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Teams Workflow Url","description":"Microsoft Teams Workflows incoming-webhook URL for `type: teams`. Write-only: it is stored as a secret and never returned by any endpoint — reads expose only `has_workflow_url`. Required on create, optional on edit-by-id (omit to keep the stored URL). Must be `https`, resolve to a public address, and sit on the Power Automate host allowlist. Forbidden on every other type.","uniqueKey":"teams_workflow_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"teams_workflow_url","typeLabel":"string | null"},"subscriptions":{"items":{"properties":{"alert_type":{"type":"string","enum":["llm_threshold_exceeded","connection_broken","mcp_server_added","mcp_server_deleted","policy_changed","policy_impact","admin_role_change","break_glass_used","llm_budget_exhausted","llm_provider_unavailable","llm_provider_key_rejected","api_key_revoked","llm_api_key_expiring","llm_api_key_expired","mcp_server_tooling_changed"],"title":"AlertType","description":"The alert type to deliver to this channel. Must be one of the values returned by `GET /public/v1/channels/options`; subscribing to a type your organization is not admitted to is accepted but inert.","examples":["mcp_server_added"],"isRequired":true,"uniqueKey":"subscriptions.items.[INDEX].alert_type","typeLabel":"enum\u003cstring>"}},"type":"object","required":["alert_type"],"title":"ChannelSubscriptionInput","description":"One alert type the channel matches on.\n\nNamed ``Channel``-first deliberately: these schemas are merged by name into the unified\npublic OpenAPI document (scripts/generate-public-openapi.py), where a bare\n``SubscriptionResponse`` collided with identity-service's *payment* subscription schema and\nsilently lost the tie. Keep the prefix. A channel receives an alert only if its\nsubscription set contains that alert's type — an empty set means the channel exists but\ndelivers nothing.","uniqueKey":"subscriptions.items.[INDEX]","typeLabel":"ChannelSubscriptionInput · object"},"type":"array","title":"Subscriptions","description":"The complete set of alert types to deliver to this channel. **Replaces** the channel's existing set — an omitted or empty list unsubscribes it from everything. At most one entry per alert type; duplicates are a `422`.","uniqueKey":"subscriptions","typeLabel":"ChannelSubscriptionInput · object[]"}},"type":"object","required":["type"],"title":"ChannelUpsertRequest","description":"Create or update one notification channel and replace its subscription set.\n\nThis is a full upsert, not a patch: ``subscriptions`` is **replaced** by what you send, so\nomitting it removes every subscription the channel had. Send the complete desired set on\nevery call — which is what makes the endpoint safe to drive from a declarative tool.\n\nWhich fields are permitted depends on ``type``; sending one that does not belong to the\ntype is a ``422``, not a silently ignored field. See ``ChannelType`` for the full matrix.\n\n| ``type`` | required | forbidden |\n|---|---|---|\n| ``in_app`` / ``user_email`` | — | every destination field |\n| ``email`` | ``email_address`` | ``url``, ``label``, ``slack_channel_id``, ``teams_workflow_url`` |\n| ``webhook`` | ``url`` | ``email_address``, ``label``, ``slack_channel_id``, ``teams_workflow_url`` |\n| ``slack`` | ``slack_channel_id``, ``label`` | ``email_address``, ``url``, ``teams_workflow_url`` |\n| ``teams`` | ``label`` (+ ``teams_workflow_url`` on create) | ``email_address``, ``url``, ``slack_channel_id`` |\n\n**Identity.** Without ``id`` the channel is keyed on its type's natural identity, so\nrepeating the same call is idempotent rather than creating duplicates: personal types by\n(organization, type, caller), ``email`` by (organization, ``email_address``), ``webhook`` by\n(organization, ``url``), ``slack`` by (organization, ``slack_channel_id``). With ``id`` it is\nan authoritative edit of that row — the only way to change a ``teams`` channel, whose\nnatural identity is a secret URL you never hold back.","examples":[{"enabled":true,"subscriptions":[{"alert_type":"break_glass_used"},{"alert_type":"policy_changed"}],"type":"webhook","url":"https://hooks.example.com/barndoor"},{"email_address":"[email protected]","subscriptions":[{"alert_type":"connection_broken"}],"type":"email"},{"enabled":false,"id":"3fa85f64-5717-4562-b3fc-2c963f66afa6","subscriptions":[{"alert_type":"break_glass_used"}],"type":"webhook","url":"https://hooks.example.com/barndoor"}],"uniqueKey":"","typeLabel":"ChannelUpsertRequest · object"},"examples":{"Example":{"title":"Example","value":{"enabled":true,"subscriptions":[{"alert_type":"break_glass_used"},{"alert_type":"policy_changed"}],"type":"webhook","url":"https://hooks.example.com/barndoor"}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"6d5fd579-4dd4-4822-995b-6ed6a96bb5b4":{"description":"Successful Response","content":{"application/json":{"schema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"Server-assigned channel id. Stable across updates; pass it as `id` to edit by id.","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"type":{"type":"string","enum":["in_app","user_email","email","webhook","slack","teams"],"title":"ChannelType","description":"The kind of destination. See `ChannelType`.","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"enabled":{"type":"boolean","title":"Enabled","description":"Whether the channel currently delivers.","isRequired":true,"uniqueKey":"enabled","typeLabel":"boolean"},"user_id":{"oneOf":[{"type":"string","title":"User Id","description":"Owning user for a personal channel (`in_app`, `user_email`). `null` for the org-wide types, which belong to the organization rather than one user.","format":"uuid","isRequired":true,"uniqueKey":"user_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","title":"User Id","description":"Owning user for a personal channel (`in_app`, `user_email`). `null` for the org-wide types, which belong to the organization rather than one user.","isRequired":true,"uniqueKey":"user_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"user_id","typeLabel":"string\u003cuuid> | null"},"email_address":{"oneOf":[{"type":"string","title":"Email Address","description":"Destination address for `type: email`, normalized. `null` for every other type.","isRequired":true,"uniqueKey":"email_address.oneOf.0","typeLabel":"string"},{"type":"null","title":"Email Address","description":"Destination address for `type: email`, normalized. `null` for every other type.","isRequired":true,"uniqueKey":"email_address.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"email_address","typeLabel":"string | null"},"url":{"oneOf":[{"type":"string","title":"Url","description":"Destination endpoint for `type: webhook`. `null` for every other type.","isRequired":true,"uniqueKey":"url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Url","description":"Destination endpoint for `type: webhook`. `null` for every other type.","isRequired":true,"uniqueKey":"url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"url","typeLabel":"string | null"},"label":{"oneOf":[{"type":"string","title":"Label","description":"Human-readable name, set for `slack` and `teams`. `null` for the other types.","isRequired":true,"uniqueKey":"label.oneOf.0","typeLabel":"string"},{"type":"null","title":"Label","description":"Human-readable name, set for `slack` and `teams`. `null` for the other types.","isRequired":true,"uniqueKey":"label.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"label","typeLabel":"string | null"},"slack_channel_id":{"oneOf":[{"type":"string","title":"Slack Channel Id","description":"Slack channel id for `type: slack`. `null` for every other type.","isRequired":true,"uniqueKey":"slack_channel_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Slack Channel Id","description":"Slack channel id for `type: slack`. `null` for every other type.","isRequired":true,"uniqueKey":"slack_channel_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"slack_channel_id","typeLabel":"string | null"},"subscriptions":{"items":{"properties":{"alert_type":{"type":"string","enum":["llm_threshold_exceeded","connection_broken","mcp_server_added","mcp_server_deleted","policy_changed","policy_impact","admin_role_change","break_glass_used","llm_budget_exhausted","llm_provider_unavailable","llm_provider_key_rejected","api_key_revoked","llm_api_key_expiring","llm_api_key_expired","mcp_server_tooling_changed"],"title":"AlertType","description":"The subscribed alert type.","isRequired":true,"uniqueKey":"subscriptions.items.[INDEX].alert_type","typeLabel":"enum\u003cstring>"}},"type":"object","required":["alert_type"],"title":"ChannelSubscription","description":"One alert type this channel is subscribed to.","uniqueKey":"subscriptions.items.[INDEX]","typeLabel":"ChannelSubscription · object"},"type":"array","title":"Subscriptions","description":"The alert types this channel currently delivers. Empty means it delivers nothing.","isRequired":true,"uniqueKey":"subscriptions","typeLabel":"ChannelSubscription · object[]"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the channel was created (UTC).","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"When the channel or its subscriptions last changed (UTC).","isRequired":true,"uniqueKey":"updated_at","typeLabel":"string\u003cdate-time>"},"has_signing_secret":{"type":"boolean","title":"Has Signing Secret","description":"Whether a `webhook` channel has a stored signing secret — always true for a webhook channel, false otherwise. The secret itself is never readable back; use `POST /channels/{channel_id}/regenerate-secret` to obtain a fresh one.","default":false,"uniqueKey":"has_signing_secret","typeLabel":"boolean"},"has_workflow_url":{"type":"boolean","title":"Has Workflow Url","description":"Whether a `teams` channel has a stored Workflows URL. The URL is a secret and is never returned; this flag is the only readable signal that one is configured.","default":false,"uniqueKey":"has_workflow_url","typeLabel":"boolean"},"signing_secret":{"oneOf":[{"type":"string","title":"Signing Secret","description":"One-time reveal of a newly generated webhook signing secret. Present **only** on the response to the request that created it — the `PUT` that first creates a `webhook` channel — and `null` on every list or subsequent read. Store it when you receive it; the only way to recover from losing it is to rotate.","uniqueKey":"signing_secret.oneOf.0","typeLabel":"string"},{"type":"null","title":"Signing Secret","description":"One-time reveal of a newly generated webhook signing secret. Present **only** on the response to the request that created it — the `PUT` that first creates a `webhook` channel — and `null` on every list or subsequent read. Store it when you receive it; the only way to recover from losing it is to rotate.","uniqueKey":"signing_secret.oneOf.1","typeLabel":"null"}],"uniqueKey":"signing_secret","typeLabel":"string | null"}},"type":"object","required":["id","type","enabled","user_id","email_address","url","label","slack_channel_id","subscriptions","created_at","updated_at"],"title":"ChannelResponse","description":"A channel and its subscriptions. Secrets (webhook signing secret, slack bot token) live\nin OpenBao and are never surfaced here except as a one-time reveal via ``signing_secret``,\npopulated only on the response to the request that just generated it (webhook create or\nregenerate); slack channels expose only the non-secret ``label`` + ``slack_channel_id``.","uniqueKey":"","typeLabel":"ChannelResponse · object"},"examples":{"Example":{"title":"Example","value":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","type":"in_app","enabled":true,"user_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","email_address":"\u003cstring>","url":"\u003cstring>","label":"\u003cstring>","slack_channel_id":"\u003cstring>","subscriptions":[{"alert_type":"llm_threshold_exceeded"}],"created_at":"2023-11-07T05:31:56Z","updated_at":"2023-11-07T05:31:56Z","has_signing_secret":false,"has_workflow_url":false,"signing_secret":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"edc16bf9-2c80-4514-8aab-0ff9cb72ac6a":{"description":"Missing, malformed, or expired bearer token.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"0d83e879-955d-433b-baf5-b14af9e8e785":{"description":"Authenticated, but not permitted to manage this channel.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"3637a17b-9887-4b99-bc5f-e26351fba735":{"description":"`id` was supplied but names no channel in the caller's organization.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"26e61901-679a-46b6-a09f-fa72fcb9f118":{"description":"The body violates the rules for its `type` — a missing or forbidden destination field, a duplicated `alert_type`, or a webhook/Teams URL rejected as non-`https` or resolving to a private address. The `detail` names the reason.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}}},"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."}}}},"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":"Create or update a notification channel - Barndoor Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-28T16:34:43.277Z","originalFileLocation":"api-reference/notification/create-or-update-a-notification-channel.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=\"Upserts one channel and replaces its subscription set. Without id, the channel is keyed on its type\u0026#x27;s natural identity, so an identical call is idempotent rather than duplicating: email by address, webhook by URL, slack by channel id, personal types by (organization, type, caller). With id it is an authoritative edit of that row — the only way to update a teams channel, whose natural identity is a secret URL. subscriptions is replaced wholesale, not merged: send the complete desired set, and expect an omitted list to unsubscribe the channel from everything. Creating a webhook channel reveals its signing secret in signing_secret ONCE; it is not readable afterwards. The secret is only generated when the row is new, so a retried create that lands after the first succeeded returns signing_secret: null. If you need a secret and got null, call POST /channels/{channel_id}/regenerate-secret.\">\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=\"Create or update a notification channel - Barndoor Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Upserts one channel and replaces its subscription set. Without id, the channel is keyed on its type\u0026#x27;s natural identity, so an identical call is idempotent rather than duplicating: email by address, webhook by URL, slack by channel id, personal types by (organization, type, caller). With id it is an authoritative edit of that row — the only way to update a teams channel, whose natural identity is a secret URL. subscriptions is replaced wholesale, not merged: send the complete desired set, and expect an omitted list to unsubscribe the channel from everything. Creating a webhook channel reveals its signing secret in signing_secret ONCE; it is not readable afterwards. The secret is only generated when the row is new, so a retried create that lands after the first succeeded returns signing_secret: null. If you need a secret and got null, call POST /channels/{channel_id}/regenerate-secret.\">\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/notification/create-or-update-a-notification-channel\">\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=Notifications\u0026amp;title=Create+or+update+a+notification+channel\u0026amp;description=Upserts+one+channel+and+**replaces**+its+subscription+set.%0A%0AWithout+%60id%60%2C+the+channel+is+keyed+on+its+type%27s+natural+identity%2C+so+an+identical+call+is+idempoten\u0026amp;theme=bc5db53da504f4bb841cf86c\u0026amp;signature=87c20ba298535298b15c05950f3e78fcf824a693bdf3b41c3ccf9ff1c9b3108c\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Create or update a notification channel - Barndoor Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Upserts one channel and replaces its subscription set. Without id, the channel is keyed on its type\u0026#x27;s natural identity, so an identical call is idempotent rather than duplicating: email by address, webhook by URL, slack by channel id, personal types by (organization, type, caller). With id it is an authoritative edit of that row — the only way to update a teams channel, whose natural identity is a secret URL. subscriptions is replaced wholesale, not merged: send the complete desired set, and expect an omitted list to unsubscribe the channel from everything. Creating a webhook channel reveals its signing secret in signing_secret ONCE; it is not readable afterwards. The secret is only generated when the row is new, so a retried create that lands after the first succeeded returns signing_secret: null. If you need a secret and got null, call POST /channels/{channel_id}/regenerate-secret.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://barndoor.mintlify.app/_mintlify/api/og/v2?division=Notifications\u0026amp;title=Create+or+update+a+notification+channel\u0026amp;description=Upserts+one+channel+and+**replaces**+its+subscription+set.%0A%0AWithout+%60id%60%2C+the+channel+is+keyed+on+its+type%27s+natural+identity%2C+so+an+identical+call+is+idempoten\u0026amp;theme=bc5db53da504f4bb841cf86c\u0026amp;signature=87c20ba298535298b15c05950f3e78fcf824a693bdf3b41c3ccf9ff1c9b3108c\">\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/notification/create-or-update-a-notification-channel\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/notification/create-or-update-a-notification-channel.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/notification/create-or-update-a-notification-channel#webpage\",\"url\":\"https://docs.barndoor.ai/api-reference/notification/create-or-update-a-notification-channel\",\"name\":\"Create or update a notification channel\",\"description\":\"Upserts one channel and replaces its subscription set. Without id, the channel is keyed on its type's natural identity, so an identical call is idempotent rather than duplicating: email by address, webhook by URL, slack by channel id, personal types by (organization, type, caller). With id it is an authoritative edit of that row — the only way to update a teams channel, whose natural identity is a secret URL. subscriptions is replaced wholesale, not merged: send the complete desired set, and expect an omitted list to unsubscribe the channel from everything. Creating a webhook channel reveals its signing secret in signing_secret ONCE; it is not readable afterwards. The secret is only generated when the row is new, so a retried create that lands after the first succeeded returns signing_secret: null. If you need a secret and got null, call POST /channels/{channel_id}/regenerate-secret.\",\"dateModified\":\"2026-10-28T16:34:43.277Z\",\"isPartOf\":{\"@id\":\"https://docs.barndoor.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.barndoor.ai/api-reference/notification/create-or-update-a-notification-channel#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.barndoor.ai/api-reference/notification/create-or-update-a-notification-channel#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Notifications\",\"item\":\"https://docs.barndoor.ai/api-reference/notification/list-the-subscribable-alert-vocabulary\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create or update a notification channel\",\"item\":\"https://docs.barndoor.ai/api-reference/notification/create-or-update-a-notification-channel\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.barndoor.ai/api-reference/notification/create-or-update-a-notification-channel#apireference\",\"headline\":\"Create or update a notification channel\",\"name\":\"Create or update a notification channel\",\"description\":\"Upserts one channel and replaces its subscription set. Without id, the channel is keyed on its type's natural identity, so an identical call is idempotent rather than duplicating: email by address, webhook by URL, slack by channel id, personal types by (organization, type, caller). With id it is an authoritative edit of that row — the only way to update a teams channel, whose natural identity is a secret URL. subscriptions is replaced wholesale, not merged: send the complete desired set, and expect an omitted list to unsubscribe the channel from everything. Creating a webhook channel reveals its signing secret in signing_secret ONCE; it is not readable afterwards. The secret is only generated when the row is new, so a retried create that lands after the first succeeded returns signing_secret: null. If you need a secret and got null, call POST /channels/{channel_id}/regenerate-secret.\",\"url\":\"https://docs.barndoor.ai/api-reference/notification/create-or-update-a-notification-channel\",\"mainEntityOfPage\":{\"@id\":\"https://docs.barndoor.ai/api-reference/notification/create-or-update-a-notification-channel#webpage\"},\"dateModified\":\"2026-10-28T16:34:43.277Z\",\"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","description":"Returns the organization's org-wide channels — `email`, `webhook`, `slack`, `teams` — with their current subscription sets. Personal channels are not included here; read those from `/channels/user`. Unpaginated. Secrets are never returned: a webhook's signing secret and a Teams workflow URL surface only as the `has_signing_secret` / `has_workflow_url` flags.","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","description":"Returns the authenticated caller's own `in_app` and `user_email` channels. Always self-scoped — there is no way to read another user's personal channels, and no user parameter to pass.","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","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policies/{policy_id}","href":"/api-reference/policy/get-policy"},{"title":"Update Policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /api/policy/v2/policies/{policy_id}","href":"/api-reference/policy/update-policy"},{"title":"Clone Policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/policy/v2/policies/{policy_id}/clone","href":"/api-reference/policy/clone-policy"},{"title":"List Policy Revisions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policies/{policy_id}/revisions","href":"/api-reference/policy/list-policy-revisions"},{"title":"Compare Policy Revisions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policies/{policy_id}/revisions/compare","href":"/api-reference/policy/compare-policy-revisions"},{"title":"Get Policy Revision","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policies/{policy_id}/revisions/{revision_id}","href":"/api-reference/policy/get-policy-revision"},{"title":"List Server Policy Revisions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policy-revisions","href":"/api-reference/policy/list-server-policy-revisions"},{"title":"List Policy Impacts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policy-impacts","href":"/api-reference/policy/list-policy-impacts"},{"title":"Get Policy Impacts Summary","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policy-impacts/summary","href":"/api-reference/policy/get-policy-impacts-summary"},{"title":"Get Policy Impacts Summary By Kind","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policy-impacts/summary/by-kind","href":"/api-reference/policy/get-policy-impacts-summary-by-kind"},{"title":"List Impacts For Policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/policy/v2/policies/{policy_id}/impacts","href":"/api-reference/policy/list-impacts-for-policy"},{"title":"Acknowledge Policy Impact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/policy/v2/policies/{policy_id}/impacts/{impact_id}/acknowledge","href":"/api-reference/policy/acknowledge-policy-impact"}]},{"group":"MCP Gateway","pages":[{"title":"Get Mcp Servers","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/servers","href":"/api-reference/registry/get-mcp-servers"},{"title":"Get Active Server Ids","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/servers/active-ids","href":"/api-reference/registry/get-active-server-ids"},{"title":"Get Mcp Server","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/servers/{server_id}","href":"/api-reference/registry/get-mcp-server"},{"title":"Get Mcp Server By Slug","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/servers/by-slug/{slug}","href":"/api-reference/registry/get-mcp-server-by-slug"},{"title":"Publish Mcp Server","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/registry/v1/servers/{server_id}/publish","href":"/api-reference/registry/publish-mcp-server"},{"title":"Authenticate an already-registered server","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/registry/v1/servers/{server_id}/connect","href":"/api-reference/registry/authenticate-an-already-registered-server"},{"title":"Get Connection","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/servers/{server_id}/connection","href":"/api-reference/registry/get-connection"},{"title":"Delete Connection","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/registry/v1/servers/{server_id}/connection","href":"/api-reference/registry/delete-connection"},{"title":"Report Connection Auth Error","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/registry/v1/servers/{server_id}/connection/auth-error","href":"/api-reference/registry/report-connection-auth-error"},{"title":"List Applications","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/agents","href":"/api-reference/registry/list-applications"},{"title":"Register Application","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/registry/v1/agents","href":"/api-reference/registry/register-application"},{"title":"Get Application Counts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/agents/counts","href":"/api-reference/registry/get-application-counts"},{"title":"Get Active Application Ids","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/applications/active-ids","href":"/api-reference/registry/get-active-application-ids"},{"title":"Get Application","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/agents/{application_id}","href":"/api-reference/registry/get-application"},{"title":"Unregister Application","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/registry/v1/agents/{application_id}","href":"/api-reference/registry/unregister-application"},{"title":"Update Application Write Confirmations","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /api/registry/v1/agents/{application_id}/write-confirmations","href":"/api-reference/registry/update-application-write-confirmations"},{"title":"Update Application Llm Gateway","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /api/registry/v1/agents/{application_id}/llm-gateway","href":"/api-reference/registry/update-application-llm-gateway"},{"title":"List Server Directory","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/server-directory","href":"/api-reference/registry/list-server-directory"},{"title":"Get Active Server Directory Ids","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/server-directory/active-ids","href":"/api-reference/registry/get-active-server-directory-ids"},{"title":"Get Server Directory","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/server-directory/{server_directory_id}","href":"/api-reference/registry/get-server-directory"},{"title":"List Applications Directory","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/agent-directory","href":"/api-reference/registry/list-applications-directory"},{"title":"Get Application Directory","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/registry/v1/agent-directory/{application_directory_id}","href":"/api-reference/registry/get-application-directory"}]},{"group":"Log Exports","pages":[{"title":"List an organization's audit log exports","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/system-management/public/v1/exports/{orgId}","href":"/api-reference/system-management/list-an-organizations-audit-log-exports"},{"title":"Get one audit log export","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/system-management/public/v1/exports/{orgId}/{exportType}","href":"/api-reference/system-management/get-one-audit-log-export"},{"title":"Get an export's delivery destination","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/system-management/public/v1/exports/{orgId}/{exportType}/destination","href":"/api-reference/system-management/get-an-exports-delivery-destination"},{"title":"Configure an export's delivery destination","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /api/system-management/public/v1/exports/{orgId}/{exportType}/destination","href":"/api-reference/system-management/configure-an-exports-delivery-destination"},{"title":"Clear an export's delivery destination and its stored credentials","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/system-management/public/v1/exports/{orgId}/{exportType}/destination","href":"/api-reference/system-management/clear-an-exports-delivery-destination-and-its-stored-credentials"},{"title":"Get the AWS principal and external ID to trust for iam_role auth","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/system-management/public/v1/exports/{orgId}/{exportType}/destination/aws-trust-info","href":"/api-reference/system-management/get-the-aws-principal-and-external-id-to-trust-for-iam_role-auth"},{"title":"Probe an export's destination and persist the result","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/system-management/public/v1/exports/{orgId}/{exportType}/destination/health-check","href":"/api-reference/system-management/probe-an-exports-destination-and-persist-the-result"},{"title":"Disable an export and stop delivery","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/system-management/public/v1/exports/{orgId}/{exportType}/pause","href":"/api-reference/system-management/disable-an-export-and-stop-delivery"},{"title":"Update an export's delivery settings","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /api/system-management/public/v1/exports/{orgId}/{exportType}/settings","href":"/api-reference/system-management/update-an-exports-delivery-settings"},{"title":"Enable an export and resume delivery","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/system-management/public/v1/exports/{orgId}/{exportType}/start","href":"/api-reference/system-management/enable-an-export-and-resume-delivery"}]}]},{"tab":"Terraform","pages":[{"title":"Terraform","href":"/terraform"}]},{"tab":"SDKs","pages":[{"title":"SDKs","href":"/sdks/introduction"}]},{"tab":"MCP Servers","pages":[{"title":"MCP Servers","href":"/mcp-servers"}]}]},"title":"Create or update a notification channel - 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"]}