internal writes a mapping row with a null client and routes the room to the Worker’s existing core ework — nothing is minted, and it answers 200, because the row is the whole of the change. client binds the room and brings up that pair’s ework, so it answers 202 and the agent may still be coming up behind it. Use this rather than a delete to mark a room internal: an unmapped room routes nowhere, which is a different thing.
A client classification brings up that Client’s ework and spends one of your organization’s daily provisioning slots. An internal classification mints nothing and spends none.
An organization-scoped API key, minted in control under Settings → API keys. Every failure to authenticate answers one identical 401: "Provide a valid organization-scoped API key or an active session." Each operation names the one scope it is filed under, <resource>:<read|write>, where the resource is the first path segment after /api/v1/; a key minted today carries all 22 of them. Scopes are RECORDED — on the key and on every audit row — and are not yet enforced: no request is refused for want of one.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Ergoly","description":"How to manage your agency on Ergoly","colors":{"primary":"#079b9b","light":"#3cd3cf","dark":"#0f7170"},"logo":{"light":"https://mintcdn.com/ergoly/-drdYd6uXChmiNIn/logo/light.png?fit=max\u0026auto=format\u0026n=-drdYd6uXChmiNIn\u0026q=85\u0026s=a9084e9caaf8656a821bf02426e31c05","dark":"https://mintcdn.com/ergoly/-drdYd6uXChmiNIn/logo/dark.png?fit=max\u0026auto=format\u0026n=-drdYd6uXChmiNIn\u0026q=85\u0026s=2c7c39ae6542910294a1183134fda8ff","href":"https://www.ergoly.ai"},"favicon":"https://mintcdn.com/ergoly/-drdYd6uXChmiNIn/favicon.png?fit=max\u0026auto=format\u0026n=-drdYd6uXChmiNIn\u0026q=85\u0026s=9e5baceff3d9e2c0f0d473b3a7c5d40b","api":{"playground":{"display":"interactive","proxy":true},"examples":{"defaults":"required","languages":["curl","javascript","python"]}},"background":{"color":{"light":"#f2f3f3","dark":"#282828"}},"navbar":{"links":[{"href":"https://www.ergoly.ai/support","label":"Support"}],"primary":{"type":"button","label":"Sign in","href":"https://control.ergoly.ai/"}},"footer":{"socials":{"website":"https://www.ergoly.ai","linkedin":"https://www.linkedin.com/company/ergoly","github":"https://github.com/ergoly-ai"}},"seo":{"metatags":{"canonical":"https://docs.ergoly.ai"}},"fonts":{"family":"Satoshi","source":"fonts/Satoshi-Variable.woff2","format":"woff2"},"banner":{"content":"Ergoly is hiring. \u003ca href=\"https://www.ergoly.ai/jobs\">Apply today\u003c/a>.","dismissible":true},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"interaction":{"drilldown":false},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"ergoly","hasAudioNarration":false,"actualSubdomain":"ergoly","customDomains":["docs.ergoly.ai"],"gitSource":{"type":"github","owner":"ergoly-ai","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":"","_id":"6af1063edce746e0972c5b68"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af1344bc7dcf404baff164b","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"API","count":72},{"language":"default","tag":"Docs","count":49},{"language":"default","tag":"Workers","count":33},{"language":"default","tag":"Connections","count":26},{"language":"default","tag":"Channels","count":14},{"language":"default","tag":"Changelog","count":12},{"language":"default","tag":"Releases","count":12},{"language":"default","tag":"Tasks","count":11},{"language":"default","tag":"Clients","count":9},{"language":"default","tag":"Company","count":9}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/channels/classify-a-channel","slug":"/api-reference/channels/classify-a-channel","pageMetadata":{"title":"Classify a channel","description":"`internal` writes a mapping row with a null client and routes the room to the Worker's existing core ework — nothing is minted, and it answers **200**, because the row is the whole of the change. `client` binds the room and brings up that pair's ework, so it answers **202** and the agent may still be coming up behind it. Use this rather than a delete to mark a room internal: an unmapped room routes nowhere, which is a different thing.\n\n**A `client` classification brings up that Client's ework and spends one of your organization's daily provisioning slots. An `internal` classification mints nothing and spends none.**","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/workers/{id}/channels/{channel}","href":"/api-reference/channels/classify-a-channel","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"internal\"\n }), \" writes a mapping row with a null client and routes the room to the Worker’s existing core ework — nothing is minted, and it answers \", _jsx(_components.strong, {\n children: \"200\"\n }), \", because the row is the whole of the change. \", _jsx(_components.code, {\n children: \"client\"\n }), \" binds the room and brings up that pair’s ework, so it answers \", _jsx(_components.strong, {\n children: \"202\"\n }), \" and the agent may still be coming up behind it. Use this rather than a delete to mark a room internal: an unmapped room routes nowhere, which is a different thing.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: _jsxs(_components.strong, {\n children: [\"A \", _jsx(_components.code, {\n children: \"client\"\n }), \" classification brings up that Client’s ework and spends one of your organization’s daily provisioning slots. An \", _jsx(_components.code, {\n children: \"internal\"\n }), \" classification mints nothing and spends none.\"]\n })\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":"Classify a channel","description":"`internal` writes a mapping row with a null client and routes the room to the Worker's existing core ework — nothing is minted, and it answers **200**, because the row is the whole of the change. `client` binds the room and brings up that pair's ework, so it answers **202** and the agent may still be coming up behind it. Use this rather than a delete to mark a room internal: an unmapped room routes nowhere, which is a different thing.\n\n**A `client` classification brings up that Client's ework and spends one of your organization's daily provisioning slots. An `internal` classification mints nothing and spends none.**","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/workers/{id}/channels/{channel}","href":"/api-reference/channels/classify-a-channel","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"classifyChannel","summary":"Classify a channel","description":"`internal` writes a mapping row with a null client and routes the room to the Worker's existing core ework — nothing is minted, and it answers **200**, because the row is the whole of the change. `client` binds the room and brings up that pair's ework, so it answers **202** and the agent may still be coming up behind it. Use this rather than a delete to mark a room internal: an unmapped room routes nowhere, which is a different thing.\n\n**A `client` classification brings up that Client's ework and spends one of your organization's daily provisioning slots. An `internal` classification mints nothing and spends none.**","tags":["channels"],"security":["d199234e-befa-48aa-bb26-fd1b2a620b90"],"parameters":["5718220c-318c-4585-a004-005c6f19a60d","5aba5ee4-0b40-4f5e-92e5-20034550291a","1a3d18f2-ed19-43d9-b9d9-58fc05aa210d"],"requestBody":"12250e3b-63bf-4fca-8292-9ae91de470d5","responses":{"200":"a7449096-b755-4a51-8de5-13fdad3315d4","202":"91a18aae-cb84-44d9-8f2e-235d5380a4ef","400":"d84b81d5-2c69-47bc-b080-0ea53f73a774","401":"4f3f1d6e-a28d-450f-b846-8800700caf7f","404":"db1e2890-021a-4378-bcf6-99b37167a1db","409":"05ec0119-38e5-4d92-a73b-199dbacf38ae","429":"29175007-da30-48a2-b4c7-a6c14f0955f3","502":"0ee3ef09-fa94-4475-86a3-d27d0f589b1e"},"method":"patch","type":"path","servers":["15355b2c-94fb-418f-acf2-2e27904062bb"],"path":"/api/v1/workers/{id}/channels/{channel}","baseUrlOptions":["https://control.ergoly.ai"],"title":"Classify a channel","codeSamples":[],"requestExampleLanguages":["bash","javascript","python"],"requiredOnlyExamples":true,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"5718220c-318c-4585-a004-005c6f19a60d":{"name":"id","in":"path","required":true,"description":"The Worker id. A malformed id answers 404, exactly as another organization's well-formed id does.","schema":{"type":"string","description":"The Worker id. A malformed id answers 404, exactly as another organization's well-formed id does.","isRequired":true,"uniqueKey":"","typeLabel":"string"}},"5aba5ee4-0b40-4f5e-92e5-20034550291a":{"name":"channel","in":"path","required":true,"description":"A Slack channel id (`C…`/`G…`) or a channel name (`ops`). See *Naming a room* above.","schema":{"type":"string","description":"A Slack channel id (`C…`/`G…`) or a channel name (`ops`). See *Naming a room* above.","isRequired":true,"uniqueKey":"","typeLabel":"string"}},"1a3d18f2-ed19-43d9-b9d9-58fc05aa210d":{"name":"Idempotency-Key","in":"header","required":false,"description":"Any unique string. A retry under the same key is answered from the first attempt's record, with `X-Idempotent-Replay: true`. The same key with a different body is a conflict.","schema":{"type":"string","description":"Any unique string.","isRequired":false,"uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["internal","client"],"description":"`internal` routes the room to the Worker's core ework and mints nothing. `client` binds it to a Client and activates that pair's ework.","isRequired":true,"uniqueKey":"kind","typeLabel":"enum\u003cstring>"},"clientSlug":{"type":"string","description":"Required when `kind` is `client`.","uniqueKey":"clientSlug","typeLabel":"string"},"confirm":{"type":"boolean","description":"Required to move a channel already mapped to a different Client.","uniqueKey":"confirm","typeLabel":"boolean"}},"required":["kind"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"example":{"kind":"client","clientSlug":"acme"},"examples":{"Example":{"title":"Example","value":{"kind":"client","clientSlug":"acme"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"a7449096-b755-4a51-8de5-13fdad3315d4":{"description":"Success — `kind` is `internal`, because nothing was started.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"workerId":{"type":"string","description":"The Worker.","isRequired":true,"uniqueKey":"data.workerId","typeLabel":"string"},"slackChannelId":{"type":"string","description":"The channel that was classified.","isRequired":true,"uniqueKey":"data.slackChannelId","typeLabel":"string"},"kind":{"type":"string","enum":["internal","client"],"description":"What it was classified as.","isRequired":true,"uniqueKey":"data.kind","typeLabel":"enum\u003cstring>"},"clientSlug":{"oneOf":[{"type":"string","description":"The Client, on a `client` classification. Null on `internal`.","isRequired":true,"uniqueKey":"data.clientSlug.oneOf.0","typeLabel":"string"},{"type":"null","description":"The Client, on a `client` classification. Null on `internal`.","isRequired":true,"uniqueKey":"data.clientSlug.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.clientSlug","typeLabel":"string | null"},"activation":{"oneOf":[{"type":"string","description":"What became of that Client's ework. Null on `internal`, which activates nothing.","isRequired":true,"uniqueKey":"data.activation.oneOf.0","typeLabel":"string"},{"type":"null","description":"What became of that Client's ework. Null on `internal`, which activates nothing.","isRequired":true,"uniqueKey":"data.activation.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.activation","typeLabel":"string | null"}},"required":["workerId","slackChannelId","kind","clientSlug","activation"],"additionalProperties":false,"isRequired":true,"uniqueKey":"data","typeLabel":"object"}},"required":["data"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"example":{"data":{"workerId":"8f1c2d3e-9a4b-4c5d-8e6f-1a2b3c4d5e6f","slackChannelId":"C0A1B2C3D4E","kind":"internal","clientSlug":null,"activation":null}},"examples":{"Example":{"title":"Example","value":{"data":{"workerId":"8f1c2d3e-9a4b-4c5d-8e6f-1a2b3c4d5e6f","slackChannelId":"C0A1B2C3D4E","kind":"internal","clientSlug":null,"activation":null}}}},"exampleType":"examples"}},"exampleType":"examples"},"91a18aae-cb84-44d9-8f2e-235d5380a4ef":{"description":"Success.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"workerId":{"type":"string","description":"The Worker.","isRequired":true,"uniqueKey":"data.workerId","typeLabel":"string"},"slackChannelId":{"type":"string","description":"The channel that was classified.","isRequired":true,"uniqueKey":"data.slackChannelId","typeLabel":"string"},"kind":{"type":"string","enum":["internal","client"],"description":"What it was classified as.","isRequired":true,"uniqueKey":"data.kind","typeLabel":"enum\u003cstring>"},"clientSlug":{"oneOf":[{"type":"string","description":"The Client, on a `client` classification. Null on `internal`.","isRequired":true,"uniqueKey":"data.clientSlug.oneOf.0","typeLabel":"string"},{"type":"null","description":"The Client, on a `client` classification. Null on `internal`.","isRequired":true,"uniqueKey":"data.clientSlug.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.clientSlug","typeLabel":"string | null"},"activation":{"oneOf":[{"type":"string","description":"What became of that Client's ework. Null on `internal`, which activates nothing.","isRequired":true,"uniqueKey":"data.activation.oneOf.0","typeLabel":"string"},{"type":"null","description":"What became of that Client's ework. Null on `internal`, which activates nothing.","isRequired":true,"uniqueKey":"data.activation.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.activation","typeLabel":"string | null"}},"required":["workerId","slackChannelId","kind","clientSlug","activation"],"additionalProperties":false,"isRequired":true,"uniqueKey":"data","typeLabel":"object"}},"required":["data"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"example":{"data":{"workerId":"8f1c2d3e-9a4b-4c5d-8e6f-1a2b3c4d5e6f","slackChannelId":"C0A1B2C3D4E","kind":"client","clientSlug":"acme","activation":"succeeded"}},"examples":{"Example":{"title":"Example","value":{"data":{"workerId":"8f1c2d3e-9a4b-4c5d-8e6f-1a2b3c4d5e6f","slackChannelId":"C0A1B2C3D4E","kind":"client","clientSlug":"acme","activation":"succeeded"}}}},"exampleType":"examples"}},"exampleType":"examples"},"d84b81d5-2c69-47bc-b080-0ea53f73a774":{"description":"`invalid_request`","content":{"application/json":{"schema":{"type":"object","description":"The one error shape. Every refusal in this namespace has it.","properties":{"error":{"type":"object","description":"The refusal.","properties":{"code":{"type":"string","enum":["unauthorized","not_found","invalid_request","conflict","quota_exceeded","rate_limited","upstream_error","gone"],"description":"The machine-stable half. Branch on this, never on `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Prose for a human reading a terminal.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"docs":{"type":"string","description":"Where to learn how to authenticate. Present on `unauthorized` and on nothing else — it is the one refusal a caller can reach with no credential at all, so it is the one that has to say where the way in is.","uniqueKey":"error.docs","typeLabel":"string"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"unauthorized","message":"\u003cstring>","docs":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"4f3f1d6e-a28d-450f-b846-8800700caf7f":{"description":"`unauthorized`","content":{"application/json":{"schema":{"type":"object","description":"The one error shape. Every refusal in this namespace has it.","properties":{"error":{"type":"object","description":"The refusal.","properties":{"code":{"type":"string","enum":["unauthorized","not_found","invalid_request","conflict","quota_exceeded","rate_limited","upstream_error","gone"],"description":"The machine-stable half. Branch on this, never on `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Prose for a human reading a terminal.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"docs":{"type":"string","description":"Where to learn how to authenticate. Present on `unauthorized` and on nothing else — it is the one refusal a caller can reach with no credential at all, so it is the one that has to say where the way in is.","uniqueKey":"error.docs","typeLabel":"string"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"unauthorized","message":"\u003cstring>","docs":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"db1e2890-021a-4378-bcf6-99b37167a1db":{"description":"`not_found`","content":{"application/json":{"schema":{"type":"object","description":"The one error shape. Every refusal in this namespace has it.","properties":{"error":{"type":"object","description":"The refusal.","properties":{"code":{"type":"string","enum":["unauthorized","not_found","invalid_request","conflict","quota_exceeded","rate_limited","upstream_error","gone"],"description":"The machine-stable half. Branch on this, never on `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Prose for a human reading a terminal.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"docs":{"type":"string","description":"Where to learn how to authenticate. Present on `unauthorized` and on nothing else — it is the one refusal a caller can reach with no credential at all, so it is the one that has to say where the way in is.","uniqueKey":"error.docs","typeLabel":"string"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"unauthorized","message":"\u003cstring>","docs":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"05ec0119-38e5-4d92-a73b-199dbacf38ae":{"description":"`conflict`","content":{"application/json":{"schema":{"type":"object","description":"The one error shape. Every refusal in this namespace has it.","properties":{"error":{"type":"object","description":"The refusal.","properties":{"code":{"type":"string","enum":["unauthorized","not_found","invalid_request","conflict","quota_exceeded","rate_limited","upstream_error","gone"],"description":"The machine-stable half. Branch on this, never on `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Prose for a human reading a terminal.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"docs":{"type":"string","description":"Where to learn how to authenticate. Present on `unauthorized` and on nothing else — it is the one refusal a caller can reach with no credential at all, so it is the one that has to say where the way in is.","uniqueKey":"error.docs","typeLabel":"string"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"unauthorized","message":"\u003cstring>","docs":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"29175007-da30-48a2-b4c7-a6c14f0955f3":{"description":"`quota_exceeded`, `rate_limited`","content":{"application/json":{"schema":{"type":"object","description":"A `quota_exceeded` body. `Retry-After` carries the same wait as a header.","properties":{"error":{"type":"object","description":"The refusal, with the numbers a caller needs to back off correctly.","properties":{"code":{"type":"string","enum":["quota_exceeded"],"description":"Always `quota_exceeded`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Prose for a human reading a terminal.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"limit":{"type":"integer","description":"The ceiling that was hit, in provisioning runs per rolling day.","isRequired":true,"uniqueKey":"error.limit","typeLabel":"integer"},"resetsAt":{"type":"string","format":"date-time","description":"When the oldest counted run falls out of the window. A lower bound — retry then and you may get a fresher answer.","isRequired":true,"uniqueKey":"error.resetsAt","typeLabel":"string\u003cdate-time>"}},"required":["code","message","limit","resetsAt"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"quota_exceeded","message":"\u003cstring>","limit":123,"resetsAt":"2023-11-07T05:31:56Z"}}}},"exampleType":"generated"}},"exampleType":"generated"},"0ee3ef09-fa94-4475-86a3-d27d0f589b1e":{"description":"`upstream_error`","content":{"application/json":{"schema":{"type":"object","description":"The one error shape. Every refusal in this namespace has it.","properties":{"error":{"type":"object","description":"The refusal.","properties":{"code":{"type":"string","enum":["unauthorized","not_found","invalid_request","conflict","quota_exceeded","rate_limited","upstream_error","gone"],"description":"The machine-stable half. Branch on this, never on `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Prose for a human reading a terminal.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"docs":{"type":"string","description":"Where to learn how to authenticate. Present on `unauthorized` and on nothing else — it is the one refusal a caller can reach with no credential at all, so it is the one that has to say where the way in is.","uniqueKey":"error.docs","typeLabel":"string"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"unauthorized","message":"\u003cstring>","docs":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"d199234e-befa-48aa-bb26-fd1b2a620b90":{"orgApiKey":{"type":"http","scheme":"bearer","description":"An organization-scoped API key, minted in control under Settings → API keys. Every failure to authenticate answers one identical 401: \"Provide a valid organization-scoped API key or an active session.\" Each operation names the one scope it is filed under, `\u003cresource>:\u003cread|write>`, where the resource is the first path segment after `/api/v1/`; a key minted today carries all 22 of them. Scopes are RECORDED — on the key and on every audit row — and are not yet enforced: no request is refused for want of one.","scopes":["workers:write"],"schemeName":"orgApiKey"}}},"servers":{"15355b2c-94fb-418f-acf2-2e27904062bb":{"url":"https://control.ergoly.ai"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"An organization-scoped API key, minted in control under Settings → API keys. Every failure to authenticate answers one identical 401: \"Provide a valid organization-scoped API key or an active session.\" Each operation names the one scope it is filed under, `\u003cresource>:\u003cread|write>`, where the resource is the first path segment after `/api/v1/`; a key minted today carries all 22 of them. Scopes are RECORDED — on the key and on every audit row — and are not yet enforced: no request is refused for want of one.","scopes":["workers:write"],"schemeName":"orgApiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"An organization-scoped API key, minted in control under Settings → API keys. Every failure to authenticate answers one identical 401: \"Provide a valid organization-scoped API key or an active session.\" Each operation names the one scope it is filed under, `\u003cresource>:\u003cread|write>`, where the resource is the first path segment after `/api/v1/`; a key minted today carries all 22 of them. Scopes are RECORDED — on the key and on every audit row — and are not yet enforced: no request is refused for want of one.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"orgApiKey","name":"Authorization"}],"title":"orgApiKey"}]},"originalFileLocation":"openapi.json"},"subdomain":"ergoly","siteName":"Ergoly","title":"Classify a channel - Ergoly","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-09T02:24:48.718Z","originalFileLocation":"api-reference/channels/classify-a-channel.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=\"internal writes a mapping row with a null client and routes the room to the Worker\u0026#x27;s existing core ework — nothing is minted, and it answers 200, because the row is the whole of the change. client binds the room and brings up that pair\u0026#x27;s ework, so it answers 202 and the agent may still be coming up behind it. Use this rather than a delete to mark a room internal: an unmapped room routes nowhere, which is a different thing. A client classification brings up that Client\u0026#x27;s ework and spends one of your organization\u0026#x27;s daily provisioning slots. An internal classification mints nothing and spends none.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Ergoly\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ergoly/OjkmtN-S1YevUC4M/_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/ergoly/OjkmtN-S1YevUC4M/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ergoly/OjkmtN-S1YevUC4M/_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/ergoly/OjkmtN-S1YevUC4M/_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/ergoly/OjkmtN-S1YevUC4M/_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/ergoly/OjkmtN-S1YevUC4M/_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/ergoly/OjkmtN-S1YevUC4M/_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/ergoly/OjkmtN-S1YevUC4M/_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/ergoly/OjkmtN-S1YevUC4M/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Classify a channel - Ergoly\">\u003cmeta data-mint-head property=\"og:description\" content=\"internal writes a mapping row with a null client and routes the room to the Worker\u0026#x27;s existing core ework — nothing is minted, and it answers 200, because the row is the whole of the change. client binds the room and brings up that pair\u0026#x27;s ework, so it answers 202 and the agent may still be coming up behind it. Use this rather than a delete to mark a room internal: an unmapped room routes nowhere, which is a different thing. A client classification brings up that Client\u0026#x27;s ework and spends one of your organization\u0026#x27;s daily provisioning slots. An internal classification mints nothing and spends none.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Ergoly\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.ergoly.ai/api-reference/channels/classify-a-channel\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://ergoly.mintlify.site/_mintlify/api/og/v2?division=Channel+mappings\u0026amp;title=Classify+a+channel\u0026amp;description=%60internal%60+writes+a+mapping+row+with+a+null+client+and+routes+the+room+to+the+Worker%27s+existing+core+ework+%E2%80%94+nothing+is+minted%2C+and+it+answers+**200**%2C+because+\u0026amp;theme=46f41713e7d152b6296bdf32\u0026amp;signature=a5b17e230dae80288f5f3358bfa96a1f4cf924a2fdc0ad35717e943f7b84c0b3\">\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=\"Classify a channel - Ergoly\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"internal writes a mapping row with a null client and routes the room to the Worker\u0026#x27;s existing core ework — nothing is minted, and it answers 200, because the row is the whole of the change. client binds the room and brings up that pair\u0026#x27;s ework, so it answers 202 and the agent may still be coming up behind it. Use this rather than a delete to mark a room internal: an unmapped room routes nowhere, which is a different thing. A client classification brings up that Client\u0026#x27;s ework and spends one of your organization\u0026#x27;s daily provisioning slots. An internal classification mints nothing and spends none.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ergoly.mintlify.site/_mintlify/api/og/v2?division=Channel+mappings\u0026amp;title=Classify+a+channel\u0026amp;description=%60internal%60+writes+a+mapping+row+with+a+null+client+and+routes+the+room+to+the+Worker%27s+existing+core+ework+%E2%80%94+nothing+is+minted%2C+and+it+answers+**200**%2C+because+\u0026amp;theme=46f41713e7d152b6296bdf32\u0026amp;signature=a5b17e230dae80288f5f3358bfa96a1f4cf924a2fdc0ad35717e943f7b84c0b3\">\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/ergoly/OjkmtN-S1YevUC4M/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Ergoly\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#079b9b\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.ergoly.ai/api-reference/channels/classify-a-channel\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/channels/classify-a-channel.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.ergoly.ai/#organization\",\"name\":\"Ergoly\",\"url\":\"https://docs.ergoly.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/ergoly/-drdYd6uXChmiNIn/logo/light.png?fit=max\u0026auto=format\u0026n=-drdYd6uXChmiNIn\u0026q=85\u0026s=a9084e9caaf8656a821bf02426e31c05\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.ergoly.ai#website\",\"name\":\"Ergoly\",\"url\":\"https://docs.ergoly.ai\",\"publisher\":{\"@id\":\"https://docs.ergoly.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.ergoly.ai/api-reference/channels/classify-a-channel#webpage\",\"url\":\"https://docs.ergoly.ai/api-reference/channels/classify-a-channel\",\"name\":\"Classify a channel\",\"description\":\"internal writes a mapping row with a null client and routes the room to the Worker's existing core ework — nothing is minted, and it answers 200, because the row is the whole of the change. client binds the room and brings up that pair's ework, so it answers 202 and the agent may still be coming up behind it. Use this rather than a delete to mark a room internal: an unmapped room routes nowhere, which is a different thing. A client classification brings up that Client's ework and spends one of your organization's daily provisioning slots. An internal classification mints nothing and spends none.\",\"dateModified\":\"2026-11-09T02:24:48.718Z\",\"isPartOf\":{\"@id\":\"https://docs.ergoly.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.ergoly.ai/api-reference/channels/classify-a-channel#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.ergoly.ai/api-reference/channels/classify-a-channel#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Channels\",\"item\":\"https://docs.ergoly.ai/api-reference/channels/list-slack-channels\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Channel mappings\",\"item\":\"https://docs.ergoly.ai/api-reference/channels/list-channel-mappings\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Classify a channel\",\"item\":\"https://docs.ergoly.ai/api-reference/channels/classify-a-channel\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.ergoly.ai/api-reference/channels/classify-a-channel#apireference\",\"headline\":\"Classify a channel\",\"name\":\"Classify a channel\",\"description\":\"internal writes a mapping row with a null client and routes the room to the Worker's existing core ework — nothing is minted, and it answers 200, because the row is the whole of the change. client binds the room and brings up that pair's ework, so it answers 202 and the agent may still be coming up behind it. Use this rather than a delete to mark a room internal: an unmapped room routes nowhere, which is a different thing. A client classification brings up that Client's ework and spends one of your organization's daily provisioning slots. An internal classification mints nothing and spends none.\",\"url\":\"https://docs.ergoly.ai/api-reference/channels/classify-a-channel\",\"mainEntityOfPage\":{\"@id\":\"https://docs.ergoly.ai/api-reference/channels/classify-a-channel#webpage\"},\"dateModified\":\"2026-11-09T02:24:48.718Z\",\"publisher\":{\"@id\":\"https://docs.ergoly.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.ergoly.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Ergoly\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Ergoly","nav":{"global":null,"tabs":[{"tab":"Docs","icon":"book-open","pages":[{"title":"Docs","href":""}]},{"tab":"Changelog","icon":"sparkles","pages":[{"title":"Changelog","href":"/changelog"}]},{"tab":"API","icon":"user-robot","groups":[{"group":"Getting started","pages":[{"title":"Introduction","href":"/api-reference/introduction"},{"title":"The API","href":"/technical/api"}]},{"group":"Company","pages":[{"title":"Get your company","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/organization","href":"/api-reference/organization/get-your-company"},{"title":"List chart placements","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/company/placements","href":"/api-reference/workers/list-chart-placements"},{"title":"Get the activity feed","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/activity","href":"/api-reference/activity/get-the-activity-feed"},{"title":"Get usage","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/usage","href":"/api-reference/usage/get-usage"}]},{"group":"Workers","pages":[{"title":"List workers","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/workers","href":"/api-reference/workers/list-workers"},{"title":"Create a worker","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/workers","href":"/api-reference/workers/create-a-worker"},{"title":"Get the current worker","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/workers/me","href":"/api-reference/workers/get-the-current-worker"},{"title":"Get a worker","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/workers/{id}","href":"/api-reference/workers/get-a-worker"},{"title":"Update a worker","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/workers/{id}","href":"/api-reference/workers/update-a-worker"},{"title":"Delete a worker","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/workers/{id}","href":"/api-reference/workers/delete-a-worker"},{"group":"Provisioning","pages":[{"title":"Retry provisioning","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/workers/{id}/retry","href":"/api-reference/workers/retry-provisioning"},{"title":"Stop a worker","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/workers/{id}/stop","href":"/api-reference/workers/stop-a-worker"},{"title":"Get a provisioning job","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/jobs/{id}","href":"/api-reference/jobs/get-a-provisioning-job"}]},{"group":"Copies (eworks)","pages":[{"title":"List a worker's copies","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/workers/{id}/eworks","href":"/api-reference/eworks/list-a-workers-copies"},{"title":"Get a copy","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/eworks/{id}","href":"/api-reference/eworks/get-a-copy"}]},{"group":"Memory","pages":[{"title":"Read a memory tier","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/eworks/{id}/memory","href":"/api-reference/memory/read-a-memory-tier"},{"title":"Write a file","deprecated":null,"version":null,"openapi":"/openapi.json put /api/v1/eworks/{id}/memory","href":"/api-reference/memory/write-a-file"},{"title":"Write several files","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/eworks/{id}/memory","href":"/api-reference/memory/write-several-files"},{"title":"Delete a file or folder","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/eworks/{id}/memory","href":"/api-reference/memory/delete-a-file-or-folder"}]}]},{"group":"Clients","pages":[{"title":"List clients","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/clients","href":"/api-reference/clients/list-clients"},{"title":"Create a client","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/clients","href":"/api-reference/clients/create-a-client"},{"title":"Get a client","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/clients/{id}","href":"/api-reference/clients/get-a-client"},{"title":"Update a client","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/clients/{id}","href":"/api-reference/clients/update-a-client"},{"title":"Assign a client to a worker","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/workers/{id}/clients","href":"/api-reference/clients/assign-a-client-to-a-worker"}]},{"group":"Channels","pages":[{"title":"List Slack channels","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/channels","href":"/api-reference/channels/list-slack-channels"},{"title":"Create a Slack channel","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/channels","href":"/api-reference/channels/create-a-slack-channel"},{"group":"Channel mappings","pages":[{"title":"List channel mappings","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/workers/{id}/channels","href":"/api-reference/channels/list-channel-mappings"},{"title":"Map a channel","description":"The bot joins the channel and its traffic routes to that Client's ework. Moving a channel already mapped to a different Client needs `confirm: true`, without which it is a `conflict`. A DM id (`D…`) is refused: a direct message routes by who is in it.\n\n**Mapping a channel brings up that Client's ework if it is not already running. It costs money and spends one of your organization's daily provisioning slots.**","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/workers/{id}/channels","href":"/api-reference/channels/map-a-channel"},{"title":"Classify a channel","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/workers/{id}/channels/{channel}","href":"/api-reference/channels/classify-a-channel"},{"title":"Unmap a channel","description":"Removes the routing row and asks the bot to leave the room. `leftSlack` says whether Slack accepted that; a refusal there does not fail the call, because the routing decision is the durable half and it has already landed. To mark a room internal instead, classify it — an unmapped room routes nowhere.\n\n**The Worker stops answering in that channel. Nothing that was said there is lost, but the room is no longer routed to anybody.**","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/workers/{id}/channels/{channel}","href":"/api-reference/channels/unmap-a-channel"},{"title":"Invite a worker to a channel","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/workers/{id}/channels/{channel}/invite","href":"/api-reference/channels/invite-a-worker-to-a-channel"}]}]},{"group":"Tasks","pages":[{"title":"List tasks","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/tasks","href":"/api-reference/tasks/list-tasks"},{"title":"Create a task","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/tasks","href":"/api-reference/tasks/create-a-task"},{"title":"Get a task","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/tasks/{id}","href":"/api-reference/tasks/get-a-task"},{"title":"Hand off a task","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/tasks/{id}/handoff","href":"/api-reference/tasks/hand-off-a-task"},{"title":"Comment on a task","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/tasks/{id}/comments","href":"/api-reference/tasks/comment-on-a-task"},{"title":"Change a task's state","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/tasks/{id}/state","href":"/api-reference/tasks/change-a-tasks-state"},{"group":"Scheduled jobs (routines)","pages":[{"title":"Update a scheduled job","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/tasks/{id}","href":"/api-reference/tasks/update-a-scheduled-job"},{"title":"Cancel a scheduled job","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/tasks/{id}","href":"/api-reference/tasks/cancel-a-scheduled-job"},{"title":"List a job's runs","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/tasks/{id}/runs","href":"/api-reference/tasks/list-a-jobs-runs"},{"title":"Add a target","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/tasks/{id}/targets","href":"/api-reference/tasks/add-a-target"},{"title":"Remove a target","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/tasks/{id}/targets/{targetId}","href":"/api-reference/tasks/remove-a-target"}]}]},{"group":"Webhooks","pages":[{"title":"List webhooks","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/webhooks","href":"/api-reference/webhooks/list-webhooks"},{"title":"Create a webhook","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/webhooks","href":"/api-reference/webhooks/create-a-webhook"},{"title":"Get a webhook","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/webhooks/{id}","href":"/api-reference/webhooks/get-a-webhook"},{"title":"Update a webhook","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/webhooks/{id}","href":"/api-reference/webhooks/update-a-webhook"},{"title":"Revoke a webhook","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/webhooks/{id}","href":"/api-reference/webhooks/revoke-a-webhook"},{"title":"Rotate a webhook secret","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/webhooks/{id}/rotate","href":"/api-reference/webhooks/rotate-a-webhook-secret"},{"title":"List deliveries","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/webhooks/{id}/deliveries","href":"/api-reference/webhooks/list-deliveries"}]},{"group":"Connections","pages":[{"title":"List connections","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/connections","href":"/api-reference/connections/list-connections"},{"title":"Create a connection","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/connections","href":"/api-reference/connections/create-a-connection"},{"title":"Get a connection","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/connections/{id}","href":"/api-reference/connections/get-a-connection"},{"title":"Update a connection","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/connections/{id}","href":"/api-reference/connections/update-a-connection"},{"title":"Delete a connection","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/connections/{id}","href":"/api-reference/connections/delete-a-connection"},{"title":"Rotate a connection","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/connections/{id}/rotate","href":"/api-reference/connections/rotate-a-connection"},{"group":"Hosts","pages":[{"title":"List hosts","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/connections/{id}/hosts","href":"/api-reference/connections/list-hosts"},{"title":"Add a host","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/connections/{id}/hosts","href":"/api-reference/connections/add-a-host"},{"title":"Remove a host","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/connections/{id}/hosts/{host}","href":"/api-reference/connections/remove-a-host"}]},{"group":"Connected apps","pages":[{"title":"Get a connect URL","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/connections/oauth/{provider}/connect-url","href":"/api-reference/connections/get-a-connect-url"},{"title":"Get a sign-in link","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/connections/{id}/connect-url","href":"/api-reference/connections/get-a-sign-in-link"},{"title":"Add a placement","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/connections/{id}/placements","href":"/api-reference/connections/add-a-placement"},{"title":"Remove a placement","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/connections/{id}/placements/{pid}","href":"/api-reference/connections/remove-a-placement"}]},{"group":"MCP servers","pages":[{"title":"Connect an MCP server","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/connections/mcp","href":"/api-reference/connections/connect-an-mcp-server"},{"title":"Finish an MCP connection","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/connections/mcp/{id}/finish","href":"/api-reference/connections/finish-an-mcp-connection"}]},{"group":"Provider apps","pages":[{"title":"Get a provider app","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/connections/provider-apps/{provider}","href":"/api-reference/connections/get-a-provider-app"},{"title":"Set a provider app","deprecated":null,"version":null,"openapi":"/openapi.json put /api/v1/connections/provider-apps/{provider}","href":"/api-reference/connections/set-a-provider-app"},{"title":"Delete a provider app","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/connections/provider-apps/{provider}","href":"/api-reference/connections/delete-a-provider-app"}]},{"group":"Your own OAuth client","pages":[{"title":"Get your OAuth client","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/oauth-apps/{app}","href":"/api-reference/connections/get-your-oauth-client"},{"title":"Set your OAuth client","deprecated":null,"version":null,"openapi":"/openapi.json put /api/v1/oauth-apps/{app}","href":"/api-reference/connections/set-your-oauth-client"},{"title":"Delete your OAuth client","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/oauth-apps/{app}","href":"/api-reference/connections/delete-your-oauth-client"}]}]}]}]},"basePath":"","title":"Classify a channel - Ergoly","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["10e4515597","c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["BannerMarkdown-Cj6eAYhz.js","dist-CdrJecqK.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-D-TRO5q5.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","OpenApiReferenceProvider-5FCzAcfS.js","utils-SLtAG4EZ.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-2DZi8ZMu.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-D7J3nkzE.js","snippetPresets-D0Alv0AH.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BI4qNJ2c.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BD3uyr8j.js","shallow-D8iEBr5z.js","getApiPlaygroundDisplay-CgNP4lzR.js","CodeSnippet-CX-QHuMs.js","CodeSnippets-VlXE-ZUf.js","Page-D9ithiIZ.js","getPastedJson-DYNQkZ1M.js","icon-CzacdwOi.js","MethodPill-2JVqoYKi.js","DuplicateIcon-_xVXs-U8.js","createIcon-BRHrweLo.js","DynamicMarkdown-mQG_iQiE.js","SectionHeading-DMpJzv8f.js","axios-vUo_bRtp.js","Markdown-5FGIym-8.js","AssistantPageLink-CHlcWBLM.js"]}