{
"error": "reloading — the server is applying a config reload; retry shortly",
"reloading": true
}
config
Merge env changes into the stored env and reload the fleet
Merge env changes into the stored env and reload this worker and the fleet.
A hot-class key is re-read in place. A recycle-class key rolls a worker recycle across the
fleet: the response’s recycle carries the roll’s rows (null when the roll had no worker
to visit: every worker’s reload confirmed no recycle-class key moved off its bound value, or the
only ones naming one were refused at their epoch build or are the writer whose own restart cannot
follow as its exit), and when the roll converged and this worker needs its own restart, it
recycles itself after replying — on the HTTP edge and on every projected tool door alike
(a post-reply graceful self-exit its supervisor respawns). A write run under a bound the roll’s
waits can outlast (a dispatched job’s budget, an armed turn budget) hands the roll to the bus
member it acts for, which carries it out after the reply and departs itself last, once the roll
converged, when it needs its own restart: roll_deferred is then true and
roll_deferred_to names that member, recyclenull and awaiting_respawn empty.
A change that cannot take effect is refused with a 400 before anything is written, naming
the key, under any spelling of its name: a key that locates the worker bus (a bus URL or the
bus namespace), a deployment / boot-identity (X-band) key no editor may set, and a key the
deployment sets (set it in the deployment’s environment and restart; removing its stored
copy is allowed).
secret_keys (when not None) replaces the operator’s secret marks in the same write;
the marks variable itself is never accepted as an env key.
An mcp selection list whose !ENV marker would resolve so that a tool something still
uses stops being picked is refused with a 409 naming the holders, a 503 with codemcp-server-starting while the server’s start is in progress or mcp-server-not-loaded
while this worker has not loaded the server, or a 502 with the recorded cause when this worker
holds no listing for the server and its last start or bind failed, before anything is written.
Called over MCP, the reload answers on the session that called it and then retires that session with
the generation it ran on: a later call on the same session fails (streamable HTTP answers it 404,
and an SSE session’s stream closes), so the client starts a new session to go on.
POST
/
api
/
config
/
env
Merge env changes into the stored env and reload the fleet
An env write: changes merged into the stored env, and optionally the whole set of secret marks.
env maps names to string values ("" deletes a name). secret_keys absent or
null leaves the stored marks untouched; a list REPLACES them ([] deletes them).
The standard mutation-op response: this worker's local reload result merged with the fleet fan-out summary.
env_keys is the count of env keys the reload loaded. recycle is the fleet recycle roll
the change ran — null when it had no worker to visit: every worker's reload confirmed no
recycle-class key moved off its bound value, or the only ones naming one were refused at their epoch
build or are the writer whose own restart cannot follow as its exit. awaiting_respawn is the
operation's verdict: the workers still awaiting a respawn after it (name + keys) — when the roll
converged and this worker recycles itself, only the workers whose reload was refused at their epoch
build: the stored config did not build on them and a restart may fail the same way, so the roll
leaves them running and lists them; a worker the roll did not reach keeps its keys.
roll_deferred is true
when the roll is not judged in this reply: roll_deferred_to then names the worker that
carries it out after the reply (recycle is null and awaiting_respawn empty), and
is null otherwise. span_release_error is null when the config store released its
exclusive write span after the persist; otherwise the store's error — the change landed and
the reload, broadcast and roll reported here still ran, but the store may still hold its write
span until the writer process exits, so a later write can block or be refused until then.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"TAI42","description":"tai is an open-source runtime for MCP tools, agents, and workflows — the server that hosts tools, agents, extensions, connectors, hooks, and storage for the TAI42 ecosystem.","colors":{"primary":"#DC143C","light":"#F4718A","dark":"#A01030"},"logo":{"light":"https://mintcdn.com/tai42/8zNeABFQpXRG0k_n/logo/light.png?fit=max\u0026auto=format\u0026n=8zNeABFQpXRG0k_n\u0026q=85\u0026s=2140f77615492c689d62fcb3a5df2d31","dark":"https://mintcdn.com/tai42/8zNeABFQpXRG0k_n/logo/dark.png?fit=max\u0026auto=format\u0026n=8zNeABFQpXRG0k_n\u0026q=85\u0026s=22db5fbcb0ff42b44dd8057f0edbb842"},"favicon":{"light":"https://mintcdn.com/tai42/8zNeABFQpXRG0k_n/logo/icon.png?fit=max\u0026auto=format\u0026n=8zNeABFQpXRG0k_n\u0026q=85\u0026s=93b0ca22f7b4a2c0a6a18f49aedbfd73","dark":"https://mintcdn.com/tai42/6-OGKPd0gfVyDs4N/logo/icon-dark.png?fit=max\u0026auto=format\u0026n=6-OGKPd0gfVyDs4N\u0026q=85\u0026s=e1630da05506747fe41cf300761cf3cf"},"appearance":{"default":"light"},"navbar":{"links":[{"icon":"github","href":"https://github.com/tai42ai/tai42","label":"GitHub"}],"primary":{"type":"button","label":"Get started","href":"/getting-started/installation"}},"footer":{"socials":{"github":"https://github.com/tai42ai","website":"https://tai42.ai"},"links":[{"header":"Project","items":[{"label":"Contributing","href":"/contributing"}]}]},"search":{"prompt":"Search the TAI42 docs"},"seo":{"metatags":{"og:title":"TAI42 — the OS for AI tools","og:description":"An open-source runtime for MCP tools, agents, and workflows.","og:image":"/images/og-image.svg","og:type":"website","twitter:card":"summary_large_image","twitter:title":"TAI42 — the OS for AI tools","twitter:image":"/images/og-image.svg"},"indexing":"navigable"},"fonts":{"heading":{"family":"Geist"},"body":{"family":"Inter"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"tai42","hasAudioNarration":false,"actualSubdomain":"tai42","customDomains":["docs.tai42.ai"],"gitSource":{"type":"github","owner":"tai42ai","repo":"tai-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"collectionId":"70c7974a-74c7-4ee5-8636-97a098b8bbe6","liveDeploymentHistoryId":"6aeca718754501e0c6b68d06","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aeca718754501e0c6b68d06"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6aecafc07e5e99a1eb7058ad","clientVersion":"0.0.4071","searchFilterCounts":[{"language":"default","tag":"Reference","count":356},{"language":"default","tag":"HTTP API","count":260},{"language":"default","tag":"Docs","count":124},{"language":"default","tag":"CLI","count":46},{"language":"default","tag":"Python SDK","count":38},{"language":"default","tag":"Concepts","count":35},{"language":"default","tag":"access-control","count":35},{"language":"default","tag":"states","count":33},{"language":"default","tag":"Plugins","count":30},{"language":"default","tag":"conversations","count":22}]},"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":"rbac-expansion","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":"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":"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":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"api-reference/config/merge-env-changes-into-the-stored-env-and-reload-the-fleet","slug":"/api-reference/config/merge-env-changes-into-the-stored-env-and-reload-the-fleet","pageMetadata":{"title":"Merge env changes into the stored env and reload the fleet","description":"Merge env changes into the stored env and reload this worker and the fleet.\n\nA hot-class key is re-read in place. A recycle-class key rolls a worker recycle across the\nfleet: the response's ``recycle`` carries the roll's rows (``null`` when the roll had no worker\nto visit: every worker's reload confirmed no recycle-class key moved off its bound value, or the\nonly ones naming one were refused at their epoch build or are the writer whose own restart cannot\nfollow as its exit), and when the roll converged and this worker needs its own restart, it\nrecycles itself after replying — on the HTTP edge and on every projected tool door alike\n(a post-reply graceful self-exit its supervisor respawns). A write run under a bound the roll's\nwaits can outlast (a dispatched job's budget, an armed turn budget) hands the roll to the bus\nmember it acts for, which carries it out after the reply and departs itself last, once the roll\nconverged, when it needs its own restart: ``roll_deferred`` is then ``true`` and\n``roll_deferred_to`` names that member, ``recycle`` ``null`` and ``awaiting_respawn`` empty.\nA change that cannot take effect is refused with a 400 before anything is written, naming\nthe key, under any spelling of its name: a key that locates the worker bus (a bus URL or the\nbus namespace), a deployment / boot-identity (X-band) key no editor may set, and a key the\ndeployment sets (set it in the deployment's environment and restart; removing its stored\ncopy is allowed).\n\n``secret_keys`` (when not ``None``) replaces the operator's secret marks in the same write;\nthe marks variable itself is never accepted as an ``env`` key.\nAn ``mcp`` selection list whose ``!ENV`` marker would resolve so that a tool something still\nuses stops being picked is refused with a 409 naming the holders, a 503 with ``code``\n``mcp-server-starting`` while the server's start is in progress or ``mcp-server-not-loaded``\nwhile this worker has not loaded the server, or a 502 with the recorded cause when this worker\nholds no listing for the server and its last start or bind failed, before anything is written.\n\nCalled over MCP, the reload answers on the session that called it and then retires that session with\nthe generation it ran on: a later call on the same session fails (streamable HTTP answers it 404,\nand an SSE session's stream closes), so the client starts a new session to go on.","deprecated":null,"version":null,"openapi":"/openapi.json post /api/config/env","href":"/api-reference/config/merge-env-changes-into-the-stored-env-and-reload-the-fleet","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Merge env changes into the stored env and reload this worker and the fleet.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"A hot-class key is re-read in place. A recycle-class key rolls a worker recycle across the\\nfleet: the response’s \", _jsx(_components.code, {\n children: \"recycle\"\n }), \" carries the roll’s rows (\", _jsx(_components.code, {\n children: \"null\"\n }), \" when the roll had no worker\\nto visit: every worker’s reload confirmed no recycle-class key moved off its bound value, or the\\nonly ones naming one were refused at their epoch build or are the writer whose own restart cannot\\nfollow as its exit), and when the roll converged and this worker needs its own restart, it\\nrecycles itself after replying — on the HTTP edge and on every projected tool door alike\\n(a post-reply graceful self-exit its supervisor respawns). A write run under a bound the roll’s\\nwaits can outlast (a dispatched job’s budget, an armed turn budget) hands the roll to the bus\\nmember it acts for, which carries it out after the reply and departs itself last, once the roll\\nconverged, when it needs its own restart: \", _jsx(_components.code, {\n children: \"roll_deferred\"\n }), \" is then \", _jsx(_components.code, {\n children: \"true\"\n }), \" and\\n\", _jsx(_components.code, {\n children: \"roll_deferred_to\"\n }), \" names that member, \", _jsx(_components.code, {\n children: \"recycle\"\n }), \" \", _jsx(_components.code, {\n children: \"null\"\n }), \" and \", _jsx(_components.code, {\n children: \"awaiting_respawn\"\n }), \" empty.\\nA change that cannot take effect is refused with a 400 before anything is written, naming\\nthe key, under any spelling of its name: a key that locates the worker bus (a bus URL or the\\nbus namespace), a deployment / boot-identity (X-band) key no editor may set, and a key the\\ndeployment sets (set it in the deployment’s environment and restart; removing its stored\\ncopy is allowed).\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"secret_keys\"\n }), \" (when not \", _jsx(_components.code, {\n children: \"None\"\n }), \") replaces the operator’s secret marks in the same write;\\nthe marks variable itself is never accepted as an \", _jsx(_components.code, {\n children: \"env\"\n }), \" key.\\nAn \", _jsx(_components.code, {\n children: \"mcp\"\n }), \" selection list whose \", _jsx(_components.code, {\n children: \"!ENV\"\n }), \" marker would resolve so that a tool something still\\nuses stops being picked is refused with a 409 naming the holders, a 503 with \", _jsx(_components.code, {\n children: \"code\"\n }), \"\\n\", _jsx(_components.code, {\n children: \"mcp-server-starting\"\n }), \" while the server’s start is in progress or \", _jsx(_components.code, {\n children: \"mcp-server-not-loaded\"\n }), \"\\nwhile this worker has not loaded the server, or a 502 with the recorded cause when this worker\\nholds no listing for the server and its last start or bind failed, before anything is written.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Called over MCP, the reload answers on the session that called it and then retires that session with\\nthe generation it ran on: a later call on the same session fails (streamable HTTP answers it 404,\\nand an SSE session’s stream closes), so the client starts a new session to go on.\"\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Merge env changes into the stored env and reload the fleet","description":"Merge env changes into the stored env and reload this worker and the fleet.\n\nA hot-class key is re-read in place. A recycle-class key rolls a worker recycle across the\nfleet: the response's ``recycle`` carries the roll's rows (``null`` when the roll had no worker\nto visit: every worker's reload confirmed no recycle-class key moved off its bound value, or the\nonly ones naming one were refused at their epoch build or are the writer whose own restart cannot\nfollow as its exit), and when the roll converged and this worker needs its own restart, it\nrecycles itself after replying — on the HTTP edge and on every projected tool door alike\n(a post-reply graceful self-exit its supervisor respawns). A write run under a bound the roll's\nwaits can outlast (a dispatched job's budget, an armed turn budget) hands the roll to the bus\nmember it acts for, which carries it out after the reply and departs itself last, once the roll\nconverged, when it needs its own restart: ``roll_deferred`` is then ``true`` and\n``roll_deferred_to`` names that member, ``recycle`` ``null`` and ``awaiting_respawn`` empty.\nA change that cannot take effect is refused with a 400 before anything is written, naming\nthe key, under any spelling of its name: a key that locates the worker bus (a bus URL or the\nbus namespace), a deployment / boot-identity (X-band) key no editor may set, and a key the\ndeployment sets (set it in the deployment's environment and restart; removing its stored\ncopy is allowed).\n\n``secret_keys`` (when not ``None``) replaces the operator's secret marks in the same write;\nthe marks variable itself is never accepted as an ``env`` key.\nAn ``mcp`` selection list whose ``!ENV`` marker would resolve so that a tool something still\nuses stops being picked is refused with a 409 naming the holders, a 503 with ``code``\n``mcp-server-starting`` while the server's start is in progress or ``mcp-server-not-loaded``\nwhile this worker has not loaded the server, or a 502 with the recorded cause when this worker\nholds no listing for the server and its last start or bind failed, before anything is written.\n\nCalled over MCP, the reload answers on the session that called it and then retires that session with\nthe generation it ran on: a later call on the same session fails (streamable HTTP answers it 404,\nand an SSE session's stream closes), so the client starts a new session to go on.","deprecated":null,"version":null,"openapi":"/openapi.json post /api/config/env","href":"/api-reference/config/merge-env-changes-into-the-stored-env-and-reload-the-fleet","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"description":"Merge env changes into the stored env and reload this worker and the fleet.\n\nA hot-class key is re-read in place. A recycle-class key rolls a worker recycle across the\nfleet: the response's ``recycle`` carries the roll's rows (``null`` when the roll had no worker\nto visit: every worker's reload confirmed no recycle-class key moved off its bound value, or the\nonly ones naming one were refused at their epoch build or are the writer whose own restart cannot\nfollow as its exit), and when the roll converged and this worker needs its own restart, it\nrecycles itself after replying — on the HTTP edge and on every projected tool door alike\n(a post-reply graceful self-exit its supervisor respawns). A write run under a bound the roll's\nwaits can outlast (a dispatched job's budget, an armed turn budget) hands the roll to the bus\nmember it acts for, which carries it out after the reply and departs itself last, once the roll\nconverged, when it needs its own restart: ``roll_deferred`` is then ``true`` and\n``roll_deferred_to`` names that member, ``recycle`` ``null`` and ``awaiting_respawn`` empty.\nA change that cannot take effect is refused with a 400 before anything is written, naming\nthe key, under any spelling of its name: a key that locates the worker bus (a bus URL or the\nbus namespace), a deployment / boot-identity (X-band) key no editor may set, and a key the\ndeployment sets (set it in the deployment's environment and restart; removing its stored\ncopy is allowed).\n\n``secret_keys`` (when not ``None``) replaces the operator's secret marks in the same write;\nthe marks variable itself is never accepted as an ``env`` key.\nAn ``mcp`` selection list whose ``!ENV`` marker would resolve so that a tool something still\nuses stops being picked is refused with a 409 naming the holders, a 503 with ``code``\n``mcp-server-starting`` while the server's start is in progress or ``mcp-server-not-loaded``\nwhile this worker has not loaded the server, or a 502 with the recorded cause when this worker\nholds no listing for the server and its last start or bind failed, before anything is written.\n\nCalled over MCP, the reload answers on the session that called it and then retires that session with\nthe generation it ran on: a later call on the same session fails (streamable HTTP answers it 404,\nand an SSE session's stream closes), so the client starts a new session to go on.","operationId":"post_api_config_env","requestBody":"af6fc80b-5f8f-4f4e-84be-9f476209fbd5","responses":{"200":"6536243f-a88d-47e0-990d-cc7daebb7745","400":"e3f58b79-87a7-4eb6-ad34-fe31ca03fae4","401":"8465019b-4544-4798-9634-c8529a7553e1","409":"c8df5c00-643b-48c2-a020-38afceddeb89","502":"0f3691d1-7070-47df-8e05-c64552d4f523","503":"cd525fec-574f-44d0-82e7-518cf16f6c20"},"security":["33ef7eb6-74fb-447a-bec0-39017b31f08d"],"summary":"Merge env changes into the stored env and reload the fleet","tags":["config"],"x-destructive":true,"method":"post","type":"path","servers":[],"path":"/api/config/env","baseUrlOptions":[],"title":"Merge env changes into the stored env and reload the fleet","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"description":"An env write: changes merged into the stored env, and optionally the whole set of secret marks.\n\n``env`` maps names to string values (``\"\"`` deletes a name). ``secret_keys`` absent or\n``null`` leaves the stored marks untouched; a list REPLACES them (``[]`` deletes them).","properties":{"env":{"additionalProperties":{"type":"string","uniqueKey":"env.additionalProperties","typeLabel":"string"},"title":"Env","type":"object","isRequired":true,"uniqueKey":"env","typeLabel":"Env · object"},"secret_keys":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"secret_keys.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Secret Keys","uniqueKey":"secret_keys.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Secret Keys","uniqueKey":"secret_keys.oneOf.1","typeLabel":"null"}],"uniqueKey":"secret_keys","typeLabel":"string[] | null"}},"required":["env"],"title":"EnvUpdate","type":"object","uniqueKey":"","typeLabel":"EnvUpdate · object"},"examples":{"Example":{"title":"Example","value":{"env":{},"secret_keys":["\u003cstring>"]}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"6536243f-a88d-47e0-990d-cc7daebb7745":{"content":{"application/json":{"schema":{"properties":{"data":{"description":"The standard mutation-op response: this worker's local reload result merged with the fleet fan-out summary.\n\n``env_keys`` is the count of env keys the reload loaded. ``recycle`` is the fleet recycle roll\nthe change ran — ``null`` when it had no worker to visit: every worker's reload confirmed no\nrecycle-class key moved off its bound value, or the only ones naming one were refused at their epoch\nbuild or are the writer whose own restart cannot follow as its exit. ``awaiting_respawn`` is the\noperation's verdict: the workers still awaiting a respawn after it (name + keys) — when the roll\nconverged and this worker recycles itself, only the workers whose reload was refused at their epoch\nbuild: the stored config did not build on them and a restart may fail the same way, so the roll\nleaves them running and lists them; a worker the roll did not reach keeps its keys.\n``roll_deferred`` is ``true``\nwhen the roll is not judged in this reply: ``roll_deferred_to`` then names the worker that\ncarries it out after the reply (``recycle`` is ``null`` and ``awaiting_respawn`` empty), and\nis ``null`` otherwise. ``span_release_error`` is ``null`` when the config store released its\nexclusive write span after the persist; otherwise the store's error — the change landed and\nthe reload, broadcast and roll reported here still ran, but the store may still hold its write\nspan until the writer process exits, so a later write can block or be refused until then.","properties":{"env_keys":{"title":"Env Keys","type":"integer","isRequired":true,"uniqueKey":"data.env_keys","typeLabel":"integer"},"fanout":{"description":"The mode-tagged fan-out summary embedded under a mutation response's ``fanout`` field.\n\n``mode`` selects the shape: ``local-only`` carries only ``note`` (a lone\nworker reached no sibling); ``fleet`` and ``unreachable`` carry the per-worker\nbroadcast report (``op``/``reachable``/``local_only``/``results``/``error``),\nthe ``unreachable`` variant having no worker list, only ``error``. The\nmode-variant fields are optional so one model describes every mode without\nreshaping any wire payload.","properties":{"mode":{"title":"Mode","type":"string","isRequired":true,"uniqueKey":"data.fanout.mode","typeLabel":"string"},"error":{"oneOf":[{"type":"string","title":"Error","uniqueKey":"data.fanout.error.oneOf.0","typeLabel":"string"},{"type":"null","title":"Error","uniqueKey":"data.fanout.error.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.fanout.error","typeLabel":"string | null"},"local_only":{"oneOf":[{"type":"boolean","title":"Local Only","uniqueKey":"data.fanout.local_only.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Local Only","uniqueKey":"data.fanout.local_only.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.fanout.local_only","typeLabel":"boolean | null"},"note":{"oneOf":[{"type":"string","title":"Note","uniqueKey":"data.fanout.note.oneOf.0","typeLabel":"string"},{"type":"null","title":"Note","uniqueKey":"data.fanout.note.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.fanout.note","typeLabel":"string | null"},"op":{"oneOf":[{"type":"string","title":"Op","uniqueKey":"data.fanout.op.oneOf.0","typeLabel":"string"},{"type":"null","title":"Op","uniqueKey":"data.fanout.op.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.fanout.op","typeLabel":"string | null"},"reachable":{"oneOf":[{"type":"boolean","title":"Reachable","uniqueKey":"data.fanout.reachable.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Reachable","uniqueKey":"data.fanout.reachable.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.fanout.reachable","typeLabel":"boolean | null"},"results":{"oneOf":[{"type":"array","items":{"description":"One worker's verdict within a multi-worker fan-out report.\n\n``payload`` carries a query op's per-worker data; ``error`` a failed apply's\nmessage; ``detail`` the publisher's note for a computed missing/departed/\ntimed-out verdict. ``outcome`` is the worker's terminal outcome as its wire\nstring.","properties":{"name":{"title":"Name","type":"string","isRequired":true,"uniqueKey":"data.fanout.results.oneOf.0.items.[INDEX].name","typeLabel":"string"},"outcome":{"title":"Outcome","type":"string","isRequired":true,"uniqueKey":"data.fanout.results.oneOf.0.items.[INDEX].outcome","typeLabel":"string"},"detail":{"oneOf":[{"type":"string","title":"Detail","uniqueKey":"data.fanout.results.oneOf.0.items.[INDEX].detail.oneOf.0","typeLabel":"string"},{"type":"null","title":"Detail","uniqueKey":"data.fanout.results.oneOf.0.items.[INDEX].detail.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.fanout.results.oneOf.0.items.[INDEX].detail","typeLabel":"string | null"},"error":{"oneOf":[{"type":"string","title":"Error","uniqueKey":"data.fanout.results.oneOf.0.items.[INDEX].error.oneOf.0","typeLabel":"string"},{"type":"null","title":"Error","uniqueKey":"data.fanout.results.oneOf.0.items.[INDEX].error.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.fanout.results.oneOf.0.items.[INDEX].error","typeLabel":"string | null"},"payload":{"oneOf":[{},{"type":"null","uniqueKey":"data.fanout.results.oneOf.0.items.[INDEX].payload.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.fanout.results.oneOf.0.items.[INDEX].payload","typeLabel":"null"}},"required":["name","outcome"],"title":"FanoutWorkerResult","type":"object","uniqueKey":"data.fanout.results.oneOf.0.items.[INDEX]","typeLabel":"FanoutWorkerResult · object"},"title":"Results","uniqueKey":"data.fanout.results.oneOf.0","typeLabel":"FanoutWorkerResult · object[]"},{"type":"null","title":"Results","uniqueKey":"data.fanout.results.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.fanout.results","typeLabel":"FanoutWorkerResult · object[] | null"}},"required":["mode"],"title":"FanoutSummary","type":"object","isRequired":true,"uniqueKey":"data.fanout","typeLabel":"FanoutSummary · object"},"status":{"title":"Status","type":"string","isRequired":true,"uniqueKey":"data.status","typeLabel":"string"},"awaiting_respawn":{"items":{"description":"One worker an operation names as still awaiting a respawn.\n\nIts recycle-class ``keys`` changed in the stored env since its process bound them (at boot, or\nwhen the plugin that declares them was loaded), and nothing in the operation respawns it.","properties":{"keys":{"items":{"type":"string","uniqueKey":"data.awaiting_respawn.items.[INDEX].keys.items.[INDEX]","typeLabel":"string"},"title":"Keys","type":"array","isRequired":true,"uniqueKey":"data.awaiting_respawn.items.[INDEX].keys","typeLabel":"string[]"},"name":{"title":"Name","type":"string","isRequired":true,"uniqueKey":"data.awaiting_respawn.items.[INDEX].name","typeLabel":"string"}},"required":["name","keys"],"title":"AwaitingWorker","type":"object","uniqueKey":"data.awaiting_respawn.items.[INDEX]","typeLabel":"AwaitingWorker · object"},"title":"Awaiting Respawn","type":"array","uniqueKey":"data.awaiting_respawn","typeLabel":"AwaitingWorker · object[]"},"recycle":{"oneOf":[{"type":"object","title":"RecycleRoll","description":"The report of a fleet recycle roll a reload ran for the workers that needed a restart.\n\nA worker needs a restart when its reload reported a recycle-class key moved off the value it\nbound. A worker whose reload was refused at its epoch build (the build discarded before its\nswap) is never restarted, even when it reports such a key: the stored config did not build on it\nand a restart may fail the same way, so it keeps serving its current config; a failed discard is\nno refused build, and leaves the worker's state unknown. A worker other than the writer whose\nstate was unknown is asked once it is ready and restarted unless its reply confirms it clean or\nstates a refused build (its line then ``withheld``). The writer is never asked at its own roll:\nwhen its own state is unknown, its restart is left to its post-response self-exit, armed only\nwhen the roll converged and the reply can carry one (then its ``self-deferred`` line).\n``recycle`` the worker lines of the roll\n(the writer's own ``self-deferred`` line when its post-response self-exit is armed); ``skipped``\nthe workers whose reload confirmed no such key, at the reload or when asked once ready, left\nrunning; ``fresh`` the new ready lives seen since the change began; ``recycle_stopped`` is\n``null`` when the roll ran to its end, otherwise where it stopped and why. Names only — never\nenv values.","required":["recycle","skipped","fresh"],"properties":{"fresh":{"items":{"description":"One newly-ready worker life observed since the pre-apply snapshot.","properties":{"generation":{"title":"Generation","type":"integer","isRequired":true,"uniqueKey":"data.recycle.oneOf.0.fresh.items.[INDEX].generation","typeLabel":"integer"},"kind":{"title":"Kind","type":"string","isRequired":true,"uniqueKey":"data.recycle.oneOf.0.fresh.items.[INDEX].kind","typeLabel":"string"},"name":{"title":"Name","type":"string","isRequired":true,"uniqueKey":"data.recycle.oneOf.0.fresh.items.[INDEX].name","typeLabel":"string"}},"required":["name","kind","generation"],"title":"FreshLife","type":"object","uniqueKey":"data.recycle.oneOf.0.fresh.items.[INDEX]","typeLabel":"FreshLife · object"},"title":"Fresh","type":"array","isRequired":true,"uniqueKey":"data.recycle.oneOf.0.fresh","typeLabel":"FreshLife · object[]"},"recycle":{"items":{"description":"One worker line of a fleet recycle roll.\n\n``status`` is ``recycled`` (confirmed on reality), ``timed-out`` or ``failed`` (the target the\nroll stopped at), ``self-deferred`` (a restart the roll cannot confirm: the writer's own\npost-response self-exit, or a target whose exit is held by its own in-flight change and runs\nonce that change's reply is answered), or ``withheld``\n(a worker asked once ready whose reload was refused at its epoch build — the build discarded\nbefore its swap — yet reports a recycle-class key: the stored config did not build on it and a\nrestart may fail the same way, so the roll leaves it running on its current config). ``keys``\nare the recycle-class keys that worker's reload reported as moved off the value it bound them\nunder — the reason it was restarted, or for a ``withheld`` worker the keys it still awaits;\nempty for a worker restarted because its state stayed unknown. A worker other than the writer\nwhose state was unknown is asked once it is ready and restarted unless its reply confirms it\nclean or states a refused build (its line then ``withheld``). The writer is never asked at its\nown roll: when its own state is unknown, its restart is left to its post-response self-exit,\narmed only when the roll converged and the reply can carry one (then its ``self-deferred``\nline). ``detail`` names what left that\nworker's state unknown (its reload outcome, no report row, a malformed reply, an unreachable\nbus) with what it answered when asked once ready, and why a ``timed-out`` / ``failed`` target\ndid not converge, joined with ``\"; \"``; ``null`` when none applies.","properties":{"generation_before":{"title":"Generation Before","type":"integer","isRequired":true,"uniqueKey":"data.recycle.oneOf.0.recycle.items.[INDEX].generation_before","typeLabel":"integer"},"keys":{"items":{"type":"string","uniqueKey":"data.recycle.oneOf.0.recycle.items.[INDEX].keys.items.[INDEX]","typeLabel":"string"},"title":"Keys","type":"array","isRequired":true,"uniqueKey":"data.recycle.oneOf.0.recycle.items.[INDEX].keys","typeLabel":"string[]"},"kind":{"title":"Kind","type":"string","isRequired":true,"uniqueKey":"data.recycle.oneOf.0.recycle.items.[INDEX].kind","typeLabel":"string"},"name":{"title":"Name","type":"string","isRequired":true,"uniqueKey":"data.recycle.oneOf.0.recycle.items.[INDEX].name","typeLabel":"string"},"status":{"title":"Status","type":"string","isRequired":true,"uniqueKey":"data.recycle.oneOf.0.recycle.items.[INDEX].status","typeLabel":"string"},"detail":{"oneOf":[{"type":"string","title":"Detail","uniqueKey":"data.recycle.oneOf.0.recycle.items.[INDEX].detail.oneOf.0","typeLabel":"string"},{"type":"null","title":"Detail","uniqueKey":"data.recycle.oneOf.0.recycle.items.[INDEX].detail.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.recycle.oneOf.0.recycle.items.[INDEX].detail","typeLabel":"string | null"}},"required":["name","kind","status","generation_before","keys"],"title":"RecycleEntry","type":"object","uniqueKey":"data.recycle.oneOf.0.recycle.items.[INDEX]","typeLabel":"RecycleEntry · object"},"title":"Recycle","type":"array","isRequired":true,"uniqueKey":"data.recycle.oneOf.0.recycle","typeLabel":"RecycleEntry · object[]"},"skipped":{"items":{"type":"string","uniqueKey":"data.recycle.oneOf.0.skipped.items.[INDEX]","typeLabel":"string"},"title":"Skipped","type":"array","isRequired":true,"uniqueKey":"data.recycle.oneOf.0.skipped","typeLabel":"string[]"},"recycle_stopped":{"oneOf":[{"type":"object","title":"RecycleStop","description":"Where a profile apply's recycle roll stopped and why.\n\n``name`` is the target the roll stopped at (its line in ``recycle`` carries the\ntarget's own outcome), or ``null`` when the bus could not be read before a target was\nreached.","required":["kind","name","detail"],"properties":{"detail":{"title":"Detail","type":"string","isRequired":true,"uniqueKey":"data.recycle.oneOf.0.recycle_stopped.oneOf.0.detail","typeLabel":"string"},"kind":{"title":"Kind","type":"string","isRequired":true,"uniqueKey":"data.recycle.oneOf.0.recycle_stopped.oneOf.0.kind","typeLabel":"string"},"name":{"oneOf":[{"type":"string","title":"Name","isRequired":true,"uniqueKey":"data.recycle.oneOf.0.recycle_stopped.oneOf.0.name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Name","isRequired":true,"uniqueKey":"data.recycle.oneOf.0.recycle_stopped.oneOf.0.name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.recycle.oneOf.0.recycle_stopped.oneOf.0.name","typeLabel":"string | null"}},"uniqueKey":"data.recycle.oneOf.0.recycle_stopped.oneOf.0","typeLabel":"RecycleStop · object"},{"type":"null","uniqueKey":"data.recycle.oneOf.0.recycle_stopped.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.recycle.oneOf.0.recycle_stopped","typeLabel":"RecycleStop · object | null"}},"uniqueKey":"data.recycle.oneOf.0","typeLabel":"RecycleRoll · object"},{"type":"null","uniqueKey":"data.recycle.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.recycle","typeLabel":"RecycleRoll · object | null"},"roll_deferred":{"default":false,"title":"Roll Deferred","type":"boolean","uniqueKey":"data.roll_deferred","typeLabel":"boolean"},"roll_deferred_to":{"oneOf":[{"type":"string","title":"Roll Deferred To","uniqueKey":"data.roll_deferred_to.oneOf.0","typeLabel":"string"},{"type":"null","title":"Roll Deferred To","uniqueKey":"data.roll_deferred_to.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.roll_deferred_to","typeLabel":"string | null"},"span_release_error":{"oneOf":[{"type":"string","title":"Span Release Error","uniqueKey":"data.span_release_error.oneOf.0","typeLabel":"string"},{"type":"null","title":"Span Release Error","uniqueKey":"data.span_release_error.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.span_release_error","typeLabel":"string | null"}},"required":["status","env_keys","fanout"],"title":"ApplyResponse","type":"object","isRequired":true,"uniqueKey":"data","typeLabel":"ApplyResponse · object"}},"required":["data"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"data":{"env_keys":123,"fanout":{"mode":"\u003cstring>","error":"\u003cstring>","local_only":true,"note":"\u003cstring>","op":"\u003cstring>","reachable":true,"results":[{"name":"\u003cstring>","outcome":"\u003cstring>","detail":"\u003cstring>","error":"\u003cstring>","payload":"\u003cunknown>"}]},"status":"\u003cstring>","awaiting_respawn":[{"keys":["\u003cstring>"],"name":"\u003cstring>"}],"recycle":{"fresh":[{"generation":123,"kind":"\u003cstring>","name":"\u003cstring>"}],"recycle":[{"generation_before":123,"keys":["\u003cstring>"],"kind":"\u003cstring>","name":"\u003cstring>","status":"\u003cstring>","detail":"\u003cstring>"}],"skipped":["\u003cstring>"],"recycle_stopped":{"detail":"\u003cstring>","kind":"\u003cstring>","name":"\u003cstring>"}},"roll_deferred":false,"roll_deferred_to":"\u003cstring>","span_release_error":"\u003cstring>"}}}},"exampleType":"generated"}},"description":"Success.","exampleType":"generated"},"e3f58b79-87a7-4eb6-ad34-fe31ca03fae4":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"description":"Stable machine-readable reason a client keys a dedicated error state on, present on refusals that opt in (e.g. a 501 not-configured refusal). Optional: absent when the error carries only a human-readable message.","type":"string","uniqueKey":"code","typeLabel":"string"}},"required":["error"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"\u003cstring>"}}},"exampleType":"generated"}},"description":"Malformed request.","exampleType":"generated"},"8465019b-4544-4798-9634-c8529a7553e1":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"description":"Stable machine-readable reason a client keys a dedicated error state on, present on refusals that opt in (e.g. a 501 not-configured refusal). Optional: absent when the error carries only a human-readable message.","type":"string","uniqueKey":"code","typeLabel":"string"}},"required":["error"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"\u003cstring>"}}},"exampleType":"generated"}},"description":"Missing or invalid api key.","exampleType":"generated"},"c8df5c00-643b-48c2-a020-38afceddeb89":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"description":"Stable machine-readable reason a client keys a dedicated error state on, present on refusals that opt in (e.g. a 501 not-configured refusal). Optional: absent when the error carries only a human-readable message.","type":"string","uniqueKey":"code","typeLabel":"string"}},"required":["error"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"\u003cstring>"}}},"exampleType":"generated"}},"description":"Conflict with the current resource state.","exampleType":"generated"},"0f3691d1-7070-47df-8e05-c64552d4f523":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"description":"Stable machine-readable reason a client keys a dedicated error state on, present on refusals that opt in (e.g. a 501 not-configured refusal). Optional: absent when the error carries only a human-readable message.","type":"string","uniqueKey":"code","typeLabel":"string"}},"required":["error"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"\u003cstring>"}}},"exampleType":"generated"}},"description":"Error.","exampleType":"generated"},"cd525fec-574f-44d0-82e7-518cf16f6c20":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["error","reloading"],"properties":{"error":{"const":"reloading — the server is applying a config reload; retry shortly","type":"string","isRequired":true,"uniqueKey":"oneOf.0.error","typeLabel":"string"},"reloading":{"const":true,"type":"boolean","isRequired":true,"uniqueKey":"oneOf.0.reloading","typeLabel":"boolean"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","required":["error"],"properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.error","typeLabel":"string"},"code":{"description":"Stable machine-readable reason a client keys a dedicated error state on, present on refusals that opt in (e.g. a 501 not-configured refusal). Optional: absent when the error carries only a human-readable message.","type":"string","uniqueKey":"oneOf.1.code","typeLabel":"string"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"reloading — the server is applying a config reload; retry shortly","reloading":true}}},"exampleType":"generated"}},"description":"The server is applying a config reload, or a dependency this route needs is temporarily unavailable; retry shortly.","headers":{"Retry-After":{"description":"Seconds to wait before retrying; carried by the reloading answer.","schema":{"type":"integer"}}},"exampleType":"generated"}},"security":{"33ef7eb6-74fb-447a-bec0-39017b31f08d":{"ApiKeyAuth":{"in":"header","name":"x-api-key","type":"apiKey","scopes":[],"schemeName":"ApiKeyAuth"}}},"servers":{},"processedSecurityOptions":[{"schemes":[{"scheme":{"in":"header","name":"x-api-key","type":"apiKey","scopes":[],"schemeName":"ApiKeyAuth"},"schema":{"title":"x-api-key","type":"string","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKeyAuth","name":"x-api-key"}],"title":"ApiKeyAuth"}]},"originalFileLocation":"openapi.json"},"subdomain":"tai42","siteName":"TAI42","title":"TAI42 — the OS for AI tools","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-05T00:56:34.859Z","originalFileLocation":"api-reference/config/merge-env-changes-into-the-stored-env-and-reload-the-fleet.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Merge env changes into the stored env and reload this worker and the fleet. A hot-class key is re-read in place. A recycle-class key rolls a worker recycle across the fleet: the response\u0026#x27;s recycle carries the roll\u0026#x27;s rows (null when the roll had no worker to visit: every worker\u0026#x27;s reload confirmed no recycle-class key moved off its bound value, or the only ones naming one were refused at their epoch build or are the writer whose own restart cannot follow as its exit), and when the roll converged and this worker needs its own restart, it recycles itself after replying — on the HTTP edge and on every projected tool door alike (a post-reply graceful self-exit its supervisor respawns). A write run under a bound the roll\u0026#x27;s waits can outlast (a dispatched job\u0026#x27;s budget, an armed turn budget) hands the roll to the bus member it acts for, which carries it out after the reply and departs itself last, once the roll converged, when it needs its own restart: roll_deferred is then true and roll_deferred_to names that member, recycle null and awaiting_respawn empty. A change that cannot take effect is refused with a 400 before anything is written, naming the key, under any spelling of its name: a key that locates the worker bus (a bus URL or the bus namespace), a deployment / boot-identity (X-band) key no editor may set, and a key the deployment sets (set it in the deployment\u0026#x27;s environment and restart; removing its stored copy is allowed). secret_keys (when not None) replaces the operator\u0026#x27;s secret marks in the same write; the marks variable itself is never accepted as an env key. An mcp selection list whose !ENV marker would resolve so that a tool something still uses stops being picked is refused with a 409 naming the holders, a 503 with code mcp-server-starting while the server\u0026#x27;s start is in progress or mcp-server-not-loaded while this worker has not loaded the server, or a 502 with the recorded cause when this worker holds no listing for the server and its last start or bind failed, before anything is written. Called over MCP, the reload answers on the session that called it and then retires that session with the generation it ran on: a later call on the same session fails (streamable HTTP answers it 404, and an SSE session\u0026#x27;s stream closes), so the client starts a new session to go on.\">\u003cmeta data-mint-head name=\"application-name\" content=\"TAI42\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/tai42/Czx60dmBXmcmJLcB/_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/tai42/Czx60dmBXmcmJLcB/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/tai42/Czx60dmBXmcmJLcB/_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/tai42/Czx60dmBXmcmJLcB/_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/tai42/Czx60dmBXmcmJLcB/_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/tai42/Czx60dmBXmcmJLcB/_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/tai42/Czx60dmBXmcmJLcB/_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/tai42/Czx60dmBXmcmJLcB/_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/tai42/Czx60dmBXmcmJLcB/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"TAI42 — the OS for AI tools\">\u003cmeta data-mint-head property=\"og:description\" content=\"An open-source runtime for MCP tools, agents, and workflows.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"TAI42\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.tai42.ai/api-reference/config/merge-env-changes-into-the-stored-env-and-reload-the-fleet\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://tai42.mintlify.app/images/og-image.svg\">\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=\"TAI42 — the OS for AI tools\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"An open-source runtime for MCP tools, agents, and workflows.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://tai42.mintlify.app/images/og-image.svg\">\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/tai42/Czx60dmBXmcmJLcB/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"TAI42\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#DC143C\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.tai42.ai/api-reference/config/merge-env-changes-into-the-stored-env-and-reload-the-fleet\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/config/merge-env-changes-into-the-stored-env-and-reload-the-fleet.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.tai42.ai/#organization\",\"name\":\"TAI42\",\"url\":\"https://docs.tai42.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/tai42/8zNeABFQpXRG0k_n/logo/light.png?fit=max\u0026auto=format\u0026n=8zNeABFQpXRG0k_n\u0026q=85\u0026s=2140f77615492c689d62fcb3a5df2d31\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.tai42.ai#website\",\"name\":\"TAI42\",\"url\":\"https://docs.tai42.ai\",\"publisher\":{\"@id\":\"https://docs.tai42.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.tai42.ai/api-reference/config/merge-env-changes-into-the-stored-env-and-reload-the-fleet#webpage\",\"url\":\"https://docs.tai42.ai/api-reference/config/merge-env-changes-into-the-stored-env-and-reload-the-fleet\",\"name\":\"Merge env changes into the stored env and reload the fleet\",\"description\":\"Merge env changes into the stored env and reload this worker and the fleet. A hot-class key is re-read in place. A recycle-class key rolls a worker recycle across the fleet: the response's recycle carries the roll's rows (null when the roll had no worker to visit: every worker's reload confirmed no recycle-class key moved off its bound value, or the only ones naming one were refused at their epoch build or are the writer whose own restart cannot follow as its exit), and when the roll converged and this worker needs its own restart, it recycles itself after replying — on the HTTP edge and on every projected tool door alike (a post-reply graceful self-exit its supervisor respawns). A write run under a bound the roll's waits can outlast (a dispatched job's budget, an armed turn budget) hands the roll to the bus member it acts for, which carries it out after the reply and departs itself last, once the roll converged, when it needs its own restart: roll_deferred is then true and roll_deferred_to names that member, recycle null and awaiting_respawn empty. A change that cannot take effect is refused with a 400 before anything is written, naming the key, under any spelling of its name: a key that locates the worker bus (a bus URL or the bus namespace), a deployment / boot-identity (X-band) key no editor may set, and a key the deployment sets (set it in the deployment's environment and restart; removing its stored copy is allowed). secret_keys (when not None) replaces the operator's secret marks in the same write; the marks variable itself is never accepted as an env key. An mcp selection list whose !ENV marker would resolve so that a tool something still uses stops being picked is refused with a 409 naming the holders, a 503 with code mcp-server-starting while the server's start is in progress or mcp-server-not-loaded while this worker has not loaded the server, or a 502 with the recorded cause when this worker holds no listing for the server and its last start or bind failed, before anything is written. Called over MCP, the reload answers on the session that called it and then retires that session with the generation it ran on: a later call on the same session fails (streamable HTTP answers it 404, and an SSE session's stream closes), so the client starts a new session to go on.\",\"dateModified\":\"2026-11-05T00:56:34.859Z\",\"isPartOf\":{\"@id\":\"https://docs.tai42.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.tai42.ai/api-reference/config/merge-env-changes-into-the-stored-env-and-reload-the-fleet#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.tai42.ai/api-reference/config/merge-env-changes-into-the-stored-env-and-reload-the-fleet#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"HTTP API\",\"item\":\"https://docs.tai42.ai/reference/api/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"config\",\"item\":\"https://docs.tai42.ai/api-reference/config/read-the-stored-env-config-secret-key-marks-and-the-stored-keys-the-deployment-sets\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Merge env changes into the stored env and reload the fleet\",\"item\":\"https://docs.tai42.ai/api-reference/config/merge-env-changes-into-the-stored-env-and-reload-the-fleet\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.tai42.ai/api-reference/config/merge-env-changes-into-the-stored-env-and-reload-the-fleet#apireference\",\"headline\":\"Merge env changes into the stored env and reload the fleet\",\"name\":\"Merge env changes into the stored env and reload the fleet\",\"description\":\"Merge env changes into the stored env and reload this worker and the fleet. A hot-class key is re-read in place. A recycle-class key rolls a worker recycle across the fleet: the response's recycle carries the roll's rows (null when the roll had no worker to visit: every worker's reload confirmed no recycle-class key moved off its bound value, or the only ones naming one were refused at their epoch build or are the writer whose own restart cannot follow as its exit), and when the roll converged and this worker needs its own restart, it recycles itself after replying — on the HTTP edge and on every projected tool door alike (a post-reply graceful self-exit its supervisor respawns). A write run under a bound the roll's waits can outlast (a dispatched job's budget, an armed turn budget) hands the roll to the bus member it acts for, which carries it out after the reply and departs itself last, once the roll converged, when it needs its own restart: roll_deferred is then true and roll_deferred_to names that member, recycle null and awaiting_respawn empty. A change that cannot take effect is refused with a 400 before anything is written, naming the key, under any spelling of its name: a key that locates the worker bus (a bus URL or the bus namespace), a deployment / boot-identity (X-band) key no editor may set, and a key the deployment sets (set it in the deployment's environment and restart; removing its stored copy is allowed). secret_keys (when not None) replaces the operator's secret marks in the same write; the marks variable itself is never accepted as an env key. An mcp selection list whose !ENV marker would resolve so that a tool something still uses stops being picked is refused with a 409 naming the holders, a 503 with code mcp-server-starting while the server's start is in progress or mcp-server-not-loaded while this worker has not loaded the server, or a 502 with the recorded cause when this worker holds no listing for the server and its last start or bind failed, before anything is written. Called over MCP, the reload answers on the session that called it and then retires that session with the generation it ran on: a later call on the same session fails (streamable HTTP answers it 404, and an SSE session's stream closes), so the client starts a new session to go on.\",\"url\":\"https://docs.tai42.ai/api-reference/config/merge-env-changes-into-the-stored-env-and-reload-the-fleet\",\"mainEntityOfPage\":{\"@id\":\"https://docs.tai42.ai/api-reference/config/merge-env-changes-into-the-stored-env-and-reload-the-fleet#webpage\"},\"image\":\"https://docs.tai42.ai/images/og-image.svg\",\"dateModified\":\"2026-11-05T00:56:34.859Z\",\"publisher\":{\"@id\":\"https://docs.tai42.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.tai42.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"TAI42\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"TAI42","nav":{"global":null,"tabs":[{"tab":"Docs","pages":[{"title":"Docs","href":""}]},{"tab":"Studio","pages":[{"title":"Studio","href":"/studio"}]},{"tab":"Reference","groups":[{"group":"HTTP API","icon":"cloud","pages":[{"title":"HTTP API","icon":"cloud","href":"/reference/api"},{"group":"agents","pages":[{"title":"List every registered agent","deprecated":null,"version":null,"openapi":"/openapi.json get /api/agents","href":"/api-reference/agents/list-every-registered-agent"},{"title":"Stream a run of an authored agent","deprecated":null,"version":null,"openapi":"/openapi.json post /api/agents/authored/{name}/runs","href":"/api-reference/agents/stream-a-run-of-an-authored-agent"},{"title":"List the spec-runnable (authorable) agents","deprecated":null,"version":null,"openapi":"/openapi.json get /api/agents/spec-runnable","href":"/api-reference/agents/list-the-spec-runnable-authorable-agents"},{"title":"Stream a run of an agent","deprecated":null,"version":null,"openapi":"/openapi.json post /api/agents/{name}/runs","href":"/api-reference/agents/stream-a-run-of-an-agent"}]},{"group":"manifest","pages":[{"title":"Add or replace agents config entries and hot-reload","deprecated":null,"version":null,"openapi":"/openapi.json post /api/agents-config/entries","href":"/api-reference/manifest/add-or-replace-agents-config-entries-and-hot-reload"},{"title":"Remove one agents config entry by title and hot-reload","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/agents-config/entries/{title}","href":"/api-reference/manifest/remove-one-agents-config-entry-by-title-and-hot-reload"},{"title":"Add/remove names on the api_tools include/exclude lists and hot-reload","deprecated":null,"version":null,"openapi":"/openapi.json post /api/api-tools","href":"/api-reference/manifest/addremove-names-on-the-api_tools-includeexclude-lists-and-hot-reload"},{"title":"Read the PRESERVED manifest MCP section, user tools and extension settings","deprecated":null,"version":null,"openapi":"/openapi.json get /api/manifest","href":"/api-reference/manifest/read-the-preserved-manifest-mcp-section-user-tools-and-extension-settings"},{"title":"List the manifest MCP section's !ENV marker refs (names + set/unset only)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/manifest/mcp-env-refs","href":"/api-reference/manifest/list-the-manifest-mcp-sections-!env-marker-refs-names-+-setunset-only"},{"title":"Read the PRESERVED manifest (markers intact) MCP section, user tools and extension settings","deprecated":null,"version":null,"openapi":"/openapi.json get /api/manifest/preserved","href":"/api-reference/manifest/read-the-preserved-manifest-markers-intact-mcp-section-user-tools-and-extension-settings"},{"title":"Replace the whole manifest, persist, and reload the fleet","deprecated":null,"version":null,"openapi":"/openapi.json post /api/manifest/replace","href":"/api-reference/manifest/replace-the-whole-manifest-persist-and-reload-the-fleet"},{"title":"Replace the MCP config section and hot-reload","deprecated":null,"version":null,"openapi":"/openapi.json post /api/mcp-config","href":"/api-reference/manifest/replace-the-mcp-config-section-and-hot-reload"},{"title":"Add or replace MCP config entries and hot-reload","deprecated":null,"version":null,"openapi":"/openapi.json post /api/mcp-config/entries","href":"/api-reference/manifest/add-or-replace-mcp-config-entries-and-hot-reload"},{"title":"Remove one MCP config entry by title and hot-reload","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/mcp-config/entries/{title}","href":"/api-reference/manifest/remove-one-mcp-config-entry-by-title-and-hot-reload"},{"title":"Set an MCP server's tool selection","deprecated":null,"version":null,"openapi":"/openapi.json put /api/mcp-config/entries/{title}/tool-filter","href":"/api-reference/manifest/set-an-mcp-servers-tool-selection"},{"title":"Get the JSON schema for one MCP-config entry","deprecated":null,"version":null,"openapi":"/openapi.json get /api/mcp-config/schema","href":"/api-reference/manifest/get-the-json-schema-for-one-mcp-config-entry"},{"title":"Write a secret env value and its manifest !ENV marker together, then reload","deprecated":null,"version":null,"openapi":"/openapi.json post /api/mcp-config/secret-env","href":"/api-reference/manifest/write-a-secret-env-value-and-its-manifest-!env-marker-together-then-reload"},{"title":"Snapshot the live MCP binding status","deprecated":null,"version":null,"openapi":"/openapi.json get /api/mcp-status","href":"/api-reference/manifest/snapshot-the-live-mcp-binding-status"},{"title":"List MCP servers skipped by the viability check","deprecated":null,"version":null,"openapi":"/openapi.json get /api/mcp-status/failed","href":"/api-reference/manifest/list-mcp-servers-skipped-by-the-viability-check"},{"title":"Re-probe every failed MCP server","deprecated":null,"version":null,"openapi":"/openapi.json post /api/mcp-status/reload-failed","href":"/api-reference/manifest/re-probe-every-failed-mcp-server"},{"title":"List the tools an MCP server advertised at its bind","deprecated":null,"version":null,"openapi":"/openapi.json get /api/mcp-status/{title}/advertised-tools","href":"/api-reference/manifest/list-the-tools-an-mcp-server-advertised-at-its-bind"},{"title":"Detach a single MCP server's tools by title","deprecated":null,"version":null,"openapi":"/openapi.json post /api/mcp-status/{title}/deregister","href":"/api-reference/manifest/detach-a-single-mcp-servers-tools-by-title"},{"title":"Reload a single MCP server by title","deprecated":null,"version":null,"openapi":"/openapi.json post /api/mcp-status/{title}/reload","href":"/api-reference/manifest/reload-a-single-mcp-server-by-title"},{"title":"Add or replace tools config entries and hot-reload","deprecated":null,"version":null,"openapi":"/openapi.json post /api/tools-config/entries","href":"/api-reference/manifest/add-or-replace-tools-config-entries-and-hot-reload"},{"title":"Remove one tools config entry by title and hot-reload","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/tools-config/entries/{title}","href":"/api-reference/manifest/remove-one-tools-config-entry-by-title-and-hot-reload"}]},{"group":"access-control","pages":[{"title":"Create an api key","deprecated":null,"version":null,"openapi":"/openapi.json post /api/auth/api-keys","href":"/api-reference/access-control/create-an-api-key"},{"title":"Edit an api key","deprecated":null,"version":null,"openapi":"/openapi.json put /api/auth/api-keys/{user_id}","href":"/api-reference/access-control/edit-an-api-key"},{"title":"Revoke an api key","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/auth/api-keys/{user_id}","href":"/api-reference/access-control/revoke-an-api-key"},{"title":"Roll a policy back to a version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/auth/api-keys/{user_id}/policy/rollback","href":"/api-reference/access-control/roll-a-policy-back-to-a-version"},{"title":"List a user's policy version history","deprecated":null,"version":null,"openapi":"/openapi.json get /api/auth/api-keys/{user_id}/policy/versions","href":"/api-reference/access-control/list-a-users-policy-version-history"},{"title":"Add/remove scopes on an api key","deprecated":null,"version":null,"openapi":"/openapi.json post /api/auth/api-keys/{user_id}/scopes","href":"/api-reference/access-control/addremove-scopes-on-an-api-key"},{"title":"Report key-mint capabilities","deprecated":null,"version":null,"openapi":"/openapi.json get /api/auth/capabilities","href":"/api-reference/access-control/report-key-mint-capabilities"},{"title":"Create a one-time claim link for an API key","deprecated":null,"version":null,"openapi":"/openapi.json post /api/auth/claim-links","href":"/api-reference/access-control/create-a-one-time-claim-link-for-an-api-key"},{"title":"Log out the current session","deprecated":null,"version":null,"openapi":"/openapi.json post /api/auth/logout","href":"/api-reference/access-control/log-out-the-current-session"},{"title":"The caller's capability projection","deprecated":null,"version":null,"openapi":"/openapi.json get /api/auth/me","href":"/api-reference/access-control/the-callers-capability-projection"},{"title":"List member actions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/auth/member-actions","href":"/api-reference/access-control/list-member-actions"},{"title":"Invoke a member action","deprecated":null,"version":null,"openapi":"/openapi.json post /api/auth/member-actions/invoke","href":"/api-reference/access-control/invoke-a-member-action"},{"title":"List members and invites","deprecated":null,"version":null,"openapi":"/openapi.json get /api/auth/members","href":"/api-reference/access-control/list-members-and-invites"},{"title":"List principals","deprecated":null,"version":null,"openapi":"/openapi.json get /api/auth/principals","href":"/api-reference/access-control/list-principals"},{"title":"Create a principal","deprecated":null,"version":null,"openapi":"/openapi.json post /api/auth/principals","href":"/api-reference/access-control/create-a-principal"},{"title":"Update a principal","deprecated":null,"version":null,"openapi":"/openapi.json put /api/auth/principals/{user_id}","href":"/api-reference/access-control/update-a-principal"},{"title":"Delete a principal","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/auth/principals/{user_id}","href":"/api-reference/access-control/delete-a-principal"},{"title":"List public-pinned routes","deprecated":null,"version":null,"openapi":"/openapi.json get /api/auth/public-routes","href":"/api-reference/access-control/list-public-pinned-routes"},{"title":"Pin a route public","deprecated":null,"version":null,"openapi":"/openapi.json post /api/auth/public-routes","href":"/api-reference/access-control/pin-a-route-public"},{"title":"Unpin a public route","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/auth/public-routes","href":"/api-reference/access-control/unpin-a-public-route"},{"title":"List roles","deprecated":null,"version":null,"openapi":"/openapi.json get /api/auth/roles","href":"/api-reference/access-control/list-roles"},{"title":"Create a role","deprecated":null,"version":null,"openapi":"/openapi.json post /api/auth/roles","href":"/api-reference/access-control/create-a-role"},{"title":"Edit a role's grant map","deprecated":null,"version":null,"openapi":"/openapi.json put /api/auth/roles/{name}","href":"/api-reference/access-control/edit-a-roles-grant-map"},{"title":"Delete a role","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/auth/roles/{name}","href":"/api-reference/access-control/delete-a-role"},{"title":"Set/remove single tag grants on a role","deprecated":null,"version":null,"openapi":"/openapi.json post /api/auth/roles/{name}/grants","href":"/api-reference/access-control/setremove-single-tag-grants-on-a-role"},{"title":"Roll a role back to a version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/auth/roles/{name}/rollback","href":"/api-reference/access-control/roll-a-role-back-to-a-version"},{"title":"A role's version history + audit trail","deprecated":null,"version":null,"openapi":"/openapi.json get /api/auth/roles/{name}/versions","href":"/api-reference/access-control/a-roles-version-history-+-audit-trail"},{"title":"List the app's HTTP routes and their scope mappings","deprecated":null,"version":null,"openapi":"/openapi.json get /api/auth/routes","href":"/api-reference/access-control/list-the-apps-http-routes-and-their-scope-mappings"},{"title":"List all scopes","deprecated":null,"version":null,"openapi":"/openapi.json get /api/auth/scopes","href":"/api-reference/access-control/list-all-scopes"},{"title":"Add a URL to a scope","deprecated":null,"version":null,"openapi":"/openapi.json post /api/auth/scopes","href":"/api-reference/access-control/add-a-url-to-a-scope"},{"title":"Remove a URL from all scopes","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/auth/scopes/urls","href":"/api-reference/access-control/remove-a-url-from-all-scopes"},{"title":"Delete a scope","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/auth/scopes/{scope_id}","href":"/api-reference/access-control/delete-a-scope"},{"title":"List api-key token payloads","deprecated":null,"version":null,"openapi":"/openapi.json get /api/auth/tokens-payload","href":"/api-reference/access-control/list-api-key-token-payloads"},{"title":"Validate a jq policy condition","deprecated":null,"version":null,"openapi":"/openapi.json post /api/auth/validate-condition","href":"/api-reference/access-control/validate-a-jq-policy-condition"},{"title":"Initialize the deployment (owner + first key)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/setup","href":"/api-reference/access-control/initialize-the-deployment-owner-+-first-key"}]},{"group":"backend","pages":[{"title":"Get the backend identity","deprecated":null,"version":null,"openapi":"/openapi.json get /api/backend","href":"/api-reference/backend/get-the-backend-identity"},{"title":"Soft-restart the worker fleet, restarting the drifted workers whose reload built","deprecated":null,"version":null,"openapi":"/openapi.json post /api/fleet/reload-config","href":"/api-reference/backend/soft-restart-the-worker-fleet-restarting-the-drifted-workers-whose-reload-built"},{"title":"List the worker fleet","deprecated":null,"version":null,"openapi":"/openapi.json get /api/fleet/workers","href":"/api-reference/backend/list-the-worker-fleet"}]},{"group":"backup","pages":[{"title":"Export the named backup sections","deprecated":null,"version":null,"openapi":"/openapi.json post /api/backup/export","href":"/api-reference/backup/export-the-named-backup-sections"},{"title":"Import a backup document","deprecated":null,"version":null,"openapi":"/openapi.json post /api/backup/import","href":"/api-reference/backup/import-a-backup-document"},{"title":"List backup sections","deprecated":null,"version":null,"openapi":"/openapi.json get /api/backup/sections","href":"/api-reference/backup/list-backup-sections"}]},{"group":"channels","pages":[{"title":"List registered channels","deprecated":null,"version":null,"openapi":"/openapi.json get /api/channels","href":"/api-reference/channels/list-registered-channels"}]},{"group":"checkpoints","pages":[{"title":"Sweep expired checkpoint threads","deprecated":null,"version":null,"openapi":"/openapi.json post /api/checkpoints/sweep","href":"/api-reference/checkpoints/sweep-expired-checkpoint-threads"}]},{"group":"templates","pages":[{"title":"Clear the template render cache","deprecated":null,"version":null,"openapi":"/openapi.json post /api/clear-templates-cache","href":"/api-reference/templates/clear-the-template-render-cache"},{"title":"Delete a template","deprecated":null,"version":null,"openapi":"/openapi.json post /api/delete-template","href":"/api-reference/templates/delete-a-template"},{"title":"Delete a template directory","deprecated":null,"version":null,"openapi":"/openapi.json post /api/delete-template-dir","href":"/api-reference/templates/delete-a-template-directory"},{"title":"Render a template","deprecated":null,"version":null,"openapi":"/openapi.json post /api/render-template","href":"/api-reference/templates/render-a-template"},{"title":"Read a stored object as a template entry with its inferred input schema","deprecated":null,"version":null,"openapi":"/openapi.json post /api/template","href":"/api-reference/templates/read-a-stored-object-as-a-template-entry-with-its-inferred-input-schema"},{"title":"List templates","deprecated":null,"version":null,"openapi":"/openapi.json get /api/templates","href":"/api-reference/templates/list-templates"},{"title":"Upload a template","deprecated":null,"version":null,"openapi":"/openapi.json post /api/upload-template","href":"/api-reference/templates/upload-a-template"}]},{"group":"config","pages":[{"title":"Read the stored env config, secret-key marks and the stored keys the deployment sets","description":"Return the stored env map alongside the operator's secret-key marks and the deployment-set keys.\n\n``data.env`` is the stored env key-value map (a never-written store yields\nan empty map). ``data.secret_keys`` is the DERIVED masked-key set\n(:func:`~tai42_skeleton.settings.env_secret_marks.effective_secret_keys`): the\noperator's stored ``TAI_ENV_SECRET_KEYS`` marks UNIONED with every live\n``connectors[*].client_secret_env``, so an oauth connector's client secret is\nmasked on display even with no operator mark. ``data.deployment_keys`` names the\nstored keys the deployment sets on any worker of the fleet, sorted: a key a worker's\ndeployment env sets, or an accepted name of a settings field set under any of its names. Such\na stored copy never takes effect (the deployment's value wins); a write may remove\nit or carry it unchanged, never set it to a new value. A deployment key with no\nstored copy is not named.","deprecated":null,"version":null,"openapi":"/openapi.json get /api/config/env","href":"/api-reference/config/read-the-stored-env-config-secret-key-marks-and-the-stored-keys-the-deployment-sets"},{"title":"Merge env changes into the stored env and reload the fleet","deprecated":null,"version":null,"openapi":"/openapi.json post /api/config/env","href":"/api-reference/config/merge-env-changes-into-the-stored-env-and-reload-the-fleet"},{"title":"Read the active config backend mode","description":"Return the active config backend mode.","deprecated":null,"version":null,"openapi":"/openapi.json get /api/config/mode","href":"/api-reference/config/read-the-active-config-backend-mode"},{"title":"List settings profiles","deprecated":null,"version":null,"openapi":"/openapi.json get /api/config/profiles","href":"/api-reference/config/list-settings-profiles"},{"title":"Get a settings profile","deprecated":null,"version":null,"openapi":"/openapi.json get /api/config/profiles/{name}","href":"/api-reference/config/get-a-settings-profile"},{"title":"Create or update a settings profile","deprecated":null,"version":null,"openapi":"/openapi.json put /api/config/profiles/{name}","href":"/api-reference/config/create-or-update-a-settings-profile"},{"title":"Delete a settings profile","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/config/profiles/{name}","href":"/api-reference/config/delete-a-settings-profile"},{"title":"Apply a settings profile — replace the stored env and reload the fleet","deprecated":null,"version":null,"openapi":"/openapi.json post /api/config/profiles/{name}/apply","href":"/api-reference/config/apply-a-settings-profile-—-replace-the-stored-env-and-reload-the-fleet"},{"title":"Diff a settings profile against the stored env","deprecated":null,"version":null,"openapi":"/openapi.json post /api/config/profiles/{name}/diff","href":"/api-reference/config/diff-a-settings-profile-against-the-stored-env"},{"title":"Roll a settings profile back to a version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/config/profiles/{name}/rollback","href":"/api-reference/config/roll-a-settings-profile-back-to-a-version"},{"title":"List a settings profile's versions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/config/profiles/{name}/versions","href":"/api-reference/config/list-a-settings-profiles-versions"},{"title":"Get a settings profile version","deprecated":null,"version":null,"openapi":"/openapi.json get /api/config/profiles/{name}/versions/{version}","href":"/api-reference/config/get-a-settings-profile-version"},{"title":"Soft-restart the fleet from its manifest, restarting the drifted workers whose reload built","deprecated":null,"version":null,"openapi":"/openapi.json post /api/config/reload","href":"/api-reference/config/soft-restart-the-fleet-from-its-manifest-restarting-the-drifted-workers-whose-reload-built"},{"title":"List settings groups with their resolved field values","deprecated":null,"version":null,"openapi":"/openapi.json get /api/config/settings-schema","href":"/api-reference/config/list-settings-groups-with-their-resolved-field-values"}]},{"group":"connectors","pages":[{"title":"List connections","deprecated":null,"version":null,"openapi":"/openapi.json get /api/connectors/connections","href":"/api-reference/connectors/list-connections"},{"title":"Start a connection flow","deprecated":null,"version":null,"openapi":"/openapi.json post /api/connectors/connections/start","href":"/api-reference/connectors/start-a-connection-flow"},{"title":"Get a connection","deprecated":null,"version":null,"openapi":"/openapi.json get /api/connectors/connections/{connection_id}","href":"/api-reference/connectors/get-a-connection"},{"title":"Disconnect a connection","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/connectors/connections/{connection_id}","href":"/api-reference/connectors/disconnect-a-connection"},{"title":"Start a reconnect flow","deprecated":null,"version":null,"openapi":"/openapi.json post /api/connectors/connections/{connection_id}/reconnect","href":"/api-reference/connectors/start-a-reconnect-flow"},{"title":"Patch a connection's enabled sub-services","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/connectors/connections/{connection_id}/sub-services","href":"/api-reference/connectors/patch-a-connections-enabled-sub-services"},{"title":"Complete an OAuth connection flow","deprecated":null,"version":null,"openapi":"/openapi.json post /api/connectors/oauth/complete","href":"/api-reference/connectors/complete-an-oauth-connection-flow"},{"title":"List connector providers","deprecated":null,"version":null,"openapi":"/openapi.json get /api/connectors/providers","href":"/api-reference/connectors/list-connector-providers"},{"title":"Add an MCP server as a connector provider","deprecated":null,"version":null,"openapi":"/openapi.json post /api/connectors/providers","href":"/api-reference/connectors/add-an-mcp-server-as-a-connector-provider"},{"title":"Look up an MCP server's sign-in","deprecated":null,"version":null,"openapi":"/openapi.json post /api/connectors/providers/discover","href":"/api-reference/connectors/look-up-an-mcp-servers-sign-in"},{"title":"Remove a connector provider added by its address","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/connectors/providers/{provider_id}","href":"/api-reference/connectors/remove-a-connector-provider-added-by-its-address"},{"title":"Set the client credentials of a connector provider","deprecated":null,"version":null,"openapi":"/openapi.json put /api/connectors/providers/{provider_id}/client","href":"/api-reference/connectors/set-the-client-credentials-of-a-connector-provider"},{"title":"Re-encrypt connector tokens and client credentials under the current KEK","deprecated":null,"version":null,"openapi":"/openapi.json post /api/connectors/tokens/reencrypt","href":"/api-reference/connectors/re-encrypt-connector-tokens-and-client-credentials-under-the-current-kek"}]},{"group":"conversations","pages":[{"title":"List conversation target configs","deprecated":null,"version":null,"openapi":"/openapi.json get /api/conversation-configs","href":"/api-reference/conversations/list-conversation-target-configs"},{"title":"Get a conversation target config","deprecated":null,"version":null,"openapi":"/openapi.json get /api/conversation-configs/{target_kind}/{target_name}","href":"/api-reference/conversations/get-a-conversation-target-config"},{"title":"Create or replace a conversation target config","deprecated":null,"version":null,"openapi":"/openapi.json put /api/conversation-configs/{target_kind}/{target_name}","href":"/api-reference/conversations/create-or-replace-a-conversation-target-config"},{"title":"Delete a conversation target config","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/conversation-configs/{target_kind}/{target_name}","href":"/api-reference/conversations/delete-a-conversation-target-config"},{"title":"List conversation routes","deprecated":null,"version":null,"openapi":"/openapi.json get /api/conversations","href":"/api-reference/conversations/list-conversation-routes"},{"title":"List failed conversation deliveries","deprecated":null,"version":null,"openapi":"/openapi.json get /api/conversations/messages/failed","href":"/api-reference/conversations/list-failed-conversation-deliveries"},{"title":"Read a conversation person","deprecated":null,"version":null,"openapi":"/openapi.json get /api/conversations/persons/{person_id}","href":"/api-reference/conversations/read-a-conversation-person"},{"title":"Delete a conversation person","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/conversations/persons/{person_id}","href":"/api-reference/conversations/delete-a-conversation-person"},{"title":"Set a conversation person's locale","deprecated":null,"version":null,"openapi":"/openapi.json put /api/conversations/persons/{person_id}/locale","href":"/api-reference/conversations/set-a-conversation-persons-locale"},{"title":"Get a conversation route","deprecated":null,"version":null,"openapi":"/openapi.json get /api/conversations/{route_name}","href":"/api-reference/conversations/get-a-conversation-route"},{"title":"Create or replace a conversation route","deprecated":null,"version":null,"openapi":"/openapi.json post /api/conversations/{route_name}","href":"/api-reference/conversations/create-or-replace-a-conversation-route"},{"title":"Delete a conversation route","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/conversations/{route_name}","href":"/api-reference/conversations/delete-a-conversation-route"},{"title":"Deliver a structured event to a conversation thread as a turn","deprecated":null,"version":null,"openapi":"/openapi.json post /api/conversations/{route_name}/events","href":"/api-reference/conversations/deliver-a-structured-event-to-a-conversation-thread-as-a-turn"},{"title":"Send a message to a conversation route","deprecated":null,"version":null,"openapi":"/openapi.json post /api/conversations/{route_name}/messages","href":"/api-reference/conversations/send-a-message-to-a-conversation-route"},{"title":"Search a conversation route's messages","deprecated":null,"version":null,"openapi":"/openapi.json get /api/conversations/{route_name}/messages/search","href":"/api-reference/conversations/search-a-conversation-routes-messages"},{"title":"Read one conversation answer record","deprecated":null,"version":null,"openapi":"/openapi.json get /api/conversations/{route_name}/messages/{message_id}","href":"/api-reference/conversations/read-one-conversation-answer-record"},{"title":"Delete a conversation thread","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/conversations/{route_name}/thread","href":"/api-reference/conversations/delete-a-conversation-thread"},{"title":"Send an operator message into a conversation thread","deprecated":null,"version":null,"openapi":"/openapi.json post /api/conversations/{route_name}/thread/messages","href":"/api-reference/conversations/send-an-operator-message-into-a-conversation-thread"},{"title":"Read a conversation thread's control mode","deprecated":null,"version":null,"openapi":"/openapi.json get /api/conversations/{route_name}/thread/mode","href":"/api-reference/conversations/read-a-conversation-threads-control-mode"},{"title":"Set a conversation thread's control mode","deprecated":null,"version":null,"openapi":"/openapi.json put /api/conversations/{route_name}/thread/mode","href":"/api-reference/conversations/set-a-conversation-threads-control-mode"},{"title":"List a conversation route's threads","deprecated":null,"version":null,"openapi":"/openapi.json get /api/conversations/{route_name}/threads","href":"/api-reference/conversations/list-a-conversation-routes-threads"},{"title":"Read a conversation thread's transcript","deprecated":null,"version":null,"openapi":"/openapi.json get /api/conversations/{route_name}/transcript","href":"/api-reference/conversations/read-a-conversation-threads-transcript"}]},{"group":"extensions","pages":[{"title":"List every registered extension","deprecated":null,"version":null,"openapi":"/openapi.json get /api/extensions","href":"/api-reference/extensions/list-every-registered-extension"},{"title":"Get a tool's applied extension combos","deprecated":null,"version":null,"openapi":"/openapi.json get /api/tools/{name}/extensions","href":"/api-reference/extensions/get-a-tools-applied-extension-combos"},{"title":"Set a tool's applied extension combos","deprecated":null,"version":null,"openapi":"/openapi.json post /api/tools/{name}/extensions","href":"/api-reference/extensions/set-a-tools-applied-extension-combos"},{"title":"Add or remove single extension combos on a tool","deprecated":null,"version":null,"openapi":"/openapi.json post /api/tools/{name}/extensions/combos","href":"/api-reference/extensions/add-or-remove-single-extension-combos-on-a-tool"}]},{"group":"hooks","pages":[{"title":"List hook runs","deprecated":null,"version":null,"openapi":"/openapi.json get /api/hook-runs","href":"/api-reference/hooks/list-hook-runs"},{"title":"Discard a failed hook run","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/hook-runs/{id}","href":"/api-reference/hooks/discard-a-failed-hook-run"},{"title":"Retry a failed hook run","deprecated":null,"version":null,"openapi":"/openapi.json post /api/hook-runs/{id}/retry","href":"/api-reference/hooks/retry-a-failed-hook-run"},{"title":"List registered hooks","deprecated":null,"version":null,"openapi":"/openapi.json get /api/hooks","href":"/api-reference/hooks/list-registered-hooks"},{"title":"Register a hook","deprecated":null,"version":null,"openapi":"/openapi.json post /api/hooks","href":"/api-reference/hooks/register-a-hook"},{"title":"Bind a webhook verifier to a topic","deprecated":null,"version":null,"openapi":"/openapi.json put /api/hooks/topics/{topic}/verifier","href":"/api-reference/hooks/bind-a-webhook-verifier-to-a-topic"},{"title":"Unbind a topic's webhook verifier","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/hooks/topics/{topic}/verifier","href":"/api-reference/hooks/unbind-a-topics-webhook-verifier"},{"title":"List trigger links","deprecated":null,"version":null,"openapi":"/openapi.json get /api/hooks/trigger-links","href":"/api-reference/hooks/list-trigger-links"},{"title":"Create a trigger link","deprecated":null,"version":null,"openapi":"/openapi.json post /api/hooks/trigger-links","href":"/api-reference/hooks/create-a-trigger-link"},{"title":"Delete a trigger link","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/hooks/trigger-links/{name}","href":"/api-reference/hooks/delete-a-trigger-link"},{"title":"List registered webhook verifiers","deprecated":null,"version":null,"openapi":"/openapi.json get /api/hooks/verifiers","href":"/api-reference/hooks/list-registered-webhook-verifiers"},{"title":"Unregister a hook","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/hooks/{name}","href":"/api-reference/hooks/unregister-a-hook"}]},{"group":"interactions","pages":[{"title":"List pending interactions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/interactions","href":"/api-reference/interactions/list-pending-interactions"},{"title":"External interaction callback door","deprecated":null,"version":null,"openapi":"/openapi.json get /api/interactions/callback/{ticket}","href":"/api-reference/interactions/external-interaction-callback-door"},{"title":"External interaction callback door","deprecated":null,"version":null,"openapi":"/openapi.json post /api/interactions/callback/{ticket}","href":"/api-reference/interactions/external-interaction-callback-door-1"},{"title":"External interaction mid-form reaction door","deprecated":null,"version":null,"openapi":"/openapi.json post /api/interactions/callback/{ticket}/react","href":"/api-reference/interactions/external-interaction-mid-form-reaction-door"},{"title":"Serve interaction media stored by reference","deprecated":null,"version":null,"openapi":"/openapi.json get /api/interactions/media/{media_id}","href":"/api-reference/interactions/serve-interaction-media-stored-by-reference"},{"title":"Serve interaction media stored by reference","deprecated":null,"version":null,"openapi":"/openapi.json head /api/interactions/media/{media_id}","href":"/api-reference/interactions/serve-interaction-media-stored-by-reference-1"},{"title":"List parked (async) interactions awaiting an answer","deprecated":null,"version":null,"openapi":"/openapi.json get /api/interactions/pending","href":"/api-reference/interactions/list-parked-async-interactions-awaiting-an-answer"},{"title":"Stream the interactions inbox live tail","deprecated":null,"version":null,"openapi":"/openapi.json get /api/interactions/stream","href":"/api-reference/interactions/stream-the-interactions-inbox-live-tail"},{"title":"Answer a pending interaction","deprecated":null,"version":null,"openapi":"/openapi.json post /api/interactions/{interaction_id}/answer","href":"/api-reference/interactions/answer-a-pending-interaction"},{"title":"Cancel a pending interaction","deprecated":null,"version":null,"openapi":"/openapi.json post /api/interactions/{interaction_id}/cancel","href":"/api-reference/interactions/cancel-a-pending-interaction"},{"title":"React to an open form interaction","deprecated":null,"version":null,"openapi":"/openapi.json post /api/interactions/{interaction_id}/react","href":"/api-reference/interactions/react-to-an-open-form-interaction"}]},{"group":"login","pages":[{"title":"Exchange a one-time claim token for its API key","deprecated":null,"version":null,"openapi":"/openapi.json post /api/login/claim","href":"/api-reference/login/exchange-a-one-time-claim-token-for-its-api-key"},{"title":"List available login methods","deprecated":null,"version":null,"openapi":"/openapi.json get /api/login/methods","href":"/api-reference/login/list-available-login-methods"}]},{"group":"marketplace","pages":[{"title":"Get advisories for installed plugins","deprecated":null,"version":null,"openapi":"/openapi.json get /api/marketplace/advisories","href":"/api-reference/marketplace/get-advisories-for-installed-plugins"},{"title":"List marketplace categories","deprecated":null,"version":null,"openapi":"/openapi.json get /api/marketplace/categories","href":"/api-reference/marketplace/list-marketplace-categories"},{"title":"Install a marketplace plugin","deprecated":null,"version":null,"openapi":"/openapi.json post /api/marketplace/install","href":"/api-reference/marketplace/install-a-marketplace-plugin"},{"title":"Preview a marketplace install","deprecated":null,"version":null,"openapi":"/openapi.json post /api/marketplace/install/preview","href":"/api-reference/marketplace/preview-a-marketplace-install"},{"title":"List installed marketplace plugins","deprecated":null,"version":null,"openapi":"/openapi.json get /api/marketplace/installed","href":"/api-reference/marketplace/list-installed-marketplace-plugins"},{"title":"List marketplace item kinds","deprecated":null,"version":null,"openapi":"/openapi.json get /api/marketplace/kinds","href":"/api-reference/marketplace/list-marketplace-item-kinds"},{"title":"Get a marketplace listing's detail","deprecated":null,"version":null,"openapi":"/openapi.json get /api/marketplace/plugins/{ns}/{name}","href":"/api-reference/marketplace/get-a-marketplace-listings-detail"},{"title":"Search the marketplace","deprecated":null,"version":null,"openapi":"/openapi.json get /api/marketplace/search","href":"/api-reference/marketplace/search-the-marketplace"},{"title":"Uninstall a marketplace plugin","deprecated":null,"version":null,"openapi":"/openapi.json post /api/marketplace/uninstall","href":"/api-reference/marketplace/uninstall-a-marketplace-plugin"},{"title":"Update a marketplace plugin","deprecated":null,"version":null,"openapi":"/openapi.json post /api/marketplace/update","href":"/api-reference/marketplace/update-a-marketplace-plugin"},{"title":"Upgrade all installed marketplace plugins","deprecated":null,"version":null,"openapi":"/openapi.json post /api/marketplace/upgrade-all","href":"/api-reference/marketplace/upgrade-all-installed-marketplace-plugins"}]},{"group":"notifications","pages":[{"title":"List internal notifications","deprecated":null,"version":null,"openapi":"/openapi.json get /api/notifications","href":"/api-reference/notifications/list-internal-notifications"},{"title":"Send a human a one-way notification","deprecated":null,"version":null,"openapi":"/openapi.json post /api/notifications","href":"/api-reference/notifications/send-a-human-a-one-way-notification"}]},{"group":"observability","pages":[{"title":"Get the monitoring backend's observability capabilities","deprecated":null,"version":null,"openapi":"/openapi.json get /api/observability/capabilities","href":"/api-reference/observability/get-the-monitoring-backends-observability-capabilities"},{"title":"Query observability metrics","deprecated":null,"version":null,"openapi":"/openapi.json get /api/observability/metrics","href":"/api-reference/observability/query-observability-metrics"},{"title":"List observability runs","deprecated":null,"version":null,"openapi":"/openapi.json get /api/observability/runs","href":"/api-reference/observability/list-observability-runs"},{"title":"Export runs as a CSV download","deprecated":null,"version":null,"openapi":"/openapi.json get /api/observability/runs/export","href":"/api-reference/observability/export-runs-as-a-csv-download"},{"title":"Get a run span's resolved value","deprecated":null,"version":null,"openapi":"/openapi.json get /api/observability/runs/{trace_id}/spans/{span_id}/resolved","href":"/api-reference/observability/get-a-run-spans-resolved-value"},{"title":"Get a run's trace","deprecated":null,"version":null,"openapi":"/openapi.json get /api/observability/runs/{trace_id}/trace","href":"/api-reference/observability/get-a-runs-trace"},{"title":"Export a run's trace as a JSON download","deprecated":null,"version":null,"openapi":"/openapi.json get /api/observability/runs/{trace_id}/trace/export","href":"/api-reference/observability/export-a-runs-trace-as-a-json-download"},{"title":"Get a run's trace outline","deprecated":null,"version":null,"openapi":"/openapi.json get /api/observability/runs/{trace_id}/trace/outline","href":"/api-reference/observability/get-a-runs-trace-outline"}]},{"group":"plugins","pages":[{"title":"List the registered studio plugins","deprecated":null,"version":null,"openapi":"/openapi.json get /api/plugins","href":"/api-reference/plugins/list-the-registered-studio-plugins"},{"title":"Serve a studio plugin asset","deprecated":null,"version":null,"openapi":"/openapi.json get /api/plugins/{name}/studio/{path}","href":"/api-reference/plugins/serve-a-studio-plugin-asset"}]},{"group":"presets","pages":[{"title":"List presets","deprecated":null,"version":null,"openapi":"/openapi.json get /api/presets","href":"/api-reference/presets/list-presets"},{"title":"Create a preset","deprecated":null,"version":null,"openapi":"/openapi.json post /api/presets","href":"/api-reference/presets/create-a-preset"},{"title":"Validate a preset draft (dry-run)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/presets/validate","href":"/api-reference/presets/validate-a-preset-draft-dry-run"},{"title":"Get a preset","deprecated":null,"version":null,"openapi":"/openapi.json get /api/presets/{name}","href":"/api-reference/presets/get-a-preset"},{"title":"Delete a preset","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/presets/{name}","href":"/api-reference/presets/delete-a-preset"},{"title":"List live holders of this preset","deprecated":null,"version":null,"openapi":"/openapi.json get /api/presets/{name}/referees","href":"/api-reference/presets/list-live-holders-of-this-preset"},{"title":"Rename a preset","deprecated":null,"version":null,"openapi":"/openapi.json post /api/presets/{name}/rename","href":"/api-reference/presets/rename-a-preset"},{"title":"Roll a preset back to a version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/presets/{name}/rollback","href":"/api-reference/presets/roll-a-preset-back-to-a-version"},{"title":"List a preset's versions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/presets/{name}/versions","href":"/api-reference/presets/list-a-presets-versions"},{"title":"Save a new preset version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/presets/{name}/versions","href":"/api-reference/presets/save-a-new-preset-version"},{"title":"Get a specific preset version","deprecated":null,"version":null,"openapi":"/openapi.json get /api/presets/{name}/versions/{version}","href":"/api-reference/presets/get-a-specific-preset-version"},{"title":"Set a preset version's tags","deprecated":null,"version":null,"openapi":"/openapi.json put /api/presets/{name}/versions/{version}/tags","href":"/api-reference/presets/set-a-preset-versions-tags"}]},{"group":"resources","pages":[{"title":"Load a stored resource by id, optionally rendering it","deprecated":null,"version":null,"openapi":"/openapi.json get /api/resources/get","href":"/api-reference/resources/load-a-stored-resource-by-id-optionally-rendering-it"},{"title":"Load a stored resource by id, optionally rendering it","deprecated":null,"version":null,"openapi":"/openapi.json post /api/resources/get","href":"/api-reference/resources/load-a-stored-resource-by-id-optionally-rendering-it-1"}]},{"group":"tools","pages":[{"title":"Run a registered tool synchronously","deprecated":null,"version":null,"openapi":"/openapi.json post /api/run-tool","href":"/api-reference/tools/run-a-registered-tool-synchronously"},{"title":"List the registered tool names","deprecated":null,"version":null,"openapi":"/openapi.json get /api/tools","href":"/api-reference/tools/list-the-registered-tool-names"},{"title":"Get the input/output schema of every tool","deprecated":null,"version":null,"openapi":"/openapi.json get /api/tools-schema","href":"/api-reference/tools/get-the-inputoutput-schema-of-every-tool"},{"title":"Reload one app tool from its stored definition","deprecated":null,"version":null,"openapi":"/openapi.json post /api/tools/reload","href":"/api-reference/tools/reload-one-app-tool-from-its-stored-definition"},{"title":"Remove one app tool from the live registry","deprecated":null,"version":null,"openapi":"/openapi.json post /api/tools/remove","href":"/api-reference/tools/remove-one-app-tool-from-the-live-registry"},{"title":"List each tool's description, native tags, declared visibility, and badges","deprecated":null,"version":null,"openapi":"/openapi.json get /api/tools/tags","href":"/api-reference/tools/list-each-tools-description-native-tags-declared-visibility-and-badges"},{"title":"Get one tool's input/output schema","deprecated":null,"version":null,"openapi":"/openapi.json get /api/tools/{tool_name}/schema","href":"/api-reference/tools/get-one-tools-inputoutput-schema"}]},{"group":"runs","pages":[{"title":"List platform runs","deprecated":null,"version":null,"openapi":"/openapi.json get /api/runs","href":"/api-reference/runs/list-platform-runs"},{"title":"Prune the platform runs index","deprecated":null,"version":null,"openapi":"/openapi.json post /api/runs/prune","href":"/api-reference/runs/prune-the-platform-runs-index"}]},{"group":"sandbox","pages":[{"title":"Get the sandbox identity and resolved policy","deprecated":null,"version":null,"openapi":"/openapi.json get /api/sandbox","href":"/api-reference/sandbox/get-the-sandbox-identity-and-resolved-policy"}]},{"group":"schedules","pages":[{"title":"List schedules","deprecated":null,"version":null,"openapi":"/openapi.json get /api/schedules","href":"/api-reference/schedules/list-schedules"},{"title":"Create a schedule","deprecated":null,"version":null,"openapi":"/openapi.json post /api/schedules","href":"/api-reference/schedules/create-a-schedule"},{"title":"Get the server date and time","deprecated":null,"version":null,"openapi":"/openapi.json get /api/schedules/server-datetime","href":"/api-reference/schedules/get-the-server-date-and-time"},{"title":"Delete a schedule","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/schedules/{schedule_name}","href":"/api-reference/schedules/delete-a-schedule"}]},{"group":"states","pages":[{"title":"List pending state saves","deprecated":null,"version":null,"openapi":"/openapi.json get /api/state-pending-saves","href":"/api-reference/states/list-pending-state-saves"},{"title":"Discard a failed pending state save","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/state-pending-saves/{id}","href":"/api-reference/states/discard-a-failed-pending-state-save"},{"title":"Retry a failed pending state save","deprecated":null,"version":null,"openapi":"/openapi.json post /api/state-pending-saves/{id}/retry","href":"/api-reference/states/retry-a-failed-pending-state-save"},{"title":"Prune expired state records","deprecated":null,"version":null,"openapi":"/openapi.json post /api/state-retention/prune","href":"/api-reference/states/prune-expired-state-records"},{"title":"List state templates","deprecated":null,"version":null,"openapi":"/openapi.json get /api/state-templates","href":"/api-reference/states/list-state-templates"},{"title":"Get a state template","deprecated":null,"version":null,"openapi":"/openapi.json get /api/state-templates/{name}","href":"/api-reference/states/get-a-state-template"},{"title":"Create or replace a state template","deprecated":null,"version":null,"openapi":"/openapi.json put /api/state-templates/{name}","href":"/api-reference/states/create-or-replace-a-state-template"},{"title":"Delete a state template","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/state-templates/{name}","href":"/api-reference/states/delete-a-state-template"},{"title":"List declared states","deprecated":null,"version":null,"openapi":"/openapi.json get /api/states","href":"/api-reference/states/list-declared-states"},{"title":"Get a state","deprecated":null,"version":null,"openapi":"/openapi.json get /api/states/{name}","href":"/api-reference/states/get-a-state"},{"title":"Create or re-declare a state","deprecated":null,"version":null,"openapi":"/openapi.json put /api/states/{name}","href":"/api-reference/states/create-or-re-declare-a-state"},{"title":"Delete a state","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/states/{name}","href":"/api-reference/states/delete-a-state"},{"title":"List a state's attachments","deprecated":null,"version":null,"openapi":"/openapi.json get /api/states/{name}/attachments","href":"/api-reference/states/list-a-states-attachments"},{"title":"Get a state's attachment","deprecated":null,"version":null,"openapi":"/openapi.json get /api/states/{name}/attachments/{template}","href":"/api-reference/states/get-a-states-attachment"},{"title":"Attach a template on a state","deprecated":null,"version":null,"openapi":"/openapi.json put /api/states/{name}/attachments/{template}","href":"/api-reference/states/attach-a-template-on-a-state"},{"title":"Detach a template from a state","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/states/{name}/attachments/{template}","href":"/api-reference/states/detach-a-template-from-a-state"},{"title":"Update an attachment's declarations","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/states/{name}/attachments/{template}","href":"/api-reference/states/update-an-attachments-declarations"},{"title":"List live holders of a state's template attachment","deprecated":null,"version":null,"openapi":"/openapi.json get /api/states/{name}/attachments/{template}/referees","href":"/api-reference/states/list-live-holders-of-a-states-template-attachment"},{"title":"A state's consumers","deprecated":null,"version":null,"openapi":"/openapi.json get /api/states/{name}/consumers","href":"/api-reference/states/a-states-consumers"},{"title":"Check a state's stored records against its schema","deprecated":null,"version":null,"openapi":"/openapi.json get /api/states/{name}/records/check","href":"/api-reference/states/check-a-states-stored-records-against-its-schema"},{"title":"Search a state's records","deprecated":null,"version":null,"openapi":"/openapi.json post /api/states/{name}/records/search","href":"/api-reference/states/search-a-states-records"},{"title":"Validate a candidate record against a state's schema","deprecated":null,"version":null,"openapi":"/openapi.json post /api/states/{name}/records/validate","href":"/api-reference/states/validate-a-candidate-record-against-a-states-schema"},{"title":"Read a subject's record","deprecated":null,"version":null,"openapi":"/openapi.json get /api/states/{name}/records/{target_kind}/{target_name}/{kind}/{key}","href":"/api-reference/states/read-a-subjects-record"},{"title":"Replace a subject's record","deprecated":null,"version":null,"openapi":"/openapi.json put /api/states/{name}/records/{target_kind}/{target_name}/{kind}/{key}","href":"/api-reference/states/replace-a-subjects-record"},{"title":"Erase a subject's record","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/states/{name}/records/{target_kind}/{target_name}/{kind}/{key}","href":"/api-reference/states/erase-a-subjects-record"},{"title":"Merge into a subject's record","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/states/{name}/records/{target_kind}/{target_name}/{kind}/{key}","href":"/api-reference/states/merge-into-a-subjects-record"},{"title":"Apply ops to a subject's record","deprecated":null,"version":null,"openapi":"/openapi.json post /api/states/{name}/records/{target_kind}/{target_name}/{kind}/{key}/deltas","href":"/api-reference/states/apply-ops-to-a-subjects-record"},{"title":"Fold one subject into another","deprecated":null,"version":null,"openapi":"/openapi.json post /api/states/{name}/records/{target_kind}/{target_name}/{kind}/{key}/fold","href":"/api-reference/states/fold-one-subject-into-another"},{"title":"Evaluate an input-purpose template_jq program for a subject","deprecated":null,"version":null,"openapi":"/openapi.json get /api/states/{name}/records/{target_kind}/{target_name}/{kind}/{key}/template-jq/{program}","href":"/api-reference/states/evaluate-an-input-purpose-template_jq-program-for-a-subject"},{"title":"Apply an update-purpose template_jq program to a subject's record","deprecated":null,"version":null,"openapi":"/openapi.json post /api/states/{name}/records/{target_kind}/{target_name}/{kind}/{key}/template-jq/{program}","href":"/api-reference/states/apply-an-update-purpose-template_jq-program-to-a-subjects-record"},{"title":"A subject's write audit trail","deprecated":null,"version":null,"openapi":"/openapi.json get /api/states/{name}/records/{target_kind}/{target_name}/{kind}/{key}/writes","href":"/api-reference/states/a-subjects-write-audit-trail"},{"title":"A state's record statistics","deprecated":null,"version":null,"openapi":"/openapi.json get /api/states/{name}/stats","href":"/api-reference/states/a-states-record-statistics"},{"title":"List a state's subjects","deprecated":null,"version":null,"openapi":"/openapi.json get /api/states/{name}/subjects","href":"/api-reference/states/list-a-states-subjects"}]},{"group":"storage","pages":[{"title":"Get the storage provider identity","deprecated":null,"version":null,"openapi":"/openapi.json get /api/storage","href":"/api-reference/storage/get-the-storage-provider-identity"},{"title":"Delete a storage directory","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/storage/dirs/{dir_path}","href":"/api-reference/storage/delete-a-storage-directory"},{"title":"Read a stored object as a text, document or binary entry","deprecated":null,"version":null,"openapi":"/openapi.json get /api/storage/entries/{resource_id}","href":"/api-reference/storage/read-a-stored-object-as-a-text-document-or-binary-entry"},{"title":"List storage resources","deprecated":null,"version":null,"openapi":"/openapi.json get /api/storage/resources","href":"/api-reference/storage/list-storage-resources"},{"title":"Upload a storage resource","deprecated":null,"version":null,"openapi":"/openapi.json post /api/storage/resources","href":"/api-reference/storage/upload-a-storage-resource"},{"title":"Delete a storage resource","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/storage/resources/{resource_id}","href":"/api-reference/storage/delete-a-storage-resource"},{"title":"Download a storage resource","deprecated":null,"version":null,"openapi":"/openapi.json get /api/storage/resources/{resource_id}/content","href":"/api-reference/storage/download-a-storage-resource"},{"title":"Stat a storage resource","deprecated":null,"version":null,"openapi":"/openapi.json get /api/storage/resources/{resource_id}/stat","href":"/api-reference/storage/stat-a-storage-resource"}]},{"group":"sub-mcp","pages":[{"title":"List the registered sub-MCP apps","deprecated":null,"version":null,"openapi":"/openapi.json get /api/sub-mcp","href":"/api-reference/sub-mcp/list-the-registered-sub-mcp-apps"},{"title":"Register or reload a sub-MCP app","deprecated":null,"version":null,"openapi":"/openapi.json post /api/sub-mcp","href":"/api-reference/sub-mcp/register-or-reload-a-sub-mcp-app"},{"title":"Unregister a sub-MCP app","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/sub-mcp/{slug}","href":"/api-reference/sub-mcp/unregister-a-sub-mcp-app"}]},{"group":"system","pages":[{"title":"List pluggable-kind status","deprecated":null,"version":null,"openapi":"/openapi.json get /api/system/kinds","href":"/api-reference/system/list-pluggable-kind-status"}]},{"group":"tool_meta","pages":[{"title":"List the tool-metadata overlay","deprecated":null,"version":null,"openapi":"/openapi.json get /api/tool-meta","href":"/api-reference/tool_meta/list-the-tool-metadata-overlay"},{"title":"Create a folder","deprecated":null,"version":null,"openapi":"/openapi.json post /api/tool-meta/folders","href":"/api-reference/tool_meta/create-a-folder"},{"title":"Delete a folder","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/tool-meta/folders/{folder_id}","href":"/api-reference/tool_meta/delete-a-folder"},{"title":"Move a folder","deprecated":null,"version":null,"openapi":"/openapi.json post /api/tool-meta/folders/{folder_id}/move","href":"/api-reference/tool_meta/move-a-folder"},{"title":"Rename a folder","deprecated":null,"version":null,"openapi":"/openapi.json post /api/tool-meta/folders/{folder_id}/rename","href":"/api-reference/tool_meta/rename-a-folder"},{"title":"Delete a tool's overlay row","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/tool-meta/tools/{tool_name}","href":"/api-reference/tool_meta/delete-a-tools-overlay-row"},{"title":"Upsert a tool's overlay","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/tool-meta/tools/{tool_name}","href":"/api-reference/tool_meta/upsert-a-tools-overlay"}]},{"group":"tool-runs","pages":[{"title":"List background tool runs for a tool","deprecated":null,"version":null,"openapi":"/openapi.json get /api/tool-runs","href":"/api-reference/tool-runs/list-background-tool-runs-for-a-tool"},{"title":"Submit a tool for background execution","deprecated":null,"version":null,"openapi":"/openapi.json post /api/tool-runs","href":"/api-reference/tool-runs/submit-a-tool-for-background-execution"},{"title":"Get a background tool run's status and result","deprecated":null,"version":null,"openapi":"/openapi.json get /api/tool-runs/{run_id}","href":"/api-reference/tool-runs/get-a-background-tool-runs-status-and-result"}]}]},{"group":"CLI","icon":"terminal","pages":[{"title":"CLI","icon":"terminal","href":"/reference/cli/index"},{"title":"tai agents","icon":"terminal","href":"/reference/cli/agents"},{"title":"tai auth","icon":"terminal","href":"/reference/cli/auth"},{"title":"tai backend","icon":"terminal","href":"/reference/cli/backend"},{"title":"tai backup","icon":"terminal","href":"/reference/cli/backup"},{"title":"tai catalog","icon":"terminal","href":"/reference/cli/catalog"},{"title":"tai channels","icon":"terminal","href":"/reference/cli/channels"},{"title":"tai checkpoints","icon":"terminal","href":"/reference/cli/checkpoints"},{"title":"tai completion","icon":"terminal","href":"/reference/cli/completion"},{"title":"tai config","icon":"terminal","href":"/reference/cli/config"},{"title":"tai connectors","icon":"terminal","href":"/reference/cli/connectors"},{"title":"tai conversations","icon":"terminal","href":"/reference/cli/conversations"},{"title":"tai db","icon":"terminal","href":"/reference/cli/db"},{"title":"tai doctor","icon":"terminal","href":"/reference/cli/doctor"},{"title":"tai extensions","icon":"terminal","href":"/reference/cli/extensions"},{"title":"tai fleet","icon":"terminal","href":"/reference/cli/fleet"},{"title":"tai hooks","icon":"terminal","href":"/reference/cli/hooks"},{"title":"tai interactions","icon":"terminal","href":"/reference/cli/interactions"},{"title":"tai keys","icon":"terminal","href":"/reference/cli/keys"},{"title":"tai manifest","icon":"terminal","href":"/reference/cli/manifest"},{"title":"tai mcp","icon":"terminal","href":"/reference/cli/mcp"},{"title":"tai metrics","icon":"terminal","href":"/reference/cli/metrics"},{"title":"tai notifications","icon":"terminal","href":"/reference/cli/notifications"},{"title":"tai obs","icon":"terminal","href":"/reference/cli/obs"},{"title":"tai openapi","icon":"terminal","href":"/reference/cli/openapi"},{"title":"tai plugins","icon":"terminal","href":"/reference/cli/plugins"},{"title":"tai presets","icon":"terminal","href":"/reference/cli/presets"},{"title":"tai principals","icon":"terminal","href":"/reference/cli/principals"},{"title":"tai resources","icon":"terminal","href":"/reference/cli/resources"},{"title":"tai roles","icon":"terminal","href":"/reference/cli/roles"},{"title":"tai runs","icon":"terminal","href":"/reference/cli/runs"},{"title":"tai sandbox","icon":"terminal","href":"/reference/cli/sandbox"},{"title":"tai schedules","icon":"terminal","href":"/reference/cli/schedules"},{"title":"tai scopes","icon":"terminal","href":"/reference/cli/scopes"},{"title":"tai serve","icon":"terminal","href":"/reference/cli/serve"},{"title":"tai setup","icon":"terminal","href":"/reference/cli/setup"},{"title":"tai state-templates","icon":"terminal","href":"/reference/cli/state-templates"},{"title":"tai states","icon":"terminal","href":"/reference/cli/states"},{"title":"tai storage","icon":"terminal","href":"/reference/cli/storage"},{"title":"tai sub-mcp","icon":"terminal","href":"/reference/cli/sub-mcp"},{"title":"tai system","icon":"terminal","href":"/reference/cli/system"},{"title":"tai templates","icon":"terminal","href":"/reference/cli/templates"},{"title":"tai tool-meta","icon":"terminal","href":"/reference/cli/tool-meta"},{"title":"tai tools","icon":"terminal","href":"/reference/cli/tools"},{"title":"tai traces","icon":"terminal","href":"/reference/cli/traces"},{"title":"tai version","icon":"terminal","href":"/reference/cli/version"}]},{"group":"Settings","icon":"sliders","pages":[{"title":"Settings reference","icon":"sliders","href":"/reference/settings"}]},{"group":"Capability map","icon":"compass","pages":[{"title":"Capability map","icon":"compass","href":"/reference/capability-map"}]},{"group":"Conversation bridge","icon":"comments","pages":[{"title":"Conversation bridge","icon":"comments","href":"/reference/conversation-bridge"}]},{"group":"Python SDK","icon":"python","pages":[{"title":"Python SDK","icon":"python","href":"/reference/python-sdk/index"},{"title":"App facade (tai42_contract.app)","icon":"layer-group","href":"/reference/python-sdk/contract-app"},{"title":"Agents (tai42_contract.agent)","icon":"robot","href":"/reference/python-sdk/contract-agent"},{"title":"Versioning (tai42_contract.versioning)","icon":"code-branch","href":"/reference/python-sdk/contract-versioning"},{"title":"Presets (tai42_contract.presets)","icon":"sliders","href":"/reference/python-sdk/contract-presets"},{"title":"Connectors (tai42_contract.connectors)","icon":"plug","href":"/reference/python-sdk/contract-connectors"},{"title":"Extensions (tai42_contract.extensions)","icon":"puzzle-piece","href":"/reference/python-sdk/contract-extensions"},{"title":"Monitoring (tai42_contract.monitoring)","icon":"chart-line","href":"/reference/python-sdk/contract-monitoring"},{"title":"Storage (tai42_contract.storage)","icon":"database","href":"/reference/python-sdk/contract-storage"},{"title":"Backends (tai42_contract.backend)","icon":"server","href":"/reference/python-sdk/contract-backend"},{"title":"Sandbox (tai42_contract.sandbox)","icon":"box","href":"/reference/python-sdk/contract-sandbox"},{"title":"Channels (tai42_contract.channels)","icon":"paper-plane","href":"/reference/python-sdk/contract-channels"},{"title":"Accounts (tai42_contract.accounts)","icon":"user-lock","href":"/reference/python-sdk/contract-accounts"},{"title":"Tools (tai42_contract.tools)","icon":"wrench","href":"/reference/python-sdk/contract-tools"},{"title":"Manifest (tai42_contract.manifest)","icon":"file-lines","href":"/reference/python-sdk/contract-manifest"},{"title":"Plugins (tai42_contract.plugins)","icon":"store","href":"/reference/python-sdk/contract-plugins"},{"title":"Interaction outcomes (tai42_contract.interactions)","icon":"comments","href":"/reference/python-sdk/contract-interactions"},{"title":"Plugin I/O and env (tai42_kit.plugins)","icon":"store","href":"/reference/python-sdk/kit-plugins"},{"title":"Provider registration (tai42_kit.access_control, tai42_kit.accounts)","icon":"id-card","href":"/reference/python-sdk/kit-registration"},{"title":"Pooled clients (tai42_kit.clients)","icon":"network-wired","href":"/reference/python-sdk/kit-clients"},{"title":"Postgres client (tai42_kit.clients.impl.postgres)","icon":"database","href":"/reference/python-sdk/kit-postgres"},{"title":"Loop-bound resources (tai42_kit.loop_bound)","icon":"arrows-rotate","href":"/reference/python-sdk/kit-loop-bound"},{"title":"Private event loop (tai42_kit.backend.private_loop)","icon":"rotate","href":"/reference/python-sdk/kit-private-loop"},{"title":"Shared event loop (tai42_kit.backend.shared_loop)","icon":"share-nodes","href":"/reference/python-sdk/kit-shared-loop"},{"title":"Closing event loops (tai42_kit.loop_closing)","icon":"circle-stop","href":"/reference/python-sdk/kit-loop-closing"},{"title":"Backend tools (tai42_kit.backend tool surface)","icon":"toolbox","href":"/reference/python-sdk/kit-backend-tools"},{"title":"Backend dispatch (tai42_kit.backend dispatch helpers)","icon":"shuffle","href":"/reference/python-sdk/kit-backend-dispatch"},{"title":"LLM factories and the classifier contract (tai42_kit.llm)","icon":"brain","href":"/reference/python-sdk/kit-llm"},{"title":"Run traces (tai42_kit.monitoring)","icon":"diagram-project","href":"/reference/python-sdk/kit-monitoring"},{"title":"Checkpoint stores (tai42_kit.llm.checkpoint)","icon":"floppy-disk","href":"/reference/python-sdk/kit-checkpoint"},{"title":"Settings (tai42_kit.settings)","icon":"gear","href":"/reference/python-sdk/kit-settings"},{"title":"Transports (tai42_kit.transport)","icon":"route","href":"/reference/python-sdk/kit-transport"},{"title":"Network guard (tai42_kit.net)","icon":"shield-halved","href":"/reference/python-sdk/kit-net"},{"title":"Park index and park seams (tai42_kit.interactions)","icon":"square-parking","href":"/reference/python-sdk/kit-interactions"},{"title":"Logging (tai42_kit.logging)","icon":"file-lines","href":"/reference/python-sdk/kit-logging"},{"title":"Skeleton app (tai42_skeleton.app)","icon":"microchip","href":"/reference/python-sdk/skeleton-app"},{"title":"ASGI factory (tai42_skeleton.asgi)","icon":"server","href":"/reference/python-sdk/skeleton-asgi"},{"title":"State record validation (tai42_skeleton.states)","icon":"list-check","href":"/reference/python-sdk/skeleton-states"}]},{"group":"Studio SDK","icon":"puzzle-piece","pages":[{"title":"Studio SDK","icon":"puzzle-piece","href":"/reference/studio-sdk/index"},{"title":"Plugin API","icon":"plug","href":"/reference/studio-sdk/plugin-api"},{"title":"Hooks","icon":"circle-nodes","href":"/reference/studio-sdk/hooks"},{"title":"Navigation","icon":"compass","href":"/reference/studio-sdk/navigation"},{"title":"Components","icon":"shapes","href":"/reference/studio-sdk/components"},{"title":"Schema forms","icon":"list-check","href":"/reference/studio-sdk/schema-forms"},{"title":"MCP widgets","icon":"diagram-project","href":"/reference/studio-sdk/mcp-widgets"},{"title":"Utilities","icon":"wrench","href":"/reference/studio-sdk/utilities"},{"title":"Host \u0026 testing","icon":"shield-halved","href":"/reference/studio-sdk/host-testing"}]}]}]},"basePath":"","title":"TAI42 — the OS for AI tools","buildId":"dpl_GZsjphRpnhWkstV12jxWNcMHFyox","deploymentId":"dpl_GZsjphRpnhWkstV12jxWNcMHFyox","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-B5zPa4Vr.js","utils-CVjrr8Yd.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DTgURWzl.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DxTHtkdZ.js","snippetPresets-Cx47o5Vx.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-4Fr6y9N_.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Dq2ElbEk.js","shallow-BfYl9r69.js","getApiPlaygroundDisplay-Ch3xc7i1.js","CodeSnippet-BsBxuJ1v.js","CodeSnippets-CetzeDL8.js","Page-CYZot51e.js","getPastedJson-BxPKFSJx.js","icon-o0J1Ochb.js","MethodPill-Du3usO5m.js","DuplicateIcon-DJypyMzl.js","createIcon-YMA6N8KJ.js","DynamicMarkdown-CWvhfcZc.js","SectionHeading-BdLVaXCd.js","axios-vUo_bRtp.js","Markdown-C4Ez6OeV.js","clsx-DptzKFCt.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-Dt1IougW.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CZ6Wt2Vb.js"]}