Piotr Siemieniuk
05/13/2026, 9:51 AMawait composio.connectedAccounts.link(
'workspace_x:owner_actor',
authConfigId,
{ accountType: 'SHARED', aclConfigForShared: { allowAllUsers: true } }
);
returns connectedAccount.id = 'ca_owner_gmail'
2) Member (different userId, ACL-allowed) tries to start a session and pin the SHARED account.
const session = await composio.create('workspace_x:member_actor', {
connectedAccounts: { gmail: 'ca_owner_gmail' },
});
That throws:
400 {
"error": {
"message": "Could not find connected account(s) ca_owner_gmail belonging
to user \"workspace_x:member_actor\". Check that the IDs are
correct and belong to the same user as this session.",
"code": 4306,
"slug": "ToolRouterV2_InvalidConnectedAccountIds",
"status": 400
}
}
So the server only accepts accountIds owned by the session's userId — the ACL
on the SHARED account doesn't seem to be consulted at session create.
Is connectedAccounts: { toolkit: 'ca_sharedAccount_from_other_user' } the
intended way to "pin" a SHARED account in another user's session? If yes, 4306
looks like a bug — the router should resolve via ACL. If not, what IS the API?
I can't find it in the SDK types or in /docs/configuring-sessions. Thanks!Piotr Siemieniuk
05/13/2026, 10:28 AMComposioSharedConnectionNotAccessibleError (index.d.cts:5382) doc'd as:
> Thrown by toolRouter.session.create() … when the session's userId cannot use a pinned SHARED connection.
So the SDK contract says create() should resolve SHARED via ACL. Looks like the V2 ownership check just fires too early and short-circuits to 4306 before the ACL path runs. 🤔Narkon
05/14/2026, 6:14 AMPiotr Siemieniuk
05/14/2026, 1:02 PMUday
05/14/2026, 6:23 PM