When using another provider, setting the OPENAI_API_KEY should not be necessary.

Resolved 💬 3 comments Opened May 18, 2025 by doggy8088 Closed Aug 7, 2025

What version of Codex is running?

0.1.2505171619

Which model were you using?

o4-mini

What platform is your computer?

Microsoft Windows NT 10.0.19045.0 x64

What steps can reproduce the bug?

$env:OPENAI_API_KEY='my existing OpenAI api key'
$env:AZURE_OPENAI_API_KEY='my auzre openai service api key'
$env:AZURE_OPENAI_API_VERSION = "2025-01-01-preview"

codex

I realized the $env:OPENAI_API_KEY will be used when authenticate to Azure OpenAI Service. I am not expecting this behavior.

I also have a $HOME/.codex/config.json like this.

{
  "model": "o4-mini",
  "provider": "azure",
  "providers": {
    "openai": {
      "name": "OpenAI",
      "baseURL": "https://api.openai.com/v1",
      "envKey": "OPENAI_API_KEY"
    },
    "azure": {
      "name": "AzureOpenAI",
      "baseURL": "https://YOUR_PROJECT_NAME.openai.azure.com/openai",
      "envKey": "AZURE_OPENAI_API_KEY"
    },
    "openrouter": {
      "name": "OpenRouter",
      "baseURL": "https://openrouter.ai/api/v1",
      "envKey": "OPENROUTER_API_KEY"
    },
    "gemini": {
      "name": "Gemini",
      "baseURL": "https://generativelanguage.googleapis.com/v1beta/openai",
      "envKey": "GEMINI_API_KEY"
    },
    "ollama": {
      "name": "Ollama",
      "baseURL": "http://localhost:11434/v1",
      "envKey": "OLLAMA_API_KEY"
    },
    "mistral": {
      "name": "Mistral",
      "baseURL": "https://api.mistral.ai/v1",
      "envKey": "MISTRAL_API_KEY"
    },
    "deepseek": {
      "name": "DeepSeek",
      "baseURL": "https://api.deepseek.com",
      "envKey": "DEEPSEEK_API_KEY"
    },
    "xai": {
      "name": "xAI",
      "baseURL": "https://api.x.ai/v1",
      "envKey": "XAI_API_KEY"
    },
    "groq": {
      "name": "Groq",
      "baseURL": "https://api.groq.com/openai/v1",
      "envKey": "GROQ_API_KEY"
    },
    "arceeai": {
      "name": "ArceeAI",
      "baseURL": "https://conductor.arcee.ai/v1",
      "envKey": "ARCEEAI_API_KEY"
    }
  },
  "history": {
    "maxSize": 1000,
    "saveHistory": true,
    "sensitivePatterns": []
  }
}

What is the expected behavior?

I expected the $env:OPENAI_API_KEY should be ignored when using azure as a provider in codex.

What do you see instead?

I have a workaround to fix this issue:

$env:OPENAI_API_KEY=$env:AZURE_OPENAI_API_KEY 

Additional information

_No response_

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