{"record":{"id":"b6f33d537b8701cb","repo":"ComposioHQ/composio","slug":"provider-is-required-for-tool-router-please-initi","errorCode":null,"errorMessage":"Provider is required for tool router. Please initialize ToolRouter with a provider.","messagePattern":"Provider is required for tool router\\. Please initialize ToolRouter with a provider\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/composio/core/models/tool_router.py","lineNumber":1075,"sourceCode":"            custom_toolkits=custom_toolkits,\n            default_preload=default_custom_preload,\n            preload_tools=preload.get(\"tools\") if preload is not None else None,\n        )\n        if inline_custom_tools_payload:\n            if \"custom_tools\" in inline_custom_tools_payload:\n                experimental_payload[\"custom_tools\"] = inline_custom_tools_payload[\n                    \"custom_tools\"\n                ]\n            if \"custom_toolkits\" in inline_custom_tools_payload:\n                experimental_payload[\"custom_toolkits\"] = inline_custom_tools_payload[\n                    \"custom_toolkits\"\n                ]\n\n        if experimental_payload:\n            create_params[\"experimental\"] = experimental_payload\n\n        if self._provider is None:\n            raise ValueError(\n                \"Provider is required for tool router. \"\n                \"Please initialize ToolRouter with a provider.\"\n            )\n\n        # Make API call to create session\n        session = self._client.tool_router.session.create(**create_params)\n\n        # Build custom tools routing map from backend response\n        custom_tools_map: t.Optional[CustomToolsMap] = None\n        if custom_tools or custom_toolkits:\n            custom_tools_map = build_custom_tools_map_from_response(\n                tools=custom_tools or [],\n                toolkits=custom_toolkits,\n                experimental=session.experimental,\n            )\n        preloaded_custom_tool_slugs = get_preloaded_custom_tool_slugs(\n            custom_tools_map,\n            default_preload=default_custom_preload,","sourceCodeStart":1057,"sourceCodeEnd":1093,"githubUrl":"https://github.com/ComposioHQ/composio/blob/64b1b85502b1beeb2379e6c9e8bf1104504fa637/python/composio/core/models/tool_router.py#L1057-L1093","documentation":"Raised by ToolRouter.create() when the ToolRouter instance was constructed without a provider (self._provider is None). The provider is mandatory because it drives session creation semantics; the error is a plain ValueError at the point the API call would be made.","triggerScenarios":"ToolRouter(api_key=...) without a provider, then router.create(...) — the missing provider is only detected at create time, not at construction.","commonSituations":"Migrating from an older ToolRouter signature where provider was optional, or constructing ToolRouter from a partial config object that omitted the provider field.","solutions":["Construct ToolRouter with a provider: ToolRouter(api_key=..., provider=provider)","If migrating, pass the same provider you give to Composio(...)"],"exampleFix":"# before\nrouter = ToolRouter(api_key=key)\nsession = router.create(...)\n\n# after\nrouter = ToolRouter(api_key=key, provider=provider)\nsession = router.create(...)","handlingStrategy":"validation","validationCode":"assert router._provider is not None or construct with provider","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always pass provider to ToolRouter","Fail fast: check provider right after construction"],"tags":["python","tool-router","provider","missing-config"],"backgroundTag":"missing-required-parameter","analyzedSha":"64b1b85502b1beeb2379e6c9e8bf1104504fa637","analyzedAt":"2026-08-28T15:39:33.623Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}