tinyhumansai/openhuman · error
Exa rejected the configured API key (HTTP {status}). Check y
Error message
Exa rejected the configured API key (HTTP {status}). Check your Exa API key under Connections > Search engine. What it means
Exa answered 401/403 — the configured API key was rejected. The response body is deliberately read and dropped (Exa echoes the query back in errors), so the key is named without leaking body content.
Source
Thrown at src/openhuman/search/tools/exa.rs:238
.header("Accept", "application/json")
.json(&body)
.send()
.await
.map_err(|e| {
tracing::warn!("[exa] request to {path} failed: {e}");
anyhow::anyhow!("Exa request failed: {e}")
})?;
let status = resp.status();
if !status.is_success() {
// Read and drop the body: Exa echoes the query back in errors and
// the message reaches the agent transcript.
let body_len = resp.text().await.unwrap_or_default().len();
tracing::warn!(status = %status, body_len, "[exa] non-2xx response");
if status == reqwest::StatusCode::UNAUTHORIZED
|| status == reqwest::StatusCode::FORBIDDEN
{
anyhow::bail!(
"Exa rejected the configured API key (HTTP {status}). \
Check your Exa API key under Connections > Search engine."
);
}
anyhow::bail!("Exa returned non-2xx status {status}");
}
resp.json().await.map_err(|e| {
tracing::warn!("[exa] failed to read response JSON: {e}");
anyhow::anyhow!("Failed to read Exa response JSON: {e}")
})
}
async fn post_documents(&self, path: &str, body: Value) -> anyhow::Result<Vec<ExaResultItem>> {
let value = self.post(path, body).await?;
let parsed: ExaSearchResponse = serde_json::from_value(value).map_err(|e| {
tracing::warn!("[exa] failed to parse {path} response: {e}");
anyhow::anyhow!("Failed to parse Exa response: {e}")View on GitHub (pinned to 7491200858)
Solutions
- Update the Exa API key under Connections > Search engine
- Verify the key is active and has quota on the Exa dashboard
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at src/openhuman/search/tools/exa.rs:238 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/9ed04fb5eba5a185.
Report an issue: GitHub.