Just wanted to share something that cost us quite a few hours of debugging of intermittent 401 insufficient_permissions with GPT-5.6 models (LiteLLM).
We were integrating the new GPT-5.6 models through LiteLLM (gpt-5.6-luna and gpt-5.6-terra) and started seeing intermittent:
HTTP 401
invalid_request_error
"You have insufficient permissions for this operation."
At first it looked like a genuine permissions issue.
The strange part was that the same API key, same project and same model had already completed earlier requests successfully.
Even stranger, if we took the exact failed request (same model, same prompt, same payload) and replayed it in isolation, it succeeded immediately.
So we ruled out pretty much everything you’d normally suspect:
The failures only appeared during a longer evaluation sequence.
Originally we were calling LiteLLM like this:
await litellm.acompletion(
model="openai/<model>",
messages=messages,
)
What resolved it in our environment was explicitly routing the requests through OpenAI’s Responses API:
await litellm.acompletion(
model="openai/responses/<model>",
messages=messages,
store=False,
)
This changes the transport to /v1/responses.
Nothing else changed.
We kept the same:
-
models
-
prompts
-
parser
-
routing logic
-
retry policy
-
fallback policy
The logical model identity in our application also remained openai/<model> - only the transport changed.
After that we reran the entire evaluation:
-
8 datasets
-
16 expected live OpenAI calls
-
16/16 completed successfully
-
zero retries
-
zero fallbacks
-
zero parser failures
-
zero output-contract failures
I’m not claiming this is the root cause of every intermittent 401 insufficient_permissions.
Given the reports in this thread, it’s entirely possible that OpenAI also fixed or mitigated part of the underlying issue on their side.
I’m only sharing what consistently worked in our environment.
So if you’re seeing intermittent permission errors where:
-
the same key works,
-
the same model works,
-
the exact failed request succeeds when replayed in isolation,
-
but longer request sequences fail randomly,
it may be worth trying the Responses transport before spending hours investigating permissions, prompts or model routing.
Hopefully this saves someone else some debugging time.