Everything the Connections page shows for it, in whichever of the two shapes the id names: a stored secret’s scope, hosts and connection state by type; or a connected app’s app, status and placements. Nothing it does not: no stored value, no client secret, in any form. A well-formed id belonging to another organization is the same 404 as a malformed one, whichever store it lives in.
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/connections/get-a-connection","slug":"/api-reference/connections/get-a-connection","pageMetadata":{"title":"Get a connection","description":"Everything the Connections page shows for it, in whichever of the two shapes the id names: a stored secret's scope, hosts and connection state by `type`; or a connected app's `app`, `status` and `placements`. Nothing it does not: no stored value, no client secret, in any form. A well-formed id belonging to another organization is the same 404 as a malformed one, whichever store it lives in.","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/connections/{id}","href":"/api-reference/connections/get-a-connection","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Everything the Connections page shows for it, in whichever of the two shapes the id names: a stored secret’s scope, hosts and connection state by \", _jsx(_components.code, {\n children: \"type\"\n }), \"; or a connected app’s \", _jsx(_components.code, {\n children: \"app\"\n }), \", \", _jsx(_components.code, {\n children: \"status\"\n }), \" and \", _jsx(_components.code, {\n children: \"placements\"\n }), \". Nothing it does not: no stored value, no client secret, in any form. A well-formed id belonging to another organization is the same 404 as a malformed one, whichever store it lives in.\"]\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":"Get a connection","description":"Everything the Connections page shows for it, in whichever of the two shapes the id names: a stored secret's scope, hosts and connection state by `type`; or a connected app's `app`, `status` and `placements`. Nothing it does not: no stored value, no client secret, in any form. A well-formed id belonging to another organization is the same 404 as a malformed one, whichever store it lives in.","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/connections/{id}","href":"/api-reference/connections/get-a-connection","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"getConnection","summary":"Get a connection","description":"Everything the Connections page shows for it, in whichever of the two shapes the id names: a stored secret's scope, hosts and connection state by `type`; or a connected app's `app`, `status` and `placements`. Nothing it does not: no stored value, no client secret, in any form. A well-formed id belonging to another organization is the same 404 as a malformed one, whichever store it lives in.","tags":["connections"],"security":["46c93119-235f-4f18-ab12-636f3ccfbac4"],"parameters":["542205da-9f9d-4260-a3f9-594a54b19e69"],"responses":{"200":"d00b2908-f239-46e2-bc55-9848e7582d55","401":"23e952e5-b184-46ca-b987-4d10589ed346","404":"44b5f7c7-4a04-464a-9fb6-2809dc3801d4","429":"2a19f0f9-cb18-40f1-9626-9df906b6ae23"},"method":"get","type":"path","servers":["15355b2c-94fb-418f-acf2-2e27904062bb"],"path":"/api/v1/connections/{id}","baseUrlOptions":["https://control.ergoly.ai"],"title":"Get a connection","codeSamples":[],"requestExampleLanguages":["bash","javascript","python"],"requiredOnlyExamples":true,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"542205da-9f9d-4260-a3f9-594a54b19e69":{"name":"id","in":"path","required":true,"description":"The connection to read. A malformed id answers 404, exactly as another organization's well-formed id does.","schema":{"type":"string","description":"The connection to read. A malformed id answers 404, exactly as another organization's well-formed id does.","isRequired":true,"uniqueKey":"","typeLabel":"string"}}},"responses":{"d00b2908-f239-46e2-bc55-9848e7582d55":{"description":"Success.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","required":["id","key","kind","type","scope","workerId","clientId","internalOnly","managed","hosts","description","provider","account","providerScopes","expiresAt","health","issuer","issuerHost","mcpEndpoint","mcpTransport","mcpTools","mcpStatus","mcpServerName","providerClientId","redirectUri","createdAt","updatedAt"],"properties":{"id":{"type":"string","description":"The connection's id.","isRequired":true,"uniqueKey":"data.oneOf.0.id","typeLabel":"string"},"key":{"type":"string","description":"The slug the agent and the egress gateway know it by.","isRequired":true,"uniqueKey":"data.oneOf.0.key","typeLabel":"string"},"kind":{"type":"string","description":"`api_key`, `secret`, `basic`, `oauth` or `oauth-app`.","isRequired":true,"uniqueKey":"data.oneOf.0.kind","typeLabel":"string"},"type":{"type":"string","enum":["secret","oauth","provider-app","mcp"],"description":"Which family this is. Decides which of the state fields below are set.","isRequired":true,"uniqueKey":"data.oneOf.0.type","typeLabel":"enum\u003cstring>"},"scope":{"type":"string","enum":["org","worker","client"],"description":"Which identities resolve it. Most specific wins: client, then worker, then org.","isRequired":true,"uniqueKey":"data.oneOf.0.scope","typeLabel":"enum\u003cstring>"},"workerId":{"oneOf":[{"type":"string","description":"The Worker it is scoped to, when `scope` is `worker`.","isRequired":true,"uniqueKey":"data.oneOf.0.workerId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The Worker it is scoped to, when `scope` is `worker`.","isRequired":true,"uniqueKey":"data.oneOf.0.workerId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.0.workerId","typeLabel":"string | null"},"clientId":{"oneOf":[{"type":"string","description":"The Client it is scoped to, when `scope` is `client`.","isRequired":true,"uniqueKey":"data.oneOf.0.clientId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The Client it is scoped to, when `scope` is `client`.","isRequired":true,"uniqueKey":"data.oneOf.0.clientId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.0.clientId","typeLabel":"string | null"},"internalOnly":{"type":"boolean","description":"Hidden from client-tier eworks. Never true on a client-scoped connection.","isRequired":true,"uniqueKey":"data.oneOf.0.internalOnly","typeLabel":"boolean"},"managed":{"type":"boolean","description":"System-managed. Readable, never modifiable.","isRequired":true,"uniqueKey":"data.oneOf.0.managed","typeLabel":"boolean"},"hosts":{"type":"array","items":{"type":"string","description":"A hostname.","uniqueKey":"data.oneOf.0.hosts.items.[INDEX]","typeLabel":"string"},"description":"Hostnames the egress gateway injects this credential on. A connection with no host is never injected.","isRequired":true,"uniqueKey":"data.oneOf.0.hosts","typeLabel":"string[]"},"description":{"oneOf":[{"type":"string","description":"What this connection is for, in an operator's own words. Carried to a worker in the per-turn connections index, where it is the only thing that can say a connection named `lemlist` is how LinkedIn outreach gets done. Null when nobody wrote one.","isRequired":true,"uniqueKey":"data.oneOf.0.description.oneOf.0","typeLabel":"string"},{"type":"null","description":"What this connection is for, in an operator's own words. Carried to a worker in the per-turn connections index, where it is the only thing that can say a connection named `lemlist` is how LinkedIn outreach gets done. Null when nobody wrote one.","isRequired":true,"uniqueKey":"data.oneOf.0.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.0.description","typeLabel":"string | null"},"provider":{"oneOf":[{"type":"string","description":"Provider id, for an OAuth account, provider app or MCP server.","isRequired":true,"uniqueKey":"data.oneOf.0.provider.oneOf.0","typeLabel":"string"},{"type":"null","description":"Provider id, for an OAuth account, provider app or MCP server.","isRequired":true,"uniqueKey":"data.oneOf.0.provider.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.0.provider","typeLabel":"string | null"},"account":{"oneOf":[{"type":"string","description":"The connected account's label, as the provider reported it.","isRequired":true,"uniqueKey":"data.oneOf.0.account.oneOf.0","typeLabel":"string"},{"type":"null","description":"The connected account's label, as the provider reported it.","isRequired":true,"uniqueKey":"data.oneOf.0.account.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.0.account","typeLabel":"string | null"},"providerScopes":{"type":"array","items":{"type":"string","description":"A scope.","uniqueKey":"data.oneOf.0.providerScopes.items.[INDEX]","typeLabel":"string"},"description":"OAuth scopes the provider granted.","isRequired":true,"uniqueKey":"data.oneOf.0.providerScopes","typeLabel":"string[]"},"expiresAt":{"oneOf":[{"type":"string","format":"date-time","description":"When the access token expires, if the provider said.","isRequired":true,"uniqueKey":"data.oneOf.0.expiresAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the access token expires, if the provider said.","isRequired":true,"uniqueKey":"data.oneOf.0.expiresAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.0.expiresAt","typeLabel":"string\u003cdate-time> | null"},"health":{"oneOf":[{"type":"string","description":"`healthy`, `expiring`, `expired` or `unknown`.","isRequired":true,"uniqueKey":"data.oneOf.0.health.oneOf.0","typeLabel":"string"},{"type":"null","description":"`healthy`, `expiring`, `expired` or `unknown`.","isRequired":true,"uniqueKey":"data.oneOf.0.health.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.0.health","typeLabel":"string | null"},"issuer":{"oneOf":[{"type":"string","description":"An MCP server's canonical identity.","isRequired":true,"uniqueKey":"data.oneOf.0.issuer.oneOf.0","typeLabel":"string"},{"type":"null","description":"An MCP server's canonical identity.","isRequired":true,"uniqueKey":"data.oneOf.0.issuer.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.0.issuer","typeLabel":"string | null"},"issuerHost":{"oneOf":[{"type":"string","description":"That issuer's host — what an operator recognises.","isRequired":true,"uniqueKey":"data.oneOf.0.issuerHost.oneOf.0","typeLabel":"string"},{"type":"null","description":"That issuer's host — what an operator recognises.","isRequired":true,"uniqueKey":"data.oneOf.0.issuerHost.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.0.issuerHost","typeLabel":"string | null"},"mcpEndpoint":{"oneOf":[{"type":"string","description":"Where the agent POSTs MCP calls.","isRequired":true,"uniqueKey":"data.oneOf.0.mcpEndpoint.oneOf.0","typeLabel":"string"},{"type":"null","description":"Where the agent POSTs MCP calls.","isRequired":true,"uniqueKey":"data.oneOf.0.mcpEndpoint.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.0.mcpEndpoint","typeLabel":"string | null"},"mcpTransport":{"oneOf":[{"type":"string","description":"The observed MCP transport, or `unknown`.","isRequired":true,"uniqueKey":"data.oneOf.0.mcpTransport.oneOf.0","typeLabel":"string"},{"type":"null","description":"The observed MCP transport, or `unknown`.","isRequired":true,"uniqueKey":"data.oneOf.0.mcpTransport.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.0.mcpTransport","typeLabel":"string | null"},"mcpTools":{"type":"array","items":{"type":"string","description":"A tool name.","uniqueKey":"data.oneOf.0.mcpTools.items.[INDEX]","typeLabel":"string"},"description":"Tools advertised at the last handshake.","isRequired":true,"uniqueKey":"data.oneOf.0.mcpTools","typeLabel":"string[]"},"mcpStatus":{"oneOf":[{"type":"string","description":"`ok`, `failed`, `pending`, or `needs_reconnect` — the last meaning no endpoint was ever recorded, so it cannot work until it is connected again.","isRequired":true,"uniqueKey":"data.oneOf.0.mcpStatus.oneOf.0","typeLabel":"string"},{"type":"null","description":"`ok`, `failed`, `pending`, or `needs_reconnect` — the last meaning no endpoint was ever recorded, so it cannot work until it is connected again.","isRequired":true,"uniqueKey":"data.oneOf.0.mcpStatus.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.0.mcpStatus","typeLabel":"string | null"},"mcpServerName":{"oneOf":[{"type":"string","description":"The server's own product name, when it supplied one.","isRequired":true,"uniqueKey":"data.oneOf.0.mcpServerName.oneOf.0","typeLabel":"string"},{"type":"null","description":"The server's own product name, when it supplied one.","isRequired":true,"uniqueKey":"data.oneOf.0.mcpServerName.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.0.mcpServerName","typeLabel":"string | null"},"providerClientId":{"oneOf":[{"type":"string","description":"A provider app's PUBLIC OAuth client id. Its client secret has no field here.","isRequired":true,"uniqueKey":"data.oneOf.0.providerClientId.oneOf.0","typeLabel":"string"},{"type":"null","description":"A provider app's PUBLIC OAuth client id. Its client secret has no field here.","isRequired":true,"uniqueKey":"data.oneOf.0.providerClientId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.0.providerClientId","typeLabel":"string | null"},"redirectUri":{"oneOf":[{"type":"string","description":"The redirect URI Ergoly derives for this provider.","isRequired":true,"uniqueKey":"data.oneOf.0.redirectUri.oneOf.0","typeLabel":"string"},{"type":"null","description":"The redirect URI Ergoly derives for this provider.","isRequired":true,"uniqueKey":"data.oneOf.0.redirectUri.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.0.redirectUri","typeLabel":"string | null"},"createdAt":{"type":"string","format":"date-time","description":"When it was created.","isRequired":true,"uniqueKey":"data.oneOf.0.createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","description":"When it last changed.","isRequired":true,"uniqueKey":"data.oneOf.0.updatedAt","typeLabel":"string\u003cdate-time>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"data.oneOf.0","typeLabel":"object"},{"type":"object","required":["id","app","kind","baseUrl","name","description","status","managed","placements","details","createdAt","lastUsedAt"],"properties":{"id":{"type":"string","description":"The connection's id.","isRequired":true,"uniqueKey":"data.oneOf.1.id","typeLabel":"string"},"app":{"oneOf":[{"type":"string","description":"The app's slug (`hubspot`); for a tool server, the slug it was registered under.","isRequired":true,"uniqueKey":"data.oneOf.1.app.oneOf.0","typeLabel":"string"},{"type":"null","description":"The app's slug (`hubspot`); for a tool server, the slug it was registered under.","isRequired":true,"uniqueKey":"data.oneOf.1.app.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.1.app","typeLabel":"string | null"},"kind":{"type":"string","enum":["composio","key"],"description":"`composio` — the credential is held at Composio; `key` — a raw key the egress gateway injects on `baseUrl`'s host.","isRequired":true,"uniqueKey":"data.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"baseUrl":{"oneOf":[{"type":"string","description":"A `key` connection's base URL. Null on a `composio` one.","isRequired":true,"uniqueKey":"data.oneOf.1.baseUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"A `key` connection's base URL. Null on a `composio` one.","isRequired":true,"uniqueKey":"data.oneOf.1.baseUrl.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.1.baseUrl","typeLabel":"string | null"},"name":{"type":"string","description":"What the organization calls it. Unique per kind.","isRequired":true,"uniqueKey":"data.oneOf.1.name","typeLabel":"string"},"description":{"oneOf":[{"type":"string","description":"What it is for, in an operator's own words.","isRequired":true,"uniqueKey":"data.oneOf.1.description.oneOf.0","typeLabel":"string"},{"type":"null","description":"What it is for, in an operator's own words.","isRequired":true,"uniqueKey":"data.oneOf.1.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.1.description","typeLabel":"string | null"},"status":{"type":"string","enum":["pending","active","expired","failed","revoked"],"description":"`pending` until a hosted sign-in finishes; `active` once the credential works.","isRequired":true,"uniqueKey":"data.oneOf.1.status","typeLabel":"enum\u003cstring>"},"managed":{"type":"boolean","description":"Provided by Ergoly. Readable; every change is refused.","isRequired":true,"uniqueKey":"data.oneOf.1.managed","typeLabel":"boolean"},"placements":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The placement's id. What `DELETE …/placements/{pid}` takes.","isRequired":true,"uniqueKey":"data.oneOf.1.placements.items.[INDEX].id","typeLabel":"string"},"tier":{"type":"string","enum":["org","worker","client","instance"],"description":"`org` is the whole company; `worker` one Worker; `client` one Client, on every Worker serving it; `instance` one Worker for one Client.","isRequired":true,"uniqueKey":"data.oneOf.1.placements.items.[INDEX].tier","typeLabel":"enum\u003cstring>"},"workerId":{"oneOf":[{"type":"string","description":"The Worker, on a `worker` or `instance` placement.","isRequired":true,"uniqueKey":"data.oneOf.1.placements.items.[INDEX].workerId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The Worker, on a `worker` or `instance` placement.","isRequired":true,"uniqueKey":"data.oneOf.1.placements.items.[INDEX].workerId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.1.placements.items.[INDEX].workerId","typeLabel":"string | null"},"clientId":{"oneOf":[{"type":"string","description":"The Client, on a `client` or `instance` placement.","isRequired":true,"uniqueKey":"data.oneOf.1.placements.items.[INDEX].clientId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The Client, on a `client` or `instance` placement.","isRequired":true,"uniqueKey":"data.oneOf.1.placements.items.[INDEX].clientId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.1.placements.items.[INDEX].clientId","typeLabel":"string | null"},"workerName":{"oneOf":[{"type":"string","description":"That Worker's display name, when the caller supplied a directory.","isRequired":true,"uniqueKey":"data.oneOf.1.placements.items.[INDEX].workerName.oneOf.0","typeLabel":"string"},{"type":"null","description":"That Worker's display name, when the caller supplied a directory.","isRequired":true,"uniqueKey":"data.oneOf.1.placements.items.[INDEX].workerName.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.1.placements.items.[INDEX].workerName","typeLabel":"string | null"},"clientName":{"oneOf":[{"type":"string","description":"That Client's name, when the caller supplied a directory.","isRequired":true,"uniqueKey":"data.oneOf.1.placements.items.[INDEX].clientName.oneOf.0","typeLabel":"string"},{"type":"null","description":"That Client's name, when the caller supplied a directory.","isRequired":true,"uniqueKey":"data.oneOf.1.placements.items.[INDEX].clientName.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.1.placements.items.[INDEX].clientName","typeLabel":"string | null"}},"required":["id","tier","workerId","clientId","workerName","clientName"],"additionalProperties":false,"uniqueKey":"data.oneOf.1.placements.items.[INDEX]","typeLabel":"object"},"description":"Where it may be used. A connection with none is used by nobody.","isRequired":true,"uniqueKey":"data.oneOf.1.placements","typeLabel":"object[]"},"details":{"type":"object","description":"What is known about the account behind the connection, as last checked. Never a credential.","properties":{"authKind":{"type":"string","enum":["managed_sign_in","own_app_sign_in","key","dcr","no_auth","unknown"],"description":"How it authenticates: a hosted sign-in on Composio's or Ergoly's app; a sign-in on the organization's own OAuth app; a pasted key; a sign-in a tool server registered dynamically; no credential at all; or not checked yet.","isRequired":true,"uniqueKey":"data.oneOf.1.details.authKind","typeLabel":"enum\u003cstring>"},"authKindLabel":{"type":"string","description":"`authKind`, in words.","isRequired":true,"uniqueKey":"data.oneOf.1.details.authKindLabel","typeLabel":"string"},"identity":{"oneOf":[{"type":"object","description":"The account that signed in, where the app reported one. Null when it did not.","properties":{"kind":{"type":"string","enum":["email","login","name","workspace","account"],"description":"What kind of identifier `label` is.","isRequired":true,"uniqueKey":"data.oneOf.1.details.identity.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"label":{"type":"string","description":"Who signed in, as the app reported it.","isRequired":true,"uniqueKey":"data.oneOf.1.details.identity.oneOf.0.label","typeLabel":"string"}},"required":["kind","label"],"additionalProperties":false,"isRequired":true,"uniqueKey":"data.oneOf.1.details.identity.oneOf.0","typeLabel":"object"},{"type":"null","description":"The account that signed in, where the app reported one. Null when it did not.","properties":{"kind":{"type":"string","enum":["email","login","name","workspace","account"],"description":"What kind of identifier `label` is."},"label":{"type":"string","description":"Who signed in, as the app reported it."}},"required":["kind","label"],"additionalProperties":false,"isRequired":true,"uniqueKey":"data.oneOf.1.details.identity.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.1.details.identity","typeLabel":"object | null"},"scopes":{"type":"array","items":{"type":"string","description":"A scope, as the app spells it.","uniqueKey":"data.oneOf.1.details.scopes.items.[INDEX]","typeLabel":"string"},"description":"What the app granted, where the record carried it.","isRequired":true,"uniqueKey":"data.oneOf.1.details.scopes","typeLabel":"string[]"},"composioStatus":{"oneOf":[{"type":"string","description":"Composio's own status word for the account (`ACTIVE`, `EXPIRED`, …).","isRequired":true,"uniqueKey":"data.oneOf.1.details.composioStatus.oneOf.0","typeLabel":"string"},{"type":"null","description":"Composio's own status word for the account (`ACTIVE`, `EXPIRED`, …).","isRequired":true,"uniqueKey":"data.oneOf.1.details.composioStatus.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.1.details.composioStatus","typeLabel":"string | null"},"statusReason":{"oneOf":[{"type":"string","description":"Why the status last changed, when Composio said.","isRequired":true,"uniqueKey":"data.oneOf.1.details.statusReason.oneOf.0","typeLabel":"string"},{"type":"null","description":"Why the status last changed, when Composio said.","isRequired":true,"uniqueKey":"data.oneOf.1.details.statusReason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.1.details.statusReason","typeLabel":"string | null"},"expiresAt":{"oneOf":[{"type":"string","format":"date-time","description":"When the credential expires or expired, when the app said.","isRequired":true,"uniqueKey":"data.oneOf.1.details.expiresAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the credential expires or expired, when the app said.","isRequired":true,"uniqueKey":"data.oneOf.1.details.expiresAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.1.details.expiresAt","typeLabel":"string\u003cdate-time> | null"},"checkedAt":{"oneOf":[{"type":"string","format":"date-time","description":"When these facts were last checked. Null when never.","isRequired":true,"uniqueKey":"data.oneOf.1.details.checkedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When these facts were last checked. Null when never.","isRequired":true,"uniqueKey":"data.oneOf.1.details.checkedAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.1.details.checkedAt","typeLabel":"string\u003cdate-time> | null"},"logo":{"oneOf":[{"type":"string","description":"The app's brand mark.","isRequired":true,"uniqueKey":"data.oneOf.1.details.logo.oneOf.0","typeLabel":"string"},{"type":"null","description":"The app's brand mark.","isRequired":true,"uniqueKey":"data.oneOf.1.details.logo.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.1.details.logo","typeLabel":"string | null"},"appName":{"oneOf":[{"type":"string","description":"The app's own name in the catalog.","isRequired":true,"uniqueKey":"data.oneOf.1.details.appName.oneOf.0","typeLabel":"string"},{"type":"null","description":"The app's own name in the catalog.","isRequired":true,"uniqueKey":"data.oneOf.1.details.appName.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.1.details.appName","typeLabel":"string | null"},"category":{"type":"string","description":"The one heading it is grouped under: what Composio files the app under, `MCP` for a tool server the organization registered, `Other` when nothing is known.","isRequired":true,"uniqueKey":"data.oneOf.1.details.category","typeLabel":"string"},"check":{"oneOf":[{"type":"object","description":"What the entry check of a pasted key found. Null when there was no key to check (a sign-in, a tool server that takes none) or the connection predates the record.","properties":{"verified":{"type":"boolean","description":"True only when one real call proved the key: the app accepted a test request with it and refused the same request without it.","isRequired":true,"uniqueKey":"data.oneOf.1.details.check.oneOf.0.verified","typeLabel":"boolean"},"reason":{"type":"string","enum":["key_proven","no_check_available","endpoint_accepts_anything","test_endpoint_missing","check_got_no_answer","key_rejected","test_request_forbidden","request_refused"],"description":"What the entry check got. `key_proven` is the only reason behind `verified: true`. `no_check_available`: no test exists for this kind of connection (every tool server's key). `endpoint_accepts_anything`: the app answers the same with and without the key. `test_endpoint_missing`: the app does not serve the address the test went to, a fault in the platform's test. `check_got_no_answer`: a 5xx, a rate limit or no answer at all. `test_request_forbidden`: the app knows the key but refused the test request (403), often because the test asks for more access than the key has; the key is saved unconfirmed. None of these is a rejected key — a rejected (`key_rejected`) or refused (`request_refused`) key fails the create and stores nothing, so neither appears on a listed connection.","isRequired":true,"uniqueKey":"data.oneOf.1.details.check.oneOf.0.reason","typeLabel":"enum\u003cstring>"},"at":{"type":"string","format":"date-time","description":"When the check ran.","isRequired":true,"uniqueKey":"data.oneOf.1.details.check.oneOf.0.at","typeLabel":"string\u003cdate-time>"}},"required":["verified","reason","at"],"additionalProperties":false,"isRequired":true,"uniqueKey":"data.oneOf.1.details.check.oneOf.0","typeLabel":"object"},{"type":"null","description":"What the entry check of a pasted key found. Null when there was no key to check (a sign-in, a tool server that takes none) or the connection predates the record.","properties":{"verified":{"type":"boolean","description":"True only when one real call proved the key: the app accepted a test request with it and refused the same request without it."},"reason":{"type":"string","enum":["key_proven","no_check_available","endpoint_accepts_anything","test_endpoint_missing","check_got_no_answer","key_rejected","test_request_forbidden","request_refused"],"description":"What the entry check got. `key_proven` is the only reason behind `verified: true`. `no_check_available`: no test exists for this kind of connection (every tool server's key). `endpoint_accepts_anything`: the app answers the same with and without the key. `test_endpoint_missing`: the app does not serve the address the test went to, a fault in the platform's test. `check_got_no_answer`: a 5xx, a rate limit or no answer at all. `test_request_forbidden`: the app knows the key but refused the test request (403), often because the test asks for more access than the key has; the key is saved unconfirmed. None of these is a rejected key — a rejected (`key_rejected`) or refused (`request_refused`) key fails the create and stores nothing, so neither appears on a listed connection."},"at":{"type":"string","format":"date-time","description":"When the check ran."}},"required":["verified","reason","at"],"additionalProperties":false,"isRequired":true,"uniqueKey":"data.oneOf.1.details.check.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.1.details.check","typeLabel":"object | null"}},"required":["authKind","authKindLabel","identity","scopes","composioStatus","statusReason","expiresAt","checkedAt","logo","appName","category","check"],"additionalProperties":false,"isRequired":true,"uniqueKey":"data.oneOf.1.details","typeLabel":"object"},"createdAt":{"type":"string","format":"date-time","description":"When it was created.","isRequired":true,"uniqueKey":"data.oneOf.1.createdAt","typeLabel":"string\u003cdate-time>"},"lastUsedAt":{"oneOf":[{"type":"string","format":"date-time","description":"When a tool last ran through it. Null until one has.","isRequired":true,"uniqueKey":"data.oneOf.1.lastUsedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When a tool last ran through it. Null until one has.","isRequired":true,"uniqueKey":"data.oneOf.1.lastUsedAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.1.lastUsedAt","typeLabel":"string\u003cdate-time> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"data.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"data","typeLabel":"object"}},"required":["data"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"example":{"data":{"id":"6d5c4b3a-2918-4706-9f8e-1d2c3b4a5968","key":"stripe_live","kind":"api_key","type":"secret","scope":"org","workerId":null,"clientId":null,"internalOnly":false,"managed":false,"hosts":["api.stripe.com"],"description":"Billing — subscriptions, invoices and refunds.","provider":null,"account":null,"providerScopes":[],"expiresAt":null,"health":null,"issuer":null,"issuerHost":null,"mcpEndpoint":null,"mcpTransport":null,"mcpTools":[],"mcpStatus":null,"mcpServerName":null,"providerClientId":null,"redirectUri":null,"createdAt":"2026-02-01T09:14:00.000Z","updatedAt":"2026-02-01T09:14:00.000Z"}},"examples":{"Example":{"title":"Example","value":{"data":{"id":"6d5c4b3a-2918-4706-9f8e-1d2c3b4a5968","key":"stripe_live","kind":"api_key","type":"secret","scope":"org","workerId":null,"clientId":null,"internalOnly":false,"managed":false,"hosts":["api.stripe.com"],"description":"Billing — subscriptions, invoices and refunds.","provider":null,"account":null,"providerScopes":[],"expiresAt":null,"health":null,"issuer":null,"issuerHost":null,"mcpEndpoint":null,"mcpTransport":null,"mcpTools":[],"mcpStatus":null,"mcpServerName":null,"providerClientId":null,"redirectUri":null,"createdAt":"2026-02-01T09:14:00.000Z","updatedAt":"2026-02-01T09:14:00.000Z"}}}},"exampleType":"examples"}},"exampleType":"examples"},"23e952e5-b184-46ca-b987-4d10589ed346":{"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"},"44b5f7c7-4a04-464a-9fb6-2809dc3801d4":{"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"},"2a19f0f9-cb18-40f1-9626-9df906b6ae23":{"description":"`rate_limited`","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":{"46c93119-235f-4f18-ab12-636f3ccfbac4":{"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":["connections:read"],"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":["connections:read"],"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":"Get a connection - Ergoly","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-09T02:24:49.165Z","originalFileLocation":"api-reference/connections/get-a-connection.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=\"Everything the Connections page shows for it, in whichever of the two shapes the id names: a stored secret\u0026#x27;s scope, hosts and connection state by type; or a connected app\u0026#x27;s app, status and placements. Nothing it does not: no stored value, no client secret, in any form. A well-formed id belonging to another organization is the same 404 as a malformed one, whichever store it lives in.\">\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=\"Get a connection - Ergoly\">\u003cmeta data-mint-head property=\"og:description\" content=\"Everything the Connections page shows for it, in whichever of the two shapes the id names: a stored secret\u0026#x27;s scope, hosts and connection state by type; or a connected app\u0026#x27;s app, status and placements. Nothing it does not: no stored value, no client secret, in any form. A well-formed id belonging to another organization is the same 404 as a malformed one, whichever store it lives in.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Ergoly\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.ergoly.ai/api-reference/connections/get-a-connection\">\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=Connections\u0026amp;title=Get+a+connection\u0026amp;description=Everything+the+Connections+page+shows+for+it%2C+in+whichever+of+the+two+shapes+the+id+names%3A+a+stored+secret%27s+scope%2C+hosts+and+connection+state+by+%60type%60%3B+or+a+c\u0026amp;theme=46f41713e7d152b6296bdf32\u0026amp;signature=4890d70e9297b144ea2af1f4191e520caf90bbee3400a3ad86d1bd811bfd33c4\">\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=\"Get a connection - Ergoly\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Everything the Connections page shows for it, in whichever of the two shapes the id names: a stored secret\u0026#x27;s scope, hosts and connection state by type; or a connected app\u0026#x27;s app, status and placements. Nothing it does not: no stored value, no client secret, in any form. A well-formed id belonging to another organization is the same 404 as a malformed one, whichever store it lives in.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ergoly.mintlify.site/_mintlify/api/og/v2?division=Connections\u0026amp;title=Get+a+connection\u0026amp;description=Everything+the+Connections+page+shows+for+it%2C+in+whichever+of+the+two+shapes+the+id+names%3A+a+stored+secret%27s+scope%2C+hosts+and+connection+state+by+%60type%60%3B+or+a+c\u0026amp;theme=46f41713e7d152b6296bdf32\u0026amp;signature=4890d70e9297b144ea2af1f4191e520caf90bbee3400a3ad86d1bd811bfd33c4\">\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/connections/get-a-connection\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/connections/get-a-connection.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/connections/get-a-connection#webpage\",\"url\":\"https://docs.ergoly.ai/api-reference/connections/get-a-connection\",\"name\":\"Get a connection\",\"description\":\"Everything the Connections page shows for it, in whichever of the two shapes the id names: a stored secret's scope, hosts and connection state by type; or a connected app's app, status and placements. Nothing it does not: no stored value, no client secret, in any form. A well-formed id belonging to another organization is the same 404 as a malformed one, whichever store it lives in.\",\"dateModified\":\"2026-11-09T02:24:49.165Z\",\"isPartOf\":{\"@id\":\"https://docs.ergoly.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.ergoly.ai/api-reference/connections/get-a-connection#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.ergoly.ai/api-reference/connections/get-a-connection#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Connections\",\"item\":\"https://docs.ergoly.ai/api-reference/connections/list-connections\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Get a connection\",\"item\":\"https://docs.ergoly.ai/api-reference/connections/get-a-connection\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.ergoly.ai/api-reference/connections/get-a-connection#apireference\",\"headline\":\"Get a connection\",\"name\":\"Get a connection\",\"description\":\"Everything the Connections page shows for it, in whichever of the two shapes the id names: a stored secret's scope, hosts and connection state by type; or a connected app's app, status and placements. Nothing it does not: no stored value, no client secret, in any form. A well-formed id belonging to another organization is the same 404 as a malformed one, whichever store it lives in.\",\"url\":\"https://docs.ergoly.ai/api-reference/connections/get-a-connection\",\"mainEntityOfPage\":{\"@id\":\"https://docs.ergoly.ai/api-reference/connections/get-a-connection#webpage\"},\"dateModified\":\"2026-11-09T02:24:49.165Z\",\"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","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","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","description":"Two shapes, told apart by `app`. WITHOUT it, this stores a secret: `value` is write-only, it goes in here and no route gives it back; give at least one host unless the key already has some — a credential no host points at is never injected by the gateway, so it would sit there doing nothing; a key already taken at the same scope is a `conflict`, as is a host already mapped to another connection. WITH `app` — a catalog slug or a tool server's URL — this connects an app and places it: omit `auth` and the answer carries `connectUrl`, a hosted sign-in to open in a browser, with the connection `pending` until consent finishes and `active` after (poll `GET /api/v1/connections/{id}`); send `auth.mode: \"key\"` with the key in `value` and it is stored at Composio and checked with one real call, `verified` reporting the verdict; a tool server that takes a key names the header it goes in with `auth.header` (absent is `Authorization`, sent as `Bearer \u003ckey>`; any other header carries the key on its own); a tool server that takes no credential is `auth.mode: \"none\"`, and gets a row and a placement with nothing stored anywhere. A `placement` no ework could read — `instance` on a Worker with no active ework for that Client, `client` for a Client no Worker has one for — is a `conflict` naming the pair, refused before a key or a sign-in reaches Composio. The check is made once, up front: an ework removed while Composio is being called can still leave the placement in place, and adding or moving a placement later is checked again at the write. `connectUrl` is shown once — a replay under the same `Idempotency-Key` withholds it — and the pasted key is never in any response. `sessions` says which eworks can use the app now.","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","description":"Name one or more of `key`, `kind`, `scope` and `internalOnly`. Each is a separate guarded write applied in that order, and the first refusal stops the rest — so a body naming several fields can land some of them and then be refused, and the message says which already applied. `internalOnly` and a client `scope` cannot be combined, in one call or across two: the flag hides a connection from every client-tier agent and a client-scoped one resolves only for a client, so together they resolve for nobody. The stored value is never touched here; use rotate for that. A system-managed connection refuses every change.","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":"Get a connection - 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"]}