Anthropic
import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem';
Overview
Anthropic
LiteLLM supports all anthropic models.
claude-opus-4-6(claude-opus-4-6-20260205)claude-sonnet-4-6claude-sonnet-4-5-20250929claude-opus-4-5-20251101claude-opus-4-1-20250805claude-4(claude-opus-4-20250514,claude-sonnet-4-20250514)claude-3.7(claude-3-7-sonnet-20250219)claude-3.5(claude-3-5-sonnet-20240620)claude-3(claude-3-haiku-20240307,claude-3-opus-20240229,claude-3-sonnet-20240229)claude-2claude-2.1claude-instant-1.2
| Property | Details |
|---|---|
| Description | Claude is a highly performant, trustworthy, and intelligent AI platform built by Anthropic. Claude excels at tasks involving language, reasoning, analysis, coding, and more. Also available via Azure Foundry. |
| Provider Route on LiteLLM | anthropic/ (add this prefix to the model name, to route any requests to Anthropic - e.g. anthropic/claude-3-5-sonnet-20240620). For Azure Foundry deployments, use azure/claude-* (see Azure Anthropic documentation) |
| Provider Doc | Anthropic ↗, Azure Foundry Claude ↗ |
| API Endpoint for Provider | https://api.anthropic.com (or Azure Foundry endpoint: https://<resource-name>.services.ai.azure.com/anthropic) |
| Supported Endpoints | /chat/completions, /v1/messages (passthrough) |
Supported OpenAI Parameters
Check this in code, here
"stream",
"stop",
"temperature",
"top_p",
"max_tokens",
"max_completion_tokens",
"tools",
"tool_choice",
"extra_headers",
"parallel_tool_calls",
"response_format",
"user",
"reasoning_effort",
:::info
Notes:
- Anthropic API fails requests when
max_tokensare not passed. Due to this litellm passesmax_tokens=4096when nomax_tokensare passed. response_formatis fully supported for Claude Sonnet 4.5 and Opus 4.1 models (see Structured Outputs section)reasoning_effortis automatically mapped tooutput_config={"effort": ...}for Claude 4.6 and Opus 4.5 models (see Effort Parameter)
:::
Structured Outputs
LiteLLM supports Anthropic's structured outputs feature for Claude Sonnet 4.5 and Opus 4.1 models. When you use response_format with these models, LiteLLM automatically:
- Adds the required
structured-outputs-2025-11-13beta header - Transforms OpenAI's
response_formatto Anthropic'soutput_formatformat
Supported Models
sonnet-4-5orsonnet-4.5(all Sonnet 4.5 variants)opus-4-1oropus-4.1(all Opus 4.1 variants)opus-4-5oropus-4.5(all Opus 4.5 variants)
Example Usage
from litellm import completion
response = completion(
model="claude-sonnet-4-5-20250929",
messages=[{"role": "user", "content": "What is the capital of France?"}],
response_format={
"type": "json_schema",
"json_schema": {
"name": "capital_response",
"strict": True,
"schema": {
"type": "object",
"properties": {
"country": {"type": "string"},
"capital": {"type": "string"}
},
"required": ["country", "capital"],
"additionalProperties": False
}
}
}
)
print(response.choices[0].message.content)
# Output: {"country": "France", "capital": "Paris"}
- Setup config.yaml
model_list:
- model_name: claude-sonnet-4-5
litellm_params:
model: anthropic/claude-sonnet-4-5-20250929
api_key: os.environ/ANTHROPIC_API_KEY
- Start proxy
litellm --config /path/to/config.yaml
- Test it!
curl http://0.0.0.0:4000/v1/chat/completions \\
-H "Content-Type: application/json" \\
-H "Authorization: Bearer $LITELLM_KEY" \\
-d '{
"model": "claude-sonnet-4-5",
"messages": [{"role": "user", "content": "What is the capital of France?"}],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "capital_response",
"strict": true,
"schema": {
"type": "object",
"properties": {
"country": {"type": "string"},
"capital": {"type": "string"}
},
"required": ["country", "capital"],
"additionalProperties": false
}
}
}
}'
:::info When using structured outputs with supported models, LiteLLM automatically:
- Converts OpenAI's
response_formatto Anthropic'soutput_schema - Adds the
anthropic-beta: structured-outputs-2025-11-13header - Creates a tool with the schema and forces the model to use it :::
API Keys
os.environ["ANTHROPIC_API_KEY"] = "your-api-key"
# os.environ["ANTHROPIC_API_BASE"] = "" # [OPTIONAL] or 'ANTHROPIC_BASE_URL'
# os.environ["LITELLM_ANTHROPIC_DISABLE_URL_SUFFIX"] = "true" # [OPTIONAL] Disable automatic URL suffix appending
:::tip Azure Foundry Support
Claude models are also available via Microsoft Azure Foundry. Use the azure/ prefix instead of anthropic/ and configure Azure authentication. See the Azure Anthropic documentation for details.
Example:
response = completion(
model="azure/claude-sonnet-4-5",
api_base="https://<resource-name>.services.ai.azure.com/anthropic",
api_key="your-azure-api-key",
messages=[{"role": "user", "content": "Hello!"}]
)
:::
Custom API Base
When using a custom API base for Anthropic (e.g., a proxy or custom endpoint), LiteLLM automatically appends the appropriate suffix (/v1/messages or /v1/complete) to your base URL.
If your custom endpoint already includes the full path or doesn't follow Anthropic's standard URL structure, you can disable this automatic suffix appending:
os.environ["ANTHROPIC_API_BASE"] = "https://my-custom-endpoint.com/custom/path"
os.environ["LITELLM_ANTHROPIC_DISABLE_URL_SUFFIX"] = "true" # Prevents automatic suffix
Without LITELLM_ANTHROPIC_DISABLE_URL_SUFFIX:
- Base URL
https://my-proxy.com→https://my-proxy.com/v1/messages - Base URL
https://my-proxy.com/api→https://my-proxy.com/api/v1/messages
With LITELLM_ANTHROPIC_DISABLE_URL_SUFFIX=true:
- Base URL
https://my-proxy.com/custom/path→https://my-proxy.com/custom/path(unchanged)
Azure AI Foundry (Alternative Method)
:::tip Recommended Method
For full Azure support including Azure AD authentication, use the dedicated Azure Anthropic provider with azure_ai/ prefix.
:::
As an alternative, you can use the anthropic/ provider directly with your Azure endpoint since Azure exposes Claude using Anthropic's native API.
from litellm import completion
response = completion(
model="anthropic/claude-sonnet-4-5",
api_base="https://<your-resource>.services.ai.azure.com/anthropic",
api_key="<your-azure-api-key>",
messages=[{"role": "user", "content": "Hello!"}],
)
print(response)
:::info
Finding your Azure endpoint: Go to Azure AI Foundry → Your deployment → Overview. Your base URL will be https://<resource-name>.services.ai.azure.com/anthropic
:::
Usage
from litellm import completion
# set env - [OPTIONAL] replace with your anthropic key
os.environ["ANTHROPIC_API_KEY"] = "your-api-key"
messages = [{"role": "user", "content": "Hey! how's it going?"}]
response = completion(model="claude-opus-4-20250514", messages=messages)
print(response)
Usage - Streaming
Just set stream=True when calling completion.
from litellm import completion
# set env
os.environ["ANTHROPIC_API_KEY"] = "your-api-key"
messages = [{"role": "user", "content": "Hey! how's it going?"}]
response = completion(model="claude-opus-4-20250514", messages=messages, stream=True)
for chunk in response:
print(chunk["choices"][0]["delta"]["content"]) # same as openai format
Usage with LiteLLM Proxy
Here's how to call Anthropic with the LiteLLM Proxy Server
1. Save key in your environment
2. Start the proxy
model_list:
- model_name: claude-4 ### RECEIVED MODEL NAME ###
litellm_params: # all params accepted by litellm.completion() - https://docs.litellm.ai/docs/completion/input
model: claude-opus-4-20250514 ### MODEL NAME sent to `litellm.completion()` ###
api_key: "os.environ/ANTHROPIC_API_KEY" # does os.getenv("ANTHROPIC_API_KEY")
litellm --config /path/to/config.yaml
Use this if you want to make requests to claude-3-haiku-20240307,claude-3-opus-20240229,claude-2.1 without defining them on the config.yaml
Required env variables
ANTHROPIC_API_KEY=sk-ant****
model_list:
- model_name: "*"
litellm_params:
model: "*"
litellm --config /path/to/config.yaml
Example Request for this config.yaml
Ensure you use anthropic/ prefix to route the request to Anthropic API
curl --location 'http://0.0.0.0:4000/chat/completions' \\
--header 'Content-Type: application/json' \\
--data ' {
"model": "anthropic/claude-3-haiku-20240307",
"messages": [
{
"role": "user",
"content": "what llm are you"
}
]
}
'
$ litellm --model claude-opus-4-20250514
# Server running on http://0.0.0.0:4000
3. Test it
curl --location 'http://0.0.0.0:4000/chat/completions' \\
--header 'Content-Type: application/json' \\
--data ' {
"model": "claude-3",
"messages": [
{
"role": "user",
"content": "what llm are you"
}
]
}
'
client = openai.OpenAI(
api_key="anything",
base_url="http://0.0.0.0:4000"
)
# request sent to model set on litellm proxy, `litellm --model`
response = client.chat.completions.create(model="claude-3", messages = [
{
"role": "user",
"content": "this is a test request, write a short poem"
}
])
print(response)
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate,
)
from langchain.schema import HumanMessage, SystemMessage
chat = ChatOpenAI(
openai_api_base="http://0.0.0.0:4000", # set openai_api_base to the LiteLLM Proxy
model = "claude-3",
temperature=0.1
)
messages = [
SystemMessage(
content="You are a helpful assistant that im using to make a test request to."
),
HumanMessage(
content="test from litellm. tell me why it's amazing in 1 sentence"
),
]
response = chat(messages)
print(response)
Supported Models
Model Name 👉 Human-friendly name.
Function Call 👉 How to call the model in LiteLLM.
| Model Name | Function Call |
|---|---|
| claude-opus-4-6 | completion('claude-opus-4-6-20260205', messages) |
| claude-sonnet-4-5 | completion('claude-sonnet-4-5-20250929', messages) |
| claude-opus-4-5 | completion('claude-opus-4-5-20251101', messages) |
| claude-opus-4-1 | completion('claude-opus-4-1-20250805', messages) |
| claude-opus-4 | completion('claude-opus-4-20250514', messages) |
| claude-sonnet-4 | completion('claude-sonnet-4-20250514', messages) |
| claude-3.7 | completion('claude-3-7-sonnet-20250219', messages) |
| claude-3-5-sonnet | completion('claude-3-5-sonnet-20240620', messages) |
| claude-3-haiku | completion('claude-3-haiku-20240307', messages) |
| claude-3-opus | completion('claude-3-opus-20240229', messages) |
| claude-3-5-sonnet-20240620 | completion('claude-3-5-sonnet-20240620', messages) |
| claude-3-sonnet | completion('claude-3-sonnet-20240229', messages) |
| claude-2.1 | completion('claude-2.1', messages) |
| claude-2 | completion('claude-2', messages) |
| claude-instant-1.2 | completion('claude-instant-1.2', messages) |
| claude-instant-1 | completion('claude-instant-1', messages) |
Prompt Caching
Use Anthropic Prompt Caching
:::note
Here's what a sample Raw Request from LiteLLM for Anthropic Context Caching looks like:
POST Request Sent from LiteLLM:
curl -X POST \\
https://api.anthropic.com/v1/messages \\
-H 'accept: application/json' -H 'anthropic-version: 2023-06-01' -H 'content-type: application/json' -H 'x-api-key: sk-...' \\
-d '{'model': 'claude-3-5-sonnet-20240620', [
{
"role": "user",
"content": [
{
"type": "text",
"text": "What are the key terms and conditions in this agreement?",
"cache_control": {
"type": "ephemeral"
}
}
]
},
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Certainly! The key terms and conditions are the following: the contract is 1 year long for $10/mo"
}
]
}
],
"temperature": 0.2,
"max_tokens": 10
}'
Note: Anthropic no longer requires the anthropic-beta: prompt-caching-2024-07-31 header. Prompt caching now works automatically when you use cache_control in your message