tinyhumansai/openhuman · error · anyhow::Error
Composio v3 auth config lookup failed: {err}
Error message
Composio v3 auth config lookup failed: {err} What it means
Non-2xx from the v3 auth-config lookup: GET with toolkit_slug=<app>&show_disabled=true&limit=25. This runs inside the connect flow when only an app name is given (to resolve it to an auth_config_id); response_error folds status + body into {err}. It is the transport-level failure — an empty-but-200 result is the separate 'No auth config found' error.
Source
Thrown at src/openhuman/integrations/composio/tools/direct.rs:680
async fn resolve_auth_config_id(&self, app_name: &str) -> anyhow::Result<String> {
let url = format!("{}/auth_configs", self.base_v3);
let resp = self
.client()
.get(&url)
.header("x-api-key", &self.api_key)
.query(&[
("toolkit_slug", app_name),
("show_disabled", "true"),
("limit", "25"),
])
.send()
.await?;
if !resp.status().is_success() {
let err = response_error(resp).await;
anyhow::bail!("Composio v3 auth config lookup failed: {err}");
}
let body: ComposioAuthConfigsResponse = resp
.json()
.await
.context("Failed to decode Composio v3 auth configs response")?;
if body.items.is_empty() {
anyhow::bail!(
"No auth config found for toolkit '{app_name}'. Create one in Composio first."
);
}
let preferred = body
.items
.iter()
.find(|cfg| cfg.is_enabled())
.or_else(|| body.items.first())View on GitHub (pinned to 7491200858)
Solutions
- Inspect {err} for status and body
- 401: fix the API key first — the lookup cannot succeed without it
- Normalize the app slug (trim, lowercase) before triggering connect
- 429/5xx: retry the connect attempt after a short backoff
Defensive patterns
Strategy: try-catch
Validate before calling
let app_slug = app.map(str::trim).filter(|a| !a.is_empty());
if app_slug.is_none() && auth_config_id.is_none() {
anyhow::bail!("connect needs an app slug or auth_config_id before the auth-config lookup");
} Try / catch
match tool.get_connection_url(app, None, &entity).await {
Ok(url) => Ok(url),
Err(e) => {
let msg = format!("{e:#}");
if msg.contains("auth config lookup failed: 401") {
ui.prompt_reenter_composio_key(); // key dead before the lookup could run
} else {
tracing::warn!("[composio] auth config lookup: {msg}");
}
Err(e)
}
} Prevention
- Normalize (trim/lowercase) toolkit slugs before triggering the lookup
- Fix API-key health first — every connect sub-call depends on it
- Prefer passing an explicit auth_config_id to skip the lookup path entirely
When it happens
Trigger: 401 invalid API key; 400 from a malformed toolkit_slug (empty after trim, or invalid characters); 429; 5xx. Example: get_connection_url(Some("slack"), None, entity) while the key is revoked fails here before the empty-items check can even run.
Common situations: Connect attempted right after the key expired; toolkit slug with whitespace or odd casing injected from user input; Composio 5xx during the connect attempt.
Related errors
- Composio v3 connect failed: {err}
- Composio v3 API error: {err}
- Composio v3 list_tool_schemas: {err}
- Composio v3 action execution failed: {err}
- Composio connect failed on v3 ({v3_err}) and v2 fallback ({v
AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17).
Data as JSON: /api/errors/5c5f0dcd6e49038c.
Report an issue: GitHub.