Reconcile a batch of local skills with the platform
One endpoint, two consumers:
SDK auto-discovery (CI, agent boot): defaults are right.
Send {"skills": [...]} and read created / updated / unchanged counts.
Interactive CLI (decimalai skills sync ./skills/): pass
response_mode="diff" to get a per-skill actions array including
body_markdown for any skill where the remote version is newer
(so the CLI can overwrite local files).
Conflict policy: with conflict_policy="newer_wins" (default), the
side whose timestamp is later wins — best for human-in-the-loop CLI.
For CI/SDK pipelines where the repo is the source of truth, pass
conflict_policy="local_wins" to force every push. remote_wins is
the inverse — useful for “treat the platform as canonical.”
Empty bodies are 422’d at Pydantic validation. Invalid names are
409’d at the same layer. Per-skill issues that survive validation
(e.g. a transient DB error) land in the failures array; the rest
of the batch still processes. So does an existing skill the caller
may not edit (the rule PUT /skills/{id} applies), which is left
unchanged.
content_hash on each entry is optional — clients that already
computed SHA-256 (CLI walking a directory) can pass it to save a
server-side hash; clients that didn’t (SDK auto-discovery) can omit.
Single endpoint covers both CLI (bidirectional reconciliation) and SDK
(one-way upsert) — the difference is the response_mode flag (rich
actions array for CLI, summary counts for SDK) and the conflict_policy
(CLI defaults to newer_wins for human-in-the-loop, CI/SDK should set
local_wins because the repo is the source of truth).
Label (e.g. a CI runner's name) shown as the author of every version this sync creates (anyone can read it on a published skill). Who made each version is recorded separately.
Which agents get the skills this sync CREATES (existing skills keep theirs): 'restricted' (the default) = only agents you add them to (agent_name adds them to one), 'workspace' = every agent. An item's own offer_scope wins. (Until 2026-10-25 a sync from an API key that left it out offered them to every agent.)
Add the synced skills to this agent (and record its config version). New skills are then created 'restricted' unless offer_scope says otherwise, and each one goes on the agent in the same transaction as its create. An agent that doesn't exist yet is created (an SDK adapter syncs before the agent's first run), under the same name rules as POST /agents; a name those rules refuse is reported in agent_not_found, and the skills sync as if no agent had been named.
With agent_name: 'all' adds every synced skill to the agent, including one a person removed from it (an explicit add). 'unless_removed' adds every synced skill except the ones a person removed from this agent, which are listed in kept_off. An SDK adapter syncs on every agent boot and sends 'unless_removed', so a restart never undoes a removal made on the dashboard.
Project-local install identity (persisted by the SDK in .decimal/install.json). When present, the sync records per-install divergence state so GET /skills/installs can flag local/remote drift. Omit for back-compat: the sync then behaves exactly as before.
newer_wins: compare timestamps (default; right for interactive CLI). local_wins: always overwrite remote (right for CI / build artifacts). remote_wins: never overwrite local; conflicts return pulled actions. remote_wins_on_conflict: decide from this install's last sync (send install_id). A body only the local copy changed is pushed; every other difference is pulled, and a pull of a local body the platform never stored says conflict: true so the caller can keep a copy before overwriting it.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"DecimalAI","colors":{"primary":"#57534e","light":"#78716c","dark":"#44403c"},"logo":{"light":"https://mintcdn.com/decimal/3Vk0SAeJRLB60IBS/logo/light.svg?fit=max\u0026auto=format\u0026n=3Vk0SAeJRLB60IBS\u0026q=85\u0026s=0f83573d28102fff220ea7482286385e","dark":"https://mintcdn.com/decimal/3Vk0SAeJRLB60IBS/logo/dark.svg?fit=max\u0026auto=format\u0026n=3Vk0SAeJRLB60IBS\u0026q=85\u0026s=6fe2e5f919e7a59ed5bbeb1fcf051e9c"},"favicon":"https://mintcdn.com/decimal/3Vk0SAeJRLB60IBS/favicon.svg?fit=max\u0026auto=format\u0026n=3Vk0SAeJRLB60IBS\u0026q=85\u0026s=b141d099d74c34fb0b3e4b6308234516","navbar":{"links":[{"href":"https://app.decimal.ai","label":"Dashboard"}],"primary":{"type":"button","label":"Get Started","href":"https://app.decimal.ai/sign-up"}},"footer":{"socials":{"github":"https://github.com/decimal-labs"}},"seo":{"metatags":{"msvalidate.01":"F6DB20590190EFCC6B84556C1A1F728D"},"organization":{"id":"https://decimal.ai/#organization","name":"DecimalAI","url":"https://decimal.ai","logo":"https://framerusercontent.com/images/MKMNIU5CTjXC4ngfUU9lpgTeKU.png","sameAs":["https://github.com/decimal-labs","https://pypi.org/project/decimalai/"]}},"contextual":{"options":["copy","view","chatgpt","claude","cursor","vscode","mcp"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"decimal","hasAudioNarration":false,"actualSubdomain":"decimal","customDomains":["docs.decimal.ai"],"gitSource":{"type":"github","owner":"decimal-labs","repo":"decimalai-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adf3ec88c0a1951943fbe56","collectionId":"59633aaa-17f2-4073-9896-ec7bf0cbb184","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adf3ec88c0a1951943fbe56"},"entitlements":{},"buildId":"6adf3ec88c0a1951943fbe56","clientVersion":"0.0.3971","searchFilterCounts":[{"language":"default","tag":"API Reference","count":373},{"language":"default","tag":"skills","count":71},{"language":"default","tag":"Documentation","count":62},{"language":"default","tag":"agents","count":39},{"language":"default","tag":"registry","count":39},{"language":"default","tag":"SDK \u0026 CLI","count":21},{"language":"default","tag":"traces","count":21},{"language":"default","tag":"Python SDK","count":20},{"language":"default","tag":"manifests","count":18},{"language":"default","tag":"billing","count":16}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/skills/reconcile-a-batch-of-local-skills-with-the-platform","slug":"/api-reference/skills/reconcile-a-batch-of-local-skills-with-the-platform","pageMetadata":{"title":"Reconcile a batch of local skills with the platform","description":"One endpoint, two consumers:\n\n- **SDK auto-discovery** (CI, agent boot): defaults are right.\n Send `{\"skills\": [...]}` and read `created` / `updated` / `unchanged` counts.\n- **Interactive CLI** (`decimalai skills sync ./skills/`): pass\n `response_mode=\"diff\"` to get a per-skill `actions` array including\n `body_markdown` for any skill where the remote version is newer\n (so the CLI can overwrite local files).\n\nConflict policy: with `conflict_policy=\"newer_wins\"` (default), the\nside whose timestamp is later wins — best for human-in-the-loop CLI.\nFor CI/SDK pipelines where the repo is the source of truth, pass\n`conflict_policy=\"local_wins\"` to force every push. `remote_wins` is\nthe inverse — useful for \"treat the platform as canonical.\"\n\nEmpty bodies are 422'd at Pydantic validation. Invalid names are\n409'd at the same layer. Per-skill issues that survive validation\n(e.g. a transient DB error) land in the `failures` array; the rest\nof the batch still processes. So does an existing skill the caller\nmay not edit (the rule `PUT /skills/{id}` applies), which is left\nunchanged.\n\n`content_hash` on each entry is optional — clients that already\ncomputed SHA-256 (CLI walking a directory) can pass it to save a\nserver-side hash; clients that didn't (SDK auto-discovery) can omit.","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/sync","href":"/api-reference/skills/reconcile-a-batch-of-local-skills-with-the-platform","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 li: \"li\",\n p: \"p\",\n strong: \"strong\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"One endpoint, two consumers:\"\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: \"SDK auto-discovery\"\n }), \" (CI, agent boot): defaults are right.\\nSend \", _jsx(_components.code, {\n children: \"{\\\"skills\\\": [...]}\"\n }), \" and read \", _jsx(_components.code, {\n children: \"created\"\n }), \" / \", _jsx(_components.code, {\n children: \"updated\"\n }), \" / \", _jsx(_components.code, {\n children: \"unchanged\"\n }), \" counts.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: \"Interactive CLI\"\n }), \" (\", _jsx(_components.code, {\n children: \"decimalai skills sync ./skills/\"\n }), \"): pass\\n\", _jsx(_components.code, {\n children: \"response_mode=\\\"diff\\\"\"\n }), \" to get a per-skill \", _jsx(_components.code, {\n children: \"actions\"\n }), \" array including\\n\", _jsx(_components.code, {\n children: \"body_markdown\"\n }), \" for any skill where the remote version is newer\\n(so the CLI can overwrite local files).\"]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Conflict policy: with \", _jsx(_components.code, {\n children: \"conflict_policy=\\\"newer_wins\\\"\"\n }), \" (default), the\\nside whose timestamp is later wins — best for human-in-the-loop CLI.\\nFor CI/SDK pipelines where the repo is the source of truth, pass\\n\", _jsx(_components.code, {\n children: \"conflict_policy=\\\"local_wins\\\"\"\n }), \" to force every push. \", _jsx(_components.code, {\n children: \"remote_wins\"\n }), \" is\\nthe inverse — useful for “treat the platform as canonical.”\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Empty bodies are 422’d at Pydantic validation. Invalid names are\\n409’d at the same layer. Per-skill issues that survive validation\\n(e.g. a transient DB error) land in the \", _jsx(_components.code, {\n children: \"failures\"\n }), \" array; the rest\\nof the batch still processes. So does an existing skill the caller\\nmay not edit (the rule \", _jsx(_components.code, {\n children: \"PUT /skills/{id}\"\n }), \" applies), which is left\\nunchanged.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"content_hash\"\n }), \" on each entry is optional — clients that already\\ncomputed SHA-256 (CLI walking a directory) can pass it to save a\\nserver-side hash; clients that didn’t (SDK auto-discovery) can omit.\"]\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":"Reconcile a batch of local skills with the platform","description":"One endpoint, two consumers:\n\n- **SDK auto-discovery** (CI, agent boot): defaults are right.\n Send `{\"skills\": [...]}` and read `created` / `updated` / `unchanged` counts.\n- **Interactive CLI** (`decimalai skills sync ./skills/`): pass\n `response_mode=\"diff\"` to get a per-skill `actions` array including\n `body_markdown` for any skill where the remote version is newer\n (so the CLI can overwrite local files).\n\nConflict policy: with `conflict_policy=\"newer_wins\"` (default), the\nside whose timestamp is later wins — best for human-in-the-loop CLI.\nFor CI/SDK pipelines where the repo is the source of truth, pass\n`conflict_policy=\"local_wins\"` to force every push. `remote_wins` is\nthe inverse — useful for \"treat the platform as canonical.\"\n\nEmpty bodies are 422'd at Pydantic validation. Invalid names are\n409'd at the same layer. Per-skill issues that survive validation\n(e.g. a transient DB error) land in the `failures` array; the rest\nof the batch still processes. So does an existing skill the caller\nmay not edit (the rule `PUT /skills/{id}` applies), which is left\nunchanged.\n\n`content_hash` on each entry is optional — clients that already\ncomputed SHA-256 (CLI walking a directory) can pass it to save a\nserver-side hash; clients that didn't (SDK auto-discovery) can omit.","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/sync","href":"/api-reference/skills/reconcile-a-batch-of-local-skills-with-the-platform","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["skills"],"summary":"Reconcile a batch of local skills with the platform","description":"One endpoint, two consumers:\n\n- **SDK auto-discovery** (CI, agent boot): defaults are right.\n Send `{\"skills\": [...]}` and read `created` / `updated` / `unchanged` counts.\n- **Interactive CLI** (`decimalai skills sync ./skills/`): pass\n `response_mode=\"diff\"` to get a per-skill `actions` array including\n `body_markdown` for any skill where the remote version is newer\n (so the CLI can overwrite local files).\n\nConflict policy: with `conflict_policy=\"newer_wins\"` (default), the\nside whose timestamp is later wins — best for human-in-the-loop CLI.\nFor CI/SDK pipelines where the repo is the source of truth, pass\n`conflict_policy=\"local_wins\"` to force every push. `remote_wins` is\nthe inverse — useful for \"treat the platform as canonical.\"\n\nEmpty bodies are 422'd at Pydantic validation. Invalid names are\n409'd at the same layer. Per-skill issues that survive validation\n(e.g. a transient DB error) land in the `failures` array; the rest\nof the batch still processes. So does an existing skill the caller\nmay not edit (the rule `PUT /skills/{id}` applies), which is left\nunchanged.\n\n`content_hash` on each entry is optional — clients that already\ncomputed SHA-256 (CLI walking a directory) can pass it to save a\nserver-side hash; clients that didn't (SDK auto-discovery) can omit.","operationId":"sync_skills_api_v1_skills_sync_post","parameters":["540893ed-d45d-49b1-a8e0-77e1be796417","bd96ee80-1724-49b0-8a17-076cad075a67","f8aa2264-e8e2-4e92-980d-cf08f04e1403"],"requestBody":"d1ecf833-4cf6-444b-92c0-dd03c2b3cfc3","responses":{"200":"89d04bc1-bc6b-4e71-90cf-89081d7214f3","422":"5dc95fee-c20f-419a-9793-fd0e4f7f6b14"},"x-codeSamples":[{"lang":"Python","label":"Python SDK","source":"from decimalai.skill_router import SkillRouter\nfrom decimalai.skills import discover_skills\n\nrouter = SkillRouter(api_key=\"dai_sk_...\")\nlocal_skills = discover_skills(base_path=\"./skills\")\nrouter.sync_skills(skills=local_skills)"},{"lang":"Bash","label":"CLI","source":"decimalai skills sync --dir ./skills"}],"method":"post","type":"path","servers":["5a543067-a4e2-4be1-b5ef-aaf514e4acb4"],"security":["b333e191-a2e4-4d1f-8b8b-e2539f02c661"],"path":"/api/v1/skills/sync","baseUrlOptions":["https://api.decimal.ai"],"title":"Reconcile a batch of local skills with the platform","codeSamples":[{"label":"Python SDK","lang":"Python","source":"from decimalai.skill_router import SkillRouter\nfrom decimalai.skills import discover_skills\n\nrouter = SkillRouter(api_key=\"dai_sk_...\")\nlocal_skills = discover_skills(base_path=\"./skills\")\nrouter.sync_skills(skills=local_skills)"},{"label":"CLI","lang":"Bash","source":"decimalai skills sync --dir ./skills"}],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExampleType":"generated"},"dependencies":{"parameters":{"540893ed-d45d-49b1-a8e0-77e1be796417":{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization","isRequired":false,"uniqueKey":"","typeLabel":"string"}},"bd96ee80-1724-49b0-8a17-076cad075a67":{"name":"X-Workspace-Id","in":"header","required":false,"schema":{"oneOf":[{"type":"string","title":"X-Workspace-Id","uniqueKey":"oneOf.0","typeLabel":"string"},{"type":"null","title":"X-Workspace-Id","uniqueKey":"oneOf.1","typeLabel":"null"}],"isRequired":false,"uniqueKey":"","typeLabel":"string | null"}},"f8aa2264-e8e2-4e92-980d-cf08f04e1403":{"name":"decimal_session","in":"cookie","required":false,"schema":{"oneOf":[{"type":"string","title":"Decimal Session","uniqueKey":"oneOf.0","typeLabel":"string"},{"type":"null","title":"Decimal Session","uniqueKey":"oneOf.1","typeLabel":"null"}],"isRequired":false,"uniqueKey":"","typeLabel":"string | null"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"skills":{"items":{"properties":{"name":{"type":"string","maxLength":64,"minLength":1,"title":"Name","isRequired":true,"uniqueKey":"skills.items.[INDEX].name","typeLabel":"string"},"display_name":{"oneOf":[{"type":"string","title":"Display Name","maxLength":200,"uniqueKey":"skills.items.[INDEX].display_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Display Name","uniqueKey":"skills.items.[INDEX].display_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"skills.items.[INDEX].display_name","typeLabel":"string | null"},"description":{"type":"string","maxLength":1024,"title":"Description","default":"","uniqueKey":"skills.items.[INDEX].description","typeLabel":"string"},"body_markdown":{"oneOf":[{"type":"string","title":"Body Markdown","uniqueKey":"skills.items.[INDEX].body_markdown.oneOf.0","typeLabel":"string"},{"type":"null","title":"Body Markdown","uniqueKey":"skills.items.[INDEX].body_markdown.oneOf.1","typeLabel":"null"}],"uniqueKey":"skills.items.[INDEX].body_markdown","typeLabel":"string | null"},"body":{"oneOf":[{"type":"string","title":"Body","uniqueKey":"skills.items.[INDEX].body.oneOf.0","typeLabel":"string"},{"type":"null","title":"Body","uniqueKey":"skills.items.[INDEX].body.oneOf.1","typeLabel":"null"}],"uniqueKey":"skills.items.[INDEX].body","typeLabel":"string | null"},"category":{"oneOf":[{"type":"string","title":"Category","maxLength":100,"uniqueKey":"skills.items.[INDEX].category.oneOf.0","typeLabel":"string"},{"type":"null","title":"Category","uniqueKey":"skills.items.[INDEX].category.oneOf.1","typeLabel":"null"}],"uniqueKey":"skills.items.[INDEX].category","typeLabel":"string | null"},"offer_scope":{"oneOf":[{"type":"string","title":"Offer Scope","description":"Which agents get this skill if the sync creates it; overrides the request's.","enum":["workspace","restricted"],"uniqueKey":"skills.items.[INDEX].offer_scope.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Offer Scope","description":"Which agents get this skill if the sync creates it; overrides the request's.","uniqueKey":"skills.items.[INDEX].offer_scope.oneOf.1","typeLabel":"null"}],"uniqueKey":"skills.items.[INDEX].offer_scope","typeLabel":"enum\u003cstring> | null"},"trigger_phrases":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"skills.items.[INDEX].trigger_phrases.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Trigger Phrases","uniqueKey":"skills.items.[INDEX].trigger_phrases.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Trigger Phrases","uniqueKey":"skills.items.[INDEX].trigger_phrases.oneOf.1","typeLabel":"null"}],"uniqueKey":"skills.items.[INDEX].trigger_phrases","typeLabel":"string[] | null"},"frontmatter":{"oneOf":[{"type":"object","title":"Frontmatter","additionalProperties":true,"uniqueKey":"skills.items.[INDEX].frontmatter.oneOf.0","typeLabel":"Frontmatter · object"},{"type":"null","title":"Frontmatter","uniqueKey":"skills.items.[INDEX].frontmatter.oneOf.1","typeLabel":"null"}],"uniqueKey":"skills.items.[INDEX].frontmatter","typeLabel":"Frontmatter · object | null"},"content_hash":{"oneOf":[{"type":"string","title":"Content Hash","description":"Optional SHA-256 of body_markdown; computed server-side if omitted.","uniqueKey":"skills.items.[INDEX].content_hash.oneOf.0","typeLabel":"string"},{"type":"null","title":"Content Hash","description":"Optional SHA-256 of body_markdown; computed server-side if omitted.","uniqueKey":"skills.items.[INDEX].content_hash.oneOf.1","typeLabel":"null"}],"uniqueKey":"skills.items.[INDEX].content_hash","typeLabel":"string | null"},"local_updated_at":{"oneOf":[{"type":"string","title":"Local Updated At","description":"ISO-8601 timestamp of the local file's last mtime (for newer_wins).","uniqueKey":"skills.items.[INDEX].local_updated_at.oneOf.0","typeLabel":"string"},{"type":"null","title":"Local Updated At","description":"ISO-8601 timestamp of the local file's last mtime (for newer_wins).","uniqueKey":"skills.items.[INDEX].local_updated_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"skills.items.[INDEX].local_updated_at","typeLabel":"string | null"},"eval_yaml_text":{"oneOf":[{"type":"string","title":"Eval Yaml Text","description":"Optional eval.yaml co-sync — publisher's benchmark suite alongside SKILL.md.","uniqueKey":"skills.items.[INDEX].eval_yaml_text.oneOf.0","typeLabel":"string"},{"type":"null","title":"Eval Yaml Text","description":"Optional eval.yaml co-sync — publisher's benchmark suite alongside SKILL.md.","uniqueKey":"skills.items.[INDEX].eval_yaml_text.oneOf.1","typeLabel":"null"}],"uniqueKey":"skills.items.[INDEX].eval_yaml_text","typeLabel":"string | null"},"eval_yaml_hash":{"oneOf":[{"type":"string","title":"Eval Yaml Hash","description":"Optional SHA-256 of eval_yaml_text (clients may pre-compute for parity with content_hash).","uniqueKey":"skills.items.[INDEX].eval_yaml_hash.oneOf.0","typeLabel":"string"},{"type":"null","title":"Eval Yaml Hash","description":"Optional SHA-256 of eval_yaml_text (clients may pre-compute for parity with content_hash).","uniqueKey":"skills.items.[INDEX].eval_yaml_hash.oneOf.1","typeLabel":"null"}],"uniqueKey":"skills.items.[INDEX].eval_yaml_hash","typeLabel":"string | null"},"attachments":{"oneOf":[{"type":"object","title":"Attachments","description":"Optional bundled files keyed by bundle-relative path (e.g. 'references/icd10cm.json', 'scripts/checksum.py'); the leading segment must be a valid attachment directory. Mirrored into version-scoped SkillAttachments so the benchmark sandbox can materialize them — lets a publisher carry references/ over the wire the way the disk loader does. Text-only; capped server-side (count/size/path-depth).","additionalProperties":{"type":"string","uniqueKey":"skills.items.[INDEX].attachments.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"skills.items.[INDEX].attachments.oneOf.0","typeLabel":"Attachments · object"},{"type":"null","title":"Attachments","description":"Optional bundled files keyed by bundle-relative path (e.g. 'references/icd10cm.json', 'scripts/checksum.py'); the leading segment must be a valid attachment directory. Mirrored into version-scoped SkillAttachments so the benchmark sandbox can materialize them — lets a publisher carry references/ over the wire the way the disk loader does. Text-only; capped server-side (count/size/path-depth).","uniqueKey":"skills.items.[INDEX].attachments.oneOf.1","typeLabel":"null"}],"uniqueKey":"skills.items.[INDEX].attachments","typeLabel":"Attachments · object | null"}},"type":"object","required":["name"],"title":"SyncSkillItem","description":"One item in the POST /skills/sync skills array.\n\nStrict name validation (agentskills.io spec: a-z, digits, hyphens only,\n1-64 chars). Description and body are more lenient since the SDK\nauto-generates them. Optional `content_hash` lets clients that have\nalready hashed the body (CLI walking a directory) skip the server-side\nSHA-256 — backend computes it when omitted.\n\nOptional `local_updated_at` feeds the `conflict_policy=\"newer_wins\"`\ndecision when remote and local diverge.","uniqueKey":"skills.items.[INDEX]","typeLabel":"SyncSkillItem · object"},"type":"array","maxItems":200,"minItems":1,"title":"Skills","isRequired":true,"uniqueKey":"skills","typeLabel":"SyncSkillItem · object[]"},"author":{"oneOf":[{"type":"string","title":"Author","description":"Label (e.g. a CI runner's name) shown as the author of every version this sync creates (anyone can read it on a published skill). Who made each version is recorded separately.","uniqueKey":"author.oneOf.0","typeLabel":"string"},{"type":"null","title":"Author","description":"Label (e.g. a CI runner's name) shown as the author of every version this sync creates (anyone can read it on a published skill). Who made each version is recorded separately.","uniqueKey":"author.oneOf.1","typeLabel":"null"}],"uniqueKey":"author","typeLabel":"string | null"},"offer_scope":{"oneOf":[{"type":"string","title":"Offer Scope","description":"Which agents get the skills this sync CREATES (existing skills keep theirs): 'restricted' (the default) = only agents you add them to (`agent_name` adds them to one), 'workspace' = every agent. An item's own `offer_scope` wins. (Until 2026-10-25 a sync from an API key that left it out offered them to every agent.)","enum":["workspace","restricted"],"uniqueKey":"offer_scope.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Offer Scope","description":"Which agents get the skills this sync CREATES (existing skills keep theirs): 'restricted' (the default) = only agents you add them to (`agent_name` adds them to one), 'workspace' = every agent. An item's own `offer_scope` wins. (Until 2026-10-25 a sync from an API key that left it out offered them to every agent.)","uniqueKey":"offer_scope.oneOf.1","typeLabel":"null"}],"uniqueKey":"offer_scope","typeLabel":"enum\u003cstring> | null"},"agent_name":{"oneOf":[{"type":"string","title":"Agent Name","description":"Add the synced skills to this agent (and record its config version). New skills are then created 'restricted' unless `offer_scope` says otherwise, and each one goes on the agent in the same transaction as its create. An agent that doesn't exist yet is created (an SDK adapter syncs before the agent's first run), under the same name rules as POST /agents; a name those rules refuse is reported in `agent_not_found`, and the skills sync as if no agent had been named.","maxLength":255,"uniqueKey":"agent_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Agent Name","description":"Add the synced skills to this agent (and record its config version). New skills are then created 'restricted' unless `offer_scope` says otherwise, and each one goes on the agent in the same transaction as its create. An agent that doesn't exist yet is created (an SDK adapter syncs before the agent's first run), under the same name rules as POST /agents; a name those rules refuse is reported in `agent_not_found`, and the skills sync as if no agent had been named.","uniqueKey":"agent_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent_name","typeLabel":"string | null"},"add_to_agent":{"type":"string","enum":["all","unless_removed"],"title":"Add To Agent","description":"With `agent_name`: 'all' adds every synced skill to the agent, including one a person removed from it (an explicit add). 'unless_removed' adds every synced skill except the ones a person removed from this agent, which are listed in `kept_off`. An SDK adapter syncs on every agent boot and sends 'unless_removed', so a restart never undoes a removal made on the dashboard.","default":"all","uniqueKey":"add_to_agent","typeLabel":"enum\u003cstring>"},"install_id":{"oneOf":[{"type":"string","title":"Install Id","description":"Project-local install identity (persisted by the SDK in .decimal/install.json). When present, the sync records per-install divergence state so `GET /skills/installs` can flag local/remote drift. Omit for back-compat: the sync then behaves exactly as before.","maxLength":128,"uniqueKey":"install_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Install Id","description":"Project-local install identity (persisted by the SDK in .decimal/install.json). When present, the sync records per-install divergence state so `GET /skills/installs` can flag local/remote drift. Omit for back-compat: the sync then behaves exactly as before.","uniqueKey":"install_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"install_id","typeLabel":"string | null"},"install_label":{"oneOf":[{"type":"string","title":"Install Label","description":"Human-friendly install label (hostname, 'ci', …) for the dashboard.","maxLength":200,"uniqueKey":"install_label.oneOf.0","typeLabel":"string"},{"type":"null","title":"Install Label","description":"Human-friendly install label (hostname, 'ci', …) for the dashboard.","uniqueKey":"install_label.oneOf.1","typeLabel":"null"}],"uniqueKey":"install_label","typeLabel":"string | null"},"conflict_policy":{"type":"string","enum":["newer_wins","local_wins","remote_wins","remote_wins_on_conflict"],"title":"Conflict Policy","description":"newer_wins: compare timestamps (default; right for interactive CLI). local_wins: always overwrite remote (right for CI / build artifacts). remote_wins: never overwrite local; conflicts return `pulled` actions. remote_wins_on_conflict: decide from this install's last sync (send install_id). A body only the local copy changed is pushed; every other difference is pulled, and a pull of a local body the platform never stored says `conflict: true` so the caller can keep a copy before overwriting it.","default":"newer_wins","uniqueKey":"conflict_policy","typeLabel":"enum\u003cstring>"},"response_mode":{"type":"string","enum":["summary","diff"],"title":"Response Mode","description":"summary: return counts only (cheap; SDK default). diff: return per-skill `actions` array including bodies for pulled skills (CLI).","default":"summary","uniqueKey":"response_mode","typeLabel":"enum\u003cstring>"}},"type":"object","required":["skills"],"title":"SyncSkillsRequest","description":"Validated request for POST /skills/sync.\n\nSingle endpoint covers both CLI (bidirectional reconciliation) and SDK\n(one-way upsert) — the difference is the `response_mode` flag (rich\n`actions` array for CLI, summary counts for SDK) and the `conflict_policy`\n(CLI defaults to `newer_wins` for human-in-the-loop, CI/SDK should set\n`local_wins` because the repo is the source of truth).","uniqueKey":"","typeLabel":"SyncSkillsRequest · object"},"examples":{"Example":{"title":"Example","value":{"skills":[{"name":"\u003cstring>","display_name":"\u003cstring>","description":"","body_markdown":"\u003cstring>","body":"\u003cstring>","category":"\u003cstring>","trigger_phrases":["\u003cstring>"],"frontmatter":{},"content_hash":"\u003cstring>","local_updated_at":"\u003cstring>","eval_yaml_text":"\u003cstring>","eval_yaml_hash":"\u003cstring>","attachments":{}}],"author":"\u003cstring>","agent_name":"\u003cstring>","add_to_agent":"all","install_id":"\u003cstring>","install_label":"\u003cstring>","conflict_policy":"newer_wins","response_mode":"summary"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"89d04bc1-bc6b-4e71-90cf-89081d7214f3":{"description":"Successful Response","content":{"application/json":{"schema":{"properties":{"status":{"type":"string","const":"ok","title":"Status","isRequired":true,"uniqueKey":"status","typeLabel":"string"},"created":{"type":"integer","title":"Created","description":"Number of new skills created.","isRequired":true,"uniqueKey":"created","typeLabel":"integer"},"updated":{"type":"integer","title":"Updated","description":"Number of existing skills with a new version (pushed).","isRequired":true,"uniqueKey":"updated","typeLabel":"integer"},"unchanged":{"type":"integer","title":"Unchanged","description":"Number of skills whose body hash matched — no-op.","isRequired":true,"uniqueKey":"unchanged","typeLabel":"integer"},"pulled":{"type":"integer","title":"Pulled","description":"Number of skills where remote was newer; caller should refresh local.","default":0,"uniqueKey":"pulled","typeLabel":"integer"},"failures":{"items":{"additionalProperties":true,"type":"object","uniqueKey":"failures.items.[INDEX]","typeLabel":"object"},"type":"array","title":"Failures","description":"Per-skill failures with name + error.","uniqueKey":"failures","typeLabel":"Failures · object[]"},"actions":{"oneOf":[{"type":"array","items":{"properties":{"name":{"type":"string","title":"Name","isRequired":true,"uniqueKey":"actions.oneOf.0.items.[INDEX].name","typeLabel":"string"},"action":{"type":"string","enum":["created","pushed","pulled","no_change","reconciled_metadata","failed"],"title":"Action","isRequired":true,"uniqueKey":"actions.oneOf.0.items.[INDEX].action","typeLabel":"enum\u003cstring>"},"new_version_number":{"oneOf":[{"type":"integer","title":"New Version Number","uniqueKey":"actions.oneOf.0.items.[INDEX].new_version_number.oneOf.0","typeLabel":"integer"},{"type":"null","title":"New Version Number","uniqueKey":"actions.oneOf.0.items.[INDEX].new_version_number.oneOf.1","typeLabel":"null"}],"uniqueKey":"actions.oneOf.0.items.[INDEX].new_version_number","typeLabel":"integer | null"},"new_content_hash":{"oneOf":[{"type":"string","title":"New Content Hash","uniqueKey":"actions.oneOf.0.items.[INDEX].new_content_hash.oneOf.0","typeLabel":"string"},{"type":"null","title":"New Content Hash","uniqueKey":"actions.oneOf.0.items.[INDEX].new_content_hash.oneOf.1","typeLabel":"null"}],"uniqueKey":"actions.oneOf.0.items.[INDEX].new_content_hash","typeLabel":"string | null"},"body_markdown":{"oneOf":[{"type":"string","title":"Body Markdown","uniqueKey":"actions.oneOf.0.items.[INDEX].body_markdown.oneOf.0","typeLabel":"string"},{"type":"null","title":"Body Markdown","uniqueKey":"actions.oneOf.0.items.[INDEX].body_markdown.oneOf.1","typeLabel":"null"}],"uniqueKey":"actions.oneOf.0.items.[INDEX].body_markdown","typeLabel":"string | null"},"version_number":{"oneOf":[{"type":"integer","title":"Version Number","uniqueKey":"actions.oneOf.0.items.[INDEX].version_number.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Version Number","uniqueKey":"actions.oneOf.0.items.[INDEX].version_number.oneOf.1","typeLabel":"null"}],"uniqueKey":"actions.oneOf.0.items.[INDEX].version_number","typeLabel":"integer | null"},"content_hash":{"oneOf":[{"type":"string","title":"Content Hash","uniqueKey":"actions.oneOf.0.items.[INDEX].content_hash.oneOf.0","typeLabel":"string"},{"type":"null","title":"Content Hash","uniqueKey":"actions.oneOf.0.items.[INDEX].content_hash.oneOf.1","typeLabel":"null"}],"uniqueKey":"actions.oneOf.0.items.[INDEX].content_hash","typeLabel":"string | null"},"conflict":{"oneOf":[{"type":"boolean","title":"Conflict","uniqueKey":"actions.oneOf.0.items.[INDEX].conflict.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Conflict","uniqueKey":"actions.oneOf.0.items.[INDEX].conflict.oneOf.1","typeLabel":"null"}],"uniqueKey":"actions.oneOf.0.items.[INDEX].conflict","typeLabel":"boolean | null"},"error":{"oneOf":[{"type":"string","title":"Error","uniqueKey":"actions.oneOf.0.items.[INDEX].error.oneOf.0","typeLabel":"string"},{"type":"null","title":"Error","uniqueKey":"actions.oneOf.0.items.[INDEX].error.oneOf.1","typeLabel":"null"}],"uniqueKey":"actions.oneOf.0.items.[INDEX].error","typeLabel":"string | null"}},"type":"object","required":["name","action"],"title":"SyncSkillAction","description":"One entry in the `actions` list returned in `response_mode='diff'`.\n\nAction values:\n - `created`: skill didn't exist on backend; freshly registered.\n - `pushed`: remote already had it; local body differed and was newer\n (or `conflict_policy='local_wins'` forced the push). Backend version\n bumped.\n - `pulled`: remote was newer (or `conflict_policy='remote_wins'`); the\n full `body_markdown` is returned so the caller can overwrite local.\n Under `conflict_policy='remote_wins_on_conflict'` it also carries\n `conflict`: true when the caller's body is one the platform never\n stored, so overwriting it would destroy the only copy.\n - `no_change`: content_hash matched; nothing to do.\n - `reconciled_metadata`: content_hash matched, but frontmatter-carried\n metadata (description / title / category / skill-type / skill-scope /\n invocation) diverged and local won, so the metadata was updated WITHOUT\n minting a new SkillVersion. Distinct from `no_change` on purpose: a\n label-only edit is a real write, and reporting it as \"nothing to do\"\n is what the divergence branch was added to stop.\n\n ⚠ THIS VALUE WAS EMITTED BUT NOT DECLARED (fixed 2026-09-05), and the\n route declares `response_model=SyncSkillsResponse`, so FastAPI validated\n the response and raised ResponseValidationError — HTTP 500 for the WHOLE\n BATCH, after the metadata write had already committed. `decimalai skills\n sync` hardcodes `response_mode='diff'`, so any author who edited one line\n of frontmatter and re-synced got \"✗ Sync failed\" over a successful write.\n Reproduced against a local backend before the fix.\n - `failed`: per-skill error (e.g. invalid name caught after validation).","uniqueKey":"actions.oneOf.0.items.[INDEX]","typeLabel":"SyncSkillAction · object"},"title":"Actions","description":"Per-skill action list — present only when `response_mode='diff'`.","uniqueKey":"actions.oneOf.0","typeLabel":"SyncSkillAction · object[]"},{"type":"null","title":"Actions","description":"Per-skill action list — present only when `response_mode='diff'`.","uniqueKey":"actions.oneOf.1","typeLabel":"null"}],"uniqueKey":"actions","typeLabel":"SyncSkillAction · object[] | null"},"added_to_agent":{"oneOf":[{"type":"string","title":"Added To Agent","description":"With `agent_name`: the agent the synced skills were added to.","uniqueKey":"added_to_agent.oneOf.0","typeLabel":"string"},{"type":"null","title":"Added To Agent","description":"With `agent_name`: the agent the synced skills were added to.","uniqueKey":"added_to_agent.oneOf.1","typeLabel":"null"}],"uniqueKey":"added_to_agent","typeLabel":"string | null"},"added":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"added.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Added","description":"With `agent_name`: the skills added to it.","uniqueKey":"added.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Added","description":"With `agent_name`: the skills added to it.","uniqueKey":"added.oneOf.1","typeLabel":"null"}],"uniqueKey":"added","typeLabel":"string[] | null"},"kept_off":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"kept_off.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Kept Off","description":"With add_to_agent='unless_removed': synced skills a person removed from this agent, which stay off it.","uniqueKey":"kept_off.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Kept Off","description":"With add_to_agent='unless_removed': synced skills a person removed from this agent, which stay off it.","uniqueKey":"kept_off.oneOf.1","typeLabel":"null"}],"uniqueKey":"kept_off","typeLabel":"string[] | null"},"agent_not_found":{"oneOf":[{"type":"string","title":"Agent Not Found","description":"With `agent_name`: set when there is no such agent and none could be made, because the name breaks POST /agents' rules (skills still synced).","uniqueKey":"agent_not_found.oneOf.0","typeLabel":"string"},{"type":"null","title":"Agent Not Found","description":"With `agent_name`: set when there is no such agent and none could be made, because the name breaks POST /agents' rules (skills still synced).","uniqueKey":"agent_not_found.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent_not_found","typeLabel":"string | null"},"agent_problem":{"oneOf":[{"type":"string","title":"Agent Problem","description":"With `agent_not_found`: why no agent was made.","uniqueKey":"agent_problem.oneOf.0","typeLabel":"string"},{"type":"null","title":"Agent Problem","description":"With `agent_not_found`: why no agent was made.","uniqueKey":"agent_problem.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent_problem","typeLabel":"string | null"}},"type":"object","required":["status","created","updated","unchanged"],"title":"SyncSkillsResponse","uniqueKey":"","typeLabel":"SyncSkillsResponse · object"},"example":{"status":"ok","created":2,"updated":1,"unchanged":5,"pulled":0,"failures":[]},"examples":{"Example":{"title":"Example","value":{"status":"ok","created":2,"updated":1,"unchanged":5,"pulled":0,"failures":[]}}},"exampleType":"examples"}},"exampleType":"examples"},"5dc95fee-c20f-419a-9793-fd0e4f7f6b14":{"description":"Validation Error","content":{"application/json":{"schema":{"properties":{"detail":{"items":{"properties":{"loc":{"items":{"oneOf":[{"type":"string","uniqueKey":"detail.items.[INDEX].loc.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"detail.items.[INDEX].loc.items.[INDEX].oneOf.1","typeLabel":"integer"}],"uniqueKey":"detail.items.[INDEX].loc.items.[INDEX]","typeLabel":"string | integer"},"type":"array","title":"Location","isRequired":true,"uniqueKey":"detail.items.[INDEX].loc","typeLabel":"(string | integer)[]"},"msg":{"type":"string","title":"Message","isRequired":true,"uniqueKey":"detail.items.[INDEX].msg","typeLabel":"string"},"type":{"type":"string","title":"Error Type","isRequired":true,"uniqueKey":"detail.items.[INDEX].type","typeLabel":"string"},"input":{"oneOf":[{"title":"Input"}],"uniqueKey":"detail.items.[INDEX].input","typeLabel":"any"},"ctx":{"type":"object","title":"Context","uniqueKey":"detail.items.[INDEX].ctx","typeLabel":"Context · object"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError","uniqueKey":"detail.items.[INDEX]","typeLabel":"ValidationError · object"},"type":"array","title":"Detail","uniqueKey":"detail","typeLabel":"ValidationError · object[]"}},"type":"object","title":"HTTPValidationError","uniqueKey":"","typeLabel":"HTTPValidationError · object"},"examples":{"Example":{"title":"Example","value":{"detail":[{"loc":["\u003cstring>"],"msg":"\u003cstring>","type":"\u003cstring>","input":"\u003cunknown>","ctx":{}}]}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"b333e191-a2e4-4d1f-8b8b-e2539f02c661":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Enter your API key (e.g. dai_sk_test_key_001)","scopes":[],"schemeName":"BearerAuth"}}},"servers":{"5a543067-a4e2-4be1-b5ef-aaf514e4acb4":{"url":"https://api.decimal.ai","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Enter your API key (e.g. dai_sk_test_key_001)","scopes":[],"schemeName":"BearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Enter your API key (e.g. dai_sk_test_key_001)","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"}]},"originalFileLocation":"openapi.json"},"subdomain":"decimal","siteName":"DecimalAI","title":"Reconcile a batch of local skills with the platform - DecimalAI","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-26T11:52:11.325Z","originalFileLocation":"api-reference/skills/reconcile-a-batch-of-local-skills-with-the-platform.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"One endpoint, two consumers: - SDK auto-discovery (CI, agent boot): defaults are right. Send {\u0026quot;skills\u0026quot;: [...]} and read created / updated / unchanged counts. - Interactive CLI (decimalai skills sync ./skills/): pass response_mode=\u0026quot;diff\u0026quot; to get a per-skill actions array including body_markdown for any skill where the remote version is newer (so the CLI can overwrite local files). Conflict policy: with conflict_policy=\u0026quot;newer_wins\u0026quot; (default), the side whose timestamp is later wins — best for human-in-the-loop CLI. For CI/SDK pipelines where the repo is the source of truth, pass conflict_policy=\u0026quot;local_wins\u0026quot; to force every push. remote_wins is the inverse — useful for \u0026quot;treat the platform as canonical.\u0026quot; Empty bodies are 422\u0026#x27;d at Pydantic validation. Invalid names are 409\u0026#x27;d at the same layer. Per-skill issues that survive validation (e.g. a transient DB error) land in the failures array; the rest of the batch still processes. So does an existing skill the caller may not edit (the rule PUT /skills/{id} applies), which is left unchanged. content_hash on each entry is optional — clients that already computed SHA-256 (CLI walking a directory) can pass it to save a server-side hash; clients that didn\u0026#x27;t (SDK auto-discovery) can omit.\">\u003cmeta data-mint-head name=\"application-name\" content=\"DecimalAI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/decimal/tP8nApvkJszZivvq/_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/decimal/tP8nApvkJszZivvq/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/decimal/tP8nApvkJszZivvq/_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/decimal/tP8nApvkJszZivvq/_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/decimal/tP8nApvkJszZivvq/_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/decimal/tP8nApvkJszZivvq/_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/decimal/tP8nApvkJszZivvq/_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/decimal/tP8nApvkJszZivvq/_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/decimal/tP8nApvkJszZivvq/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Reconcile a batch of local skills with the platform - DecimalAI\">\u003cmeta data-mint-head property=\"og:description\" content=\"One endpoint, two consumers: - SDK auto-discovery (CI, agent boot): defaults are right. Send {\u0026quot;skills\u0026quot;: [...]} and read created / updated / unchanged counts. - Interactive CLI (decimalai skills sync ./skills/): pass response_mode=\u0026quot;diff\u0026quot; to get a per-skill actions array including body_markdown for any skill where the remote version is newer (so the CLI can overwrite local files). Conflict policy: with conflict_policy=\u0026quot;newer_wins\u0026quot; (default), the side whose timestamp is later wins — best for human-in-the-loop CLI. For CI/SDK pipelines where the repo is the source of truth, pass conflict_policy=\u0026quot;local_wins\u0026quot; to force every push. remote_wins is the inverse — useful for \u0026quot;treat the platform as canonical.\u0026quot; Empty bodies are 422\u0026#x27;d at Pydantic validation. Invalid names are 409\u0026#x27;d at the same layer. Per-skill issues that survive validation (e.g. a transient DB error) land in the failures array; the rest of the batch still processes. So does an existing skill the caller may not edit (the rule PUT /skills/{id} applies), which is left unchanged. content_hash on each entry is optional — clients that already computed SHA-256 (CLI walking a directory) can pass it to save a server-side hash; clients that didn\u0026#x27;t (SDK auto-discovery) can omit.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"DecimalAI\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.decimal.ai/api-reference/skills/reconcile-a-batch-of-local-skills-with-the-platform\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://decimal.mintlify.app/_mintlify/api/og/v2?division=skills\u0026amp;title=Reconcile+a+batch+of+local+skills+with+the+platform\u0026amp;description=One+endpoint%2C+two+consumers%3A%0A%0A-+**SDK+auto-discovery**+%28CI%2C+agent+boot%29%3A+defaults+are+right.%0A++Send+%60%7B%22skills%22%3A+%5B...%5D%7D%60+and+read+%60created%60+%2F+%60updated%60+%2F+%60unchan\u0026amp;theme=d7ed7b7df4c3bce4e24bad16\u0026amp;signature=1e9ef4d29f2890e8216b520ed735f724f936eedcc348842501f52a43166dbd7c\">\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=\"Reconcile a batch of local skills with the platform - DecimalAI\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"One endpoint, two consumers: - SDK auto-discovery (CI, agent boot): defaults are right. Send {\u0026quot;skills\u0026quot;: [...]} and read created / updated / unchanged counts. - Interactive CLI (decimalai skills sync ./skills/): pass response_mode=\u0026quot;diff\u0026quot; to get a per-skill actions array including body_markdown for any skill where the remote version is newer (so the CLI can overwrite local files). Conflict policy: with conflict_policy=\u0026quot;newer_wins\u0026quot; (default), the side whose timestamp is later wins — best for human-in-the-loop CLI. For CI/SDK pipelines where the repo is the source of truth, pass conflict_policy=\u0026quot;local_wins\u0026quot; to force every push. remote_wins is the inverse — useful for \u0026quot;treat the platform as canonical.\u0026quot; Empty bodies are 422\u0026#x27;d at Pydantic validation. Invalid names are 409\u0026#x27;d at the same layer. Per-skill issues that survive validation (e.g. a transient DB error) land in the failures array; the rest of the batch still processes. So does an existing skill the caller may not edit (the rule PUT /skills/{id} applies), which is left unchanged. content_hash on each entry is optional — clients that already computed SHA-256 (CLI walking a directory) can pass it to save a server-side hash; clients that didn\u0026#x27;t (SDK auto-discovery) can omit.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://decimal.mintlify.app/_mintlify/api/og/v2?division=skills\u0026amp;title=Reconcile+a+batch+of+local+skills+with+the+platform\u0026amp;description=One+endpoint%2C+two+consumers%3A%0A%0A-+**SDK+auto-discovery**+%28CI%2C+agent+boot%29%3A+defaults+are+right.%0A++Send+%60%7B%22skills%22%3A+%5B...%5D%7D%60+and+read+%60created%60+%2F+%60updated%60+%2F+%60unchan\u0026amp;theme=d7ed7b7df4c3bce4e24bad16\u0026amp;signature=1e9ef4d29f2890e8216b520ed735f724f936eedcc348842501f52a43166dbd7c\">\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/decimal/tP8nApvkJszZivvq/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"DecimalAI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#57534e\">\u003cmeta data-mint-head name=\"msvalidate.01\" content=\"F6DB20590190EFCC6B84556C1A1F728D\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.decimal.ai/api-reference/skills/reconcile-a-batch-of-local-skills-with-the-platform\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/skills/reconcile-a-batch-of-local-skills-with-the-platform.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://decimal.ai/#organization\",\"name\":\"DecimalAI\",\"url\":\"https://decimal.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://framerusercontent.com/images/MKMNIU5CTjXC4ngfUU9lpgTeKU.png\"},\"sameAs\":[\"https://github.com/decimal-labs\",\"https://pypi.org/project/decimalai/\"]},{\"@type\":\"WebSite\",\"@id\":\"https://docs.decimal.ai#website\",\"name\":\"DecimalAI\",\"url\":\"https://docs.decimal.ai\",\"publisher\":{\"@id\":\"https://decimal.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.decimal.ai/api-reference/skills/reconcile-a-batch-of-local-skills-with-the-platform#webpage\",\"url\":\"https://docs.decimal.ai/api-reference/skills/reconcile-a-batch-of-local-skills-with-the-platform\",\"name\":\"Reconcile a batch of local skills with the platform\",\"description\":\"One endpoint, two consumers: - SDK auto-discovery (CI, agent boot): defaults are right. Send {\\\"skills\\\": [...]} and read created / updated / unchanged counts. - Interactive CLI (decimalai skills sync ./skills/): pass response_mode=\\\"diff\\\" to get a per-skill actions array including body_markdown for any skill where the remote version is newer (so the CLI can overwrite local files). Conflict policy: with conflict_policy=\\\"newer_wins\\\" (default), the side whose timestamp is later wins — best for human-in-the-loop CLI. For CI/SDK pipelines where the repo is the source of truth, pass conflict_policy=\\\"local_wins\\\" to force every push. remote_wins is the inverse — useful for \\\"treat the platform as canonical.\\\" Empty bodies are 422'd at Pydantic validation. Invalid names are 409'd at the same layer. Per-skill issues that survive validation (e.g. a transient DB error) land in the failures array; the rest of the batch still processes. So does an existing skill the caller may not edit (the rule PUT /skills/{id} applies), which is left unchanged. content_hash on each entry is optional — clients that already computed SHA-256 (CLI walking a directory) can pass it to save a server-side hash; clients that didn't (SDK auto-discovery) can omit.\",\"dateModified\":\"2026-10-26T11:52:11.325Z\",\"isPartOf\":{\"@id\":\"https://docs.decimal.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.decimal.ai/api-reference/skills/reconcile-a-batch-of-local-skills-with-the-platform#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.decimal.ai/api-reference/skills/reconcile-a-batch-of-local-skills-with-the-platform#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"skills\",\"item\":\"https://docs.decimal.ai/api-reference/skills/generate-an-ai-powered-improvement-suggestion-for-a-skill\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Reconcile a batch of local skills with the platform\",\"item\":\"https://docs.decimal.ai/api-reference/skills/reconcile-a-batch-of-local-skills-with-the-platform\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.decimal.ai/api-reference/skills/reconcile-a-batch-of-local-skills-with-the-platform#apireference\",\"headline\":\"Reconcile a batch of local skills with the platform\",\"name\":\"Reconcile a batch of local skills with the platform\",\"description\":\"One endpoint, two consumers: - SDK auto-discovery (CI, agent boot): defaults are right. Send {\\\"skills\\\": [...]} and read created / updated / unchanged counts. - Interactive CLI (decimalai skills sync ./skills/): pass response_mode=\\\"diff\\\" to get a per-skill actions array including body_markdown for any skill where the remote version is newer (so the CLI can overwrite local files). Conflict policy: with conflict_policy=\\\"newer_wins\\\" (default), the side whose timestamp is later wins — best for human-in-the-loop CLI. For CI/SDK pipelines where the repo is the source of truth, pass conflict_policy=\\\"local_wins\\\" to force every push. remote_wins is the inverse — useful for \\\"treat the platform as canonical.\\\" Empty bodies are 422'd at Pydantic validation. Invalid names are 409'd at the same layer. Per-skill issues that survive validation (e.g. a transient DB error) land in the failures array; the rest of the batch still processes. So does an existing skill the caller may not edit (the rule PUT /skills/{id} applies), which is left unchanged. content_hash on each entry is optional — clients that already computed SHA-256 (CLI walking a directory) can pass it to save a server-side hash; clients that didn't (SDK auto-discovery) can omit.\",\"url\":\"https://docs.decimal.ai/api-reference/skills/reconcile-a-batch-of-local-skills-with-the-platform\",\"mainEntityOfPage\":{\"@id\":\"https://docs.decimal.ai/api-reference/skills/reconcile-a-batch-of-local-skills-with-the-platform#webpage\"},\"dateModified\":\"2026-10-26T11:52:11.325Z\",\"publisher\":{\"@id\":\"https://decimal.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.decimal.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"DecimalAI\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"DecimalAI","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"SDK \u0026 CLI","pages":[{"title":"SDK \u0026 CLI","href":"/sdk/python"}]},{"tab":"API Guides","pages":[{"title":"API Guides","href":"/api-reference/authentication"}]},{"tab":"API Reference","groups":[{"group":"agents","pages":[{"title":"List agents","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents","href":"/api-reference/agents/list-agents"},{"title":"Create an agent","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/agents","href":"/api-reference/agents/create-an-agent"},{"title":"What each agent runs, for Home","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/overview","href":"/api-reference/agents/what-each-agent-runs-for-home"},{"title":"Get Agent Setup","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/setup","href":"/api-reference/agents/get-agent-setup"},{"title":"Start Setup Check","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/agents/{agent_name}/setup/checks","href":"/api-reference/agents/start-setup-check"},{"title":"Finish Setup Check","deprecated":null,"version":null,"openapi":"/openapi.json put /api/v1/agents/{agent_name}/setup/checks/{check_id}/result","href":"/api-reference/agents/finish-setup-check"},{"title":"Get Setup Check","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/setup/checks/{check_id}","href":"/api-reference/agents/get-setup-check"},{"title":"View Setup Check Trace","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/agents/{agent_name}/setup/checks/{check_id}/trace-viewed/{trace_id}","href":"/api-reference/agents/view-setup-check-trace"},{"title":"Retry Initial Skills","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/agents/{agent_name}/setup/retry-skills","href":"/api-reference/agents/retry-initial-skills"},{"title":"Get the multi-agent topology for an agent","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/topology","href":"/api-reference/agents/get-the-multi-agent-topology-for-an-agent"},{"title":"Generate synthetic prompts for an agent","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/agents/{agent_name}/generate-prompts","href":"/api-reference/agents/generate-synthetic-prompts-for-an-agent"},{"title":"Get agent eval policy (deprecated)","deprecated":true,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/eval-policy","href":"/api-reference/agents/get-agent-eval-policy-deprecated"},{"title":"Upsert agent eval policy (deprecated)","deprecated":true,"version":null,"openapi":"/openapi.json put /api/v1/agents/{agent_name}/eval-policy","href":"/api-reference/agents/upsert-agent-eval-policy-deprecated"},{"title":"Get per-agent eval budget (deprecated)","deprecated":true,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/eval-budget","href":"/api-reference/agents/get-per-agent-eval-budget-deprecated"},{"title":"Ranked skill suggestions for this agent","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/skill-suggestions","href":"/api-reference/agents/ranked-skill-suggestions-for-this-agent"},{"title":"Get health metrics for each sub-agent of an orchestrator","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/subagent-health","href":"/api-reference/agents/get-health-metrics-for-each-sub-agent-of-an-orchestrator"},{"title":"Get delegation analytics for an orchestrator agent","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/delegation-stats","href":"/api-reference/agents/get-delegation-analytics-for-an-orchestrator-agent"},{"title":"Daily token+cost trend for an agent over a lookback window","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/cost-trend","href":"/api-reference/agents/daily-token+cost-trend-for-an-agent-over-a-lookback-window"},{"title":"Get compatibility summary for an agent's latest manifest transition","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/compat-summary","href":"/api-reference/agents/get-compatibility-summary-for-an-agents-latest-manifest-transition"},{"title":"Aggregate Impact Report for an agent — composes compat-summary","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/impact-report","href":"/api-reference/agents/aggregate-impact-report-for-an-agent-—-composes-compat-summary"},{"title":"Cascade-delete an agent and all dependent data","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/agents/{agent_name}","href":"/api-reference/agents/cascade-delete-an-agent-and-all-dependent-data"},{"title":"Get contextual cross-pillar suggestions for an agent","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/suggestions","href":"/api-reference/agents/get-contextual-cross-pillar-suggestions-for-an-agent"},{"title":"Get org-wide cross-pillar suggestions (not scoped to any agent)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/suggestions/global","href":"/api-reference/agents/get-org-wide-cross-pillar-suggestions-not-scoped-to-any-agent"},{"title":"Rename an agent. The old name continues to resolve via the alias table.","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/agents/{agent_name}/rename","href":"/api-reference/agents/rename-an-agent-the-old-name-continues-to-resolve-via-the-alias-table"},{"title":"List skills assigned to this agent","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/skills","href":"/api-reference/agents/list-skills-assigned-to-this-agent"},{"title":"How often this agent's routing offered each skill, and how often a run loaded it","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/skills/router-stats","href":"/api-reference/agents/how-often-this-agents-routing-offered-each-skill-and-how-often-a-run-loaded-it"},{"title":"Assign a skill to this agent (optionally pinned to a specific version)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/agents/{agent_name}/skills/{skill_id}","href":"/api-reference/agents/assign-a-skill-to-this-agent-optionally-pinned-to-a-specific-version"},{"title":"Unassign a skill from this agent","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/agents/{agent_name}/skills/{skill_id}","href":"/api-reference/agents/unassign-a-skill-from-this-agent"},{"title":"Always include a skill's full text in this agent's runs, or stop","deprecated":null,"version":null,"openapi":"/openapi.json put /api/v1/agents/{agent_name}/skills/{skill_ref}/always-include","href":"/api-reference/agents/always-include-a-skills-full-text-in-this-agents-runs-or-stop"},{"title":"Assign many skills to many agents in a single request","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/agents/skills/batch-assign","href":"/api-reference/agents/assign-many-skills-to-many-agents-in-a-single-request"},{"title":"Get this agent's configured system prompt","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/prompt","href":"/api-reference/agents/get-this-agents-configured-system-prompt"},{"title":"Set this agent's system prompt","deprecated":null,"version":null,"openapi":"/openapi.json put /api/v1/agents/{agent_name}/prompt","href":"/api-reference/agents/set-this-agents-system-prompt"},{"title":"Clear this agent's system prompt (history is retained)","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/agents/{agent_name}/prompt","href":"/api-reference/agents/clear-this-agents-system-prompt-history-is-retained"},{"title":"List this agent's system-prompt version history","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/prompt/versions","href":"/api-reference/agents/list-this-agents-system-prompt-version-history"},{"title":"Get one historical version of this agent's system prompt","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/prompt/versions/{version_number}","href":"/api-reference/agents/get-one-historical-version-of-this-agents-system-prompt"},{"title":"Pin this agent's prompt to a version, or track latest","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/agents/{agent_name}/prompt/pin","href":"/api-reference/agents/pin-this-agents-prompt-to-a-version-or-track-latest"},{"title":"Trial Availability","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/trial-runs","href":"/api-reference/agents/trial-availability"},{"title":"Create Trial","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/agents/{agent_name}/trial-runs","href":"/api-reference/agents/create-trial"},{"title":"Get Trial","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/trial-runs/{run_id}","href":"/api-reference/agents/get-trial"}]},{"group":"agent config","pages":[{"title":"What applying staged changes (or a roll back) would do — writes nothing","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/agents/{agent_name}/setup/preview","href":"/api-reference/agent-config/what-applying-staged-changes-or-a-roll-back-would-do-—-writes-nothing"},{"title":"Apply staged changes (or a roll back) in one transaction, as one config version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/agents/{agent_name}/setup/apply","href":"/api-reference/agent-config/apply-staged-changes-or-a-roll-back-in-one-transaction-as-one-config-version"},{"title":"The agent's running experiment, its ended ones, and each skill's measured lift","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/experiments","href":"/api-reference/agent-config/the-agents-running-experiment-its-ended-ones-and-each-skills-measured-lift"},{"title":"One experiment: its progress while it runs, its result once it ends","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/experiments/{experiment_id}","href":"/api-reference/agent-config/one-experiment:-its-progress-while-it-runs-its-result-once-it-ends"},{"title":"The agent's current config version and its last three","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/versions/current","href":"/api-reference/agent-config/the-agents-current-config-version-and-its-last-three"},{"title":"Two config versions side by side: prompt, skills, the list text, results","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/versions/compare","href":"/api-reference/agent-config/two-config-versions-side-by-side:-prompt-skills-the-list-text-results"},{"title":"One config version: its setup, what changed and its results","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/versions/{number}","href":"/api-reference/agent-config/one-config-version:-its-setup-what-changed-and-its-results"},{"title":"The agent's config versions, newest first, with code-change markers","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/versions","href":"/api-reference/agent-config/the-agents-config-versions-newest-first-with-code-change-markers"}]},{"group":"registry","pages":[{"title":"Save a reviewed public starter into your workspace","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/registry/packs/support/claim","href":"/api-reference/registry/save-a-reviewed-public-starter-into-your-workspace"},{"title":"Read a recorded public skill example, without model inference","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/packs/{pack_slug}/example","href":"/api-reference/registry/read-a-recorded-public-skill-example-without-model-inference"},{"title":"Browse the public skills registry","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/skills","href":"/api-reference/registry/browse-the-public-skills-registry"},{"title":"Search the public skills registry, with the query in the request body","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/registry/skills/search","href":"/api-reference/registry/search-the-public-skills-registry-with-the-query-in-the-request-body"},{"title":"Get a registry skill","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/skills/{skill_id}","href":"/api-reference/registry/get-a-registry-skill"},{"title":"Fork lineage tree for a public registry skill","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/skills/{skill_id}/lineage","href":"/api-reference/registry/fork-lineage-tree-for-a-public-registry-skill"},{"title":"Stage R trigger dry-run: would this description surface for these prompts","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/registry/trigger-dryrun","href":"/api-reference/registry/stage-r-trigger-dry-run:-would-this-description-surface-for-these-prompts"},{"title":"Ingest an anonymous registry event ping","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/registry/events","href":"/api-reference/registry/ingest-an-anonymous-registry-event-ping"},{"title":"Advisory novelty check: published skills most similar to this one (never blocks publish)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/skills/{name}/similar","href":"/api-reference/registry/advisory-novelty-check:-published-skills-most-similar-to-this-one-never-blocks-publish"},{"title":"Advisory publish-time novelty dry-run for an unpublished/ad-hoc skill (never blocks)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/registry/skills/similar","href":"/api-reference/registry/advisory-publish-time-novelty-dry-run-for-an-unpublishedad-hoc-skill-never-blocks"},{"title":"Dry-run a hypothetical user message against a public registry skill (no auth, no LLM call)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/registry/skills/{skill_id}/playground-run","href":"/api-reference/registry/dry-run-a-hypothetical-user-message-against-a-public-registry-skill-no-auth-no-llm-call"},{"title":"Fetch a specific version's body markdown for a public registry skill","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/skills/{skill_id}/versions/{version_number}","href":"/api-reference/registry/fetch-a-specific-versions-body-markdown-for-a-public-registry-skill"},{"title":"Get a public registry skill's eval.yaml (latest version, or ?version=N)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/skills/{skill_id}/eval","href":"/api-reference/registry/get-a-public-registry-skills-evalyaml-latest-version-or-?version=n"},{"title":"Latest benchmark run + per-case results for a public registry skill","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/skills/{skill_id}/benchmark","href":"/api-reference/registry/latest-benchmark-run-+-per-case-results-for-a-public-registry-skill"},{"title":"Precomputed indexable catalogue","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/sitemap-snapshot","href":"/api-reference/registry/precomputed-indexable-catalogue"},{"title":"Bulk name+lastmod feed of search-indexable skills (sitemap source)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/sitemap","href":"/api-reference/registry/bulk-name+lastmod-feed-of-search-indexable-skills-sitemap-source"},{"title":"Index-eligible sibling skills, for the scorecard's internal-link block","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/skills/{id_or_slug}/neighbors","href":"/api-reference/registry/index-eligible-sibling-skills-for-the-scorecards-internal-link-block"},{"title":"Published skills that do the same job, for the scorecard's alternatives block","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/skills/{id_or_slug}/alternatives","href":"/api-reference/registry/published-skills-that-do-the-same-job-for-the-scorecards-alternatives-block"},{"title":"Cross-org production trace aggregations for a public registry skill","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/skills/{skill_id}/live-traces","href":"/api-reference/registry/cross-org-production-trace-aggregations-for-a-public-registry-skill"},{"title":"Public Skills Leaderboard — ranked by performance dimension within a window","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/leaderboard","href":"/api-reference/registry/public-skills-leaderboard-—-ranked-by-performance-dimension-within-a-window"},{"title":"Your organization's durable skill activation receipts","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/skills/{skill_id}/usage-receipts","href":"/api-reference/registry/your-organizations-durable-skill-activation-receipts"},{"title":"Usage time-series for a public registry skill (npm-style chart data)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/skills/{skill_id}/activations","href":"/api-reference/registry/usage-time-series-for-a-public-registry-skill-npm-style-chart-data"},{"title":"Fork a registry skill into your workspace","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/registry/skills/{skill_id}/fork","href":"/api-reference/registry/fork-a-registry-skill-into-your-workspace"},{"title":"Read complete linked-skill configuration","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/skills/{skill_id}/installation","href":"/api-reference/registry/read-complete-linked-skill-configuration"},{"title":"Replace all linked-skill scopes and version choices atomically","deprecated":null,"version":null,"openapi":"/openapi.json put /api/v1/registry/skills/{skill_id}/installation","href":"/api-reference/registry/replace-all-linked-skill-scopes-and-version-choices-atomically"},{"title":"Use a registry skill — a linked pointer, not a copy","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/registry/skills/{skill_id}/use","href":"/api-reference/registry/use-a-registry-skill-—-a-linked-pointer-not-a-copy"},{"title":"Stop using a registry skill — remove the linked pointer","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/registry/skills/{skill_id}/use","href":"/api-reference/registry/stop-using-a-registry-skill-—-remove-the-linked-pointer"},{"title":"Rate a registry skill","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/registry/skills/{skill_id}/rate","href":"/api-reference/registry/rate-a-registry-skill"},{"title":"List attachments for a public registry skill","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/skills/{skill_id}/attachments","href":"/api-reference/registry/list-attachments-for-a-public-registry-skill"},{"title":"Get a single attachment with content for a public registry skill","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/skills/{skill_id}/attachments/{attachment_id}","href":"/api-reference/registry/get-a-single-attachment-with-content-for-a-public-registry-skill"},{"title":"Set the registry badge on a public skill (admin only)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/registry/skills/{skill_id}/set-badge","href":"/api-reference/registry/set-the-registry-badge-on-a-public-skill-admin-only"},{"title":"Set the author display name on a registry skill (admin only)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/registry/skills/{skill_id}/set-author","href":"/api-reference/registry/set-the-author-display-name-on-a-registry-skill-admin-only"},{"title":"Download a runnable public Support starter without an account","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/registry/packs/{slug}/starter","href":"/api-reference/registry/download-a-runnable-public-support-starter-without-an-account"},{"title":"List the role packs an agent can be created from","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/packs","href":"/api-reference/registry/list-the-role-packs-an-agent-can-be-created-from"},{"title":"Get one role pack — starter prompt and starter skills","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/packs/{slug}","href":"/api-reference/registry/get-one-role-pack-—-starter-prompt-and-starter-skills"},{"title":"Get the calling org's claim state for an imported skill","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/skills/{skill_id}/claim","href":"/api-reference/registry/get-the-calling-orgs-claim-state-for-an-imported-skill"},{"title":"Start claiming an imported skill (returns the proof token + instructions)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/registry/skills/{skill_id}/claim","href":"/api-reference/registry/start-claiming-an-imported-skill-returns-the-proof-token-+-instructions"},{"title":"Verify a pending claim (fetches the well-known file from the source repo)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/registry/claims/{claim_id}/verify","href":"/api-reference/registry/verify-a-pending-claim-fetches-the-well-known-file-from-the-source-repo"},{"title":"Public verified-lift SVG badge for a registry skill (README embed)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/skills/{name}/badge.svg","href":"/api-reference/registry/public-verified-lift-svg-badge-for-a-registry-skill-readme-embed"}]},{"group":"annotations","pages":[{"title":"Get all annotations for a specific trace","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/traces/{trace_id}/annotations","href":"/api-reference/annotations/get-all-annotations-for-a-specific-trace"},{"title":"Add a human annotation/label to a trace","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/traces/{trace_id}/annotations","href":"/api-reference/annotations/add-a-human-annotationlabel-to-a-trace"},{"title":"Update an existing annotation","deprecated":null,"version":null,"openapi":"/openapi.json put /api/v1/annotations/{annotation_id}","href":"/api-reference/annotations/update-an-existing-annotation"},{"title":"Delete an annotation","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/annotations/{annotation_id}","href":"/api-reference/annotations/delete-an-annotation"},{"title":"Get annotation label distribution and summary stats","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/annotations/stats","href":"/api-reference/annotations/get-annotation-label-distribution-and-summary-stats"},{"title":"Promote annotated traces into an eval dataset","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/datasets/{dataset_id}/add-from-annotations","href":"/api-reference/annotations/promote-annotated-traces-into-an-eval-dataset"}]},{"group":"audit-log","pages":[{"title":"List recent admin actions — oncall 'what changed' surface","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/audit-log","href":"/api-reference/audit-log/list-recent-admin-actions-—-oncall-what-changed-surface"}]},{"group":"auth","pages":[{"title":"List supported LLM models for the playground","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/models","href":"/api-reference/auth/list-supported-llm-models-for-the-playground"},{"title":"API root — HATEOAS-lite index","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1","href":"/api-reference/auth/api-root-—-hateoas-lite-index"},{"title":"Whoami — confirm key, see scope/permissions/org","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/me","href":"/api-reference/auth/whoami-—-confirm-key-see-scopepermissionsorg"}]},{"group":"badges","pages":[{"title":"Compatibility-score badge (keep rate) for an agent","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/badges/{agent_name}/compat.svg","href":"/api-reference/badges/compatibility-score-badge-keep-rate-for-an-agent"}]},{"group":"billing","pages":[{"title":"Get all available plans with limits and pricing","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/billing/plans","href":"/api-reference/billing/get-all-available-plans-with-limits-and-pricing"},{"title":"Get current plan details and limits","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/billing/plan","href":"/api-reference/billing/get-current-plan-details-and-limits"},{"title":"Get usage for the current billing period","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/billing/usage","href":"/api-reference/billing/get-usage-for-the-current-billing-period"},{"title":"Read current organization resource counts and their plan limits","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/billing/capacity","href":"/api-reference/billing/read-current-organization-resource-counts-and-their-plan-limits"},{"title":"Get the latest N recorded organization usage months (default 6)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/billing/usage/history","href":"/api-reference/billing/get-the-latest-n-recorded-organization-usage-months-default-6"},{"title":"Project current-period usage to end-of-month","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/billing/usage/projection","href":"/api-reference/billing/project-current-period-usage-to-end-of-month"},{"title":"Download usage history as CSV (one row per period × dimension)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/billing/usage/history.csv","href":"/api-reference/billing/download-usage-history-as-csv-one-row-per-period-×-dimension"},{"title":"List recent Stripe invoices with PDF download links (admin)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/billing/invoices","href":"/api-reference/billing/list-recent-stripe-invoices-with-pdf-download-links-admin"},{"title":"Download a ZIP archive of invoice PDFs + manifest for one year (year-end audit, admin)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/billing/invoices.zip","href":"/api-reference/billing/download-a-zip-archive-of-invoice-pdfs-+-manifest-for-one-year-year-end-audit-admin"},{"title":"Review an authoritative existing-subscription upgrade before confirming it","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/billing/checkout/quote","href":"/api-reference/billing/review-an-authoritative-existing-subscription-upgrade-before-confirming-it"},{"title":"Read a saved organization-scoped upgrade review or confirmation receipt","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/billing/checkout/quotes/{quote_id}","href":"/api-reference/billing/read-a-saved-organization-scoped-upgrade-review-or-confirmation-receipt"},{"title":"Start a Stripe Checkout session for a plan upgrade","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/billing/checkout","href":"/api-reference/billing/start-a-stripe-checkout-session-for-a-plan-upgrade"},{"title":"Update the org billing contact email (admin)","deprecated":null,"version":null,"openapi":"/openapi.json put /api/v1/billing/contact","href":"/api-reference/billing/update-the-org-billing-contact-email-admin"},{"title":"Confirm a completed Stripe Checkout session and sync the plan","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/billing/checkout/confirm","href":"/api-reference/billing/confirm-a-completed-stripe-checkout-session-and-sync-the-plan"},{"title":"Get a Stripe Customer Portal URL for subscription management","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/billing/portal","href":"/api-reference/billing/get-a-stripe-customer-portal-url-for-subscription-management"},{"title":"Handle incoming Stripe webhook events","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/billing/webhook","href":"/api-reference/billing/handle-incoming-stripe-webhook-events"}]},{"group":"install","pages":[{"title":"Resolve skills to install into a project","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/install/resolve","href":"/api-reference/install/resolve-skills-to-install-into-a-project"},{"title":"Resolve public skills to install, without an API key","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/registry/install/resolve","href":"/api-reference/install/resolve-public-skills-to-install-without-an-api-key"},{"title":"Get the files of one skill rendering","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/install/bundles/{version_id}","href":"/api-reference/install/get-the-files-of-one-skill-rendering"},{"title":"Get the files of one public skill rendering, without an API key","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/install/bundles/{version_id}","href":"/api-reference/install/get-the-files-of-one-public-skill-rendering-without-an-api-key"},{"title":"Get a public skill's folder, without an API key","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/skills/{id_or_slug}/bundle","href":"/api-reference/install/get-a-public-skills-folder-without-an-api-key"},{"title":"Get a public skill's SKILL.md as text, without an API key","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/registry/skills/{id_or_slug}/skill-md","href":"/api-reference/install/get-a-public-skills-skillmd-as-text-without-an-api-key"}]},{"group":"public","pages":[{"title":"Public top verified skills + registry counts (marketing site hero)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/public/registry/top","href":"/api-reference/public/public-top-verified-skills-+-registry-counts-marketing-site-hero"}]},{"group":"changelog","pages":[{"title":"Workspace-wide activity feed (manifests, regressions, audit, training)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/changelog","href":"/api-reference/changelog/workspace-wide-activity-feed-manifests-regressions-audit-training"}]},{"group":"contract-violations","pages":[{"title":"List contract violations detected for a trace","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/traces/{trace_id}/violations","href":"/api-reference/contract-violations/list-contract-violations-detected-for-a-trace"},{"title":"Paginated list of contract violations for an agent","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/violations","href":"/api-reference/contract-violations/paginated-list-of-contract-violations-for-an-agent"},{"title":"Aggregate violation counts for an agent dashboard","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/violations/summary","href":"/api-reference/contract-violations/aggregate-violation-counts-for-an-agent-dashboard"},{"title":"Preview what would fire if this agent were in closed-world mode","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/contract-mode/preview","href":"/api-reference/contract-violations/preview-what-would-fire-if-this-agent-were-in-closed-world-mode"}]},{"group":"costs","pages":[{"title":"Workspace-wide LLM cost analytics","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/costs","href":"/api-reference/costs/workspace-wide-llm-cost-analytics"}]},{"group":"datasets","pages":[{"title":"List datasets","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/datasets","href":"/api-reference/datasets/list-datasets"},{"title":"Create a dataset","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/datasets","href":"/api-reference/datasets/create-a-dataset"},{"title":"Manifest compatibility buckets for the dataset-create modal","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/datasets/compat-buckets","href":"/api-reference/datasets/manifest-compatibility-buckets-for-the-dataset-create-modal"},{"title":"Get a dataset","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/datasets/{dataset_id}","href":"/api-reference/datasets/get-a-dataset"},{"title":"Build a new dataset version from traces","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/datasets/{dataset_id}/build","href":"/api-reference/datasets/build-a-new-dataset-version-from-traces"},{"title":"Export a dataset version","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/datasets/{dataset_id}/versions/{version_id}/export","href":"/api-reference/datasets/export-a-dataset-version"},{"title":"Get quality statistics for a dataset version","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/datasets/{dataset_id}/versions/{version_id}/quality-stats","href":"/api-reference/datasets/get-quality-statistics-for-a-dataset-version"},{"title":"Validate a dataset version quality for CI gates","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/datasets/{dataset_id}/versions/{version_id}/validate","href":"/api-reference/datasets/validate-a-dataset-version-quality-for-ci-gates"},{"title":"Compare two dataset versions side-by-side","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/datasets/{dataset_id}/versions/{version_id}/compare/{compare_version_id}","href":"/api-reference/datasets/compare-two-dataset-versions-side-by-side"},{"title":"Update the quality review status of a dataset version","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/datasets/{dataset_id}/versions/{version_id}/quality","href":"/api-reference/datasets/update-the-quality-review-status-of-a-dataset-version"}]},{"group":"eval-scores","pages":[{"title":"Get all evaluation scores for a trace","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/traces/{trace_id}/eval-scores","href":"/api-reference/eval-scores/get-all-evaluation-scores-for-a-trace"},{"title":"Push external evaluation scores","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/traces/{trace_id}/eval-scores","href":"/api-reference/eval-scores/push-external-evaluation-scores"},{"title":"Get full eval breakdown with provenance","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/traces/{trace_id}/eval-breakdown","href":"/api-reference/eval-scores/get-full-eval-breakdown-with-provenance"},{"title":"Compute unified verdict for a trace","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/traces/{trace_id}/decision","href":"/api-reference/eval-scores/compute-unified-verdict-for-a-trace"},{"title":"Batch compute unified verdicts","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/traces/batch-decision","href":"/api-reference/eval-scores/batch-compute-unified-verdicts"},{"title":"Download all eval scores for the org as CSV (audit, offline review).","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/eval-scores.csv","href":"/api-reference/eval-scores/download-all-eval-scores-for-the-org-as-csv-audit-offline-review"}]},{"group":"evaluators","pages":[{"title":"List available evaluator templates with category metadata","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/evaluators/templates","href":"/api-reference/evaluators/list-available-evaluator-templates-with-category-metadata"},{"title":"List evaluators configured for an agent (or org-wide defaults)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/evaluators","href":"/api-reference/evaluators/list-evaluators-configured-for-an-agent-or-org-wide-defaults"},{"title":"Create a new evaluator from a template or custom config","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/evaluators","href":"/api-reference/evaluators/create-a-new-evaluator-from-a-template-or-custom-config"},{"title":"Register SDK-defined evaluators discovered via @eval decorator","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/evaluators/register","href":"/api-reference/evaluators/register-sdk-defined-evaluators-discovered-via-@eval-decorator"},{"title":"Auto-suggested evaluators based on recent trace patterns","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/evaluators/suggestions","href":"/api-reference/evaluators/auto-suggested-evaluators-based-on-recent-trace-patterns"},{"title":"Cross-agent coverage matrix","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/evaluators/coverage","href":"/api-reference/evaluators/cross-agent-coverage-matrix"},{"title":"Delete an evaluator","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/evaluators/{evaluator_id}","href":"/api-reference/evaluators/delete-an-evaluator"},{"title":"Update an evaluator's configuration.","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/evaluators/{evaluator_id}","href":"/api-reference/evaluators/update-an-evaluators-configuration"},{"title":"List prompt-template versions for an evaluator","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/evaluators/{evaluator_id}/versions","href":"/api-reference/evaluators/list-prompt-template-versions-for-an-evaluator"},{"title":"Per-day pass rate + mean score for an evaluator over a lookback window","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/evaluators/{evaluator_id}/pass-rate-trend","href":"/api-reference/evaluators/per-day-pass-rate-+-mean-score-for-an-evaluator-over-a-lookback-window"},{"title":"Get staleness status for all evaluators of an agent","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/evaluators/staleness","href":"/api-reference/evaluators/get-staleness-status-for-all-evaluators-of-an-agent"},{"title":"Trigger a staleness scan for one agent or all agents in the org","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/evaluators/scan-staleness","href":"/api-reference/evaluators/trigger-a-staleness-scan-for-one-agent-or-all-agents-in-the-org"},{"title":"Mark an evaluator as valid against the current manifest","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/evaluators/{evaluator_id}/mark-validated","href":"/api-reference/evaluators/mark-an-evaluator-as-valid-against-the-current-manifest"}]},{"group":"evergreen","pages":[{"title":"List the caller's org's evergreen policies","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/evergreen/policies","href":"/api-reference/evergreen/list-the-callers-orgs-evergreen-policies"},{"title":"Create an evergreen policy in one of the caller's projects","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/evergreen/policies","href":"/api-reference/evergreen/create-an-evergreen-policy-in-one-of-the-callers-projects"},{"title":"List evergreen tasks, optionally filtered by policy","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/evergreen/tasks","href":"/api-reference/evergreen/list-evergreen-tasks-optionally-filtered-by-policy"},{"title":"Mark a trace as an evergreen task for continuous regression testing","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/evergreen/tasks","href":"/api-reference/evergreen/mark-a-trace-as-an-evergreen-task-for-continuous-regression-testing"},{"title":"Get regression reports showing score trends across manifest versions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/evergreen/reports","href":"/api-reference/evergreen/get-regression-reports-showing-score-trends-across-manifest-versions"}]},{"group":"import","pages":[{"title":"Import traces from a JSONL upload (deprecated path — use /traces/import)","deprecated":true,"version":null,"openapi":"/openapi.json post /api/v1/import/jsonl","href":"/api-reference/import/import-traces-from-a-jsonl-upload-deprecated-path-—-use-tracesimport"},{"title":"Bulk-import historical traces (deprecated path — use /traces/import-bulk)","deprecated":true,"version":null,"openapi":"/openapi.json post /api/v1/import/traces","href":"/api-reference/import/bulk-import-historical-traces-deprecated-path-—-use-tracesimport-bulk"},{"title":"Import a list of LangSmith Run objects (verbatim export format)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/import/langsmith","href":"/api-reference/import/import-a-list-of-langsmith-run-objects-verbatim-export-format"},{"title":"Import traces from a JSONL upload","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/traces/import","href":"/api-reference/import/import-traces-from-a-jsonl-upload"},{"title":"Bulk-import historical traces","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/traces/import-bulk","href":"/api-reference/import/bulk-import-historical-traces"}]},{"group":"manifests","pages":[{"title":"List manifests","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/manifests","href":"/api-reference/manifests/list-manifests"},{"title":"Register a manifest","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/manifests","href":"/api-reference/manifests/register-a-manifest"},{"title":"Get a manifest","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/manifests/{manifest_id}","href":"/api-reference/manifests/get-a-manifest"},{"title":"Compute a diff between this manifest and another (or its parent)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/manifests/{manifest_id}/diff","href":"/api-reference/manifests/compute-a-diff-between-this-manifest-and-another-or-its-parent"},{"title":"Suggest evaluators based on what this manifest declares","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/manifests/{manifest_id}/suggested-evaluators","href":"/api-reference/manifests/suggest-evaluators-based-on-what-this-manifest-declares"},{"title":"Get compatibility reports for a manifest","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/manifests/{manifest_id}/compatibility","href":"/api-reference/manifests/get-compatibility-reports-for-a-manifest"},{"title":"Drill down into per-episode compatibility verdicts","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/manifests/{manifest_id}/compatibility/episodes","href":"/api-reference/manifests/drill-down-into-per-episode-compatibility-verdicts"},{"title":"Run a fresh per-episode compatibility analysis","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/manifests/{manifest_id}/compatibility/run","href":"/api-reference/manifests/run-a-fresh-per-episode-compatibility-analysis"},{"title":"Export an agent's manifest timeline as CSV","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/manifests/timeline/{agent_name}.csv","href":"/api-reference/manifests/export-an-agents-manifest-timeline-as-csv"},{"title":"Manifest timeline for an agent","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/manifests/timeline/{agent_name}","href":"/api-reference/manifests/manifest-timeline-for-an-agent"},{"title":"Datasets linked to a manifest","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/manifests/{manifest_id}/datasets","href":"/api-reference/manifests/datasets-linked-to-a-manifest"},{"title":"Get policy presets","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/manifests/policies/presets","href":"/api-reference/manifests/get-policy-presets"},{"title":"Create a new compatibility policy","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/manifests/policies","href":"/api-reference/manifests/create-a-new-compatibility-policy"},{"title":"Get the active policy for an agent or project","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/manifests/policies/active","href":"/api-reference/manifests/get-the-active-policy-for-an-agent-or-project"},{"title":"Update a policy's rules or preset.","deprecated":null,"version":null,"openapi":"/openapi.json put /api/v1/manifests/policies/{policy_id}","href":"/api-reference/manifests/update-a-policys-rules-or-preset"},{"title":"Apply a compatibility policy to a manifest diff","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/manifests/{manifest_id}/apply-policy","href":"/api-reference/manifests/apply-a-compatibility-policy-to-a-manifest-diff"},{"title":"Preview the impact of a policy on traces","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/manifests/{manifest_id}/impact-preview","href":"/api-reference/manifests/preview-the-impact-of-a-policy-on-traces"},{"title":"Roll back to a prior manifest — one-click oncall mitigation","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/manifests/{manifest_id}/rollback","href":"/api-reference/manifests/roll-back-to-a-prior-manifest-—-one-click-oncall-mitigation"}]},{"group":"organization","pages":[{"title":"Get current organization details","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/org","href":"/api-reference/organization/get-current-organization-details"},{"title":"List all org members","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/org/members","href":"/api-reference/organization/list-all-org-members"},{"title":"List pending invitations for the org","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/org/invitations","href":"/api-reference/organization/list-pending-invitations-for-the-org"},{"title":"Invite a new member to the org (canonical REST plural)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/org/invitations","href":"/api-reference/organization/invite-a-new-member-to-the-org-canonical-rest-plural"},{"title":"Invite a new member to the org","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/org/invite","href":"/api-reference/organization/invite-a-new-member-to-the-org"},{"title":"Bulk-invite up to 100 members in one call","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/org/invitations/bulk","href":"/api-reference/organization/bulk-invite-up-to-100-members-in-one-call"},{"title":"Revoke a pending invitation and release its reserved seat","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/org/invitations/{invitation_id}","href":"/api-reference/organization/revoke-a-pending-invitation-and-release-its-reserved-seat"},{"title":"Accept an invitation","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/org/accept-invite","href":"/api-reference/organization/accept-an-invitation"},{"title":"Remove a member from the org","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/org/members/{user_id}","href":"/api-reference/organization/remove-a-member-from-the-org"},{"title":"Record signup attribution (referral source + landing referrer)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/org/attribution","href":"/api-reference/organization/record-signup-attribution-referral-source-+-landing-referrer"}]},{"group":"email","pages":[{"title":"Get the caller's email preferences","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/email/preferences","href":"/api-reference/email/get-the-callers-email-preferences"},{"title":"Update the caller's email preferences","deprecated":null,"version":null,"openapi":"/openapi.json put /api/v1/email/preferences","href":"/api-reference/email/update-the-callers-email-preferences"}]},{"group":"playground","pages":[{"title":"Get recent traces with LLM call messages for playground testing","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/playground/traces","href":"/api-reference/playground/get-recent-traces-with-llm-call-messages-for-playground-testing"},{"title":"Execute a modified LLM call using the user's stored credentials","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/playground/run","href":"/api-reference/playground/execute-a-modified-llm-call-using-the-users-stored-credentials"},{"title":"Opt-in pairwise preference verdict (runs on the user's BYOK key)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/playground/compare","href":"/api-reference/playground/opt-in-pairwise-preference-verdict-runs-on-the-users-byok-key"}]},{"group":"projects","pages":[{"title":"List the caller's org's projects","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/projects","href":"/api-reference/projects/list-the-callers-orgs-projects"},{"title":"Create a new project in the caller's org","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/projects","href":"/api-reference/projects/create-a-new-project-in-the-callers-org"},{"title":"Get a project by ID","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/projects/{project_id}","href":"/api-reference/projects/get-a-project-by-id"},{"title":"Update a project","deprecated":null,"version":null,"openapi":"/openapi.json put /api/v1/projects/{project_id}","href":"/api-reference/projects/update-a-project"}]},{"group":"regression","pages":[{"title":"List regression checks for an agent, most recent first","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/regression-check","href":"/api-reference/regression/list-regression-checks-for-an-agent-most-recent-first"},{"title":"Run a regression check for a candidate manifest against the baseline","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/regression-check","href":"/api-reference/regression/run-a-regression-check-for-a-candidate-manifest-against-the-baseline"},{"title":"Fetch a regression check by ID. Used by the frontend detail page","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/regression-check/{regression_check_id}","href":"/api-reference/regression/fetch-a-regression-check-by-id-used-by-the-frontend-detail-page"},{"title":"Set the engineer's human_decision on a regression check","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/regression-check/{regression_check_id}/decision","href":"/api-reference/regression/set-the-engineers-human_decision-on-a-regression-check"},{"title":"Behavioral call-replay for a check's model change (defaults to mock — no token spend)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/regression-check/{regression_check_id}/call-replay","href":"/api-reference/regression/behavioral-call-replay-for-a-checks-model-change-defaults-to-mock-—-no-token-spend"},{"title":"Get Regression Timeline","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/regression-timeline","href":"/api-reference/regression/get-regression-timeline"},{"title":"Get Ci Setup Status","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/agents/{agent_name}/ci-setup-status","href":"/api-reference/regression/get-ci-setup-status"},{"title":"List Regression Alerts","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/regression-alerts","href":"/api-reference/regression/list-regression-alerts"},{"title":"Create Regression Alert","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/regression-alerts","href":"/api-reference/regression/create-regression-alert"},{"title":"Aggregate regression-alert stats: counts, MTTR, by-agent / by-severity","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/regression-alerts/stats","href":"/api-reference/regression/aggregate-regression-alert-stats:-counts-mttr-by-agent-by-severity"},{"title":"Active alerts grouped by agent — for the on-call landing surface","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/regression-alerts/active-by-agent","href":"/api-reference/regression/active-alerts-grouped-by-agent-—-for-the-on-call-landing-surface"},{"title":"Get Regression Alert","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/regression-alerts/{alert_id}","href":"/api-reference/regression/get-regression-alert"},{"title":"Acknowledge Regression Alert","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/regression-alerts/{alert_id}/acknowledge","href":"/api-reference/regression/acknowledge-regression-alert"},{"title":"Resolve Regression Alert","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/regression-alerts/{alert_id}/resolve","href":"/api-reference/regression/resolve-regression-alert"},{"title":"Get Rollback Preview","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/regression-alerts/{alert_id}/rollback-preview","href":"/api-reference/regression/get-rollback-preview"}]},{"group":"repair","pages":[{"title":"Preview repairs for a manifest transition","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/repair/preview","href":"/api-reference/repair/preview-repairs-for-a-manifest-transition"},{"title":"Apply repairs to all eligible episodes","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/repair/apply","href":"/api-reference/repair/apply-repairs-to-all-eligible-episodes"},{"title":"List durable repair receipts for an exact version pair","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/repair/batches","href":"/api-reference/repair/list-durable-repair-receipts-for-an-exact-version-pair"},{"title":"Get repair batch status and results","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/repair/{batch_id}","href":"/api-reference/repair/get-repair-batch-status-and-results"},{"title":"Apply only user-approved repair rules","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/repair/apply-selective","href":"/api-reference/repair/apply-only-user-approved-repair-rules"}]},{"group":"replay","pages":[{"title":"List replay batches","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/replay/batches","href":"/api-reference/replay/list-replay-batches"},{"title":"Create a replay batch","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/replay/batches","href":"/api-reference/replay/create-a-replay-batch"},{"title":"Get a replay batch","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/replay/batches/{batch_id}","href":"/api-reference/replay/get-a-replay-batch"},{"title":"Get a single replay task with its input for execution","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/replay/tasks/{task_id}","href":"/api-reference/replay/get-a-single-replay-task-with-its-input-for-execution"},{"title":"Submit a replay task result","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/replay/tasks/{task_id}/submit","href":"/api-reference/replay/submit-a-replay-task-result"},{"title":"Export replay prompts","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/replay/export","href":"/api-reference/replay/export-replay-prompts"},{"title":"Export multi-turn sessions that need replay","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/replay/export/sessions","href":"/api-reference/replay/export-multi-turn-sessions-that-need-replay"},{"title":"Link a replayed trace to its original","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/replay/link","href":"/api-reference/replay/link-a-replayed-trace-to-its-original"},{"title":"Export DPO preference pairs from a completed replay batch","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/replay/batches/{batch_id}/export-dpo","href":"/api-reference/replay/export-dpo-preference-pairs-from-a-completed-replay-batch"}]},{"group":"settings","pages":[{"title":"Get platform configuration and statistics","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/settings","href":"/api-reference/settings/get-platform-configuration-and-statistics"},{"title":"List all API keys (prefix and label only — no raw keys)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/settings/api-keys","href":"/api-reference/settings/list-all-api-keys-prefix-and-label-only-—-no-raw-keys"},{"title":"Create a new API key","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/settings/api-keys","href":"/api-reference/settings/create-a-new-api-key"},{"title":"Revoke an API key. Only global-scoped keys can revoke keys","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/settings/api-keys/{key_id}","href":"/api-reference/settings/revoke-an-api-key-only-global-scoped-keys-can-revoke-keys"}]},{"group":"api-keys","pages":[{"title":"List all API keys (canonical REST path)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/api-keys","href":"/api-reference/api-keys/list-all-api-keys-canonical-rest-path"},{"title":"Create a new API key (canonical REST path)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/api-keys","href":"/api-reference/api-keys/create-a-new-api-key-canonical-rest-path"},{"title":"Revoke an API key (canonical REST path)","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/api-keys/{key_id}","href":"/api-reference/api-keys/revoke-an-api-key-canonical-rest-path"}]},{"group":"skills","pages":[{"title":"Generate an AI-powered improvement suggestion for a skill","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_name}/suggest-improvement","href":"/api-reference/skills/generate-an-ai-powered-improvement-suggestion-for-a-skill"},{"title":"Apply a suggested improvement by creating a new skill version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_name}/apply-suggestion","href":"/api-reference/skills/apply-a-suggested-improvement-by-creating-a-new-skill-version"},{"title":"List past AI-generated suggestion versions for a skill","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_name}/suggestions","href":"/api-reference/skills/list-past-ai-generated-suggestion-versions-for-a-skill"},{"title":"List skills","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills","href":"/api-reference/skills/list-skills"},{"title":"Create a skill","description":"Create a new skill with its first version.\n\nOwnership is set automatically:\n- `creator_user_id` from the authenticated user\n- `owning_workspace_id` from the payload or auth context\n\nName must be lowercase alphanumeric with hyphens/underscores (1-200 chars).\nVisibility must be one of: `org`, `workspace`, `personal` — `public` is\nrejected here (422); listing on the registry is done by\n`POST /skills/{name}/publish`, which is where the publish gates live.\nStability must be one of: `stable`, `experimental`, `deprecated`.\n\nSupports `X-Idempotency-Key` for safe retries — within 60s, a request with\nthe same key returns the original response instead of creating a duplicate.","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills","href":"/api-reference/skills/create-a-skill"},{"title":"Reconcile a batch of local skills with the platform","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/sync","href":"/api-reference/skills/reconcile-a-batch-of-local-skills-with-the-platform"},{"title":"Per-install skill sync-divergence state","description":"Per-install divergence pills for the org's skills.\n\nEach install lists its skills with a ``status`` — ``in_sync``,\n``local_ahead`` (push), ``remote_ahead`` (pull), ``conflict`` (reconcile),\n``local_only``, or ``unknown`` — plus a ``counts`` rollup for the bar.\nStrictly org-scoped: a caller never sees another tenant's installs.","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/installs","href":"/api-reference/skills/per-install-skill-sync-divergence-state"},{"title":"Report an install's local skill hashes (no push)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/installs/report","href":"/api-reference/skills/report-an-installs-local-skill-hashes-no-push"},{"title":"Get the skill menu (Free tier)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/menu","href":"/api-reference/skills/get-the-skill-menu-free-tier"},{"title":"Smart-route a query to the best skill","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/route","href":"/api-reference/skills/smart-route-a-query-to-the-best-skill"},{"title":"Export org skills with full content","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/export","href":"/api-reference/skills/export-org-skills-with-full-content"},{"title":"Getting-started signals: acquired a skill, made it available, seen it fire","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/onboarding","href":"/api-reference/skills/getting-started-signals:-acquired-a-skill-made-it-available-seen-it-fire"},{"title":"List skills this org has linked with Use (not forked)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/linked","href":"/api-reference/skills/list-skills-this-org-has-linked-with-use-not-forked"},{"title":"Get content hashes for all org skills","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/hashes","href":"/api-reference/skills/get-content-hashes-for-all-org-skills"},{"title":"Get a skill by name","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_name}","href":"/api-reference/skills/get-a-skill-by-name"},{"title":"Existence probe with get_skill's exact access rules","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_name}/exists","href":"/api-reference/skills/existence-probe-with-get_skills-exact-access-rules"},{"title":"Get the body markdown of a skill for prompt injection / load_skill","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_name}/body","href":"/api-reference/skills/get-the-body-markdown-of-a-skill-for-prompt-injection-load_skill"},{"title":"Opt-in: generate platform-authored starter test cases for this skill","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_name}/generate-starter-tests","href":"/api-reference/skills/opt-in:-generate-platform-authored-starter-test-cases-for-this-skill"},{"title":"List the benchmark test cases on this skill's latest version","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_name}/test-cases","href":"/api-reference/skills/list-the-benchmark-test-cases-on-this-skills-latest-version"},{"title":"Author a single benchmark test case in the browser","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_name}/test-cases","href":"/api-reference/skills/author-a-single-benchmark-test-case-in-the-browser"},{"title":"Edit a single benchmark test case","deprecated":null,"version":null,"openapi":"/openapi.json put /api/v1/skills/{skill_name}/test-cases/{case_id}","href":"/api-reference/skills/edit-a-single-benchmark-test-case"},{"title":"Delete a single benchmark test case","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/skills/{skill_name}/test-cases/{case_id}","href":"/api-reference/skills/delete-a-single-benchmark-test-case"},{"title":"Run the A/B benchmark suite for this skill's latest version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_name}/benchmark/run","href":"/api-reference/skills/run-the-ab-benchmark-suite-for-this-skills-latest-version"},{"title":"Import a locally produced skillevaluation results.json (unverified)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_name}/benchmark/import","href":"/api-reference/skills/import-a-locally-produced-skillevaluation-resultsjson-unverified"},{"title":"List recent benchmark runs for this skill","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_name}/benchmark/results","href":"/api-reference/skills/list-recent-benchmark-runs-for-this-skill"},{"title":"One benchmark run, fully serialized (older-run lazy-load)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_name}/benchmark/results/{run_id}","href":"/api-reference/skills/one-benchmark-run-fully-serialized-older-run-lazy-load"},{"title":"Unified Skill Health card payload","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_name}/health-summary","href":"/api-reference/skills/unified-skill-health-card-payload"},{"title":"List drafted suggested edits for this skill","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_name}/suggested-edits","href":"/api-reference/skills/list-drafted-suggested-edits-for-this-skill"},{"title":"Accept a suggested edit → new SkillVersion + regression tests + benchmark","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_name}/suggested-edits/{edit_id}/accept","href":"/api-reference/skills/accept-a-suggested-edit-→-new-skillversion-+-regression-tests-+-benchmark"},{"title":"Reject a suggested edit","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_name}/suggested-edits/{edit_id}/reject","href":"/api-reference/skills/reject-a-suggested-edit"},{"title":"Per-skill Live Traces summary — effectiveness distribution + discoverability gap","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_name}/live-traces-summary","href":"/api-reference/skills/per-skill-live-traces-summary-—-effectiveness-distribution-+-discoverability-gap"},{"title":"List all open struggle Patterns for this skill","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_name}/patterns","href":"/api-reference/skills/list-all-open-struggle-patterns-for-this-skill"},{"title":"Test whether a hypothetical user input would activate this skill, and preview the rendered body","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_name}/playground-run","href":"/api-reference/skills/test-whether-a-hypothetical-user-input-would-activate-this-skill-and-preview-the-rendered-body"},{"title":"List versions of a skill","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_name}/versions","href":"/api-reference/skills/list-versions-of-a-skill"},{"title":"Per-version usage breakdown","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_name}/version-usage","href":"/api-reference/skills/per-version-usage-breakdown"},{"title":"Get a specific version's full content.","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_name}/versions/{version_number}","href":"/api-reference/skills/get-a-specific-versions-full-content"},{"title":"Compute a unified diff between two skill versions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_name}/versions/{version_a}/diff/{version_b}","href":"/api-reference/skills/compute-a-unified-diff-between-two-skill-versions"},{"title":"Update a skill","deprecated":null,"version":null,"openapi":"/openapi.json put /api/v1/skills/{skill_id}","href":"/api-reference/skills/update-a-skill"},{"title":"Delete a skill (soft-delete)","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/skills/{skill_id}","href":"/api-reference/skills/delete-a-skill-soft-delete"},{"title":"Re-ablate this public skill's latest version now (bounded, on-demand)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_id}/reablate","href":"/api-reference/skills/re-ablate-this-public-skills-latest-version-now-bounded-on-demand"},{"title":"Rename a skill","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_id}/rename","href":"/api-reference/skills/rename-a-skill"},{"title":"Offer a skill only to the agents that use it","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_id}/make-opt-in","href":"/api-reference/skills/offer-a-skill-only-to-the-agents-that-use-it"},{"title":"Per-skill performance metrics with baseline comparison","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/analytics/metrics","href":"/api-reference/skills/per-skill-performance-metrics-with-baseline-comparison"},{"title":"Use and benchmark lift for a set of skills","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/analytics/library","href":"/api-reference/skills/use-and-benchmark-lift-for-a-set-of-skills"},{"title":"Compare two versions of a skill","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/analytics/compare","href":"/api-reference/skills/compare-two-versions-of-a-skill"},{"title":"Rank skills by effectiveness","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/analytics/leaderboard","href":"/api-reference/skills/rank-skills-by-effectiveness"},{"title":"Daily skill activation timeline for an agent","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/analytics/timeline","href":"/api-reference/skills/daily-skill-activation-timeline-for-an-agent"},{"title":"Per-skill offered-vs-activated rollup","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_name}/router-stats","href":"/api-reference/skills/per-skill-offered-vs-activated-rollup"},{"title":"Get current routing configuration and readiness status","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/routing/config","href":"/api-reference/skills/get-current-routing-configuration-and-readiness-status"},{"title":"Offered-vs-activated join for a single routing decision","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/routing/{routing_id}","href":"/api-reference/skills/offered-vs-activated-join-for-a-single-routing-decision"},{"title":"Deprecated alias of /assign (subscribe → assign, Use/Fork consolidation)","deprecated":true,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_name}/subscribe","href":"/api-reference/skills/deprecated-alias-of-assign-subscribe-→-assign-usefork-consolidation"},{"title":"Deprecated alias of DELETE /assign (subscribe → assign, Use/Fork consolidation)","deprecated":true,"version":null,"openapi":"/openapi.json delete /api/v1/skills/{skill_name}/subscribe","href":"/api-reference/skills/deprecated-alias-of-delete-assign-subscribe-→-assign-usefork-consolidation"},{"title":"Assign a skill to an agent (an agent-scope Use)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_name}/assign","href":"/api-reference/skills/assign-a-skill-to-an-agent-an-agent-scope-use"},{"title":"Unassign a skill from an agent (removes the agent-scope Use)","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/skills/{skill_name}/assign","href":"/api-reference/skills/unassign-a-skill-from-an-agent-removes-the-agent-scope-use"},{"title":"List all agents subscribed to a skill (canonical REST plural)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_name}/subscriptions","href":"/api-reference/skills/list-all-agents-subscribed-to-a-skill-canonical-rest-plural"},{"title":"List all agents subscribed to a skill","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_name}/subscribers","href":"/api-reference/skills/list-all-agents-subscribed-to-a-skill"},{"title":"Impact analysis: show how many agents would be affected by a skill change","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_name}/impact","href":"/api-reference/skills/impact-analysis:-show-how-many-agents-would-be-affected-by-a-skill-change"},{"title":"Export skill analytics as CSV for stakeholder reports","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_name}/analytics.csv","href":"/api-reference/skills/export-skill-analytics-as-csv-for-stakeholder-reports"},{"title":"Transfer skill ownership to a different workspace","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_name}/transfer","href":"/api-reference/skills/transfer-skill-ownership-to-a-different-workspace"},{"title":"Fork a skill — create an independent copy in the caller's workspace","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_name}/fork","href":"/api-reference/skills/fork-a-skill-—-create-an-independent-copy-in-the-callers-workspace"},{"title":"List all sharing grants for a skill","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_name}/shares","href":"/api-reference/skills/list-all-sharing-grants-for-a-skill"},{"title":"Add a sharing grant to a skill","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_name}/shares","href":"/api-reference/skills/add-a-sharing-grant-to-a-skill"},{"title":"Remove a sharing grant from a skill","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/skills/{skill_name}/shares/{share_id}","href":"/api-reference/skills/remove-a-sharing-grant-from-a-skill"},{"title":"Publish a skill to the public registry","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_name}/publish","href":"/api-reference/skills/publish-a-skill-to-the-public-registry"},{"title":"Remove a skill from the public registry","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_name}/unpublish","href":"/api-reference/skills/remove-a-skill-from-the-public-registry"},{"title":"Failure-first harvest: run a skill's eval cases on the BASE model to see if the base already passes","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_name}/harvest","href":"/api-reference/skills/failure-first-harvest:-run-a-skills-eval-cases-on-the-base-model-to-see-if-the-base-already-passes"},{"title":"Check if the forked skill has upstream updates available","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_name}/upstream-status","href":"/api-reference/skills/check-if-the-forked-skill-has-upstream-updates-available"},{"title":"Merge upstream changes into a forked skill","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_name}/merge-upstream","href":"/api-reference/skills/merge-upstream-changes-into-a-forked-skill"},{"title":"Re-run SkillSafety checks on a skill (free Tier-1; optional metered deep review)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_name}/checks/run","href":"/api-reference/skills/re-run-skillsafety-checks-on-a-skill-free-tier-1;-optional-metered-deep-review"},{"title":"Import a skill from a SKILL.md file content","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/import-skillmd","href":"/api-reference/skills/import-a-skill-from-a-skillmd-file-content"},{"title":"Export a skill as a standard SKILL.md file","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{name}/export-skillmd","href":"/api-reference/skills/export-a-skill-as-a-standard-skillmd-file"}]},{"group":"skill-attachments","pages":[{"title":"List all attachments for a skill","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_id}/attachments","href":"/api-reference/skill-attachments/list-all-attachments-for-a-skill"},{"title":"Upload a single attachment to a skill","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_id}/attachments","href":"/api-reference/skill-attachments/upload-a-single-attachment-to-a-skill"},{"title":"Get a single attachment with its full content","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_id}/attachments/{attachment_id}","href":"/api-reference/skill-attachments/get-a-single-attachment-with-its-full-content"},{"title":"Delete a single attachment","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/skills/{skill_id}/attachments/{attachment_id}","href":"/api-reference/skill-attachments/delete-a-single-attachment"},{"title":"Get an attachment by its relative file path","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/skills/{skill_id}/attachments/by-path/{file_path}","href":"/api-reference/skill-attachments/get-an-attachment-by-its-relative-file-path"},{"title":"Overwrite an existing attachment by path (stable attachment_id)","deprecated":null,"version":null,"openapi":"/openapi.json put /api/v1/skills/{skill_id}/attachments/by-path/{file_path}","href":"/api-reference/skill-attachments/overwrite-an-existing-attachment-by-path-stable-attachment_id"},{"title":"Upload multiple attachments at once","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/skills/{skill_id}/attachments/bulk","href":"/api-reference/skill-attachments/upload-multiple-attachments-at-once"}]},{"group":"telemetry","pages":[{"title":"Ingest a telemetry event","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/telemetry/event","href":"/api-reference/telemetry/ingest-a-telemetry-event"}]},{"group":"evidence","pages":[{"title":"Capabilities","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/evidence/capabilities","href":"/api-reference/evidence/capabilities"},{"title":"Collect","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/evidence/events/batch","href":"/api-reference/evidence/collect"},{"title":"Stream","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/evidence/streams/{stream_id}","href":"/api-reference/evidence/stream"},{"title":"Health","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/evidence/health","href":"/api-reference/evidence/health"},{"title":"Entry","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/evidence/entries/{receipt_id}","href":"/api-reference/evidence/entry"},{"title":"Run","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/evidence/runs/{boot_id}","href":"/api-reference/evidence/run"},{"title":"Persist Proof","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/evidence/runs/{boot_id}/evaluate","href":"/api-reference/evidence/persist-proof"},{"title":"Proof","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/evidence/proofs/{proof_id}","href":"/api-reference/evidence/proof"}]},{"group":"traces","pages":[{"title":"Batch Usage","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/traces/usage/batch","href":"/api-reference/traces/batch-usage"},{"title":"Batch Quality","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/traces/quality/batch","href":"/api-reference/traces/batch-quality"},{"title":"Pending Quality","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/traces/quality/pending","href":"/api-reference/traces/pending-quality"},{"title":"Get Quality","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/traces/{trace_id}/quality","href":"/api-reference/traces/get-quality"},{"title":"List traces","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/traces","href":"/api-reference/traces/list-traces"},{"title":"Ingest a trace","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/traces","href":"/api-reference/traces/ingest-a-trace"},{"title":"Ingest a batch of traces","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/traces/batch","href":"/api-reference/traces/ingest-a-batch-of-traces"},{"title":"Group traces by agent or session with per-group rollups","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/traces/group-by","href":"/api-reference/traces/group-traces-by-agent-or-session-with-per-group-rollups"},{"title":"Aggregate stats across traces","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/traces/stats","href":"/api-reference/traces/aggregate-stats-across-traces"},{"title":"Eval rollup stats","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/traces/eval/stats","href":"/api-reference/traces/eval-rollup-stats"},{"title":"Get a trace","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/traces/{trace_id}","href":"/api-reference/traces/get-a-trace"},{"title":"Export a trace as a flat JSON document","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/traces/{trace_id}/export.json","href":"/api-reference/traces/export-a-trace-as-a-flat-json-document"},{"title":"List all child traces of a parent trace (multi-agent orchestration)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/traces/{trace_id}/children","href":"/api-reference/traces/list-all-child-traces-of-a-parent-trace-multi-agent-orchestration"},{"title":"Get the Skill Rater report for a trace","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/traces/{trace_id}/skill-rater-report","href":"/api-reference/traces/get-the-skill-rater-report-for-a-trace"},{"title":"Manually override a trace's status","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/traces/{trace_id}/status","href":"/api-reference/traces/manually-override-a-traces-status"},{"title":"Run evaluators on a trace","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/traces/{trace_id}/evaluate","href":"/api-reference/traces/run-evaluators-on-a-trace"},{"title":"Set a manual compatibility override for a trace","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/traces/{trace_id}/compatibility","href":"/api-reference/traces/set-a-manual-compatibility-override-for-a-trace"},{"title":"Get the public skill AI rating prompt and provenance format","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/traces/skill-rater/config","href":"/api-reference/traces/get-the-public-skill-ai-rating-prompt-and-provenance-format"},{"title":"Get this trace's witnessed skill snapshots and AI rating prompt","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/traces/{trace_id}/skill-rating-context","href":"/api-reference/traces/get-this-traces-witnessed-skill-snapshots-and-ai-rating-prompt"},{"title":"Submit AI feedback for public skills witnessed in your trace","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/traces/{trace_id}/skill-ratings","href":"/api-reference/traces/submit-ai-feedback-for-public-skills-witnessed-in-your-trace"},{"title":"Force-run the Skill Rater on a single trace (on-demand)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/traces/{trace_id}/rate","href":"/api-reference/traces/force-run-the-skill-rater-on-a-single-trace-on-demand"}]},{"group":"training","pages":[{"title":"List available fine-tuning providers with configuration status","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/training/providers","href":"/api-reference/training/list-available-fine-tuning-providers-with-configuration-status"},{"title":"Get configured provider credentials (keys masked)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/training/credentials","href":"/api-reference/training/get-configured-provider-credentials-keys-masked"},{"title":"Store or update provider credentials","deprecated":null,"version":null,"openapi":"/openapi.json put /api/v1/training/credentials","href":"/api-reference/training/store-or-update-provider-credentials"},{"title":"Remove stored credentials for a provider","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/training/credentials/{provider}","href":"/api-reference/training/remove-stored-credentials-for-a-provider"},{"title":"List training jobs for the org","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/training/jobs","href":"/api-reference/training/list-training-jobs-for-the-org"},{"title":"Launch a fine-tuning job","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/training/jobs","href":"/api-reference/training/launch-a-fine-tuning-job"},{"title":"Get training job detail with metrics","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/training/jobs/{job_id}","href":"/api-reference/training/get-training-job-detail-with-metrics"},{"title":"Manually poll a training job's status from the provider.","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/training/jobs/{job_id}/poll","href":"/api-reference/training/manually-poll-a-training-jobs-status-from-the-provider"},{"title":"Cancel a running training job","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/training/jobs/{job_id}/cancel","href":"/api-reference/training/cancel-a-running-training-job"}]},{"group":"multi-agent-training","pages":[{"title":"Attribute orchestrator failures to sub-agents","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/multi-agent-training/{orchestrator_name}/fault-attribution","href":"/api-reference/multi-agent-training/attribute-orchestrator-failures-to-sub-agents"},{"title":"Preview the training dataset that would be built for one sub-agent","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/multi-agent-training/{orchestrator_name}/subagent-dataset/{subagent_name}","href":"/api-reference/multi-agent-training/preview-the-training-dataset-that-would-be-built-for-one-sub-agent"},{"title":"Fan out training jobs for N sub-agents under a single coordinator","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/multi-agent-training/{orchestrator_name}/launch","href":"/api-reference/multi-agent-training/fan-out-training-jobs-for-n-sub-agents-under-a-single-coordinator"},{"title":"List all training jobs in a multi-agent coordinator","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/multi-agent-training/coordinators/{coordinator_id}/jobs","href":"/api-reference/multi-agent-training/list-all-training-jobs-in-a-multi-agent-coordinator"}]},{"group":"tutorial","pages":[{"title":"The demo agent, its skills and example questions, and your free runs","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/tutorial/demo","href":"/api-reference/tutorial/the-demo-agent-its-skills-and-example-questions-and-your-free-runs"},{"title":"Run the demo agent once with the SDK you picked","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/tutorial/reply","href":"/api-reference/tutorial/run-the-demo-agent-once-with-the-sdk-you-picked"},{"title":"Whether /try can run a model now (no model call)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/tutorial/readiness","href":"/api-reference/tutorial/whether-try-can-run-a-model-now-no-model-call"}]},{"group":"webhooks","pages":[{"title":"Receive and process Stripe webhook events","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/webhooks/stripe","href":"/api-reference/webhooks/receive-and-process-stripe-webhook-events"},{"title":"Sync Clerk user events to the local User table","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/webhooks/clerk","href":"/api-reference/webhooks/sync-clerk-user-events-to-the-local-user-table"}]},{"group":"workspaces","pages":[{"title":"List workspaces visible to the current user","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/workspaces","href":"/api-reference/workspaces/list-workspaces-visible-to-the-current-user"},{"title":"Create a new workspace","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/workspaces","href":"/api-reference/workspaces/create-a-new-workspace"},{"title":"Get workspace details","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/workspaces/{workspace_id}","href":"/api-reference/workspaces/get-workspace-details"},{"title":"Delete a workspace (cannot delete default)","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/workspaces/{workspace_id}","href":"/api-reference/workspaces/delete-a-workspace-cannot-delete-default"},{"title":"Update workspace name/description","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/workspaces/{workspace_id}","href":"/api-reference/workspaces/update-workspace-namedescription"},{"title":"List members of a workspace","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/workspaces/{workspace_id}/members","href":"/api-reference/workspaces/list-members-of-a-workspace"},{"title":"Add a user to a workspace","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/workspaces/{workspace_id}/members","href":"/api-reference/workspaces/add-a-user-to-a-workspace"},{"title":"Remove a user from a workspace","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/workspaces/{workspace_id}/members/{user_id}","href":"/api-reference/workspaces/remove-a-user-from-a-workspace"},{"title":"Update a workspace member's role","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/workspaces/{workspace_id}/members/{user_id}","href":"/api-reference/workspaces/update-a-workspace-members-role"}]}]}]},"title":"Reconcile a batch of local skills with the platform - DecimalAI","buildId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","deploymentId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-rfhihCWU.js","utils-BmH1XFxk.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-BcNsxPKB.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BAES3tkd.js","snippetPresets-DCMQBKLP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-D6l_bzE9.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BOktbnNh.js","shallow-BCs8SgM7.js","getApiPlaygroundDisplay-DEmW5bJB.js","CodeSnippet-CpZOpB9C.js","CodeSnippets-BOBDqibl.js","Page-D5fEM6aW.js","getPastedJson-DH2JBvmr.js","icon-BBJH-kKh.js","MethodPill-D2Sd5NLC.js","DuplicateIcon-CGgfL2qN.js","createIcon-BKudBBzi.js","DynamicMarkdown-85clUA0i.js","SectionHeading-D0JiMgDx.js","axios-vUo_bRtp.js","Markdown-Cfiy0xZO.js","clsx-rL8ZCCw4.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-aeztFa9U.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BywkCr5C.js"]}