Keep Praxa credentials, scopes, workspaces, subjects, provider clients, and effect authority in their documented boundaries.
Keep credentials inside their owning surface. Execution Fabric uses a
personal workspace API key. Integration Gateway calls use a short-lived
delegated OAuth token. Memory federation receives provider clients that your
backend already owns. None of these credentials are interchangeable.
Organization request carrying a personal-only memory scope
Caller-supplied owner or tenant field
Redirect or proxy attempt outside the allowed upstream origin
Last modified on August 14, 2026
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Praxa","description":"Build governed AI agents with Praxa APIs, SDKs, CLI tools, MCP contracts, durable missions, webhooks, memory federation, tutorials, and benchmarks.","colors":{"primary":"#909090","light":"#dddddd","dark":"#1d1d1d"},"logo":{"light":"https://mintcdn.com/praxa-ai/A7sq1R7I_fyz1Wjb/logo-light.svg?fit=max\u0026auto=format\u0026n=A7sq1R7I_fyz1Wjb\u0026q=85\u0026s=00ae74f5749278ab3f33ae0e0d93c0ad","dark":"https://mintcdn.com/praxa-ai/A7sq1R7I_fyz1Wjb/logo-dark.svg?fit=max\u0026auto=format\u0026n=A7sq1R7I_fyz1Wjb\u0026q=85\u0026s=7be26e1381dab8298e115bf27b0c9336","href":"https://praxa.io"},"favicon":"https://mintcdn.com/praxa-ai/A7sq1R7I_fyz1Wjb/app-icon.png?fit=max\u0026auto=format\u0026n=A7sq1R7I_fyz1Wjb\u0026q=85\u0026s=24ed405581da511b0407be4f84a00f20","api":{"openapi":["fabric/api/openapi.yaml","memory-federation/openapi.yaml"],"playground":{"display":"interactive","proxy":true},"examples":{"defaults":"required","languages":["curl","javascript","python"]},"mdx":{"auth":{"method":"bearer"},"server":"https://api.praxa.io"}},"navbar":{"primary":{"type":"github","href":"https://github.com/praxa-labs/praxa"}},"search":{"prompt":"Search Praxa APIs, SDK, CLI, MCP, memory, tutorials, and benchmarks"},"seo":{"metatags":{"og:site_name":"Praxa Developer Documentation","twitter:card":"summary_large_image"},"indexing":"navigable"},"metadata":{"timestamp":true},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"praxa-ai","hasAudioNarration":false,"actualSubdomain":"praxa-ai","customDomains":["docs.praxa.io"],"gitSource":{"type":"github","owner":"praxa-labs","repo":"praxa-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6a7f5f274ee23a3639404e9d","collectionId":"1eb23b8a-ca39-4a6b-896f-c127a0f4aff6","liveDeploymentHistoryId":"6a7f5f274ee23a3639404e9d","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6a7f5f274ee23a3639404e9d:success","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"Overview","count":82},{"language":"default","tag":"Execution Fabric","count":37},{"language":"default","tag":"Tutorials","count":29},{"language":"default","tag":"API Playground","count":19},{"language":"default","tag":"SDK","count":16},{"language":"default","tag":"API Reference","count":15},{"language":"default","tag":"Use cases","count":12},{"language":"default","tag":"Web and server frameworks","count":12},{"language":"default","tag":"Benchmarks \u0026 Research","count":11},{"language":"default","tag":"Product guides","count":11}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"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":"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":"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":"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":"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":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","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":"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":"turbopuffer-dual-write","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},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"operations/security-and-tenancy","slug":"/operations/security-and-tenancy","pageMetadata":{"title":"Security and tenancy","sidebarTitle":"Security and tenancy","description":"Keep Praxa credentials, scopes, workspaces, subjects, provider clients, and effect authority in their documented boundaries.","keywords":["Praxa Security and tenancy","Praxa operations","AI agent observability","production readiness"],"href":"/operations/security-and-tenancy"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Keep Praxa credentials, scopes, workspaces, subjects, provider clients, and effect authority in their documented boundaries.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={li:`li`,p:`p`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Mermaid,Table,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Warning,{children:_jsx(_components.p,{children:`Keep credentials inside their owning surface. Execution Fabric uses a\npersonal workspace API key. Integration Gateway calls use a short-lived\ndelegated OAuth token. Memory federation receives provider clients that your\nbackend already owns. None of these credentials are interchangeable.`})}),`\n`,_jsx(Mermaid,{chart:`flowchart TD\n User[\"Authenticated owner\"] --> Console[\"Developer Platform console\"]\n Console --> Key[\"Personal workspace API key\"]\n Key --> Fabric[\"Execution Fabric and hosted candidates\"]\n App[\"Your backend\"] --> OAuth[\"Delegated OAuth token\"]\n OAuth --> Gateway[\"Your Integration Gateway\"]\n App --> Provider[\"Caller-owned memory provider client\"]\n Provider --> Federation[\"Read-only memory federation\"]\n Key -. never becomes .-> OAuth\n Provider -. never enters .-> Fabric`}),`\n`,_jsx(Heading,{level:`2`,id:`boundary-checklist`,children:`Boundary checklist`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Boundary`}),_jsx(_components.th,{children:`Required behavior`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Browser versus backend`}),_jsx(_components.td,{children:`Keep API keys, OAuth tokens, and provider credentials out of browser bundles and browser-visible JSON.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Personal versus organization`}),_jsx(_components.td,{children:`Use the workspace authority returned by the server. Do not silently fall back from an unavailable organization to personal mutations.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Subject`}),_jsx(_components.td,{children:`Derive or validate the subject according to the selected contract; do not broaden a query because a caller supplied another identifier.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Scope`}),_jsx(_components.td,{children:`Request only the named operation scopes. A scope authorizes Praxa policy evaluation, not every provider-side effect.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Provider`}),_jsx(_components.td,{children:`A connected provider client keeps its own permissions and data ownership.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Approval`}),_jsx(_components.td,{children:`Bind approval to the exact action, target, run, and current authority state.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`negative-tests`,children:`Negative tests`}),`\n`,_jsx(_components.p,{children:`Run at least these tests before release:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`No credential`}),`\n`,_jsx(_components.li,{children:`Malformed credential`}),`\n`,_jsx(_components.li,{children:`Expired or revoked credential`}),`\n`,_jsx(_components.li,{children:`Correct credential with the wrong scope`}),`\n`,_jsx(_components.li,{children:`Valid identifier from another tenant`}),`\n`,_jsx(_components.li,{children:`Valid tenant with another subject`}),`\n`,_jsx(_components.li,{children:`Organization request carrying a personal-only memory scope`}),`\n`,_jsx(_components.li,{children:`Caller-supplied owner or tenant field`}),`\n`,_jsx(_components.li,{children:`Redirect or proxy attempt outside the allowed upstream origin`}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Security and tenancy","sidebarTitle":"Security and tenancy","description":"Keep Praxa credentials, scopes, workspaces, subjects, provider clients, and effect authority in their documented boundaries.","keywords":["Praxa Security and tenancy","Praxa operations","AI agent observability","production readiness"],"href":"/operations/security-and-tenancy"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Boundary checklist","slug":"boundary-checklist","depth":2,"children":[]},{"title":"Negative tests","slug":"negative-tests","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"praxa-ai","siteName":"Praxa","title":"Security and tenancy - Praxa","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-14T07:27:20.486Z","gitLastModified":"2026-08-14T09:14:00.000Z","originalFileLocation":"operations/security-and-tenancy.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Keep Praxa credentials, scopes, workspaces, subjects, provider clients, and effect authority in their documented boundaries.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Praxa\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/praxa-ai/WolJUpkJ-x7JoGAk/_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/praxa-ai/WolJUpkJ-x7JoGAk/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/praxa-ai/WolJUpkJ-x7JoGAk/_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/praxa-ai/WolJUpkJ-x7JoGAk/_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/praxa-ai/WolJUpkJ-x7JoGAk/_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/praxa-ai/WolJUpkJ-x7JoGAk/_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/praxa-ai/WolJUpkJ-x7JoGAk/_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/praxa-ai/WolJUpkJ-x7JoGAk/_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/praxa-ai/WolJUpkJ-x7JoGAk/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Security and tenancy - Praxa\">\u003cmeta data-mint-head property=\"og:description\" content=\"Keep Praxa credentials, scopes, workspaces, subjects, provider clients, and effect authority in their documented boundaries.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Praxa Developer Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.praxa.io/operations/security-and-tenancy\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://praxa-ai.mintlify.app/_mintlify/api/og/v2?division=Operations\u0026amp;title=Security+and+tenancy\u0026amp;description=Keep+Praxa+credentials%2C+scopes%2C+workspaces%2C+subjects%2C+provider+clients%2C+and+effect+authority+in+their+documented+boundaries.\u0026amp;theme=11c08bf52210bcaea5147dfc\u0026amp;signature=fdf25310dd7181dd43c1ab08b29a1399dd6f0913336fd507fb4977ae198e14ae\">\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=\"Security and tenancy - Praxa\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Keep Praxa credentials, scopes, workspaces, subjects, provider clients, and effect authority in their documented boundaries.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://praxa-ai.mintlify.app/_mintlify/api/og/v2?division=Operations\u0026amp;title=Security+and+tenancy\u0026amp;description=Keep+Praxa+credentials%2C+scopes%2C+workspaces%2C+subjects%2C+provider+clients%2C+and+effect+authority+in+their+documented+boundaries.\u0026amp;theme=11c08bf52210bcaea5147dfc\u0026amp;signature=fdf25310dd7181dd43c1ab08b29a1399dd6f0913336fd507fb4977ae198e14ae\">\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/praxa-ai/WolJUpkJ-x7JoGAk/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Praxa\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#909090\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.praxa.io/operations/security-and-tenancy\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/operations/security-and-tenancy.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.praxa.io/#organization\",\"name\":\"Praxa\",\"url\":\"https://docs.praxa.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/praxa-ai/A7sq1R7I_fyz1Wjb/logo-light.svg?fit=max\u0026auto=format\u0026n=A7sq1R7I_fyz1Wjb\u0026q=85\u0026s=00ae74f5749278ab3f33ae0e0d93c0ad\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.praxa.io#website\",\"name\":\"Praxa\",\"url\":\"https://docs.praxa.io\",\"publisher\":{\"@id\":\"https://docs.praxa.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.praxa.io/operations/security-and-tenancy#webpage\",\"url\":\"https://docs.praxa.io/operations/security-and-tenancy\",\"name\":\"Security and tenancy\",\"description\":\"Keep Praxa credentials, scopes, workspaces, subjects, provider clients, and effect authority in their documented boundaries.\",\"dateModified\":\"2026-08-14T09:14:00.000Z\",\"isPartOf\":{\"@id\":\"https://docs.praxa.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.praxa.io/operations/security-and-tenancy#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.praxa.io/operations/security-and-tenancy#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Operations\",\"item\":\"https://docs.praxa.io/operations/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Security and tenancy\",\"item\":\"https://docs.praxa.io/operations/security-and-tenancy\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.praxa.io/operations/security-and-tenancy#article\",\"headline\":\"Security and tenancy\",\"name\":\"Security and tenancy\",\"description\":\"Keep Praxa credentials, scopes, workspaces, subjects, provider clients, and effect authority in their documented boundaries.\",\"url\":\"https://docs.praxa.io/operations/security-and-tenancy\",\"mainEntityOfPage\":{\"@id\":\"https://docs.praxa.io/operations/security-and-tenancy#webpage\"},\"dateModified\":\"2026-08-14T09:14:00.000Z\",\"keywords\":\"Praxa Security and tenancy, Praxa operations, AI agent observability, production readiness\",\"publisher\":{\"@id\":\"https://docs.praxa.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.praxa.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Praxa\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Praxa","nav":{"global":null,"tabs":[{"tab":"Overview","groups":[{"group":"Get started","pages":[{"title":"Praxa developer documentation","sidebarTitle":"Overview","href":""},{"title":"What is Praxa?","sidebarTitle":"Introduction","href":"/introduction"},{"title":"Choose your Praxa path","sidebarTitle":"Choose your path","href":"/overview/choose-your-path"},{"title":"Praxa Capability Atlas","sidebarTitle":"Capability Atlas","href":"/overview/capabilities"},{"title":"Service status and proof boundaries","sidebarTitle":"Service status","href":"/overview/service-status"},{"title":"Runnable examples","sidebarTitle":"Examples","href":"/overview/examples"},{"title":"Use Praxa documentation with LLMs and AI search","sidebarTitle":"AI and LLM access","href":"/overview/ai-and-llm-discovery"},{"title":"Mission SDK quickstart","sidebarTitle":"Mission quickstart","href":"/quickstart"},{"title":"Authenticate with the Praxa Integration Gateway API","sidebarTitle":"Authentication","href":"/authentication"}]},{"group":"Core Concepts","pages":[{"title":"Understanding Praxa Missions: Goals, Steps, and Lifecycle","sidebarTitle":"Missions","href":"/concepts/missions"},{"title":"Resource Budgets: Cap Steps, Time, and Parallelism","sidebarTitle":"Resource Budgets","href":"/concepts/resource-budgets"},{"title":"Capabilities: Discover What Your Praxa Agent Can Do","sidebarTitle":"Capabilities","href":"/concepts/capabilities"},{"title":"Memory, Context, and World Model in Praxa Missions","sidebarTitle":"Memory \u0026 Context","href":"/concepts/memory-and-context"}]},{"group":"Use cases","root":{"title":"Praxa use cases","sidebarTitle":"Use cases overview","href":"/use-cases/overview"},"pages":[{"title":"Automate Recurring Tasks with Praxa Agent Missions","sidebarTitle":"Task Automation","href":"/use-cases/task-automation"},{"title":"Build Multi-Step AI Agent Workflows with Praxa Missions","sidebarTitle":"Multi-Step Workflows","href":"/use-cases/multi-step-workflows"},{"title":"Integrate Praxa Capabilities with MCP-Compatible Agents","sidebarTitle":"MCP Integration","href":"/use-cases/mcp-integration"},{"title":"Memory federation use cases","sidebarTitle":"Memory federation","href":"/use-cases/memory-federation"},{"title":"Monitor and Observe Your Praxa Agent Missions in Real Time","sidebarTitle":"Observability","href":"/use-cases/monitoring-and-observability"},{"title":"Build a governed agent backend","sidebarTitle":"Governed agent backend","href":"/use-cases/governed-agent-backend"},{"title":"Build event-driven automation","sidebarTitle":"Event-driven automation","href":"/use-cases/event-driven-automation"},{"title":"Add Praxa to an agent framework","sidebarTitle":"Agent frameworks","href":"/use-cases/agent-frameworks"},{"title":"Design with Praxa product capabilities","sidebarTitle":"Product capabilities","href":"/use-cases/product-capabilities"}]},{"group":"Product guides","root":{"title":"Praxa product guides","sidebarTitle":"Product guides","href":"/product-guides/overview"},"pages":[{"title":"Core chat and AI pipeline","sidebarTitle":"Core chat and AI pipeline","href":"/product-guides/chat-and-models"},{"title":"Agent runtimes and surfaces","sidebarTitle":"Agent runtimes and surfaces","href":"/product-guides/runtimes-and-surfaces"},{"title":"Memory and personalization","sidebarTitle":"Memory and personalization","href":"/product-guides/memory-and-personalization"},{"title":"Research, documents, and media","sidebarTitle":"Research, documents, and media","href":"/product-guides/research-documents-and-media"},{"title":"Browser and computer automation","sidebarTitle":"Browser and computer automation","href":"/product-guides/browser-and-computer"},{"title":"Commerce and real-world actions","sidebarTitle":"Commerce and real-world actions","href":"/product-guides/commerce-and-actions"},{"title":"Communication and inboxes","sidebarTitle":"Communication and inboxes","href":"/product-guides/communication-and-inboxes"},{"title":"Automations and proactive agent","sidebarTitle":"Automations and proactive agent","href":"/product-guides/automations-and-plans"},{"title":"Custom agents and multi-agent","sidebarTitle":"Custom agents and multi-agent","href":"/product-guides/custom-and-multi-agent"},{"title":"Teams, organizations, and social","sidebarTitle":"Teams, organizations, and social","href":"/product-guides/teams-organizations-and-social"},{"title":"Device and context","sidebarTitle":"Device and context","href":"/product-guides/device-and-context"}]},{"group":"Tutorials","root":{"title":"Praxa integration tutorials","sidebarTitle":"Tutorials overview","href":"/tutorials/overview"},"pages":[{"title":"Choose a Praxa framework integration","sidebarTitle":"Framework matrix","href":"/tutorials/framework-matrix"},{"group":"Core workflows","pages":[{"title":"Run and verify a durable task","sidebarTitle":"Durable tasks","href":"/tutorials/durable-tasks"},{"title":"Run a governed mission lifecycle","sidebarTitle":"Mission lifecycle","href":"/tutorials/mission-lifecycle"},{"title":"Federate and test existing memory","sidebarTitle":"Memory federation","href":"/tutorials/memory-federation"},{"title":"Test hosted memory candidates","sidebarTitle":"Hosted memory candidates","href":"/tutorials/hosted-memory-candidates"},{"title":"Add Praxa tools to an agent","sidebarTitle":"MCP tools","href":"/tutorials/mcp-tools"},{"title":"Receive and test signed webhooks","sidebarTitle":"Webhooks","href":"/tutorials/webhooks"},{"title":"Observe runs, usage, and governance evidence","sidebarTitle":"Observability","href":"/tutorials/observability"}]},{"group":"Web and server frameworks","pages":[{"title":"Integrate Praxa from your backend framework","sidebarTitle":"Framework backends","href":"/tutorials/framework-backends"},{"title":"Integrate Praxa with TypeScript","sidebarTitle":"TypeScript \u0026 Node.js","href":"/tutorials/typescript"},{"title":"Build a Praxa backend with Next.js","sidebarTitle":"Next.js","href":"/tutorials/nextjs"},{"title":"Build a Praxa backend with Nuxt","sidebarTitle":"Nuxt","href":"/tutorials/nuxt"},{"title":"Build a Praxa backend with Express","sidebarTitle":"Express","href":"/tutorials/express"},{"title":"Build a Praxa edge backend with Cloudflare Workers","sidebarTitle":"Cloudflare Workers","href":"/tutorials/cloudflare-workers"},{"title":"Integrate Praxa with Python","sidebarTitle":"Python","href":"/tutorials/python"},{"title":"Build a Praxa backend with FastAPI","sidebarTitle":"FastAPI","href":"/tutorials/fastapi"},{"title":"Build a Praxa backend with Rust","sidebarTitle":"Rust","href":"/tutorials/rust"},{"title":"Build a Praxa backend with Go","sidebarTitle":"Go","href":"/tutorials/go"},{"title":"Build a Praxa backend with Java and Spring","sidebarTitle":"Java \u0026 Spring","href":"/tutorials/java-spring"},{"title":"Build a Praxa backend with .NET","sidebarTitle":".NET","href":"/tutorials/dotnet"}]},{"group":"Mobile frameworks","pages":[{"title":"Use Praxa from React Native and Expo","sidebarTitle":"React Native \u0026 Expo","href":"/tutorials/react-native"},{"title":"Use Praxa from SwiftUI","sidebarTitle":"SwiftUI","href":"/tutorials/swiftui"},{"title":"Use Praxa from Kotlin and Android","sidebarTitle":"Kotlin \u0026 Android","href":"/tutorials/kotlin"}]},{"group":"Agent frameworks","pages":[{"title":"Add Praxa tools to Vercel AI SDK","sidebarTitle":"Vercel AI SDK","href":"/tutorials/vercel-ai-sdk"},{"title":"Use Praxa with OpenAI Agents","sidebarTitle":"OpenAI Agents","href":"/tutorials/openai-agents"},{"title":"Federate LangGraph long-term memory","sidebarTitle":"LangGraph","href":"/tutorials/langgraph"},{"title":"Choose an agent-framework integration","sidebarTitle":"Agent frameworks","href":"/tutorials/agent-frameworks"}]},{"group":"Reliability and testing","pages":[{"title":"Build a resilient event consumer","sidebarTitle":"Resilient events","href":"/tutorials/resilient-events"},{"title":"Test a Praxa integration end to end","sidebarTitle":"Test your integration","href":"/tutorials/test-your-integration"}]}]},{"group":"Memory federation","root":{"title":"Memory Federation","sidebarTitle":"Overview","href":"/memory-federation/overview"},"pages":[{"title":"Provider semantics","sidebarTitle":"Concepts \u0026 providers","href":"/memory-federation/concepts"},{"title":"Security and data boundaries","sidebarTitle":"Security","href":"/memory-federation/security"},{"title":"Memory federation SDK","sidebarTitle":"SDK","href":"/memory-federation/sdk"},{"title":"Memory CLI setup","sidebarTitle":"CLI","href":"/memory-federation/cli"},{"title":"Hosted candidate API","sidebarTitle":"API candidate plane","href":"/memory-federation/api"}]},{"group":"Operations","root":{"title":"Operate Praxa in production","sidebarTitle":"Operations overview","description":"Prepare authentication, tenancy, observability, recovery, versioning, and cleanup before a Praxa integration handles real work.","href":"/operations/overview"},"pages":[{"title":"Security and tenancy","sidebarTitle":"Security and tenancy","href":"/operations/security-and-tenancy"},{"title":"Production observability","sidebarTitle":"Observability","description":"Correlate Praxa requests, runs, events, webhooks, usage, and terminal readback without mistaking admission for completion.","href":"/operations/observability"},{"title":"Production readiness checklist","sidebarTitle":"Production checklist","href":"/operations/production-checklist"}]},{"group":"Troubleshooting","root":{"title":"Troubleshooting Praxa integrations","sidebarTitle":"Troubleshooting","href":"/troubleshooting/overview"},"pages":[{"title":"Authentication and scope failures","sidebarTitle":"Authentication and scopes","href":"/troubleshooting/authentication-and-scopes"},{"title":"Idempotency and retry failures","sidebarTitle":"Idempotency and retries","href":"/troubleshooting/idempotency-and-retries"},{"title":"Event and webhook failures","sidebarTitle":"Events and webhooks","href":"/troubleshooting/events-and-webhooks"},{"title":"Memory troubleshooting","sidebarTitle":"Memory","href":"/troubleshooting/memory"}]},{"group":"Releases","pages":[{"title":"Version compatibility","sidebarTitle":"Compatibility","href":"/releases/compatibility"},{"title":"Migration guide","sidebarTitle":"Migration guide","href":"/releases/migration-guide"},{"title":"Deprecation policy","sidebarTitle":"Deprecation policy","href":"/releases/deprecation-policy"},{"title":"Developer changelog","sidebarTitle":"Changelog","href":"/releases/changelog"}]}]},{"tab":"Execution Fabric","pages":[{"title":"Execution Fabric","href":"/fabric"}]},{"tab":"SDK","pages":[{"title":"SDK","href":"/sdk/overview"}]},{"tab":"CLI","pages":[{"title":"CLI","href":"/cli/overview"}]},{"tab":"MCP Contracts","pages":[{"title":"MCP Contracts","href":"/mcp/overview"}]},{"tab":"Benchmarks \u0026 Research","pages":[{"title":"Benchmarks \u0026 Research","href":"/benchmarks/overview"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/overview"}]},{"tab":"API Playground","pages":[{"title":"API Playground","href":"/api-playground/overview"}]}]},"basePath":"","title":"Security and tenancy - Praxa","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":[],"chunks":[]}