tinyhumansai/openhuman · error
composio.authorize: extra_params must be a JSON object
Error message
composio.authorize: extra_params must be a JSON object
What it means
Guard inside ComposioClient::authorize: extra_params was supplied but is not a JSON object. extra_params must be an object so its key/value pairs can be merged into the authorize request body (some toolkits like whatsapp require extra fields such as waba_id).
Source
Thrown at src/openhuman/integrations/composio/client.rs:97
/// `extra_params` is an optional JSON object whose key/value pairs are
/// merged into the request body. Some toolkits (e.g. `whatsapp`) require
/// additional fields (e.g. `waba_id`) that Composio will reject the
/// authorization without.
pub async fn authorize(
&self,
toolkit: &str,
extra_params: Option<serde_json::Value>,
) -> Result<ComposioAuthorizeResponse> {
let toolkit = toolkit.trim();
if toolkit.is_empty() {
anyhow::bail!("composio.authorize: toolkit must not be empty");
}
tracing::debug!(toolkit = %toolkit, has_extra_params = extra_params.is_some(), "[composio] authorize");
let mut body = serde_json::json!({ "toolkit": toolkit });
if let Some(extra) = extra_params {
const RESERVED: &[&str] = &["toolkit", "toolkit_version", "auth", "client_id"];
let extra_obj = extra.as_object().ok_or_else(|| {
anyhow::anyhow!("composio.authorize: extra_params must be a JSON object")
})?;
let obj = body.as_object_mut().ok_or_else(|| {
anyhow::anyhow!("composio.authorize: internal payload must be an object")
})?;
for (k, v) in extra_obj {
if RESERVED.contains(&k.as_str()) {
anyhow::bail!(
"composio.authorize: extra_params cannot override reserved key '{k}'"
);
}
obj.insert(k.clone(), v.clone());
}
}
merge_required_oauth_scopes(&mut body, toolkit)?;
self.inner
.post::<ComposioAuthorizeResponse>("/agent-integrations/composio/authorize", &body)
.await
}View on GitHub (pinned to 7491200858)
Solutions
- Pass extra_params as a JSON object, e.g. {"waba_id": "123"}
- Omit extra_params entirely when the toolkit needs no additional fields
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at src/openhuman/integrations/composio/client.rs:97 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/a28d7e709ff43dd4.
Report an issue: GitHub.