{
"error": "reloading — the server is applying a config reload; retry shortly",
"reloading": true
}
config
Apply a settings profile — replace the stored env and reload the fleet
Apply the profile’s active env as the WHOLE stored env band and reload the fleet.
The profile’s secret_keys are written as the stored secret marks in the same replace.
A key the profile omits is deleted, save the carried deployment X band; build+swap a fresh serving
epoch under it, persist env-write-LAST, broadcast the reload, and recycle the fleet for recycle-class
diffs. NO request body.
The response is the dedicated profileApplyResponse{hot, recycle:[{name, kind, status, generation_before, keys, detail}], skipped:[name], fresh:[{name, kind, generation}], refused:[], recycle_stopped:{kind, name, detail} | null, awaiting_respawn:[{name, keys}], roll_deferred, roll_deferred_to, span_release_error, fanout} — key names + worker identities only,
never env values. recycle is one line per sibling the roll reached (plus the applier’s
own deferred self-exit line when it is armed), its keys the recycle-class keys that
worker’s reload reported moved off its bound value; skipped names the workers whose reload
confirmed no such key, at the reload or when asked once ready, left running. A recycled
line is confirmed on reality; the roll stops at the first line that is not: timed-out
(its old life did not go, fresh capacity did not boot, or it never returned to ready, within
the step budget) or failed (the worker refused the op, or the bus could not be reached
while it was in hand), its detail naming why — or when the bus could not be read before a
target was reached.
recycle_stopped names where the roll stopped and why (null when it ran to its end; a
null name when no target was in hand). Later siblings and the applier’s own recycle are
then not attempted, and the call still answers with the report: the env is persisted, and
fanout says what the reload broadcast reached. fresh is the per-kind new ready lives
observed since the pre-apply snapshot, capacity evidence never claimed as any target’s
successor. refused is []:
a refusal (X-band key, a key the deployment sets, dangling !ENV, a bus-reaching key no
recycle can carry) aborts upfront with a loud 400 naming the key, before anything is snapshotted, built,
or persisted. awaiting_respawn names the workers (name + keys) still awaiting a respawn
after the roll — when it converged, only the workers whose reload failed 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. span_release_error is null when the config
store released its exclusive write span after the env persisted, otherwise the store’s error:
the env is persisted and the broadcast and roll reported here still ran, but the store may still
hold its write span until this worker exits. When the applier’s own row reports a
serve-affecting recycle key (or its state is unknown) and the roll converged, the applier’s
OWN recycle is armed as a post-reply graceful self-exit
— after the HTTP body flushes, or once a projected tool call (MCP, tai tools run, an
agent, a preset, a schedule, a hook) returned — and its supervisor respawns it on the new
env. An apply run under a bound the roll’s waits can outlast (a dispatched job’s budget, an
armed turn budget) runs no roll itself: it 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, roll_deferred_to names that member, and recycle and
awaiting_respawn are empty, the roll not judged in this reply. Otherwise roll_deferred
is false and roll_deferred_tonull. 404 for an absent name.
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 snapshotted.
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
/
profiles
/
{name}
/
apply
Apply a settings profile — replace the stored env and reload the fleet
curl --request POST \ --url https://api.example.com/api/config/profiles/{name}/apply \ --header 'x-api-key: <api-key>'
hot are the hot-class diff key names; recycle the worker lines of the recycle roll
(empty 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);
skipped the workers so confirmed, left running; fresh the new ready lives seen since
the pre-apply snapshot; refused is empty on success
(any refusal aborts the pipeline before a response is built); recycle_stopped is null
when the roll ran to its end, otherwise where it stopped and why; awaiting_respawn the
workers still awaiting a respawn after the apply (name + keys; when the roll converged, 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);
fanout the reload broadcast's fleet summary. Names only — never env values.
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 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":[],"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"api-reference/config/apply-a-settings-profile-—-replace-the-stored-env-and-reload-the-fleet","slug":"/api-reference/config/apply-a-settings-profile-—-replace-the-stored-env-and-reload-the-fleet","pageMetadata":{"title":"Apply a settings profile — replace the stored env and reload the fleet","description":"Apply the profile's active env as the WHOLE stored env band and reload the fleet.\n\nThe profile's ``secret_keys`` are written as the stored secret marks in the same replace.\n\nA key the profile omits is deleted, save the carried deployment X band; build+swap a fresh serving\nepoch under it, persist env-write-LAST, broadcast the reload, and recycle the fleet for recycle-class\ndiffs. NO request body.\n\nThe response is the dedicated ``profileApplyResponse`` ``{hot, recycle:[{name, kind, status,\ngeneration_before, keys, detail}], skipped:[name], fresh:[{name, kind, generation}], refused:[],\nrecycle_stopped:{kind, name, detail} | null, awaiting_respawn:[{name, keys}], roll_deferred,\nroll_deferred_to, span_release_error, fanout}`` — key names + worker identities only,\nnever env values. ``recycle`` is one line per sibling the roll reached (plus the applier's\nown deferred self-exit line when it is armed), its ``keys`` the recycle-class keys that\nworker's reload reported moved off its bound value; ``skipped`` names the workers whose reload\nconfirmed no such key, at the reload or when asked once ready, left running. A ``recycled``\nline is confirmed on reality; the roll stops at the first line that is not: ``timed-out``\n(its old life did not go, fresh capacity did not boot, or it never returned to ready, within\nthe step budget) or ``failed`` (the worker refused the op, or the bus could not be reached\nwhile it was in hand), its ``detail`` naming why — or when the bus could not be read before a\ntarget was reached.\n``recycle_stopped`` names where the roll stopped and why (``null`` when it ran to its end; a\n``null`` name when no target was in hand). Later siblings and the applier's own recycle are\nthen not attempted, and the call still answers with the report: the env is persisted, and\n``fanout`` says what the reload broadcast reached. ``fresh`` is the per-kind new ready lives\nobserved since the pre-apply snapshot, capacity evidence never claimed as any target's\nsuccessor. ``refused`` is ``[]``:\na refusal (X-band key, a key the deployment sets, dangling ``!ENV``, a bus-reaching key no\nrecycle can carry) aborts upfront with a loud 400 naming the key, before anything is snapshotted, built,\nor persisted. ``awaiting_respawn`` names the workers (name + keys) still awaiting a respawn\nafter the roll — when it converged, only the workers whose reload failed at their epoch\nbuild: the stored config did not build on them and a restart may fail the same way, so the\nroll leaves them running and lists them. ``span_release_error`` is ``null`` when the config\nstore released its exclusive write span after the env persisted, otherwise the store's error:\nthe env is persisted and the broadcast and roll reported here still ran, but the store may still\nhold its write span until this worker exits. When the applier's own row reports a\nserve-affecting recycle key (or its state is unknown) and the roll converged, the applier's\nOWN recycle is armed as a post-reply graceful self-exit\n— after the HTTP body flushes, or once a projected tool call (MCP, ``tai tools run``, an\nagent, a preset, a schedule, a hook) returned — and its supervisor respawns it on the new\nenv. An apply run under a bound the roll's waits can outlast (a dispatched job's budget, an\narmed turn budget) runs no roll itself: it hands the roll to the bus member it acts for, which\ncarries it out after the reply and departs itself last, once the roll converged, when it needs\nits own restart; ``roll_deferred`` is then ``true``, ``roll_deferred_to`` names that member, and ``recycle`` and\n``awaiting_respawn`` are empty, the roll not judged in this reply. Otherwise ``roll_deferred``\nis ``false`` and ``roll_deferred_to`` ``null``. 404 for an absent name.\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 snapshotted.\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/profiles/{name}/apply","href":"/api-reference/config/apply-a-settings-profile-—-replace-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: \"Apply the profile’s active env as the WHOLE stored env band and reload the fleet.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The profile’s \", _jsx(_components.code, {\n children: \"secret_keys\"\n }), \" are written as the stored secret marks in the same replace.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"A key the profile omits is deleted, save the carried deployment X band; build+swap a fresh serving\\nepoch under it, persist env-write-LAST, broadcast the reload, and recycle the fleet for recycle-class\\ndiffs. NO request body.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The response is the dedicated \", _jsx(_components.code, {\n children: \"profileApplyResponse\"\n }), \" \", _jsx(_components.code, {\n children: \"{hot, recycle:[{name, kind, status, generation_before, keys, detail}], skipped:[name], fresh:[{name, kind, generation}], refused:[], recycle_stopped:{kind, name, detail} | null, awaiting_respawn:[{name, keys}], roll_deferred, roll_deferred_to, span_release_error, fanout}\"\n }), \" — key names + worker identities only,\\nnever env values. \", _jsx(_components.code, {\n children: \"recycle\"\n }), \" is one line per sibling the roll reached (plus the applier’s\\nown deferred self-exit line when it is armed), its \", _jsx(_components.code, {\n children: \"keys\"\n }), \" the recycle-class keys that\\nworker’s reload reported moved off its bound value; \", _jsx(_components.code, {\n children: \"skipped\"\n }), \" names the workers whose reload\\nconfirmed no such key, at the reload or when asked once ready, left running. A \", _jsx(_components.code, {\n children: \"recycled\"\n }), \"\\nline is confirmed on reality; the roll stops at the first line that is not: \", _jsx(_components.code, {\n children: \"timed-out\"\n }), \"\\n(its old life did not go, fresh capacity did not boot, or it never returned to ready, within\\nthe step budget) or \", _jsx(_components.code, {\n children: \"failed\"\n }), \" (the worker refused the op, or the bus could not be reached\\nwhile it was in hand), its \", _jsx(_components.code, {\n children: \"detail\"\n }), \" naming why — or when the bus could not be read before a\\ntarget was reached.\\n\", _jsx(_components.code, {\n children: \"recycle_stopped\"\n }), \" names where the roll stopped and why (\", _jsx(_components.code, {\n children: \"null\"\n }), \" when it ran to its end; a\\n\", _jsx(_components.code, {\n children: \"null\"\n }), \" name when no target was in hand). Later siblings and the applier’s own recycle are\\nthen not attempted, and the call still answers with the report: the env is persisted, and\\n\", _jsx(_components.code, {\n children: \"fanout\"\n }), \" says what the reload broadcast reached. \", _jsx(_components.code, {\n children: \"fresh\"\n }), \" is the per-kind new ready lives\\nobserved since the pre-apply snapshot, capacity evidence never claimed as any target’s\\nsuccessor. \", _jsx(_components.code, {\n children: \"refused\"\n }), \" is \", _jsx(_components.code, {\n children: \"[]\"\n }), \":\\na refusal (X-band key, a key the deployment sets, dangling \", _jsx(_components.code, {\n children: \"!ENV\"\n }), \", a bus-reaching key no\\nrecycle can carry) aborts upfront with a loud 400 naming the key, before anything is snapshotted, built,\\nor persisted. \", _jsx(_components.code, {\n children: \"awaiting_respawn\"\n }), \" names the workers (name + keys) still awaiting a respawn\\nafter the roll — when it converged, only the workers whose reload failed at their epoch\\nbuild: the stored config did not build on them and a restart may fail the same way, so the\\nroll leaves them running and lists them. \", _jsx(_components.code, {\n children: \"span_release_error\"\n }), \" is \", _jsx(_components.code, {\n children: \"null\"\n }), \" when the config\\nstore released its exclusive write span after the env persisted, otherwise the store’s error:\\nthe env is persisted and the broadcast and roll reported here still ran, but the store may still\\nhold its write span until this worker exits. When the applier’s own row reports a\\nserve-affecting recycle key (or its state is unknown) and the roll converged, the applier’s\\nOWN recycle is armed as a post-reply graceful self-exit\\n— after the HTTP body flushes, or once a projected tool call (MCP, \", _jsx(_components.code, {\n children: \"tai tools run\"\n }), \", an\\nagent, a preset, a schedule, a hook) returned — and its supervisor respawns it on the new\\nenv. An apply run under a bound the roll’s waits can outlast (a dispatched job’s budget, an\\narmed turn budget) runs no roll itself: it hands the roll to the bus member it acts for, which\\ncarries it out after the reply and departs itself last, once the roll converged, when it needs\\nits own restart; \", _jsx(_components.code, {\n children: \"roll_deferred\"\n }), \" is then \", _jsx(_components.code, {\n children: \"true\"\n }), \", \", _jsx(_components.code, {\n children: \"roll_deferred_to\"\n }), \" names that member, and \", _jsx(_components.code, {\n children: \"recycle\"\n }), \" and\\n\", _jsx(_components.code, {\n children: \"awaiting_respawn\"\n }), \" are empty, the roll not judged in this reply. Otherwise \", _jsx(_components.code, {\n children: \"roll_deferred\"\n }), \"\\nis \", _jsx(_components.code, {\n children: \"false\"\n }), \" and \", _jsx(_components.code, {\n children: \"roll_deferred_to\"\n }), \" \", _jsx(_components.code, {\n children: \"null\"\n }), \". 404 for an absent name.\\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 snapshotted.\"]\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":"Apply a settings profile — replace the stored env and reload the fleet","description":"Apply the profile's active env as the WHOLE stored env band and reload the fleet.\n\nThe profile's ``secret_keys`` are written as the stored secret marks in the same replace.\n\nA key the profile omits is deleted, save the carried deployment X band; build+swap a fresh serving\nepoch under it, persist env-write-LAST, broadcast the reload, and recycle the fleet for recycle-class\ndiffs. NO request body.\n\nThe response is the dedicated ``profileApplyResponse`` ``{hot, recycle:[{name, kind, status,\ngeneration_before, keys, detail}], skipped:[name], fresh:[{name, kind, generation}], refused:[],\nrecycle_stopped:{kind, name, detail} | null, awaiting_respawn:[{name, keys}], roll_deferred,\nroll_deferred_to, span_release_error, fanout}`` — key names + worker identities only,\nnever env values. ``recycle`` is one line per sibling the roll reached (plus the applier's\nown deferred self-exit line when it is armed), its ``keys`` the recycle-class keys that\nworker's reload reported moved off its bound value; ``skipped`` names the workers whose reload\nconfirmed no such key, at the reload or when asked once ready, left running. A ``recycled``\nline is confirmed on reality; the roll stops at the first line that is not: ``timed-out``\n(its old life did not go, fresh capacity did not boot, or it never returned to ready, within\nthe step budget) or ``failed`` (the worker refused the op, or the bus could not be reached\nwhile it was in hand), its ``detail`` naming why — or when the bus could not be read before a\ntarget was reached.\n``recycle_stopped`` names where the roll stopped and why (``null`` when it ran to its end; a\n``null`` name when no target was in hand). Later siblings and the applier's own recycle are\nthen not attempted, and the call still answers with the report: the env is persisted, and\n``fanout`` says what the reload broadcast reached. ``fresh`` is the per-kind new ready lives\nobserved since the pre-apply snapshot, capacity evidence never claimed as any target's\nsuccessor. ``refused`` is ``[]``:\na refusal (X-band key, a key the deployment sets, dangling ``!ENV``, a bus-reaching key no\nrecycle can carry) aborts upfront with a loud 400 naming the key, before anything is snapshotted, built,\nor persisted. ``awaiting_respawn`` names the workers (name + keys) still awaiting a respawn\nafter the roll — when it converged, only the workers whose reload failed at their epoch\nbuild: the stored config did not build on them and a restart may fail the same way, so the\nroll leaves them running and lists them. ``span_release_error`` is ``null`` when the config\nstore released its exclusive write span after the env persisted, otherwise the store's error:\nthe env is persisted and the broadcast and roll reported here still ran, but the store may still\nhold its write span until this worker exits. When the applier's own row reports a\nserve-affecting recycle key (or its state is unknown) and the roll converged, the applier's\nOWN recycle is armed as a post-reply graceful self-exit\n— after the HTTP body flushes, or once a projected tool call (MCP, ``tai tools run``, an\nagent, a preset, a schedule, a hook) returned — and its supervisor respawns it on the new\nenv. An apply run under a bound the roll's waits can outlast (a dispatched job's budget, an\narmed turn budget) runs no roll itself: it hands the roll to the bus member it acts for, which\ncarries it out after the reply and departs itself last, once the roll converged, when it needs\nits own restart; ``roll_deferred`` is then ``true``, ``roll_deferred_to`` names that member, and ``recycle`` and\n``awaiting_respawn`` are empty, the roll not judged in this reply. Otherwise ``roll_deferred``\nis ``false`` and ``roll_deferred_to`` ``null``. 404 for an absent name.\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 snapshotted.\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/profiles/{name}/apply","href":"/api-reference/config/apply-a-settings-profile-—-replace-the-stored-env-and-reload-the-fleet","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"description":"Apply the profile's active env as the WHOLE stored env band and reload the fleet.\n\nThe profile's ``secret_keys`` are written as the stored secret marks in the same replace.\n\nA key the profile omits is deleted, save the carried deployment X band; build+swap a fresh serving\nepoch under it, persist env-write-LAST, broadcast the reload, and recycle the fleet for recycle-class\ndiffs. NO request body.\n\nThe response is the dedicated ``profileApplyResponse`` ``{hot, recycle:[{name, kind, status,\ngeneration_before, keys, detail}], skipped:[name], fresh:[{name, kind, generation}], refused:[],\nrecycle_stopped:{kind, name, detail} | null, awaiting_respawn:[{name, keys}], roll_deferred,\nroll_deferred_to, span_release_error, fanout}`` — key names + worker identities only,\nnever env values. ``recycle`` is one line per sibling the roll reached (plus the applier's\nown deferred self-exit line when it is armed), its ``keys`` the recycle-class keys that\nworker's reload reported moved off its bound value; ``skipped`` names the workers whose reload\nconfirmed no such key, at the reload or when asked once ready, left running. A ``recycled``\nline is confirmed on reality; the roll stops at the first line that is not: ``timed-out``\n(its old life did not go, fresh capacity did not boot, or it never returned to ready, within\nthe step budget) or ``failed`` (the worker refused the op, or the bus could not be reached\nwhile it was in hand), its ``detail`` naming why — or when the bus could not be read before a\ntarget was reached.\n``recycle_stopped`` names where the roll stopped and why (``null`` when it ran to its end; a\n``null`` name when no target was in hand). Later siblings and the applier's own recycle are\nthen not attempted, and the call still answers with the report: the env is persisted, and\n``fanout`` says what the reload broadcast reached. ``fresh`` is the per-kind new ready lives\nobserved since the pre-apply snapshot, capacity evidence never claimed as any target's\nsuccessor. ``refused`` is ``[]``:\na refusal (X-band key, a key the deployment sets, dangling ``!ENV``, a bus-reaching key no\nrecycle can carry) aborts upfront with a loud 400 naming the key, before anything is snapshotted, built,\nor persisted. ``awaiting_respawn`` names the workers (name + keys) still awaiting a respawn\nafter the roll — when it converged, only the workers whose reload failed at their epoch\nbuild: the stored config did not build on them and a restart may fail the same way, so the\nroll leaves them running and lists them. ``span_release_error`` is ``null`` when the config\nstore released its exclusive write span after the env persisted, otherwise the store's error:\nthe env is persisted and the broadcast and roll reported here still ran, but the store may still\nhold its write span until this worker exits. When the applier's own row reports a\nserve-affecting recycle key (or its state is unknown) and the roll converged, the applier's\nOWN recycle is armed as a post-reply graceful self-exit\n— after the HTTP body flushes, or once a projected tool call (MCP, ``tai tools run``, an\nagent, a preset, a schedule, a hook) returned — and its supervisor respawns it on the new\nenv. An apply run under a bound the roll's waits can outlast (a dispatched job's budget, an\narmed turn budget) runs no roll itself: it hands the roll to the bus member it acts for, which\ncarries it out after the reply and departs itself last, once the roll converged, when it needs\nits own restart; ``roll_deferred`` is then ``true``, ``roll_deferred_to`` names that member, and ``recycle`` and\n``awaiting_respawn`` are empty, the roll not judged in this reply. Otherwise ``roll_deferred``\nis ``false`` and ``roll_deferred_to`` ``null``. 404 for an absent name.\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 snapshotted.\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_profiles_name_apply","parameters":["b4f6fc6d-1315-47a1-b12d-1c23c325c0b7"],"responses":{"200":"fb36e241-bd77-4f8a-8880-d664b3c9d55c","400":"2fa3bd4b-4676-41d8-b07b-1ea6de14dfbd","401":"22782024-825f-4a3b-bfb4-81b5befa9396","404":"880fdd03-b17b-4c16-803a-c2107ea27a15","409":"ccca077f-454b-446b-b08b-e90f07c03ea3","501":"b60ad49c-65a2-4a0b-bf8d-faf97158326e","502":"a099b000-658b-4eb3-8ba0-41e9e98320f5","503":"eba4d3f4-20e4-4c59-b396-352164edcedb"},"security":["f4532b11-3a4d-4fbb-9505-73e0eb8ae3d5"],"summary":"Apply a settings profile — replace the stored env and reload the fleet","tags":["config"],"x-destructive":true,"method":"post","type":"path","servers":[],"path":"/api/config/profiles/{name}/apply","baseUrlOptions":[],"title":"Apply a settings profile — replace the stored env and reload the fleet","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"b4f6fc6d-1315-47a1-b12d-1c23c325c0b7":{"in":"path","name":"name","required":true,"schema":{"type":"string","isRequired":true,"uniqueKey":"","typeLabel":"string"}}},"responses":{"fb36e241-bd77-4f8a-8880-d664b3c9d55c":{"content":{"application/json":{"schema":{"properties":{"data":{"description":"The dedicated profile-apply response.\n\n``hot`` are the hot-class diff key names; ``recycle`` the worker lines of the recycle roll\n(empty when the roll had no worker to visit: every worker's reload confirmed no recycle-class\nkey moved off its bound value, or the only ones naming one were refused at their epoch build or are\nthe writer whose own restart cannot follow as its exit);\n``skipped`` the workers so confirmed, left running; ``fresh`` the new ready lives seen since\nthe pre-apply snapshot; ``refused`` is empty on success\n(any refusal aborts the pipeline before a response is built); ``recycle_stopped`` is ``null``\nwhen the roll ran to its end, otherwise where it stopped and why; ``awaiting_respawn`` the\nworkers still awaiting a respawn after the apply (name + keys; when the roll converged, only\nthe workers whose reload was refused at their epoch build: the stored config did not build on them\nand a restart may fail the same way, so the roll leaves them running and lists them);\n``fanout`` the reload broadcast's fleet summary. Names only — never env values.\n``roll_deferred`` is ``true`` when the roll is not judged in this reply: ``roll_deferred_to``\nthen names the worker that carries it out after the reply (``recycle`` and\n``awaiting_respawn`` empty), and is ``null`` otherwise.\n``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":{"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"},"fresh":{"items":{"description":"One newly-ready worker life observed since the pre-apply snapshot.","properties":{"generation":{"title":"Generation","type":"integer","isRequired":true,"uniqueKey":"data.fresh.items.[INDEX].generation","typeLabel":"integer"},"kind":{"title":"Kind","type":"string","isRequired":true,"uniqueKey":"data.fresh.items.[INDEX].kind","typeLabel":"string"},"name":{"title":"Name","type":"string","isRequired":true,"uniqueKey":"data.fresh.items.[INDEX].name","typeLabel":"string"}},"required":["name","kind","generation"],"title":"FreshLife","type":"object","uniqueKey":"data.fresh.items.[INDEX]","typeLabel":"FreshLife · object"},"title":"Fresh","type":"array","isRequired":true,"uniqueKey":"data.fresh","typeLabel":"FreshLife · object[]"},"hot":{"items":{"type":"string","uniqueKey":"data.hot.items.[INDEX]","typeLabel":"string"},"title":"Hot","type":"array","isRequired":true,"uniqueKey":"data.hot","typeLabel":"string[]"},"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.items.[INDEX].generation_before","typeLabel":"integer"},"keys":{"items":{"type":"string","uniqueKey":"data.recycle.items.[INDEX].keys.items.[INDEX]","typeLabel":"string"},"title":"Keys","type":"array","isRequired":true,"uniqueKey":"data.recycle.items.[INDEX].keys","typeLabel":"string[]"},"kind":{"title":"Kind","type":"string","isRequired":true,"uniqueKey":"data.recycle.items.[INDEX].kind","typeLabel":"string"},"name":{"title":"Name","type":"string","isRequired":true,"uniqueKey":"data.recycle.items.[INDEX].name","typeLabel":"string"},"status":{"title":"Status","type":"string","isRequired":true,"uniqueKey":"data.recycle.items.[INDEX].status","typeLabel":"string"},"detail":{"oneOf":[{"type":"string","title":"Detail","uniqueKey":"data.recycle.items.[INDEX].detail.oneOf.0","typeLabel":"string"},{"type":"null","title":"Detail","uniqueKey":"data.recycle.items.[INDEX].detail.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.recycle.items.[INDEX].detail","typeLabel":"string | null"}},"required":["name","kind","status","generation_before","keys"],"title":"RecycleEntry","type":"object","uniqueKey":"data.recycle.items.[INDEX]","typeLabel":"RecycleEntry · object"},"title":"Recycle","type":"array","isRequired":true,"uniqueKey":"data.recycle","typeLabel":"RecycleEntry · object[]"},"refused":{"items":{"type":"string","uniqueKey":"data.refused.items.[INDEX]","typeLabel":"string"},"title":"Refused","type":"array","isRequired":true,"uniqueKey":"data.refused","typeLabel":"string[]"},"skipped":{"items":{"type":"string","uniqueKey":"data.skipped.items.[INDEX]","typeLabel":"string"},"title":"Skipped","type":"array","isRequired":true,"uniqueKey":"data.skipped","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_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_stopped.oneOf.0.detail","typeLabel":"string"},"kind":{"title":"Kind","type":"string","isRequired":true,"uniqueKey":"data.recycle_stopped.oneOf.0.kind","typeLabel":"string"},"name":{"oneOf":[{"type":"string","title":"Name","isRequired":true,"uniqueKey":"data.recycle_stopped.oneOf.0.name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Name","isRequired":true,"uniqueKey":"data.recycle_stopped.oneOf.0.name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.recycle_stopped.oneOf.0.name","typeLabel":"string | null"}},"uniqueKey":"data.recycle_stopped.oneOf.0","typeLabel":"RecycleStop · object"},{"type":"null","uniqueKey":"data.recycle_stopped.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.recycle_stopped","typeLabel":"RecycleStop · 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":["hot","recycle","skipped","fresh","refused","fanout"],"title":"ProfileApplyResponse","type":"object","isRequired":true,"uniqueKey":"data","typeLabel":"ProfileApplyResponse · object"}},"required":["data"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"data":{"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>"}]},"fresh":[{"generation":123,"kind":"\u003cstring>","name":"\u003cstring>"}],"hot":["\u003cstring>"],"recycle":[{"generation_before":123,"keys":["\u003cstring>"],"kind":"\u003cstring>","name":"\u003cstring>","status":"\u003cstring>","detail":"\u003cstring>"}],"refused":["\u003cstring>"],"skipped":["\u003cstring>"],"awaiting_respawn":[{"keys":["\u003cstring>"],"name":"\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"},"2fa3bd4b-4676-41d8-b07b-1ea6de14dfbd":{"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"},"22782024-825f-4a3b-bfb4-81b5befa9396":{"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"},"880fdd03-b17b-4c16-803a-c2107ea27a15":{"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":"Resource not found.","exampleType":"generated"},"ccca077f-454b-446b-b08b-e90f07c03ea3":{"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"},"b60ad49c-65a2-4a0b-bf8d-faf97158326e":{"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"},"a099b000-658b-4eb3-8ba0-41e9e98320f5":{"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"},"eba4d3f4-20e4-4c59-b396-352164edcedb":{"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":{"f4532b11-3a4d-4fbb-9505-73e0eb8ae3d5":{"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.944Z","originalFileLocation":"api-reference/config/apply-a-settings-profile-—-replace-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=\"Apply the profile\u0026#x27;s active env as the WHOLE stored env band and reload the fleet. The profile\u0026#x27;s secret_keys are written as the stored secret marks in the same replace. A key the profile omits is deleted, save the carried deployment X band; build+swap a fresh serving epoch under it, persist env-write-LAST, broadcast the reload, and recycle the fleet for recycle-class diffs. NO request body. The response is the dedicated profileApplyResponse {hot, recycle:[{name, kind, status, generation_before, keys, detail}], skipped:[name], fresh:[{name, kind, generation}], refused:[], recycle_stopped:{kind, name, detail} | null, awaiting_respawn:[{name, keys}], roll_deferred, roll_deferred_to, span_release_error, fanout} — key names + worker identities only, never env values. recycle is one line per sibling the roll reached (plus the applier\u0026#x27;s own deferred self-exit line when it is armed), its keys the recycle-class keys that worker\u0026#x27;s reload reported moved off its bound value; skipped names the workers whose reload confirmed no such key, at the reload or when asked once ready, left running. A recycled line is confirmed on reality; the roll stops at the first line that is not: timed-out (its old life did not go, fresh capacity did not boot, or it never returned to ready, within the step budget) or failed (the worker refused the op, or the bus could not be reached while it was in hand), its detail naming why — or when the bus could not be read before a target was reached. recycle_stopped names where the roll stopped and why (null when it ran to its end; a null name when no target was in hand). Later siblings and the applier\u0026#x27;s own recycle are then not attempted, and the call still answers with the report: the env is persisted, and fanout says what the reload broadcast reached. fresh is the per-kind new ready lives observed since the pre-apply snapshot, capacity evidence never claimed as any target\u0026#x27;s successor. refused is []: a refusal (X-band key, a key the deployment sets, dangling !ENV, a bus-reaching key no recycle can carry) aborts upfront with a loud 400 naming the key, before anything is snapshotted, built, or persisted. awaiting_respawn names the workers (name + keys) still awaiting a respawn after the roll — when it converged, only the workers whose reload failed 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. span_release_error is null when the config store released its exclusive write span after the env persisted, otherwise the store\u0026#x27;s error: the env is persisted and the broadcast and roll reported here still ran, but the store may still hold its write span until this worker exits. When the applier\u0026#x27;s own row reports a serve-affecting recycle key (or its state is unknown) and the roll converged, the applier\u0026#x27;s OWN recycle is armed as a post-reply graceful self-exit — after the HTTP body flushes, or once a projected tool call (MCP, tai tools run, an agent, a preset, a schedule, a hook) returned — and its supervisor respawns it on the new env. An apply run under a bound the roll\u0026#x27;s waits can outlast (a dispatched job\u0026#x27;s budget, an armed turn budget) runs no roll itself: it 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, roll_deferred_to names that member, and recycle and awaiting_respawn are empty, the roll not judged in this reply. Otherwise roll_deferred is false and roll_deferred_to null. 404 for an absent name. 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 snapshotted. 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/apply-a-settings-profile-—-replace-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/apply-a-settings-profile-—-replace-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/apply-a-settings-profile-%E2%80%94-replace-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/apply-a-settings-profile-%E2%80%94-replace-the-stored-env-and-reload-the-fleet#webpage\",\"url\":\"https://docs.tai42.ai/api-reference/config/apply-a-settings-profile-%E2%80%94-replace-the-stored-env-and-reload-the-fleet\",\"name\":\"Apply a settings profile — replace the stored env and reload the fleet\",\"description\":\"Apply the profile's active env as the WHOLE stored env band and reload the fleet. The profile's secret_keys are written as the stored secret marks in the same replace. A key the profile omits is deleted, save the carried deployment X band; build+swap a fresh serving epoch under it, persist env-write-LAST, broadcast the reload, and recycle the fleet for recycle-class diffs. NO request body. The response is the dedicated profileApplyResponse {hot, recycle:[{name, kind, status, generation_before, keys, detail}], skipped:[name], fresh:[{name, kind, generation}], refused:[], recycle_stopped:{kind, name, detail} | null, awaiting_respawn:[{name, keys}], roll_deferred, roll_deferred_to, span_release_error, fanout} — key names + worker identities only, never env values. recycle is one line per sibling the roll reached (plus the applier's own deferred self-exit line when it is armed), its keys the recycle-class keys that worker's reload reported moved off its bound value; skipped names the workers whose reload confirmed no such key, at the reload or when asked once ready, left running. A recycled line is confirmed on reality; the roll stops at the first line that is not: timed-out (its old life did not go, fresh capacity did not boot, or it never returned to ready, within the step budget) or failed (the worker refused the op, or the bus could not be reached while it was in hand), its detail naming why — or when the bus could not be read before a target was reached. recycle_stopped names where the roll stopped and why (null when it ran to its end; a null name when no target was in hand). Later siblings and the applier's own recycle are then not attempted, and the call still answers with the report: the env is persisted, and fanout says what the reload broadcast reached. fresh is the per-kind new ready lives observed since the pre-apply snapshot, capacity evidence never claimed as any target's successor. refused is []: a refusal (X-band key, a key the deployment sets, dangling !ENV, a bus-reaching key no recycle can carry) aborts upfront with a loud 400 naming the key, before anything is snapshotted, built, or persisted. awaiting_respawn names the workers (name + keys) still awaiting a respawn after the roll — when it converged, only the workers whose reload failed 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. span_release_error is null when the config store released its exclusive write span after the env persisted, otherwise the store's error: the env is persisted and the broadcast and roll reported here still ran, but the store may still hold its write span until this worker exits. When the applier's own row reports a serve-affecting recycle key (or its state is unknown) and the roll converged, the applier's OWN recycle is armed as a post-reply graceful self-exit — after the HTTP body flushes, or once a projected tool call (MCP, tai tools run, an agent, a preset, a schedule, a hook) returned — and its supervisor respawns it on the new env. An apply run under a bound the roll's waits can outlast (a dispatched job's budget, an armed turn budget) runs no roll itself: it 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, roll_deferred_to names that member, and recycle and awaiting_respawn are empty, the roll not judged in this reply. Otherwise roll_deferred is false and roll_deferred_to null. 404 for an absent name. 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 snapshotted. 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.944Z\",\"isPartOf\":{\"@id\":\"https://docs.tai42.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.tai42.ai/api-reference/config/apply-a-settings-profile-%E2%80%94-replace-the-stored-env-and-reload-the-fleet#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.tai42.ai/api-reference/config/apply-a-settings-profile-%E2%80%94-replace-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\":\"Apply a settings profile — replace the stored env and reload the fleet\",\"item\":\"https://docs.tai42.ai/api-reference/config/apply-a-settings-profile-%E2%80%94-replace-the-stored-env-and-reload-the-fleet\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.tai42.ai/api-reference/config/apply-a-settings-profile-%E2%80%94-replace-the-stored-env-and-reload-the-fleet#apireference\",\"headline\":\"Apply a settings profile — replace the stored env and reload the fleet\",\"name\":\"Apply a settings profile — replace the stored env and reload the fleet\",\"description\":\"Apply the profile's active env as the WHOLE stored env band and reload the fleet. The profile's secret_keys are written as the stored secret marks in the same replace. A key the profile omits is deleted, save the carried deployment X band; build+swap a fresh serving epoch under it, persist env-write-LAST, broadcast the reload, and recycle the fleet for recycle-class diffs. NO request body. The response is the dedicated profileApplyResponse {hot, recycle:[{name, kind, status, generation_before, keys, detail}], skipped:[name], fresh:[{name, kind, generation}], refused:[], recycle_stopped:{kind, name, detail} | null, awaiting_respawn:[{name, keys}], roll_deferred, roll_deferred_to, span_release_error, fanout} — key names + worker identities only, never env values. recycle is one line per sibling the roll reached (plus the applier's own deferred self-exit line when it is armed), its keys the recycle-class keys that worker's reload reported moved off its bound value; skipped names the workers whose reload confirmed no such key, at the reload or when asked once ready, left running. A recycled line is confirmed on reality; the roll stops at the first line that is not: timed-out (its old life did not go, fresh capacity did not boot, or it never returned to ready, within the step budget) or failed (the worker refused the op, or the bus could not be reached while it was in hand), its detail naming why — or when the bus could not be read before a target was reached. recycle_stopped names where the roll stopped and why (null when it ran to its end; a null name when no target was in hand). Later siblings and the applier's own recycle are then not attempted, and the call still answers with the report: the env is persisted, and fanout says what the reload broadcast reached. fresh is the per-kind new ready lives observed since the pre-apply snapshot, capacity evidence never claimed as any target's successor. refused is []: a refusal (X-band key, a key the deployment sets, dangling !ENV, a bus-reaching key no recycle can carry) aborts upfront with a loud 400 naming the key, before anything is snapshotted, built, or persisted. awaiting_respawn names the workers (name + keys) still awaiting a respawn after the roll — when it converged, only the workers whose reload failed 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. span_release_error is null when the config store released its exclusive write span after the env persisted, otherwise the store's error: the env is persisted and the broadcast and roll reported here still ran, but the store may still hold its write span until this worker exits. When the applier's own row reports a serve-affecting recycle key (or its state is unknown) and the roll converged, the applier's OWN recycle is armed as a post-reply graceful self-exit — after the HTTP body flushes, or once a projected tool call (MCP, tai tools run, an agent, a preset, a schedule, a hook) returned — and its supervisor respawns it on the new env. An apply run under a bound the roll's waits can outlast (a dispatched job's budget, an armed turn budget) runs no roll itself: it 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, roll_deferred_to names that member, and recycle and awaiting_respawn are empty, the roll not judged in this reply. Otherwise roll_deferred is false and roll_deferred_to null. 404 for an absent name. 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 snapshotted. 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/apply-a-settings-profile-%E2%80%94-replace-the-stored-env-and-reload-the-fleet\",\"mainEntityOfPage\":{\"@id\":\"https://docs.tai42.ai/api-reference/config/apply-a-settings-profile-%E2%80%94-replace-the-stored-env-and-reload-the-fleet#webpage\"},\"image\":\"https://docs.tai42.ai/images/og-image.svg\",\"dateModified\":\"2026-11-05T00:56:34.944Z\",\"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","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","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","description":"Soft-delete the profile, keeping its version history (audit).\n\n404 for an absent name.","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","description":"The saved profile's env vs the CURRENT stored env, with REAL values (the UI masks) — a preview, not a report.\n\n``added`` / ``removed`` are key names, ``changed`` is ``[{key, old, new}]``: the stored-row diff,\na stored copy of a key the deployment sets included. ``recycle_keys`` and the bus-reaching part of\n``refused_keys`` are read from the change the reload really produces, as the apply classifies it\n(a key the deployment sets is never part of it): ``recycle_keys`` are the changed keys whose\nregistry ``reload_class`` is ``recycle``; ``refused_keys`` are the keys the apply would refuse\nupfront, named: the changed bus-reaching keys, and the keys the deployment sets that the profile\nsets to a value other than the stored one. 404 for an absent name.","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"]}