n8n-io/n8n · error · Error

Failed to fetch source config: ${response.statusMessage}

Error message

Failed to fetch source config: ${response.statusMessage}

What it means

The controller fetches the RudderStack source config server-side; if the upstream returns a non-2xx status, n8n throws an Error with the upstream statusMessage ('Failed to fetch source config: <statusMessage>'). This is a real HTTP-status-driven throw, not a proxy error.

Source

Thrown at packages/cli/src/controllers/telemetry.controller.ts:143

		this.applyCors(req, res);

		const response = await this.outboundHttp
			.requests({
				ssrf: 'disabled', // the source-config host is fixed
			})
			.request({
				method: 'GET',
				url: 'https://api-rs.n8n.io/sourceConfig',
				headers: {
					authorization:
						'Basic ' + btoa(`${this.globalConfig.diagnostics.frontendConfig.split(';')[0]}:`),
				},
				returnFullResponse: true,
				ignoreHttpStatusErrors: true,
			});

		if (response.statusCode < 200 || response.statusCode >= 300) {
			throw new Error(`Failed to fetch source config: ${response.statusMessage}`);
		}

		// write directly to response to avoid wrapping the config in `data` key which is not expected by RudderStack sdk
		res.json(response.body);
	}
}

View on GitHub (pinned to 5ac6606e81)

Solutions

  1. Verify N8N_DIAGNOSTICS_ENABLED and that the diagnostics frontendConfig value is valid and not expired.
  2. Check api-rs.n8n.io reachability from the host and retry on transient upstream failures.
  3. Disable diagnostics if the instance cannot reach the upstream to avoid repeated failures.
Defensive patterns

Strategy: retry

Validate before calling

// Confirm diagnostics config validity before relying on source-config.
function diagnosticsConfigured(env = process.env) {
  return Boolean(env.N8N_DIAGNOSTICS_ENABLED !== 'false' && env.frontendConfig);
}

Try / catch

try {
  await api.get('/telemetry/source-config'); // or the proxy route
} catch (e) {
  if (/Failed to fetch source config/.test(e.message)) {
    // check diagnostics creds/upstream; retry with backoff, then disable diagnostics
  } else { throw e; }
}

Prevention

When it happens

Trigger: Server-side GET to https://api-rs.n8n.io/sourceConfig returns statusCode < 200 or >= 300 (ignoreHttpStatusErrors is set, so non-2xx is not raised by the client and reaches this check).

Common situations: Upstream API outage or 5xx; invalid/expired diagnostics credentials (frontendConfig) producing 401/403; malformed diagnostics config; intermittent network error surfacing as a non-2xx.

Related errors


AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12). Data as JSON: /api/errors/890c52e0f6871ec0. Report an issue: GitHub.