n8n-io/n8n · error · Error

DAYTONA_API_KEY is required for sandbox provider "daytona".

Error message

DAYTONA_API_KEY is required for sandbox provider "daytona". Set the Daytona API key.

What it means

Thrown by resolveSandboxConfig when provider is 'daytona' and DAYTONA_API_URL is present but DAYTONA_API_KEY is missing. The API key authenticates sandbox provisioning calls; without it the harness cannot create workspaces.

Source

Thrown at packages/@n8n/instance-ai/evaluations/harness/sandbox-config.ts:43

	const providerRaw = env.N8N_INSTANCE_AI_SANDBOX_PROVIDER ?? 'n8n-sandbox';
	if (!VALID_PROVIDERS.includes(providerRaw as SandboxProvider)) {
		throw new Error(
			`Invalid sandbox provider "${providerRaw}". Set N8N_INSTANCE_AI_SANDBOX_PROVIDER to one of: ${VALID_PROVIDERS.join(', ')}.`,
		);
	}
	const provider = providerRaw as SandboxProvider;
	const timeout = parseTimeout(env.N8N_INSTANCE_AI_SANDBOX_TIMEOUT) ?? DEFAULT_TIMEOUT_MS;

	if (provider === 'daytona') {
		const daytonaApiUrl = env.DAYTONA_API_URL;
		const daytonaApiKey = env.DAYTONA_API_KEY;
		if (!daytonaApiUrl) {
			throw new Error(
				'DAYTONA_API_URL is required for sandbox provider "daytona". Set it to e.g. https://app.daytona.io/api.',
			);
		}
		if (!daytonaApiKey) {
			throw new Error(
				'DAYTONA_API_KEY is required for sandbox provider "daytona". Set the Daytona API key.',
			);
		}
		const image = env.N8N_INSTANCE_AI_SANDBOX_IMAGE;
		const namePrefix = env.N8N_INSTANCE_AI_SANDBOX_NAME_PREFIX;
		const createTimeoutSeconds =
			parsePositiveInt(
				env.N8N_INSTANCE_AI_SANDBOX_CREATE_TIMEOUT_SECONDS,
				'N8N_INSTANCE_AI_SANDBOX_CREATE_TIMEOUT_SECONDS',
			) ?? DEFAULT_DAYTONA_CREATE_TIMEOUT_SECONDS;
		return {
			enabled: true,
			provider: 'daytona',
			daytonaApiUrl,
			daytonaApiKey,
			timeout,
			createTimeoutSeconds,
			...(image ? { image } : {}),

View on GitHub (pinned to 5ac6606e81)

Solutions

  1. Set DAYTONA_API_KEY to a valid Daytona API key for the account associated with DAYTONA_API_URL.
  2. Verify the variable is present in the eval process env (print `process.env.DAYTONA_API_KEY ? 'set' : 'missing'`).
  3. If you did not intend daytona, switch the provider back to 'n8n-sandbox'.

Example fix

# before
export DAYTONA_API_URL=https://app.daytona.io/api
# DAYTONA_API_KEY unset

# after — inject via secret manager, never hardcode
export DAYTONA_API_URL=https://app.daytona.io/api
export DAYTONA_API_KEY=$DAYTONA_API_KEY  # from vault/secret manager
Defensive patterns

Strategy: validation

Validate before calling

function daytonaKeyPresent(env: NodeJS.ProcessEnv): boolean {
  return env.N8N_INSTANCE_AI_SANDBOX_PROVIDER !== 'daytona' || !!env.DAYTONA_API_KEY;
}

if (!daytonaKeyPresent(process.env)) {
  throw new Error('DAYTONA_API_KEY missing; inject via secret manager');
}

Type guard

null

Try / catch

try {
  resolveSandboxConfig(process.env);
} catch (e) {
  if (e instanceof Error && /DAYTONA_API_KEY is required/.test(e.message)) {
    // surface to secret manager / CI injection, do NOT log a value
  }
  throw e;
}

Prevention

When it happens

Trigger: Daytona provider selected, URL set, but the key was not injected (e.g. secret manager omitted it); the key var name was typo'd.

Common situations: CI secrets not wired for this run; local .env missing the key; rotating keys and forgetting to update the env.

Related errors


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