n8n-io/n8n · error · OperationalError

This model requires the Responses API. Enable "Use Responses

Error message

This model requires the Responses API. Enable "Use Responses API" in the OpenAI Chat Model node options to use this model.

What it means

When an OpenAI model that is only available via the Responses API (not the Chat Completions API) is selected, OpenAI returns a 404 with param 'model' and a message containing 'not a chat model'. The openAiFailedAttemptHandler detects this shape and throws an OperationalError directing the user to enable the 'Use Responses API' toggle in the node options. This is a model-vs-API-surface mismatch.

Source

Thrown at packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/helpers/error-handling.ts:38

	if (typeof error !== 'object' || error === null) {
		return false;
	}
	return (
		'status' in error &&
		error.status === 404 &&
		'type' in error &&
		error.type === 'invalid_request_error' &&
		'param' in error &&
		error.param === 'model' &&
		'message' in error &&
		typeof error.message === 'string' &&
		error.message.includes('not a chat model')
	);
}

export const openAiFailedAttemptHandler = (error: unknown) => {
	if (isNonChatModelError(error)) {
		throw new OperationalError(
			'This model requires the Responses API. Enable "Use Responses API" in the OpenAI Chat Model node options to use this model.',
			{ cause: error },
		);
	}

	if (error instanceof RateLimitError) {
		// If the error is a rate limit error, we want to handle it differently
		// because OpenAI has multiple different rate limit errors
		const errorCode = error?.code;
		const errorMessage =
			getCustomErrorMessage(errorCode ?? 'rate_limit_exceeded') ?? errorMap.rate_limit_exceeded;
		throw new OperationalError(errorMessage, { cause: error });
	}
};

View on GitHub (pinned to 5ac6606e81)

Solutions

  1. Open the OpenAI Chat Model node options and enable 'Use Responses API'
  2. Switch to a chat-compatible model such as gpt-4o or gpt-4-turbo if you need the Chat Completions API
  3. Check the OpenAI model documentation to confirm which API surface the model requires

Example fix

// before — model: 'o3', useResponsesApi: false
// after  — model: 'o3', useResponsesApi: true
Defensive patterns

Strategy: validation

Validate before calling

// Check model compatibility before the API call
const responsesApiModels = ['o1', 'o1-pro', 'o3', 'o3-mini', 'o4-mini'];
const needsResponsesApi = responsesApiModels.some(m => modelId.startsWith(m));
if (needsResponsesApi && !options.useResponsesApi) {
  throw new UserError(`Model ${modelId} requires the Responses API. Enable it in node options.`);
}

Type guard

function isChatModel(modelId: string): boolean {
  const nonChat = ['o1', 'o1-pro', 'o3', 'o3-mini', 'o4-mini'];
  return !nonChat.some(prefix => modelId.startsWith(prefix));
}

Prevention

When it happens

Trigger: Using a model like 'o3' or other reasoning/non-chat models with the OpenAI Chat Model node when 'Use Responses API' is not enabled. The SDK sends the request to /v1/chat/completions, and OpenAI returns a 404 invalid_request_error with param=model and 'not a chat model' in the message.

Common situations: Switching from a chat model (gpt-4o) to a Responses-API-only model (o1, o3) without toggling the node option; upgrading the model ID without checking API compatibility; using a model ID copy-pasted from OpenAI Playground that targets the Responses API.

Related errors


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