n8n-io/n8n · error · Error

OpenAI Responses API

Error message

OpenAI Responses API ${response.status}: ${body}

What it means

The checklist verifier's native OpenAI path got a non-2xx from the OpenAI Responses API. The message embeds the HTTP status and the raw response body, so the cause is readable directly: bad/missing API key (401), rate limit (429), wrong model or URL (404/400), or an upstream incident (5xx).

Solutions

  1. Read the status: 401 → fix model.apiKey; 429 → retry later or raise limits; 404/400 → check model URL and model id
  2. Retry transient 5xx/429 responses after a backoff
  3. Verify the configured model.url points at a valid OpenAI-compatible Responses endpoint
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at packages/@n8n/instance-ai/evaluations/checklist/verifier.ts:230 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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

Appendix: source

Thrown at packages/@n8n/instance-ai/evaluations/checklist/verifier.ts:230

					additionalProperties: false,
					$schema: 'http://json-schema.org/draft-07/schema#',
				},
			},
		},
	};
	const response = await fetch(getOpenAiResponsesUrl(model.url), {
		method: 'POST',
		headers: {
			Authorization: `Bearer ${model.apiKey}`,
			'Content-Type': 'application/json',
		},
		body: JSON.stringify(requestBody),
		signal: abortSignal,
	});

	if (!response.ok) {
		const body = await response.text();
		throw new Error(`OpenAI Responses API ${response.status}: ${body}`);
	}

	const json = (await response.json()) as Record<string, unknown>;
	const assistantText = extractOpenAiAssistantText(json);

	return {
		finishReason: 'status' in json ? json.status : null,
		usage: 'usage' in json ? json.usage : null,
		assistantText,
		parsed: parseStructuredOutputFromText(assistantText),
	};
}

function createAttemptDebug(input: {
	attempt: number;
	status: VerifierAttemptDebug['status'];
	error?: string | null;
	finishReason?: unknown;

View on GitHub (pinned to 5ac6606e81)