{"record":{"id":"b2b231e155e7fd6d","repo":"tinyhumansai/openhuman","slug":"missing-app-or-auth-config-id-for-v3-connect","errorCode":null,"errorMessage":"Missing 'app' or 'auth_config_id' for v3 connect","messagePattern":"Missing 'app' or 'auth_config_id' for v3 connect","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/integrations/composio/tools/direct.rs","lineNumber":548,"sourceCode":"                    Err(v2_err) => anyhow::bail!(\n                        \"Composio connect failed on v3 ({v3_err}) and v2 fallback ({v2_err})\"\n                    ),\n                }\n            }\n        }\n    }\n\n    async fn get_connection_url_v3(\n        &self,\n        app_name: Option<&str>,\n        auth_config_id: Option<&str>,\n        entity_id: &str,\n    ) -> anyhow::Result<String> {\n        let auth_config_id = match auth_config_id {\n            Some(id) => id.to_string(),\n            None => {\n                let app = app_name.ok_or_else(|| {\n                    anyhow::anyhow!(\"Missing 'app' or 'auth_config_id' for v3 connect\")\n                })?;\n                self.resolve_auth_config_id(app).await?\n            }\n        };\n\n        let url = format!(\"{}/connected_accounts/link\", self.base_v3);\n        let body = json!({\n            \"auth_config_id\": auth_config_id,\n            \"user_id\": entity_id,\n        });\n\n        let resp = self\n            .client()\n            .post(&url)\n            .header(\"x-api-key\", &self.api_key)\n            .json(&body)\n            .send()\n            .await?;","sourceCodeStart":530,"sourceCodeEnd":566,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/integrations/composio/tools/direct.rs#L530-L566","documentation":"Input validation in get_connection_url_v3: building a Composio v3 connection link requires an `auth_config_id`, and when it is absent the caller must at least supply `app` so the auth config can be resolved. Thrown when both `app_name` and `auth_config_id` are None (or auth_config_id lookup falls through with no app name), meaning the v3 connect path cannot identify which integration to connect.","triggerScenarios":"Thrown at src/openhuman/integrations/composio/tools/direct.rs:548 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pass app_name (the Composio app/toolkit slug) or auth_config_id","Pass both when the app has multiple auth configs"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"749120085864ce16e0f273c7b86fac7740b39c5b","analyzedAt":"2026-08-17T21:21:45.363Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}