Authenticate with the Praxa Integration Gateway API
Praxa uses short-lived OAuth Bearer tokens scoped per operation. Learn how to acquire a token, pass it to the SDK or CLI, and handle auth errors.
Praxa uses short-lived OAuth Bearer tokens to authenticate every request to the Integration Gateway. Tokens are delegated, meaning they are issued on behalf of a specific principal within your Praxa deployment, and scoped, meaning each token declares exactly which operations it may be used for. No provider API keys are ever passed to your application — authentication with the gateway is entirely separate from the server-side provider credentials Praxa manages on your behalf.
Access tokens are issued by your Praxa gateway deployment as short-lived OAuth tokens. Each token is bound to a specific gateway audience, tenant, principal, and set of scopes. The exact flow for obtaining a token — whether through an admin panel, a CLI tool, or a service account credential exchange — depends on how your Praxa deployment is configured.Contact your Praxa deployment administrator or refer to your gateway’s own documentation to learn how to request a token with the scopes your integration needs. Ask only for the scopes required by the operations you intend to call; the gateway enforces the declared scope for every operation.
Always use HTTPS when connecting to the Praxa Integration Gateway. The SDK rejects HTTP origins at construction time and will throw before making any network request. Never embed your access token in a URL — pass it only through the accessToken option or the PRAXA_ACCESS_TOKEN environment variable.
Pass your token through the accessToken option when constructing a PraxaClient. This option accepts a function that returns a string or a Promise<string>. Using an async function is strongly preferred in production because it lets your application refresh the token transparently without recreating the client.Local smoke test — environment-backed token:
import { PraxaClient } from "@praxa/sdk";const accessToken = process.env.PRAXA_ACCESS_TOKEN;if (!accessToken) throw new Error("PRAXA_ACCESS_TOKEN is required");const client = new PraxaClient({ baseUrl: "https://api.your-praxa-gateway.example", accessToken: () => accessToken,});
Recommended — async token provider:
import { PraxaClient } from "@praxa/sdk";const client = new PraxaClient({ baseUrl: process.env.PRAXA_BASE_URL!, accessToken: async () => { // Retrieve a fresh token from your session or secret store. // This function is called before each authenticated request. return session.getPraxaAccessToken(); },});
The async provider pattern means your client remains valid across token expiry boundaries. The SDK calls your provider function before each request, so returning a refreshed token automatically keeps the client authenticated.
In production, always use an async token provider function that retrieves a fresh token from your session or secret store. This lets you integrate with your platform’s secret management layer and rotate tokens without restarting your application.
Every operation in the Praxa Integration Gateway API requires exactly one OAuth scope. Your access token must include the appropriate scope for every operation you call — the gateway rejects requests with missing or insufficient scopes with a 403 Forbidden response.Request only the scopes your integration actually needs. A scope authorises a request to reach server-side policy evaluation; it does not itself cause a provider effect.
Scope
Operations covered
missions:write
Submit intent, create a mission, signal a mission, cancel a mission
missions:read
Get a mission, stream mission events
capabilities:read
Search capabilities
memory:read
Query memory
skills:read
Get a skill
traces:read
Get a trace
context:read
List goals
world:read
List world model certificates
coverage:read
Get reference coverage
mcp:invoke
MCP 2025-11-25 Streamable HTTP JSON-RPC endpoint with negotiated 2025-03-26 compatibility
The gateway returns standard HTTP error responses for authentication and authorisation failures:401 Unauthorized — Your request did not include a valid Bearer token, the token has expired, or the token signature could not be verified against the gateway’s expected audience. Check that PRAXA_ACCESS_TOKEN is set, that the token has not expired, and that it was issued for the correct gateway audience.403 Forbidden — Your token is valid and was verified, but it does not include the scope required by the operation you called. Request a new token that includes the needed scope, or adjust your integration to call only operations covered by your current token’s scopes.
Never send requests over plain HTTP. Even if a gateway host is reachable over HTTP, sending a Bearer token over an unencrypted connection exposes it to interception. The Praxa SDK enforces HTTPS at construction time, but double-check any raw HTTP client usage in your infrastructure.
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":"6ae95c911da1b8da413502a9:success","clientVersion":"0.0.4054","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},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"authentication","slug":"/authentication","pageMetadata":{"title":"Authenticate with the Praxa Integration Gateway API","sidebarTitle":"Authentication","description":"Praxa uses short-lived OAuth Bearer tokens scoped per operation. Learn how to acquire a token, pass it to the SDK or CLI, and handle auth errors.","keywords":["Authenticate with the Praxa Integration Gateway API","Praxa developer platform","governed AI agents","Praxa documentation"],"href":"/authentication"},"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: \"Praxa uses short-lived OAuth Bearer tokens scoped per operation. Learn how to acquire a token, pass it to the SDK or CLI, and handle auth errors.\"\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={code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Tip,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Praxa uses short-lived OAuth Bearer tokens to authenticate every request to the Integration Gateway. Tokens are delegated, meaning they are issued on behalf of a specific principal within your Praxa deployment, and scoped, meaning each token declares exactly which operations it may be used for. No provider API keys are ever passed to your application — authentication with the gateway is entirely separate from the server-side provider credentials Praxa manages on your behalf.`}),`\n`,_jsx(Heading,{level:`2`,id:`getting-your-access-token`,children:`Getting Your Access Token`}),`\n`,_jsx(_components.p,{children:`Access tokens are issued by your Praxa gateway deployment as short-lived OAuth tokens. Each token is bound to a specific gateway audience, tenant, principal, and set of scopes. The exact flow for obtaining a token — whether through an admin panel, a CLI tool, or a service account credential exchange — depends on how your Praxa deployment is configured.`}),`\n`,_jsx(_components.p,{children:`Contact your Praxa deployment administrator or refer to your gateway’s own documentation to learn how to request a token with the scopes your integration needs. Ask only for the scopes required by the operations you intend to call; the gateway enforces the declared scope for every operation.`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Always use HTTPS when connecting to the Praxa Integration Gateway. The SDK rejects HTTP origins at construction time and will throw before making any network request. Never embed your access token in a URL — pass it only through the `,_jsx(_components.code,{children:`accessToken`}),` option or the `,_jsx(_components.code,{children:`PRAXA_ACCESS_TOKEN`}),` environment variable.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`using-your-token-with-the-sdk`,children:`Using Your Token with the SDK`}),`\n`,_jsxs(_components.p,{children:[`Pass your token through the `,_jsx(_components.code,{children:`accessToken`}),` option when constructing a `,_jsx(_components.code,{children:`PraxaClient`}),`. This option accepts a function that returns a string or a `,_jsx(_components.code,{children:`Promise\u003cstring>`}),`. Using an async function is strongly preferred in production because it lets your application refresh the token transparently without recreating the client.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Local smoke test — environment-backed token:`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`PraxaClient`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"@praxa/sdk\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` accessToken`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`PRAXA_ACCESS_TOKEN`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`accessToken`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`throw`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"PRAXA_ACCESS_TOKEN is required\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` client`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` PraxaClient`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` baseUrl:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://api.your-praxa-gateway.example\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` accessToken`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` () `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` accessToken`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Recommended — async token provider:`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`10`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`10`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`PraxaClient`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"@praxa/sdk\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` client`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` PraxaClient`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` baseUrl:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`PRAXA_BASE_URL`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` accessToken`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` async`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` () `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Retrieve a fresh token from your session or secret store.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // This function is called before each authenticated request.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` session`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getPraxaAccessToken`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`The async provider pattern means your client remains valid across token expiry boundaries. The SDK calls your provider function before each request, so returning a refreshed token automatically keeps the client authenticated.`}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`In production, always use an async token provider function that retrieves a fresh token from your session or secret store. This lets you integrate with your platform’s secret management layer and rotate tokens without restarting your application.`})}),`\n`,_jsx(Heading,{level:`2`,id:`using-your-token-with-the-cli`,children:`Using Your Token with the CLI`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`@praxa/cli`}),` reads your gateway URL and token from environment variables. Set both before running any CLI command:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` PRAXA_BASE_URL`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://api.your-praxa-gateway.example\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` PRAXA_ACCESS_TOKEN`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\u003cyour-short-lived-oauth-token>\"`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`You can verify your configuration with the read-only `,_jsx(_components.code,{children:`doctor`}),` command:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`praxa`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` doctor`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Use `,_jsx(_components.code,{children:`--base-url`}),` to override `,_jsx(_components.code,{children:`PRAXA_BASE_URL`}),` for a single command without changing your environment:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`praxa`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` doctor`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --base-url`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://api.other-gateway.example`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`PRAXA_BASE_URL`}),` and `,_jsx(_components.code,{children:`PRAXA_ACCESS_TOKEN`}),` are the standard environment variables for all Praxa integrations.`]}),`\n`,_jsx(Heading,{level:`2`,id:`oauth-scopes`,children:`OAuth Scopes`}),`\n`,_jsxs(_components.p,{children:[`Every operation in the Praxa Integration Gateway API requires exactly one OAuth scope. Your access token must include the appropriate scope for every operation you call — the gateway rejects requests with missing or insufficient scopes with a `,_jsx(_components.code,{children:`403 Forbidden`}),` response.`]}),`\n`,_jsx(_components.p,{children:`Request only the scopes your integration actually needs. A scope authorises a request to reach server-side policy evaluation; it does not itself cause a provider effect.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Scope`}),_jsx(_components.th,{children:`Operations covered`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`missions:write`})}),_jsx(_components.td,{children:`Submit intent, create a mission, signal a mission, cancel a mission`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`missions:read`})}),_jsx(_components.td,{children:`Get a mission, stream mission events`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`capabilities:read`})}),_jsx(_components.td,{children:`Search capabilities`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`memory:read`})}),_jsx(_components.td,{children:`Query memory`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`skills:read`})}),_jsx(_components.td,{children:`Get a skill`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`traces:read`})}),_jsx(_components.td,{children:`Get a trace`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`context:read`})}),_jsx(_components.td,{children:`List goals`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`world:read`})}),_jsx(_components.td,{children:`List world model certificates`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`coverage:read`})}),_jsx(_components.td,{children:`Get reference coverage`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`mcp:invoke`})}),_jsx(_components.td,{children:`MCP 2025-11-25 Streamable HTTP JSON-RPC endpoint with negotiated 2025-03-26 compatibility`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`auth-errors`,children:`Auth Errors`}),`\n`,_jsx(_components.p,{children:`The gateway returns standard HTTP error responses for authentication and authorisation failures:`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`401 Unauthorized`})}),` — Your request did not include a valid Bearer token, the token has expired, or the token signature could not be verified against the gateway’s expected audience. Check that `,_jsx(_components.code,{children:`PRAXA_ACCESS_TOKEN`}),` is set, that the token has not expired, and that it was issued for the correct gateway audience.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`403 Forbidden`})}),` — Your token is valid and was verified, but it does not include the scope required by the operation you called. Request a new token that includes the needed scope, or adjust your integration to call only operations covered by your current token’s scopes.`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Never send requests over plain HTTP. Even if a gateway host is reachable over HTTP, sending a Bearer token over an unencrypted connection exposes it to interception. The Praxa SDK enforces HTTPS at construction time, but double-check any raw HTTP client usage in your infrastructure.`})})]})}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":"Authenticate with the Praxa Integration Gateway API","sidebarTitle":"Authentication","description":"Praxa uses short-lived OAuth Bearer tokens scoped per operation. Learn how to acquire a token, pass it to the SDK or CLI, and handle auth errors.","keywords":["Authenticate with the Praxa Integration Gateway API","Praxa developer platform","governed AI agents","Praxa documentation"],"href":"/authentication"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Getting Your Access Token","slug":"getting-your-access-token","depth":2,"children":[]},{"title":"Using Your Token with the SDK","slug":"using-your-token-with-the-sdk","depth":2,"children":[]},{"title":"Using Your Token with the CLI","slug":"using-your-token-with-the-cli","depth":2,"children":[]},{"title":"OAuth Scopes","slug":"oauth-scopes","depth":2,"children":[]},{"title":"Auth Errors","slug":"auth-errors","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"praxa-ai","siteName":"Praxa","title":"Authenticate with the Praxa Integration Gateway API - Praxa","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-14T09:14:44.913Z","gitLastModified":"2026-08-14T09:14:00.000Z","originalFileLocation":"authentication.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=\"Praxa uses short-lived OAuth Bearer tokens scoped per operation. Learn how to acquire a token, pass it to the SDK or CLI, and handle auth errors.\">\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=\"Authenticate with the Praxa Integration Gateway API - Praxa\">\u003cmeta data-mint-head property=\"og:description\" content=\"Praxa uses short-lived OAuth Bearer tokens scoped per operation. Learn how to acquire a token, pass it to the SDK or CLI, and handle auth errors.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Praxa Developer Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.praxa.io/authentication\">\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=Get+started\u0026amp;title=Authenticate+with+the+Praxa+Integration+Gateway+API\u0026amp;description=Praxa+uses+short-lived+OAuth+Bearer+tokens+scoped+per+operation.+Learn+how+to+acquire+a+token%2C+pass+it+to+the+SDK+or+CLI%2C+and+handle+auth+errors.\u0026amp;theme=11c08bf52210bcaea5147dfc\u0026amp;signature=2b818369eea0fc42e1f5f8855b35db0ef3bf1b88fd402961c0cb7944af30c4d6\">\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=\"Authenticate with the Praxa Integration Gateway API - Praxa\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Praxa uses short-lived OAuth Bearer tokens scoped per operation. Learn how to acquire a token, pass it to the SDK or CLI, and handle auth errors.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://praxa-ai.mintlify.app/_mintlify/api/og/v2?division=Get+started\u0026amp;title=Authenticate+with+the+Praxa+Integration+Gateway+API\u0026amp;description=Praxa+uses+short-lived+OAuth+Bearer+tokens+scoped+per+operation.+Learn+how+to+acquire+a+token%2C+pass+it+to+the+SDK+or+CLI%2C+and+handle+auth+errors.\u0026amp;theme=11c08bf52210bcaea5147dfc\u0026amp;signature=2b818369eea0fc42e1f5f8855b35db0ef3bf1b88fd402961c0cb7944af30c4d6\">\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/authentication\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/authentication.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/authentication#webpage\",\"url\":\"https://docs.praxa.io/authentication\",\"name\":\"Authenticate with the Praxa Integration Gateway API\",\"description\":\"Praxa uses short-lived OAuth Bearer tokens scoped per operation. Learn how to acquire a token, pass it to the SDK or CLI, and handle auth errors.\",\"dateModified\":\"2026-08-14T09:14:00.000Z\",\"isPartOf\":{\"@id\":\"https://docs.praxa.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.praxa.io/authentication#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.praxa.io/authentication#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Get started\",\"item\":\"https://docs.praxa.io/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Authenticate with the Praxa Integration Gateway API\",\"item\":\"https://docs.praxa.io/authentication\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.praxa.io/authentication#article\",\"headline\":\"Authenticate with the Praxa Integration Gateway API\",\"name\":\"Authenticate with the Praxa Integration Gateway API\",\"description\":\"Praxa uses short-lived OAuth Bearer tokens scoped per operation. Learn how to acquire a token, pass it to the SDK or CLI, and handle auth errors.\",\"url\":\"https://docs.praxa.io/authentication\",\"mainEntityOfPage\":{\"@id\":\"https://docs.praxa.io/authentication#webpage\"},\"dateModified\":\"2026-08-14T09:14:00.000Z\",\"keywords\":\"Authenticate with the Praxa Integration Gateway API, Praxa developer platform, governed AI agents, Praxa documentation\",\"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","description":"Install the Praxa TypeScript SDK, configure a deployment-specific Integration Gateway, and run a governed mission with Node.js 20 or later.","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","description":"A mission is the core unit of work in Praxa: a governed, goal-directed agent task. Learn about mission structure, lifecycle states, and real-time events.","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","href":"/operations/overview"},"pages":[{"title":"Security and tenancy","sidebarTitle":"Security and tenancy","href":"/operations/security-and-tenancy"},{"title":"Production observability","sidebarTitle":"Observability","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":"Authenticate with the Praxa Integration Gateway API - Praxa","buildId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","deploymentId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","dynamics":[],"chunks":[]}