invalid_request_error
Your request is malformed โ wrong parameter type, missing required field, invalid model ID, or bad message structure. The error message usually names the specific problem.
What the error looks like
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "messages.1.content: field required"
}
}
The message usually pinpoints the exact field path (e.g., messages.1.content) and the problem (e.g., "field required", "invalid type", "must be one of").
Most common causes
1. Wrong model ID
# WRONG โ deprecated, doesn't exist
model="claude-3.5-sonnet"
model="claude-3-sonnet"
model="claude-3-5-sonnet-20241022" # check if this is still active
# CORRECT (current as of 2026)
model="claude-sonnet-4-6"
model="claude-haiku-4-5-20251001"
model="claude-opus-4-7"
2. Wrong message role sequence
# WRONG โ can't have two user messages in a row
messages=[
{"role": "user", "content": "Hello"},
{"role": "user", "content": "And another question"}, # error!
]
# CORRECT โ alternate user/assistant
messages=[
{"role": "user", "content": "Hello"},
{"role": "assistant", "content": "Hi there!"},
{"role": "user", "content": "And another question"},
]
3. Content must be string or list, not None
# WRONG
{"role": "user", "content": None}
{"role": "user", "content": ""} # empty string also invalid
# CORRECT
{"role": "user", "content": "Your message here"}
4. max_tokens out of range
# max_tokens must be 1โ32768 (varies by model)
# Claude Sonnet: max 64000 output tokens
# WRONG
max_tokens=0 # too low
max_tokens=999999 # too high
# CORRECT
max_tokens=4096 # safe value for most use cases
Valid request structure
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-6", # valid model ID
max_tokens=1024, # 1โ64000
temperature=1.0, # 0.0โ1.0 (or omit for default)
system="You are a helpful AI.", # optional, string only
messages=[
{"role": "user", "content": "Hello"}, # must start with user
# {"role": "assistant", "content": "..."}, # if continuing
]
)
# Content blocks (for multimodal):
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "What's in this image?"},
{"type": "image", "source": {
"type": "base64",
"media_type": "image/jpeg",
"data": base64_string
}}
]
}]
FAQ
How do I find which field is wrong?
Read the error message carefully โ it includes the JSON path like
messages.0.content.1.type. Print your full request payload before sending to inspect it.Can temperature be above 1?
No โ Claude's temperature range is 0.0โ1.0. Values above 1 return invalid_request_error. (This differs from some other APIs that go up to 2.)
Is system a required field?
No โ system is optional. Omit it entirely rather than sending an empty string, which may cause validation errors.