hasura/graphql-engine · error · Error::Connector
{0}
Error message
{0} What it means
Transparent passthrough variant of the connector client's error enum: a nested ConnectorError is forwarded with its own message unchanged ('{0}'). It represents a structured error response received from the NDC connector over HTTP, distinct from transport-level issues like invalid headers (InvalidHeaderValue) or oversized responses (ResponseTooLarge).
Source
Thrown at v3/crates/execute/src/ndc/client.rs:52
#[error("unable to decode JSON response from connector: {0}")]
Serde(#[from] serde_json::Error),
#[error("UTF-8 error: {0}")]
Utf8Error(#[from] std::string::FromUtf8Error),
#[error("IO error: {0}")]
IOError(#[from] std::io::Error),
#[error("invalid connector base URL")]
InvalidBaseURL,
#[error("invalid header value characters: {0}")]
InvalidHeaderValue(#[from] reqwest::header::InvalidHeaderValue),
#[error("response received from connector is too large: {0}")]
ResponseTooLarge(String),
#[error("{0}")]
Connector(ConnectorError),
#[error("invalid connector error: {0}")]
InvalidConnector(InvalidConnectorError),
#[error("Error while executing pre ndc request plugin: {0}")]
PreNdcRequestPluginError(#[from] pre_ndc_request_plugin::execute::Error),
#[error("Error while executing pre ndc response plugin: {0}")]
PreNdcResponsePluginError(#[from] pre_ndc_response_plugin::execute::Error),
}
impl tracing_util::TraceableError for Error {
fn visibility(&self) -> tracing_util::ErrorVisibility {
match self {
// Invalid connector errors with 5xx status codes are considered user errors
// (connector implementation issues, not engine issues)
Self::InvalidConnector(InvalidConnectorError { status, .. })View on GitHub (pinned to 724551b9ae)
Solutions
- Read the inner ConnectorError message/response — it is the authoritative cause
- Check the connector's own logs for the failing request
- Verify metadata matches the connector's current schema and capabilities
- Reproduce the request directly against the connector (curl) to isolate engine vs connector
Defensive patterns
Strategy: try-catch
Type guard
fn is_connector_error(e: &ClientError) -> bool { matches!(e, ClientError::Connector(_)) } Try / catch
Match ClientError::Connector(err) and map err.error_response into the GraphQL error extensions so clients see the connector's structured error; log request_id for tracing.
Prevention
- Reproduce failing requests directly against the connector to isolate causes
- Monitor connector error rates and alert on spikes
- Keep connector and metadata schemas in sync via contract tests
When it happens
Trigger: Any NDC HTTP request to a connector that returns a well-formed error response — the client parses it into ConnectorError and re-exposes it via this transparent variant (e.g. query errors, connector-side validation failures).
Common situations: Connector reports query/capability errors, connector and metadata version mismatch, or the connector backing a data source hits its own internal limits and reports them structurally.
Related errors
- error from data source: {}
- invalid connector error: {0}
- Error parsing the request: {0}
- Internal error from plugin {plugin_name}
- User error from plugin {plugin_name}
AI-assisted analysis of hasura/graphql-engine@724551b9ae (2026-08-28).
Data as JSON: /api/errors/44489e9d23b95d27.
Report an issue: GitHub.