Keep human identity, consent, current grant authority and execution policy separate at every SDK boundary.
TypeScript SDK 0.8.2, Python SDK 0.7.2, Go SDK v0.4.3 and the changed
framework integrations are published. Use the exact versions listed in
Release Status; older packages can lack these controls.
These releases do not enable authority callbacks automatically or provision
human login. Configure and test every execution boundary before production.
Four Different Checks
Human identity: the authenticated host session identifies the principal.
An OAuth client ID, agent DID, submitted principal hint, or model argument
is not proof that a human signed in.
Consent: use the issuer’s live hosted consent/passkey flow or MCP Auth’s
authenticated principal resolver and rendered consent flow. SDK clients,
passports and signature helpers do not manufacture human approval.
Current authority: a valid signature is not evidence that a grant is
still active. Check the issuer before every operation. Deny if that check
is unavailable, inactive, malformed, or identifies a different grant/actor.
Anywhere an emergency stop must take effect before token expiry, this check
is the documented default: currentAuthority in the SDK verifiers and
currentAuthorityCheck: true in the gateway. Without it a stopped or revoked
grant is accepted until its token expires.
Execution policy: bind authorization to the real operation and inputs.
Use strict manifest enforcement, action-bound decision grants and atomic
caps reservations/settlement where required. Scope-only wrappers do not
implement these checks automatically.
The authority callback is server-owned configuration. It must call the
trusted issuer, throw on inactive grants or transport failure, and return the
verified grant. Never return locally decoded claims or use a positive cache.
Verification compares the current response’s issuer, audience, token ID, grant ID, principal,
agent, developer/tenant, issued/expiry times and scopes with the signed token.
The signed token remains the source of audience and action context.The same three fields are supported by the released framework tool
factories, Express, A2A, adapters and the programmatic gateway. The human
binding must come from the host session or authorized resource owner, not
from the tool’s submitted arguments. Multi-user servers must bind it per
request, not reuse one user’s value for every caller.
The Python tool factories, FastAPI dependency and A2A options expose the
corresponding snake-case fields. FastAPI performs the blocking verification
in its worker thread. These APIs are synchronous; do not pass an async
authority callback that returns an unevaluated coroutine.
Go
grant, err := grantex.VerifyGrantToken(ctx, token, grantex.VerifyOptions{ JwksURI: "https://api.grantex.dev/.well-known/jwks.json", Audience: "calendar-service", RequiredScopes: []string{"calendar:read"}, CurrentAuthority: client.Grants.Verify, ExpectedPrincipalID: authenticatedPrincipalID, ExpectedAgentDID: authorizedAgentDID,})if err != nil { // Return a denial before invoking the resource or tool. return err}
Go’s grant authority check is not a Go implementation of the TypeScript /
Python manifest enforce() engine. Go hosts must separately enforce
action-bound decisions and atomic caps through their trusted authorization
service. Do not label signature verification as equivalent policy coverage.
currentAuthorityCheck: true is the documented default for stop-sensitive
deployments (see Stop-sensitive deployments).
Set GRANTEX_API_KEY in the server environment, not in a committed YAML
file or browser. For self-hosting, grantexBaseUrl selects the trusted
issuer API. Every route must have a global or route-specific audience;
audienceCheck: off cannot be combined with current authority. Programmatic
callbacks are not serializable YAML and are explicitly rejected by the loader.
For a dedicated single-principal resource, YAML also preserves non-empty
expectedPrincipalId and expectedAgentDid bindings. These are fixed host
configuration, not end-user login. Multi-user gateways need per-request host
authentication and binding rather than one shared static principal.
Capability Boundaries
Package family
What it proves
Additional production requirements
Primary SDK verifiers
Signed issuer/scopes; opt-in current authority and expected identities
Authenticated human consent and resource guards with configured issuer authority
Host login/session resolver, storage, issuer, policy engine and account lifecycle
Management MCP / CLI / Terraform
Privileged account administration using the operator’s API key
Private administrative access; do not expose principal-session creation to arbitrary end-user agents
Agent Passport / HTTP Signatures
Credential identity/status or request-key possession
Trusted issuer/key/status/nonce stores plus separate human grants and execution policy
Legacy MPP Passport
Passport transport/verification
Configure trusted issuer/current status; not a human-consent or spend-authorization proof
x402 legacy GDT
Delegation signature and configured token registry
Durable shared revocation and accounting; the default in-memory registry is not cross-process issuer status
x402 managed prepaid wallet
Issuer-managed wallet authorization
Issuer/custody/facilitator settlement and real-wallet testing remain separate dependencies
Gemma offline
Snapshot signature and configured local scopes
Cannot promise immediate revocation or fresh human confirmation; never use alone where current authority is required
DPDP / destinations / conformance / mock issuer
Purpose helpers, audit export or testing
Not authentication or human-consent guards
Unsafe Evaluation Modes
Signature-only/offline verification, permissive enforcement, warning-only caps
or decisions, and MCP Auth evaluation opt-outs do not provide the production
guarantees above. Defaults on existing offline APIs are retained for
compatibility, not certified as complete authorization.No SDK can make revocation atomic with an unrelated external side effect by
checking first. For irreversible work, bind and consume the decision/reservation
at the authoritative execution boundary; settle or cancel it appropriately.
Enforce credential rotation, issuer timeouts and outage behavior in the host.
Tests and Release Order
The source regression suites test real signed JWTs, a local HTTP JWKS/issuer,
revocation between calls, issuer outages, malformed active flags, identity
substitution and zero denied callback/proxy effects. Optional Python vendor
objects use test doubles; this is not certification of every vendor runtime,
browser/passkey device, issuer deployment or payment rail.Release and verify the primary SDKs first, then the changed integration
packages. A source version bump is not evidence that npm, PyPI or Go module
consumers have received a fix. Keep registry release status separate from
registry-artifact validation and production deployment.
Last modified on October 4, 2026
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Grantex","description":"Documentation and API reference for Grantex AI agent authorization, delegated OAuth grants, agent identity, scoped permissions, MCP authorization, verification, and audit. Grantex is owned by Orchestrum Technologies LLP; inventor and owner: Sanjeev Kumar.","colors":{"primary":"#3fb950","light":"#58a6ff","dark":"#2ea043"},"logo":{"light":"https://mintcdn.com/grantex/fh2nVWzV0WTpAhmk/logo/light.svg?fit=max\u0026auto=format\u0026n=fh2nVWzV0WTpAhmk\u0026q=85\u0026s=45b5032cb19c05941960c4bb4239c8cd","dark":"https://mintcdn.com/grantex/fh2nVWzV0WTpAhmk/logo/dark.svg?fit=max\u0026auto=format\u0026n=fh2nVWzV0WTpAhmk\u0026q=85\u0026s=4f8e48fcb123c40e9a32121a5b6e542a"},"favicon":"https://mintcdn.com/grantex/fjShexQIs6R8ZYjW/favicon.svg?fit=max\u0026auto=format\u0026n=fjShexQIs6R8ZYjW\u0026q=85\u0026s=7d1fea44a19ae98fb8b6d9c6732dd38a","navbar":{"links":[{"href":"https://github.com/mishrasanjeev/grantex","type":"github"}]},"search":{"prompt":"Search Grantex docs..."},"seo":{"metatags":{"robots":"index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1","og:site_name":"Grantex Documentation","twitter:card":"summary_large_image","twitter:site":"@grantex_dev"},"indexing":"navigable"},"metadata":{"timestamp":true},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"grantex","hasAudioNarration":false,"actualSubdomain":"grantex","customDomains":["docs.grantex.dev"],"gitSource":{"type":"github","owner":"mishrasanjeev","repo":"grantex","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6af16dff2a14eef4e6fd4024","clientVersion":"0.0.4128","searchFilterCounts":[{"language":"default","tag":"API Reference","count":155},{"language":"default","tag":"Documentation","count":141},{"language":"default","tag":"Resources","count":60},{"language":"default","tag":"Guides","count":41},{"language":"default","tag":"Integrations","count":31},{"language":"default","tag":"Python SDK","count":27},{"language":"default","tag":"TypeScript SDK","count":27},{"language":"default","tag":"Go SDK","count":26},{"language":"default","tag":"Blog","count":25},{"language":"default","tag":"Posts","count":25}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"guides/sdk-execution-authority","slug":"/guides/sdk-execution-authority","pageMetadata":{"title":"SDK Execution Authority","description":"Keep human identity, consent, current grant authority and execution policy separate at every SDK boundary.","href":"/guides/sdk-execution-authority"},"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 human identity, consent, current grant authority and execution policy separate at every SDK boundary.\"\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={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Warning,{children:_jsxs(_components.p,{children:[`TypeScript SDK 0.8.2, Python SDK 0.7.2, Go SDK v0.4.3 and the changed\nframework integrations are published. Use the exact versions listed in\n`,_jsx(_components.a,{href:`/release-status`,children:`Release Status`}),`; older packages can lack these controls.\nThese releases do not enable authority callbacks automatically or provision\nhuman login. Configure and test every execution boundary before production.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`four-different-checks`,children:`Four Different Checks`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Human identity:`}),` the authenticated host session identifies the principal.\nAn OAuth client ID, agent DID, submitted principal hint, or model argument\nis not proof that a human signed in.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Consent:`}),` use the issuer’s live hosted consent/passkey flow or MCP Auth’s\nauthenticated principal resolver and rendered consent flow. SDK clients,\npassports and signature helpers do not manufacture human approval.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Current authority:`}),` a valid signature is not evidence that a grant is\nstill active. Check the issuer before every operation. Deny if that check\nis unavailable, inactive, malformed, or identifies a different grant/actor.\nAnywhere an emergency stop must take effect before token expiry, this check\nis the documented default: `,_jsx(_components.code,{children:`currentAuthority`}),` in the SDK verifiers and\n`,_jsx(_components.code,{children:`currentAuthorityCheck: true`}),` in the gateway. Without it a stopped or revoked\ngrant is accepted until its token expires.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Execution policy:`}),` bind authorization to the real operation and inputs.\nUse strict manifest enforcement, action-bound decision grants and atomic\ncaps reservations/settlement where required. Scope-only wrappers do not\nimplement these checks automatically.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`typescript`,children:`TypeScript`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`11`,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:`11`,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:`Grantex`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`verifyGrantToken`}),_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:` '@grantex/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:` issuer`}),_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:` Grantex`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({ `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`apiKey:`}),_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:`GRANTEX_API_KEY`}),_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:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` grant`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` verifyGrantToken`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`token`}),_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:` jwksUri:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'https://api.grantex.dev/.well-known/jwks.json'`}),_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:` audience:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'calendar-service'`}),_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:` requiredScopes:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'calendar:read'`}),_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:` currentAuthority`}),_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:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`token`}),_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:` issuer`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`grants`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`verify`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`token`}),_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:` expectedPrincipalId:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authenticatedSession`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`principalId`}),_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:` expectedAgentDid:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authorizedAgent`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`did`}),_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 authority callback is server-owned configuration. It must call the\ntrusted issuer, throw on inactive grants or transport failure, and return the\nverified grant. Never return locally decoded claims or use a positive cache.\nVerification compares the current response’s issuer, audience, token ID, grant ID, principal,\nagent, developer/tenant, issued/expiry times and scopes with the signed token.\nThe signed token remains the source of audience and action context.`}),`\n`,_jsx(_components.p,{children:`The same three fields are supported by the released framework tool\nfactories, Express, A2A, adapters and the programmatic gateway. The human\nbinding must come from the host session or authorized resource owner, not\nfrom the tool’s submitted arguments. Multi-user servers must bind it per\nrequest, not reuse one user’s value for every caller.`}),`\n`,_jsx(Heading,{level:`2`,id:`python`,children:`Python`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`python`,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:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`11`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` grantex `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Grantex, VerifyGrantTokenOptions, verify_grant_token`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`issuer `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Grantex(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`api_key`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`server_api_key)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`grant `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` verify_grant_token(token, VerifyGrantTokenOptions(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` jwks_uri`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://api.grantex.dev/.well-known/jwks.json\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` audience`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"calendar-service\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` required_scopes`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"calendar:read\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` current_authority`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`issuer.grants.verify,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` expected_principal_id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`authenticated_session.principal_id,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` expected_agent_did`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`authorized_agent.did,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`))`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`The Python tool factories, FastAPI dependency and A2A options expose the\ncorresponding snake-case fields. FastAPI performs the blocking verification\nin its worker thread. These APIs are synchronous; do not pass an async\nauthority callback that returns an unevaluated coroutine.`}),`\n`,_jsx(Heading,{level:`2`,id:`go`,children:`Go`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`12`,language:`go`,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:`go`,children:_jsxs(_components.code,{language:`go`,numberOfLines:`12`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`grant`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`err`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` :=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` grantex`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`VerifyGrantToken`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`ctx`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`token`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`grantex`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`VerifyOptions`}),_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:` JwksURI`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://api.grantex.dev/.well-known/jwks.json\"`}),_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:` Audience`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"calendar-service\"`}),_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:` RequiredScopes`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: []`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#4EC9B0`},children:`string`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"calendar:read\"`}),_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:` CurrentAuthority`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Grants`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Verify`}),_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:` ExpectedPrincipalID`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`authenticatedPrincipalID`}),_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:` ExpectedAgentDID`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`authorizedAgentDID`}),_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`,_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\":`#9CDCFE`},children:` err`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` !=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` nil`}),_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:` // Return a denial before invoking the resource or tool.`})}),`\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:` err`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Go’s grant authority check is not a Go implementation of the TypeScript /\nPython manifest `,_jsx(_components.code,{children:`enforce()`}),` engine. Go hosts must separately enforce\naction-bound decisions and atomic caps through their trusted authorization\nservice. Do not label signature verification as equivalent policy coverage.`]}),`\n`,_jsx(Heading,{level:`2`,id:`gateway-yaml`,children:`Gateway YAML`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`yaml`,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:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`upstream`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`https://calendar.internal.example`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`jwksUri`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`https://api.grantex.dev/.well-known/jwks.json`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`audience`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`calendar-service`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`currentAuthorityCheck`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`routes`}),_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\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`path`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/calendar`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` methods`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`GET`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` requiredScopes`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`calendar:read`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`currentAuthorityCheck: true`}),` is the documented default for stop-sensitive\ndeployments (see `,_jsx(_components.a,{href:`/integrations/gateway#stop-sensitive-deployments`,children:`Stop-sensitive deployments`}),`).\nSet `,_jsx(_components.code,{children:`GRANTEX_API_KEY`}),` in the server environment, not in a committed YAML\nfile or browser. For self-hosting, `,_jsx(_components.code,{children:`grantexBaseUrl`}),` selects the trusted\nissuer API. Every route must have a global or route-specific audience;\n`,_jsx(_components.code,{children:`audienceCheck: off`}),` cannot be combined with current authority. Programmatic\ncallbacks are not serializable YAML and are explicitly rejected by the loader.\nFor a dedicated single-principal resource, YAML also preserves non-empty\n`,_jsx(_components.code,{children:`expectedPrincipalId`}),` and `,_jsx(_components.code,{children:`expectedAgentDid`}),` bindings. These are fixed host\nconfiguration, not end-user login. Multi-user gateways need per-request host\nauthentication and binding rather than one shared static principal.`]}),`\n`,_jsx(Heading,{level:`2`,id:`capability-boundaries`,children:`Capability Boundaries`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Package family`}),_jsx(_components.th,{children:`What it proves`}),_jsx(_components.th,{children:`Additional production requirements`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Primary SDK verifiers`}),_jsx(_components.td,{children:`Signed issuer/scopes; opt-in current authority and expected identities`}),_jsx(_components.td,{children:`Hosted human consent; strict execution policy`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Framework wrappers / HTTP guards / adapters / gateway`}),_jsx(_components.td,{children:`Token and declared scope before callback/proxy; optional current authority`}),_jsx(_components.td,{children:`Action/input binding, decision consumption, atomic caps, server-owned identity`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`MCP Auth`}),_jsx(_components.td,{children:`Authenticated human consent and resource guards with configured issuer authority`}),_jsx(_components.td,{children:`Host login/session resolver, storage, issuer, policy engine and account lifecycle`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Management MCP / CLI / Terraform`}),_jsx(_components.td,{children:`Privileged account administration using the operator’s API key`}),_jsx(_components.td,{children:`Private administrative access; do not expose principal-session creation to arbitrary end-user agents`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Agent Passport / HTTP Signatures`}),_jsx(_components.td,{children:`Credential identity/status or request-key possession`}),_jsx(_components.td,{children:`Trusted issuer/key/status/nonce stores plus separate human grants and execution policy`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Legacy MPP Passport`}),_jsx(_components.td,{children:`Passport transport/verification`}),_jsx(_components.td,{children:`Configure trusted issuer/current status; not a human-consent or spend-authorization proof`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`x402 legacy GDT`}),_jsx(_components.td,{children:`Delegation signature and configured token registry`}),_jsx(_components.td,{children:`Durable shared revocation and accounting; the default in-memory registry is not cross-process issuer status`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`x402 managed prepaid wallet`}),_jsx(_components.td,{children:`Issuer-managed wallet authorization`}),_jsx(_components.td,{children:`Issuer/custody/facilitator settlement and real-wallet testing remain separate dependencies`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Gemma offline`}),_jsx(_components.td,{children:`Snapshot signature and configured local scopes`}),_jsx(_components.td,{children:`Cannot promise immediate revocation or fresh human confirmation; never use alone where current authority is required`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`DPDP / destinations / conformance / mock issuer`}),_jsx(_components.td,{children:`Purpose helpers, audit export or testing`}),_jsx(_components.td,{children:`Not authentication or human-consent guards`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`unsafe-evaluation-modes`,children:`Unsafe Evaluation Modes`}),`\n`,_jsx(_components.p,{children:`Signature-only/offline verification, permissive enforcement, warning-only caps\nor decisions, and MCP Auth evaluation opt-outs do not provide the production\nguarantees above. Defaults on existing offline APIs are retained for\ncompatibility, not certified as complete authorization.`}),`\n`,_jsx(_components.p,{children:`No SDK can make revocation atomic with an unrelated external side effect by\nchecking first. For irreversible work, bind and consume the decision/reservation\nat the authoritative execution boundary; settle or cancel it appropriately.\nEnforce credential rotation, issuer timeouts and outage behavior in the host.`}),`\n`,_jsx(Heading,{level:`2`,id:`tests-and-release-order`,children:`Tests and Release Order`}),`\n`,_jsxs(_components.p,{children:[`The source regression suites test real signed JWTs, a local HTTP JWKS/issuer,\nrevocation between calls, issuer outages, malformed `,_jsx(_components.code,{children:`active`}),` flags, identity\nsubstitution and zero denied callback/proxy effects. Optional Python vendor\nobjects use test doubles; this is not certification of every vendor runtime,\nbrowser/passkey device, issuer deployment or payment rail.`]}),`\n`,_jsx(_components.p,{children:`Release and verify the primary SDKs first, then the changed integration\npackages. A source version bump is not evidence that npm, PyPI or Go module\nconsumers have received a fix. Keep registry release status separate from\nregistry-artifact validation and production deployment.`})]})}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":"SDK Execution Authority","description":"Keep human identity, consent, current grant authority and execution policy separate at every SDK boundary.","href":"/guides/sdk-execution-authority"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Four Different Checks","slug":"four-different-checks","depth":2,"children":[]},{"title":"TypeScript","slug":"typescript","depth":2,"children":[]},{"title":"Python","slug":"python","depth":2,"children":[]},{"title":"Go","slug":"go","depth":2,"children":[]},{"title":"Gateway YAML","slug":"gateway-yaml","depth":2,"children":[]},{"title":"Capability Boundaries","slug":"capability-boundaries","depth":2,"children":[]},{"title":"Unsafe Evaluation Modes","slug":"unsafe-evaluation-modes","depth":2,"children":[]},{"title":"Tests and Release Order","slug":"tests-and-release-order","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"grantex","siteName":"Grantex","title":"SDK Execution Authority - Grantex","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-04T12:42:04.883Z","gitLastModified":"2026-10-04T12:41:56.000Z","originalFileLocation":"guides/sdk-execution-authority.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 human identity, consent, current grant authority and execution policy separate at every SDK boundary.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Grantex\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/grantex/8bJAlEutDRbcOOje/_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/grantex/8bJAlEutDRbcOOje/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/grantex/8bJAlEutDRbcOOje/_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/grantex/8bJAlEutDRbcOOje/_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/grantex/8bJAlEutDRbcOOje/_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/grantex/8bJAlEutDRbcOOje/_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/grantex/8bJAlEutDRbcOOje/_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/grantex/8bJAlEutDRbcOOje/_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/grantex/8bJAlEutDRbcOOje/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"SDK Execution Authority - Grantex\">\u003cmeta data-mint-head property=\"og:description\" content=\"Keep human identity, consent, current grant authority and execution policy separate at every SDK boundary.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Grantex Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.grantex.dev/guides/sdk-execution-authority\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://grantex.mintlify.site/_mintlify/api/og/v2?division=Guides\u0026amp;title=SDK+Execution+Authority\u0026amp;description=Keep+human+identity%2C+consent%2C+current+grant+authority+and+execution+policy+separate+at+every+SDK+boundary.\u0026amp;theme=615165a2998a6d8eb9253191\u0026amp;signature=3f7e8337843cdcd09422b4d3e213219fc31dfefe3934d779b9afa91b23246426\">\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=\"SDK Execution Authority - Grantex\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Keep human identity, consent, current grant authority and execution policy separate at every SDK boundary.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://grantex.mintlify.site/_mintlify/api/og/v2?division=Guides\u0026amp;title=SDK+Execution+Authority\u0026amp;description=Keep+human+identity%2C+consent%2C+current+grant+authority+and+execution+policy+separate+at+every+SDK+boundary.\u0026amp;theme=615165a2998a6d8eb9253191\u0026amp;signature=3f7e8337843cdcd09422b4d3e213219fc31dfefe3934d779b9afa91b23246426\">\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/grantex/8bJAlEutDRbcOOje/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Grantex\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3fb950\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.grantex.dev/guides/sdk-execution-authority\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guides/sdk-execution-authority.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.grantex.dev/#organization\",\"name\":\"Grantex\",\"url\":\"https://docs.grantex.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/grantex/fh2nVWzV0WTpAhmk/logo/light.svg?fit=max\u0026auto=format\u0026n=fh2nVWzV0WTpAhmk\u0026q=85\u0026s=45b5032cb19c05941960c4bb4239c8cd\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.grantex.dev#website\",\"name\":\"Grantex\",\"url\":\"https://docs.grantex.dev\",\"publisher\":{\"@id\":\"https://docs.grantex.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.grantex.dev/guides/sdk-execution-authority#webpage\",\"url\":\"https://docs.grantex.dev/guides/sdk-execution-authority\",\"name\":\"SDK Execution Authority\",\"description\":\"Keep human identity, consent, current grant authority and execution policy separate at every SDK boundary.\",\"dateModified\":\"2026-10-04T12:41:56.000Z\",\"isPartOf\":{\"@id\":\"https://docs.grantex.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.grantex.dev/guides/sdk-execution-authority#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.grantex.dev/guides/sdk-execution-authority#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Guides\",\"item\":\"https://docs.grantex.dev/guides/rate-limits\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SDK Execution Authority\",\"item\":\"https://docs.grantex.dev/guides/sdk-execution-authority\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.grantex.dev/guides/sdk-execution-authority#article\",\"headline\":\"SDK Execution Authority\",\"name\":\"SDK Execution Authority\",\"description\":\"Keep human identity, consent, current grant authority and execution policy separate at every SDK boundary.\",\"url\":\"https://docs.grantex.dev/guides/sdk-execution-authority\",\"mainEntityOfPage\":{\"@id\":\"https://docs.grantex.dev/guides/sdk-execution-authority#webpage\"},\"dateModified\":\"2026-10-04T12:41:56.000Z\",\"publisher\":{\"@id\":\"https://docs.grantex.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.grantex.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Grantex\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Grantex\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/guides/sdk-execution-authority.md","siteName":"Grantex","nav":{"global":null,"tabs":[{"tab":"Documentation","groups":[{"group":"Getting Started","pages":[{"title":"Grantex AI Agent Authorization","sidebarTitle":"Introduction","href":"/introduction"},{"title":"Ownership","sidebarTitle":"Ownership","href":"/ownership"},{"title":"Licence","sidebarTitle":"Licence","href":"/license"},{"title":"AI Agent Authorization Quickstart","sidebarTitle":"Quickstart","href":"/quickstart"},{"title":"Release Status","sidebarTitle":"Release Status","href":"/release-status"},{"title":"Migrating to Grantex 0.6","href":"/migration-0.6"},{"title":"Enforcement SDK migration","href":"/migration-enforcement"},{"title":"Local Development","sidebarTitle":"Local Development","href":"/local-development"}]},{"group":"Core Concepts","pages":[{"title":"How It Works","sidebarTitle":"How It Works","href":"/concepts/how-it-works"},{"title":"Grant Token","sidebarTitle":"Grant Token","href":"/concepts/grant-token"},{"title":"Scopes","sidebarTitle":"Scopes","href":"/concepts/scopes"},{"title":"Scope Registry","sidebarTitle":"Scope Registry","href":"/concepts/scope-registry"},{"title":"Multi-Agent Delegation","sidebarTitle":"Delegation","href":"/concepts/delegation"},{"title":"Grantex vs OAuth 2.0","sidebarTitle":"Grantex vs OAuth","href":"/concepts/vs-oauth"},{"title":"Tool Manifests","sidebarTitle":"Tool Manifests","href":"/concepts/tool-manifests"},{"title":"Purpose-Bound Grants","sidebarTitle":"Purpose-Bound Grants","href":"/concepts/purpose-bound-grants"},{"title":"Agent Passport and Grant","sidebarTitle":"Passport vs Grant","href":"/concepts/passport-vs-grant"},{"title":"Grantex and AgenticOrg Governed Cases","sidebarTitle":"AgenticOrg Governed Cases","href":"/guides/agenticorg-governed-cases"},{"title":"Decision Grants","sidebarTitle":"Decision Grants","href":"/concepts/decision-grants"},{"title":"Caps and Metering","sidebarTitle":"Caps and Metering","href":"/concepts/caps-and-metering"},{"title":"Evidence and Verification","sidebarTitle":"Evidence and Verification","href":"/concepts/evidence-and-verification"},{"title":"Event Bridge and Revocation","sidebarTitle":"Event Bridge and Revocation","href":"/concepts/event-bridge-and-revocation"}]},{"group":"Trust \u0026 Identity","pages":[{"title":"Trust Registry","sidebarTitle":"Trust Registry","href":"/features/trust-registry"},{"title":"Becoming an Accredited Issuer","sidebarTitle":"Accredited Issuers","href":"/issuers/becoming-an-accredited-issuer"},{"title":"Running the Mock Issuer","sidebarTitle":"Mock Issuer","href":"/issuers/running-the-mock-issuer"},{"title":"Implementing an Issuer Adapter","sidebarTitle":"Issuer Adapters","href":"/issuers/implementing-an-issuer-adapter"},{"title":"Registering Agents and Their Keys","sidebarTitle":"Registering Agents","href":"/providers/registering-agents"},{"title":"Verifying agents with the registry","href":"/relying-parties/verifying-agents"},{"title":"FIDO2 / WebAuthn","sidebarTitle":"FIDO2 / WebAuthn","href":"/features/fido-webauthn"},{"title":"Verifiable Credentials","sidebarTitle":"Verifiable Credentials","href":"/features/verifiable-credentials"},{"title":"SD-JWT (Selective Disclosure)","sidebarTitle":"SD-JWT","href":"/features/sd-jwt"},{"title":"DID Infrastructure","sidebarTitle":"DID Infrastructure","href":"/features/did-infrastructure"},{"title":"MPP Agent Passport","sidebarTitle":"MPP Agent Passport","href":"/features/mpp-agent-passport"},{"title":"Irregularity Detection","sidebarTitle":"Irregularity Detection","href":"/features/anomaly-detection"}]},{"group":"Offline Authorization","pages":[{"title":"Offline Authorization","sidebarTitle":"Offline Authorization","href":"/features/offline-authorization"},{"title":"Consent Bundles","sidebarTitle":"Consent Bundles","href":"/features/consent-bundles"}]},{"group":"x402 Payment Protocol","pages":[{"title":"Agent Prepaid Wallets","href":"/features/prepaid-wallets"},{"title":"Agent Wallet Governance","href":"/guides/agent-wallet-governance"},{"title":"Prepaid Wallet Production Readiness","sidebarTitle":"Wallet Production Readiness","href":"/guides/prepaid-wallet-production"},{"title":"Base USDC Custody","href":"/guides/base-usdc-custody"},{"title":"x402 Architecture","sidebarTitle":"x402 Architecture","href":"/features/x402-architecture"},{"title":"GDT Specification","sidebarTitle":"GDT Spec","href":"/features/x402-gdt-spec"}]},{"group":"MCP Authorization","pages":[{"title":"MCP Auth Server","href":"/features/mcp-auth-server"},{"title":"MCP Auth 4.0: authenticated human consent","href":"/mcp-auth"}]},{"group":"OACP Authority","pages":[{"title":"OACP Authority Overview","href":"/guides/oacp/overview"},{"title":"OACP Truth Inventory","href":"/guides/oacp/truth-inventory"},{"title":"OACP Architecture","href":"/guides/oacp/architecture"},{"title":"OACP Artifact Authority","href":"/guides/oacp/artifact-authority"},{"title":"OACP Merchant Self-Service Config Boundary","href":"/guides/oacp/merchant-self-service-config"},{"title":"OACP Protocol Adapter Authority","href":"/guides/oacp/protocol-adapter"},{"title":"OACP Policy And Governance","href":"/guides/oacp/policy-governance"},{"title":"OACP Merchant Source Of Record","href":"/guides/oacp/merchant-source-of-record"},{"title":"OACP Buyer Safety And Freshness","href":"/guides/oacp/buyer-safety-freshness"},{"title":"OACP Provider And Payment Boundary","href":"/guides/oacp/provider-payment-boundary"},{"title":"Agent Network Identity","href":"/guides/oacp/agent-network-identity"},{"title":"OACP Offline POS Bridge Boundary","href":"/guides/oacp/pos-bridge-boundary"},{"title":"OACP Integration Guide For AgenticOrg","href":"/guides/oacp/agenticorg-integration"},{"title":"OACP Operator Runbook","href":"/guides/oacp/operator-runbook"},{"title":"OACP Launch Readiness","href":"/guides/oacp/launch-readiness"},{"title":"OACP Library Helper Decision","href":"/guides/oacp/library-helper-decision"},{"title":"OACP Mandates Decision","href":"/guides/oacp/mandates-decision"},{"title":"Move Your Shopify Store To Agentic Commerce","href":"/guides/oacp/explainers/shopify-to-agentic-commerce"},{"title":"How Buyer Agents Shop Safely With OACP","href":"/guides/oacp/explainers/buyer-agent-safety"},{"title":"Build Against OACP Artifacts And Bridges","href":"/guides/oacp/explainers/developer-artifacts-bridges"},{"title":"How OACP Maps To Schema.org, UCP, ACP, AP2, A2A, And MCP","href":"/guides/oacp/explainers/protocol-partner-mappings"},{"title":"Provider-Owned Mandate And Payment Evidence In OACP","href":"/guides/oacp/explainers/provider-owned-payment-evidence"},{"title":"Launch And Rollback Runbook","href":"/guides/oacp/explainers/launch-rollback-runbook"}]},{"group":"Agentic Commerce V1 (Historical)","pages":[{"title":"Commerce V1 Overview","href":"/guides/commerce-v1-overview"},{"title":"Agentic Commerce PRD","href":"/guides/commerce-v1-agentic-commerce-prd"},{"title":"Agentic Commerce Implementation PRD","href":"/guides/commerce-v1-agentic-commerce-implementation-prd"},{"title":"End-To-End Agentic Commerce Flow","href":"/guides/commerce-v1-end-to-end-agentic-commerce-flow"},{"title":"Merchant Guide To Agentic Commerce","href":"/guides/commerce-v1-merchant-agentic-commerce-user-guide"},{"title":"Commerce V1 Developer Guide","href":"/guides/commerce-v1-developer-guide"},{"title":"Commerce V1 Merchant And Operator Guide","href":"/guides/commerce-v1-merchant-operator-guide"},{"title":"Commerce V1 Operations","href":"/guides/commerce-v1-operations"}]},{"group":"Compliance","pages":[{"title":"DPDP \u0026 GDPR Evidence Module","sidebarTitle":"DPDP Compliance","href":"/features/dpdp-compliance"},{"title":"DPDP Act 2023 and DPDP Rules 2025","sidebarTitle":"DPDP Act 2023","href":"/compliance/dpdp-act-2023"},{"title":"EU AI Act","sidebarTitle":"EU AI Act","href":"/compliance/eu-ai-act"},{"title":"Sub-processor Disclosure","href":"/compliance/sub-processors"},{"title":"Data Residency Statement","href":"/compliance/data-residency"},{"title":"BFSI platform baseline","href":"/compliance/bfsi-platform-baseline"},{"title":"Data Processing Addendum (Template)","href":"/compliance/dpa"},{"title":"Privacy Policy (Draft)","href":"/compliance/privacy-policy"},{"title":"Terms of Service (Draft)","href":"/compliance/terms-of-service"},{"title":"Commercial licensing","href":"/compliance/licensing"},{"title":"Cookie Policy (Draft)","href":"/compliance/cookie-policy"}]},{"group":"Guides","pages":[{"title":"Rate Limits","sidebarTitle":"Rate Limits","href":"/guides/rate-limits"},{"title":"Webhooks","sidebarTitle":"Webhooks","href":"/guides/webhooks"},{"title":"Self-Hosting","sidebarTitle":"Self-Hosting","href":"/guides/self-hosting"},{"title":"Dependency Updates and Validation","href":"/guides/dependency-updates"},{"title":"Security Hardening","sidebarTitle":"Security Hardening","href":"/guides/security-hardening"},{"title":"CERT-In Agent Security Deployment Guide","href":"/guides/cert-in-agent-security"},{"title":"Supply Chain and License Security","sidebarTitle":"Supply Chain Security","href":"/guides/supply-chain-security"},{"title":"OAuth Agent Grants Profile","sidebarTitle":"OAuth Agent Grants","href":"/guides/oauth-agent-grants"},{"title":"Operations","sidebarTitle":"Operations","href":"/guides/operations"},{"title":"Security Best Practices","sidebarTitle":"Security Best Practices","href":"/guides/security-best-practices"},{"title":"Token Verification Strategy","sidebarTitle":"Token Verification","description":"Choose between offline, online, and hybrid token verification strategies.","href":"/guides/token-verification"},{"title":"SDK Execution Authority","href":"/guides/sdk-execution-authority"},{"title":"Troubleshooting","sidebarTitle":"Troubleshooting","description":"Common issues and solutions when working with the Grantex API and SDKs.","href":"/guides/troubleshooting"},{"title":"End-User Permission Dashboard","sidebarTitle":"End-User Permissions","href":"/guides/end-user-permissions"},{"title":"Migration Guide","sidebarTitle":"Migration","href":"/guides/migration"},{"title":"Metrics \u0026 Observability","sidebarTitle":"Metrics \u0026 Observability","href":"/guides/metrics-observability"},{"title":"OpenTelemetry Tracing","sidebarTitle":"OpenTelemetry","href":"/guides/opentelemetry"},{"title":"Event Streaming","href":"/guides/event-streaming"},{"title":"Datadog Integration","href":"/guides/siem-datadog"},{"title":"Splunk Integration","href":"/guides/siem-splunk"},{"title":"S3 \u0026 BigQuery Archival","href":"/guides/siem-s3-bigquery"},{"title":"Budget \u0026 Spending Controls","href":"/guides/budget-controls"},{"title":"Terraform Provider","href":"/guides/terraform"},{"title":"Pulumi","href":"/guides/pulumi"},{"title":"Interactive Playground","href":"/guides/playground"},{"title":"OPA Integration","href":"/guides/opa-integration"},{"title":"Cedar Integration","href":"/guides/cedar-integration"},{"title":"Policy-as-Code","href":"/guides/policy-as-code"},{"title":"Usage Metering","href":"/guides/usage-metering"},{"title":"Custom Domains","href":"/guides/custom-domains"},{"title":"Trust Registry Setup","sidebarTitle":"Trust Registry Setup","href":"/guides/trust-registry-setup"},{"title":"MPP Integration Guide","sidebarTitle":"MPP Integration","href":"/guides/mpp-integration"},{"title":"MCP Certification Applications","sidebarTitle":"MCP Certification","href":"/guides/mcp-certification"},{"title":"Enterprise SSO","sidebarTitle":"Enterprise SSO","href":"/guides/enterprise-sso"},{"title":"Compliance Matrix","href":"/guides/compliance-matrix"},{"title":"Irregularity Detection Setup","sidebarTitle":"Irregularity Setup","href":"/guides/anomaly-detection-setup"},{"title":"Raspberry Pi Guide","sidebarTitle":"Raspberry Pi","href":"/guides/raspberry-pi"},{"title":"Android + Gemma 4 Guide","sidebarTitle":"Android","href":"/guides/android-gemma4"},{"title":"iOS + Gemma 4 Guide","sidebarTitle":"iOS","href":"/guides/ios-gemma4"},{"title":"Scope Enforcement","sidebarTitle":"Scope Enforcement","href":"/guides/scope-enforcement"},{"title":"Custom Manifests","sidebarTitle":"Custom Manifests","href":"/guides/custom-manifests"}]},{"group":"Case Studies","pages":[{"title":"AgenticOrg Case Study","sidebarTitle":"AgenticOrg","href":"/case-studies/agenticorg"}]},{"group":"Examples","pages":[{"title":"Quickstart (TypeScript)","sidebarTitle":"Quickstart (TS)","href":"/examples/quickstart-ts"},{"title":"Quickstart (Python)","sidebarTitle":"Quickstart (PY)","href":"/examples/quickstart-py"},{"title":"Next.js Starter","sidebarTitle":"Next.js Starter","href":"/examples/nextjs-starter"},{"title":"LangChain Agent","sidebarTitle":"LangChain","href":"/examples/langchain-agent"},{"title":"Vercel AI Chatbot","sidebarTitle":"Vercel AI","href":"/examples/vercel-ai-chatbot"},{"title":"CrewAI Agent","sidebarTitle":"CrewAI","href":"/examples/crewai-agent"},{"title":"OpenAI Agents SDK","sidebarTitle":"OpenAI Agents","href":"/examples/openai-agents"},{"title":"Google ADK","sidebarTitle":"Google ADK","href":"/examples/google-adk"},{"title":"Anthropic SDK Tool Use","sidebarTitle":"Anthropic","href":"/examples/anthropic-tool-use"},{"title":"Multi-Agent Email Flow","sidebarTitle":"Email Flow","href":"/examples/multi-agent-email-flow"},{"title":"Token Refresh \u0026 Rotation","sidebarTitle":"Token Refresh","href":"/examples/token-expiry-refresh"},{"title":"Audit Dashboard","sidebarTitle":"Audit Dashboard","href":"/examples/audit-dashboard"},{"title":"Quickstart: Gemma 4 Offline Auth","sidebarTitle":"Quickstart (Gemma 4)","href":"/examples/quickstart-gemma"}]}]},{"tab":"TypeScript SDK","pages":[{"title":"TypeScript SDK","href":"/sdks/typescript/overview"}]},{"tab":"Python SDK","pages":[{"title":"Python SDK","href":"/sdks/python/overview"}]},{"tab":"Go SDK","pages":[{"title":"Go SDK","href":"/sdks/go/overview"}]},{"tab":"Integrations","pages":[{"title":"Integrations","href":"/integrations/overview"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]},{"tab":"Protocol","pages":[{"title":"Protocol","href":"/protocol/specification"}]},{"tab":"Blog","pages":[{"title":"Blog","href":"/blog/oacp-one-trust-layer-under-ucp-acp-ap2"}]}]},"basePath":"","title":"SDK Execution Authority - Grantex","buildId":"dpl_5tKr6cUUeuVJdEZ9JAEY3h4soMJ8","deploymentId":"dpl_5tKr6cUUeuVJdEZ9JAEY3h4soMJ8","dynamics":[],"chunks":[]}