Anthropic Integration
Works with both Python and TypeScript. Your existing Claude code stays the same—just change the base URL.
Setup
from anthropic import Anthropic
client = Anthropic(
api_key="sk-ant-your-key",
base_url="https://proxy.raptordata.dev",
default_headers={
"X-Raptor-Api-Key": "rpt_your-key",
"X-Raptor-Workspace-Id": "your-workspace-id"
}
)
import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic({
apiKey: 'sk-ant-your-key',
baseURL: 'https://proxy.raptordata.dev',
defaultHeaders: {
'X-Raptor-Api-Key': 'rpt_your-key',
'X-Raptor-Workspace-Id': 'your-workspace-id'
}
});
Anthropic uses https://proxy.raptordata.dev (no /v1). OpenAI uses https://proxy.raptordata.dev/v1.
Messages
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello!"}]
)
print(message.content[0].text)
const message = await client.messages.create({
model: 'claude-sonnet-4-20250514',
max_tokens: 1024,
messages: [{ role: 'user', content: 'Hello!' }]
});
console.log(message.content[0].text);
With System Prompt
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
system="You are a helpful assistant.",
messages=[{"role": "user", "content": "Hello!"}]
)
Streaming
with client.messages.stream(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[{"role": "user", "content": "Tell me a story"}]
) as stream:
for text in stream.text_stream:
print(text, end="")
const stream = client.messages.stream({
model: 'claude-sonnet-4-20250514',
max_tokens: 1024,
messages: [{ role: 'user', content: 'Tell me a story' }]
});
stream.on('text', (text) => process.stdout.write(text));
await stream.finalMessage();
tools = [{
"name": "get_weather",
"description": "Get weather for a location",
"input_schema": {
"type": "object",
"properties": {"location": {"type": "string"}},
"required": ["location"]
}
}]
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
tools=tools,
messages=[{"role": "user", "content": "Weather in Paris?"}]
)
Vision
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[{
"role": "user",
"content": [
{"type": "image", "source": {"type": "url", "url": "https://..."}},
{"type": "text", "text": "What's in this image?"}
]
}]
)
| Header | Description |
|---|
X-Raptor-Cache | hit or miss |
X-Raptor-Latency-Ms | Total Raptor overhead |
X-Raptor-Upstream-Latency-Ms | Time waiting for Anthropic |
X-Raptor-Request-Id | Unique ID for debugging |
Error Handling
from anthropic import APIError
try:
message = client.messages.create(...)
except APIError as e:
if e.status_code == 403:
print("Blocked by Raptor firewall")
else:
raise
All Claude features work: Claude 3.5 Sonnet, Claude 3 Opus, vision, tools, and more.