Skip to content

Connections

List Connections

List connections for the organisation, visible to the caller.

PRIVATE connections owned by someone else are omitted entirely (not just redacted). wildcard_agent_count is the number of org agents with a "*" tool grant — excluded from every connection’s used_by_agent_ids.

Omit limit to get every connection; total is a real COUNT of the visible set either way — never the size of the page.

Parameters

NameInTypeRequiredDescription
limitqueryintegernoMax rows to return (1-100). Omit to return every row.
offsetqueryintegernoRows to skip — pass the previous response’s next_offset.
org_idpathstring (uuid)yes

Responses

StatusDescriptionBody
200Successful Responseagentdepot_api__routers__connections__ConnectionListResponse
422Validation ErrorHTTPValidationError

GET /api/orgs/{org_id}/connections/{connection_id}

Section titled “GET /api/orgs/{org_id}/connections/{connection_id}”

Get Connection

Get a single connection by its prefixed ID.

A PRIVATE connection owned by someone else 404s — indistinguishable from a connection that doesn’t exist.

Parameters

NameInTypeRequiredDescription
connection_idpathstringyes
org_idpathstring (uuid)yes

Responses

StatusDescriptionBody
200Successful Responseagentdepot_api__routers__connections__ConnectionResponse
422Validation ErrorHTTPValidationError

PATCH /api/orgs/{org_id}/connections/{connection_id}

Section titled “PATCH /api/orgs/{org_id}/connections/{connection_id}”

Update Connection

Update a connection’s status (enable/disable) and/or display label.

Any org member may manage connections for now — see issue #260. A PRIVATE connection owned by someone else 404s.

Parameters

NameInTypeRequiredDescription
connection_idpathstringyes
org_idpathstring (uuid)yes

Request body (required)

FieldTypeRequiredDescription
labelstringno
statusstringno

Responses

StatusDescriptionBody
200Successful Responseagentdepot_api__routers__connections__ConnectionResponse
422Validation ErrorHTTPValidationError

DELETE /api/orgs/{org_id}/connections/{connection_id}

Section titled “DELETE /api/orgs/{org_id}/connections/{connection_id}”

Delete Connection

Disconnect / remove a connection.

Any org member may remove a connection visible to them for now — see issue #260. A PRIVATE connection owned by someone else 404s.

Deleting a connection that agents depend on returns 409 with the dependent agent ids; re-issue with ?acknowledge_dependents=true to proceed — the same shape PATCH /{connection_id}/scope uses for privatizing. Deletion is never refused outright, only never silent: removing the row takes the connection away from every agent, including the owner’s own.

Parameters

NameInTypeRequiredDescription
acknowledge_dependentsquerybooleanno
connection_idpathstringyes
org_idpathstring (uuid)yes

Responses

StatusDescriptionBody
204Successful Response
422Validation ErrorHTTPValidationError

PATCH /api/orgs/{org_id}/connections/{connection_id}/owner

Section titled “PATCH /api/orgs/{org_id}/connections/{connection_id}/owner”

Assign Connection Owner

Hand a connection to a different member. Admin/owner or current owner.

Ownership decides who a private connection is visible to and which agents reach it (run_as=owner), so this moves real capability — but it does not re-authenticate. The stored credential still belongs to whoever authorized it; moving the underlying account to a different person means reconnecting.

Parameters

NameInTypeRequiredDescription
connection_idpathstringyes
org_idpathstring (uuid)yes

Request body (required)

FieldTypeRequiredDescription
owner_user_idstring (uuid)yes

Responses

StatusDescriptionBody
200Successful Responseagentdepot_api__routers__connections__ConnectionResponse
422Validation ErrorHTTPValidationError

PATCH /api/orgs/{org_id}/connections/{connection_id}/scope

Section titled “PATCH /api/orgs/{org_id}/connections/{connection_id}/scope”

Update Connection Scope

Convert a connection’s visibility scope (private ⇄ org).

