How to Use the Claude API with Python: Complete Tutorial (2026)
Step-by-step Python tutorial for the Claude API using the official Anthropic SDK. Includes setup, basic messaging, streaming, tool use, and how to save 50% with claudeapi.cheap.
Introduction
The Claude API gives developers programmatic access to Anthropic's powerful language models. Whether you are building chatbots, coding assistants, content generators, or data analysis tools, the Python SDK makes integration straightforward.
This tutorial walks through everything you need to know, from installation to advanced features like streaming and function calling. We will also show you how to route requests through claudeapi.cheap to save up to 50% on every API call.
Prerequisites
Step 1: Install the Anthropic Python SDK
The official Anthropic SDK works with claudeapi.cheap out of the box. Install it with pip:
pip install anthropicStep 2: Set Up Your Client
To use claudeapi.cheap, you only need to change two parameters from the official setup:
from anthropic import Anthropic
client = Anthropic(
base_url="https://claudeapi.cheap/api/proxy",
api_key="sk-cc-your-api-key"
)Alternatively, use environment variables for cleaner code:
export ANTHROPIC_API_KEY="sk-cc-your-api-key"
export ANTHROPIC_BASE_URL="https://claudeapi.cheap/api/proxy"Then your Python code is identical to the official setup:
from anthropic import Anthropic
client = Anthropic() # reads from env vars automaticallyStep 3: Send Your First Message
Here is a basic request to Claude Sonnet:
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[
{"role": "user", "content": "Explain what an API proxy is in simple terms."}
]
)
print(message.content[0].text)The response object contains the model's reply in message.content[0].text, along with usage information in message.usage.
Step 4: Use System Prompts
System prompts let you control the model's behavior and persona:
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2048,
system="You are a senior Python developer. Provide concise, production-ready code with type hints.",
messages=[
{"role": "user", "content": "Write a function to validate email addresses using regex."}
]
)Step 5: Streaming Responses
For real-time output (useful for chatbots and interactive tools), use streaming:
with client.messages.stream(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": "Write a Python decorator for rate limiting."}]
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)Streaming delivers tokens as they are generated, giving users a more responsive experience.
Step 6: Multi-Turn Conversations
To maintain conversation context, pass the full message history:
conversation = [
{"role": "user", "content": "What is a binary search tree?"},
{"role": "assistant", "content": "A binary search tree (BST) is a data structure where each node has at most two children..."},
{"role": "user", "content": "Can you show me a Python implementation?"}
]
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2048,
messages=conversation
)Step 7: Function Calling (Tool Use)
Claude can call functions you define, enabling it to interact with external systems:
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
tools=[{
"name": "get_stock_price",
"description": "Get the current stock price for a ticker symbol",
"input_schema": {
"type": "object",
"properties": {
"ticker": {"type": "string", "description": "Stock ticker symbol"}
},
"required": ["ticker"]
}
}],
messages=[{"role": "user", "content": "What is Apple's current stock price?"}]
)When Claude decides to use a tool, the response includes a tool_use content block with the function name and arguments.
Step 8: Error Handling
Always handle errors gracefully in production:
from anthropic import APIError, RateLimitError, AuthenticationError
try:
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello!"}]
)
except AuthenticationError:
print("Invalid API key. Check your credentials.")
except RateLimitError:
print("Rate limited. Wait and retry.")
except APIError as e:
print(f"API error: {e.status_code} - {e.message}")Step 9: Extended Thinking
For complex reasoning tasks, enable extended thinking:
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=16000,
thinking={
"type": "enabled",
"budget_tokens": 10000
},
messages=[{"role": "user", "content": "Solve this step by step: What is 23^4 mod 17?"}]
)Choosing the Right Model
All three Claude models are available through claudeapi.cheap at discounted rates:
See our complete pricing comparison for detailed cost breakdowns.
Why Use claudeapi.cheap?
Using our proxy saves you up to 50% on every API call with zero code changes beyond the base URL. The Python SDK guide on our blog covers additional examples, and our API documentation has the full reference.
Get your API key now and start building with Claude at half the cost.
Ready to Save 50% on Claude API?
Get started in under 2 minutes. Same API, half the price.
Get Your API KeyRelated Articles
Claude API Pricing Guide 2026: Complete Cost Breakdown & How to Save 50%
Complete guide to Claude API pricing for Opus 4, Sonnet 4, and Haiku 4.5. Compare official Anthropic costs vs claudeapi.cheap and learn how to cut your API bill in half.
Claude API vs OpenAI API: Detailed Comparison for Developers (2026)
In-depth comparison of the Claude API and OpenAI API covering models, pricing, features, speed, and developer experience. Learn which API fits your needs and how to save 50%.
7 Ways to Save Money on AI API Costs (Claude, GPT & More)
Practical strategies to reduce your AI API spending by up to 80%. Learn prompt optimization, model selection, caching, and how claudeapi.cheap cuts Claude API costs by 50%.