tinyhumansai/openhuman · error
No redirect URL in Composio v3 response
Error message
No redirect URL in Composio v3 response
What it means
The Composio v3 connect call succeeded (2xx, JSON decoded) but the response contains no redirect URL where extract_redirect_url can find it — a malformed/unexpected response shape from the v3 endpoint.
Source
Thrown at src/openhuman/integrations/composio/tools/direct.rs:578
let resp = self
.client()
.post(&url)
.header("x-api-key", &self.api_key)
.json(&body)
.send()
.await?;
if !resp.status().is_success() {
let err = response_error(resp).await;
anyhow::bail!("Composio v3 connect failed: {err}");
}
let result: serde_json::Value = resp
.json()
.await
.context("Failed to decode Composio v3 connect response")?;
extract_redirect_url(&result)
.ok_or_else(|| anyhow::anyhow!("No redirect URL in Composio v3 response"))
}
async fn get_connection_url_v2(
&self,
app_name: &str,
entity_id: &str,
) -> anyhow::Result<String> {
let url = format!("{}/connectedAccounts", self.base_v2);
let body = json!({
"integrationId": app_name,
"entityId": entity_id,
});
let resp = self
.client()
.post(&url)
.header("x-api-key", &self.api_key)View on GitHub (pinned to 7491200858)
Solutions
- Retry — v3 occasionally returns a success envelope without the OAuth redirect
- Fall back to the v2 flow by supplying an app_name
- Inspect the raw response body to see where Composio moved the redirect field
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at src/openhuman/integrations/composio/tools/direct.rs:578 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17).
Data as JSON: /api/errors/f286821dfec4463e.
Report an issue: GitHub.