DayuanJiang/next-ai-draw-io · error · Error

At least one of [ ] environment variables is required for…

Error message

At least one of [${customApiKeyEnv.join(", ")}] environment variables is required for ${provider} provider. Please set at least one in your .env.local file.

What it means

validateProviderCredentials supports an array of acceptable env var names; when none is set it throws listing all candidates required by that provider.

Solutions

  1. Set at least one of the env vars listed in the message in .env.local
  2. Restart the dev server / redeploy so the new env is loaded
  3. Fix typos in the variable name so it matches one of the listed options

Example fix

# before
# (no key set)

# after
OPENROUTER_API_KEY=sk-or-...
Defensive patterns

Strategy: validation

Validate before calling

const hasAny = (vars: string[]) => vars.some((v) => !!process.env[v])
if (!hasAny(requiredKeyVars)) throw new Error('Missing credentials config')

Try / catch

try { getAIModel(...) } catch (e) { if ((e as Error).message.includes('environment variables is required')) showEnvSetupGuide(e) }

Prevention

When it happens

Trigger: Using a custom provider whose configuration lists multiple possible API key env vars (e.g. OPENROUTER_API_KEY / custom keys) with none present in the environment.

Common situations: Renamed env vars after config changes, forgetting to restart after editing .env.local, deploying without copying env settings.

Understand the failure class

Background: "environment variable is not set" and "Missing keys in environment" errors: what missing required env var messages mean and how to fix them — this error's family across 28 libraries.

Related errors


AI-assisted analysis of DayuanJiang/next-ai-draw-io@155ef4f7ac (2026-08-27). Data as JSON: /api/errors/f740134e1673948c. Report an issue: GitHub.

Appendix: source

Thrown at lib/ai-providers.ts:643

    }

    return null
}

/**
 * Validate that required API keys are present for the selected provider
 * @param provider - The provider to validate
 * @param customApiKeyEnv - Optional custom env var name(s) (from ai-models.json apiKeyEnv)
 */
function validateProviderCredentials(
    provider: ProviderName,
    customApiKeyEnv?: string | string[],
): void {
    // Handle array of env var names - at least one must be set
    if (Array.isArray(customApiKeyEnv)) {
        const hasAnyKey = customApiKeyEnv.some((envVar) => process.env[envVar])
        if (!hasAnyKey) {
            throw new Error(
                `At least one of [${customApiKeyEnv.join(", ")}] environment variables is required for ${provider} provider. ` +
                    `Please set at least one in your .env.local file.`,
            )
        }
        return
    }

    // Anthropic accepts ANTHROPIC_AUTH_TOKEN (Bearer auth) as alternative to ANTHROPIC_API_KEY
    if (provider === "anthropic" && !customApiKeyEnv) {
        const hasCredential = !!(
            process.env.ANTHROPIC_API_KEY || process.env.ANTHROPIC_AUTH_TOKEN
        )
        if (!hasCredential) {
            throw new Error(
                `Either ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN environment variable is required for anthropic provider. ` +
                    `Please set one in your .env.local file.`,
            )
        }

View on GitHub (pinned to 155ef4f7ac)