How to Fix 'authentication failed when scaling' in CrewAI (Python)
What this error means
authentication failed when scaling in CrewAI usually means one of your agents, tools, or model calls is reaching a backend that needs credentials, and those credentials are missing, invalid, or not being passed into the process that actually runs the task. It tends to show up when you move from a single local run to parallel execution, background workers, Docker, or any setup where the runtime environment changes.
In practice, the failure often appears as a nested provider error from OpenAI, Anthropic, Azure OpenAI, or a custom tool wrapper inside Crew, Agent, or Task execution.
The Most Common Cause
The #1 cause is simple: your API key exists in your shell, but not in the process that scales the workload.
That happens a lot when:
- •you run locally with
.env - •then scale with Docker, Celery, Ray, multiprocessing, or a CI runner
- •and the worker process never receives
OPENAI_API_KEYor the equivalent credential
Broken vs fixed pattern
| Broken pattern | Fixed pattern |
|---|---|
| Relying on ambient env vars only | Explicitly load and pass config into the runtime |
| Creating agents before env is loaded | Load secrets before importing/instantiating models |
| Assuming child processes inherit everything | Inject env vars into workers/containers |
# broken.py
from crewai import Agent, Task, Crew
from crewai.llm import LLM
llm = LLM(model="gpt-4o") # expects OPENAI_API_KEY in process env
agent = Agent(
role="Support Analyst",
goal="Classify tickets",
backstory="You work on bank support queues.",
llm=llm,
)
task = Task(
description="Classify this customer issue.",
expected_output="A label and confidence score",
agent=agent,
)
crew = Crew(agents=[agent], tasks=[task])
result = crew.kickoff()
# fixed.py
import os
from dotenv import load_dotenv
from crewai import Agent, Task, Crew
from crewai.llm import LLM
load_dotenv() # must happen before model/client creation
api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
raise RuntimeError("OPENAI_API_KEY is missing")
llm = LLM(
model="gpt-4o",
api_key=api_key,
)
agent = Agent(
role="Support Analyst",
goal="Classify tickets",
backstory="You work on bank support queues.",
llm=llm,
)
task = Task(
description="Classify this customer issue.",
expected_output="A label and confidence score",
agent=agent,
)
crew = Crew(agents=[agent], tasks=[task])
result = crew.kickoff()
If you are scaling with workers or containers, make sure the secret exists in the worker environment too:
# docker-compose.yml snippet
services:
worker:
environment:
OPENAI_API_KEY: ${OPENAI_API_KEY}
Other Possible Causes
1) Wrong provider key for the model you selected
A common mistake is using an OpenAI key with an Anthropic model or vice versa. CrewAI will instantiate fine, then fail at request time with something like:
- •
AuthenticationError: Error code: 401 - •
openai.AuthenticationError - •
anthropic.AuthenticationError
# wrong
llm = LLM(model="claude-3-5-sonnet") # but only OPENAI_API_KEY is set
# right
llm = LLM(
model="claude-3-5-sonnet",
api_key=os.getenv("ANTHROPIC_API_KEY"),
)
2) Environment variables are loaded too late
If you import or construct your CrewAI objects before calling load_dotenv(), the client may initialize without credentials.
# wrong
from crewai.llm import LLM
from dotenv import load_dotenv
llm = LLM(model="gpt-4o")
load_dotenv()
# right
from dotenv import load_dotenv
load_dotenv()
from crewai.llm import LLM
llm = LLM(model="gpt-4o")
3) Worker processes do not inherit secrets
This shows up in scaling setups. Your main process has auth; your background workers do not.
# celery worker example: ensure env is present at startup
@app.task
def run_crew():
from crewai import Crew
...
If that worker runs in a separate container, pass secrets through deployment config:
# Kubernetes env snippet
env:
- name: OPENAI_API_KEY
valueFrom:
secretKeyRef:
name: openai-secret
key: api_key
4) Azure/OpenAI endpoint mismatch
With Azure OpenAI, auth failures can happen if you set the key but point at the wrong endpoint or API version. The request reaches Azure with valid credentials for a different resource.
llm = LLM(
model="gpt-4o",
base_url="https://wrong-resource.openai.azure.com/",
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
)
Make sure these line up:
- •resource name
- •deployment name/model mapping
- •API version
- •key tied to that Azure resource
How to Debug It
- •Print what the process actually sees
- •Check inside the same process that calls
crew.kickoff(). - •Don’t trust your shell; trust runtime output.
- •Check inside the same process that calls
import os
print("OPENAI_API_KEY present:", bool(os.getenv("OPENAI_API_KEY")))
print("ANTHROPIC_API_KEY present:", bool(os.getenv("ANTHROPIC_API_KEY")))
- •
Run without scaling
- •Disable parallelism, workers, or containerized execution.
- •If it works locally but fails when scaled out, this is almost always an environment propagation problem.
- •
Inspect the full traceback
- •Look for the real exception under CrewAI’s wrapper.
- •Common underlying errors include:
- •
openai.AuthenticationError - •
anthropic.AuthenticationError - •
401 Unauthorized - •
Invalid API key provided
- •
- •
Hardcode a known-good credential temporarily
- •Use a test key in one isolated dev run.
- •If that works, your code path is fine and your secret injection is broken.
Prevention
- •Load secrets before creating any
LLM,Agent, or tool client. - •Pass credentials explicitly in production instead of relying on implicit env inheritance.
- •Add startup checks that fail fast if required keys are missing.
- •Keep provider/model pairing consistent:
- •OpenAI models with OpenAI keys
- •Anthropic models with Anthropic keys
- •Azure OpenAI with Azure endpoint + Azure key + correct deployment name
Keep learning
- •The complete AI Agents Roadmap — my full 8-step breakdown
- •Free: The AI Agent Starter Kit — PDF checklist + starter code
- •Work with me — I build AI for banks and insurance companies
By Cyprian Aarons, AI Consultant at Topiax.
Want the complete 8-step roadmap?
Grab the free AI Agent Starter Kit — architecture templates, compliance checklists, and a 7-email deep-dive course.
Get the Starter Kit