{"record":{"id":"19628abe1364e4d8","repo":"ComposioHQ/composio","slug":"failed-to-parse-connected-account-acl-update-param","errorCode":null,"errorMessage":"Failed to parse connected account ACL update params","messagePattern":"Failed to parse connected account ACL update params","errorType":"validation","errorClass":"ValidationError","httpStatus":null,"severity":"error","filePath":"ts/packages/core/src/models/Experimental.ts","lineNumber":104,"sourceCode":"  if (aclWire !== undefined) {\n    wire.acl_config_for_shared = aclWire;\n  }\n  return wire;\n}\n\n/**\n * `composio.experimental` namespace. Keeps compatibility aliases for\n * experimental surfaces while domain-specific mounts graduate. **Shape may\n * change in future releases.**\n */\nexport async function updateConnectedAccountAcl(\n  client: ComposioClient,\n  nanoid: string,\n  params: UpdateConnectedAccountAclParams\n): Promise<ConnectedAccountPatchResponse> {\n  const parsedParams = UpdateConnectedAccountAclParamsSchema.safeParse(params);\n  if (!parsedParams.success) {\n    throw new ValidationError('Failed to parse connected account ACL update params', {\n      cause: parsedParams.error,\n    });\n  }\n\n  const body: ConnectedAccountPatchParams = {\n    experimental: {\n      acl_config_for_shared: serializeAclConfigForWire(parsedParams.data),\n    },\n  };\n\n  try {\n    return await client.connectedAccounts.patch(nanoid, body);\n  } catch (error) {\n    if (\n      error instanceof BadRequestError &&\n      typeof error.message === 'string' &&\n      error.message.includes(ACL_ONLY_FOR_SHARED_ERROR_FRAGMENT)\n    ) {","sourceCodeStart":86,"sourceCodeEnd":122,"githubUrl":"https://github.com/ComposioHQ/composio/blob/64b1b85502b1beeb2379e6c9e8bf1104504fa637/ts/packages/core/src/models/Experimental.ts#L86-L122","documentation":"The parameters passed to update the ACL of a connected account failed Zod validation against UpdateConnectedAccountAclParamsSchema. The SDK validates experimental ACL params client-side before sending the patch request, and wraps the Zod error as the cause.","triggerScenarios":"Calling connectedAccount.updateAcl / Experimental.updateConnectedAccountAcl with a malformed params object — wrong field names, missing required fields (e.g. missing scope or user list), or invalid enum values.","commonSituations":"Typo'd field names from hand-written payloads; passing the raw backend patch body instead of the SDK param shape; schema changes across SDK versions renaming ACL fields.","solutions":["Inspect error.cause (ZodError) to see exactly which fields failed","Match your params object to UpdateConnectedAccountAclParamsSchema fields and types","Log JSON.stringify(params) before the call and compare against the SDK's exported schema"],"exampleFix":"// before\nawait account.updateAcl({ acl: { enabled: true } });\n// after\nawait account.updateAcl({ enabled: true, users: ['user@corp.com'] }); // per schema fields","handlingStrategy":"type-guard","validationCode":"import { UpdateConnectedAccountAclParamsSchema } from '@composio/core';\nconst check = UpdateConnectedAccountAclParamsSchema.safeParse(params);\nif (!check.success) throw new Error(check.error.issues.map(i => `${i.path}: ${i.message}`).join('; '));\nawait account.updateAcl(params);","typeGuard":"const isAclParams = (p: unknown): p is UpdateConnectedAccountAclParams =>\n  UpdateConnectedAccountAclParamsSchema.safeParse(p).success;","tryCatchPattern":"try { await account.updateAcl(params); } catch (e) { if (e instanceof ValidationError && e.message.includes('ACL update params')) { console.error(e.cause); fixParams(); return; } throw e; }","preventionTips":["Type params against the exported schema type","Run safeParse before sending in dynamic-input paths","Log the Zod cause whenever this fires"],"tags":["acl","connected-accounts","zod","validation","experimental"],"backgroundTag":"schema-validation-failed","analyzedSha":"64b1b85502b1beeb2379e6c9e8bf1104504fa637","analyzedAt":"2026-08-28T15:39:33.623Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}