[BUG] API 400 Error - role: system deserialization failure
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Description:
Intermittent API 400 error affecting all projects simultaneously. The error occurred regardless of input and resolved itself after ~10-15 minutes without any local changes.
Error message:
API Error: 400 Failed to deserialize the JSON body into the target type:
messages[1].role: unknown variant `system`, expected `user` or `assistant`
Observations:
- Affected all projects at the same time (not project-specific)
- The column number in the error changed between attempts (41406 → 8802), suggesting the injected system content size varied
- No local config changes were made; issue resolved on its own
- Likely a server-side issue where
systemrole was being incorrectly serialized into themessagesarray instead of passed as a top-level parameter
Environment:
- Claude Code version: v2.1.156
- OS: macOS Sonoma 14.8.5
What Should Happen?
The system prompt should be passed as a top-level system parameter in the API request, not injected as a message with role: system inside the messages array. All requests should succeed without 400 errors.
Error Messages/Logs
Steps to Reproduce
Unable to reliably reproduce — the issue occurred spontaneously and resolved itself after ~15 minutes without any local changes. All projects were affected simultaneously, suggesting a server-side issue rather than a client-side bug.
- Open any project in Claude Code
- Type any message and send
- Observe the 400 error immediately, regardless of input content
Claude Model
Sonnet (default)
Is this a regression?
Yes, this worked in a previous version
Last Working Version
_No response_
Claude Code Version
2.1.156
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
_No response_