A private row is only visible to its owner, so only the owner can re-scope it. A shared (org) row is visible to everyone, but visibility is not permission: re-scoping one requires an org admin/owner or the connection’s own owner — taking a shared credential away from the whole org is not a change any member should be able to make.

Privatizing a connection that agents depend on returns 409 with the dependent agent ids; re-issue with acknowledge_dependents: true to proceed. Making an ownerless row private records the actor as its owner (a private row with no owner would be visible to nobody).

Parameters

NameInTypeRequiredDescription
connection_idpathstringyes
org_idpathstring (uuid)yes

Request body (required)

FieldTypeRequiredDescription
acknowledge_dependentsbooleanno
scopestringyes

Responses

StatusDescriptionBody
200Successful Responseagentdepot_api__routers__connections__ConnectionResponse
422Validation ErrorHTTPValidationError

GET /api/orgs/{org_id}/connections/by-slug/{slug}

Section titled “GET /api/orgs/{org_id}/connections/by-slug/{slug}”

Get Connection By Slug

Get a single connection by its URL slug.

Parameters

NameInTypeRequiredDescription
org_idpathstring (uuid)yes
slugpathstringyes

Responses

StatusDescriptionBody
200Successful Responseagentdepot_api__routers__connections__ConnectionResponse
422Validation ErrorHTTPValidationError

GET /api/orgs/{org_id}/connections/catalog

Section titled “GET /api/orgs/{org_id}/connections/catalog”

Get Catalog

Return the app-level connections catalog: one card per product.

Merges the static apps (:func:iter_static_apps) with dynamic Composio apps (every ENABLED auth-config toolkit not already covered by a static app’s Composio method, e.g. Freshdesk) and a synthetic “Custom MCP” entry. connected reflects whether the org has a connection (visible to the caller) whose provider_key matches the app.

app_key is unique across the returned items: a toolkit whose slug equals a static app’s key is folded into that app as an extra connect method (:func:with_composio_method), never emitted as a second card.

Parameters

NameInTypeRequiredDescription
org_idpathstring (uuid)yes

Responses

StatusDescriptionBody
200Successful ResponseCatalogResponse
422Validation ErrorHTTPValidationError

GET /api/orgs/{org_id}/connections/catalog/{app_key}/methods

Section titled “GET /api/orgs/{org_id}/connections/catalog/{app_key}/methods”

Get Catalog App Methods

Return the ranked connect methods for one catalog app.

app_key is either a static app key (:data:APP_MAP), the synthetic "mcp_server" key, or an ENABLED Composio toolkit slug not covered by a static app.

A static app whose key is also an ENABLED Composio toolkit gets that managed method appended (mirroring the catalog’s fold — see :func:with_composio_method). Without it this branch returned only the native params form and the managed route was unreachable, even though the catalog advertised it.

Parameters

NameInTypeRequiredDescription
app_keypathstringyes
org_idpathstring (uuid)yes

Responses

StatusDescriptionBody
200Successful ResponseMethodListResponse
422Validation ErrorHTTPValidationError

GET /api/orgs/{org_id}/connections/stewardship

Section titled “GET /api/orgs/{org_id}/connections/stewardship”

List Connections For Stewardship

Every connection in the org, including private ones. Admin/owner only.

Exists so an outage is diagnosable and an offboarding is answerable: a connection owned by someone who has left breaks the agents that depend on it, and with per-user visibility alone nobody else can see the row to work out why.

Seeing is not using. No credentials are returned, and the tool gateway never consults this route — an admin can see a member’s private connection here and still cannot point an agent at it. Ordinary listing (GET /connections) is unchanged and stays per-viewer.

Declared before /{connection_id} so the literal path wins over the parameterised one.

Parameters

NameInTypeRequiredDescription
org_idpathstring (uuid)yes

Responses

StatusDescriptionBody
200Successful ResponseStewardshipListResponse
422Validation ErrorHTTPValidationError